Split the bill, in your app.
In one line of code.

Drop-in receipt scanning, expense splitting, and real-time settlements for Android, iOS, and Web. Free to start. Pay per scan, not per seat.

Built with Compose Multiplatform GDPR-compliant EU-hosted (Hetzner Falkenstein) Apache 2.0 licensed SDK

Why developers choose Olik Split

Built by app developers for app developers. No tracking, no upsell traps, no per-seat math.

Free Quick scanning

Our Quick tier runs on every end-user's device at zero cost — offline, instant, no server hop. The only major split SDK that doesn't gate receipt scanning behind a paywall.

Real-time everything

WebSocket subscriptions push group, expense, and balance changes to every connected client instantly. No polling, no stale state, no manual refresh.

Cross-platform UI

Compose Multiplatform composables ship native UI for Android, iOS, and Web from a single integration. Match your brand with the Appearance API.

What's in the SDK

Three integration depths. Pick the one that matches how much of the experience you want us to own.

Full view

OlikSplitView

One composable. Own its own navigation. Ships every screen below — groups, splitter, receipt OCR, settlements, statistics. Drop it into an Activity, ViewController, or DOM node and you have a complete expense feature in your app.

  • 1 line of code to embed
  • Theming via Appearance
  • Event callbacks for analytics & routing
  • Best for: travel apps, fintech adding a side-feature, anyone who wants splitting "done"
Elements · preview

sdk-elements

Individual screens and sheets, embeddable one at a time. Pin the splitter inside your checkout. Show the balance card on your dashboard. Open the OCR flow from any button. Stripe Elements for expense splitting.

  • Compose / SwiftUI / React components
  • Per-element props + Appearance overrides
  • Your nav stack, your UX
  • Best for: banks, chat apps, super-apps embedding a focused flow
Headless API

sdk-core

Typed REST client only — no UI. Suspend functions in Kotlin, async/await in Swift, Promises in TypeScript. Build your own pixel-perfect UI on top.

  • Token exchange + automatic refresh
  • WebSocket subscriptions for real-time
  • Full Appearance / element-level decoupling
  • Best for: apps that compete on splitting UX

Inside OlikSplitView

Every screen below is part of the full view. The same screens become individually embeddable Elements (preview).

GroupsList Groups the end-user belongs to · search · create
GroupDetail Expenses + balances + settle UI
AddExpenseSheet Amount · payer · split mode (equal / shares / exact)
ReceiptScanFlow Camera → OCR → assign items → save
SettleSheet Who pays whom · debt simplification · mark paid
StatisticsView Pie · trends · category breakdown
BalancesCard Compact widget · who owes whom · 1 line
MemberProfile Per-person history · pending settlements

What you can customize

Lever Headless API
(sdk-core)
Elements
(preview)
Full view
(OlikSplitView)
Colors, radius, typographyn/a · own UIAppearanceAppearance
Per-component overridesn/a · own UIComponentRulesComponentRules
Element copy / labelsn/a · own UI✓ props · localelocale only
Which screens are visiblen/a · own UI✓ pick the elementfuture: filter list
Navigation stack ownershipfullfull · embed in yoursinternal · events leak out
Server / business logic
Splitting math & debt simplification
OCR engine choice (Quick / Sharp / Pro)✓ per call✓ per call✓ init config

— = not modifiable (server-owned for consistency & correctness). Customers needing custom math should use the headless API and build the UI themselves.

Five-minute integration

Mint a link token from your backend. Drop the SDK in your client. Done.

Early access. The SDK and Public API are in invite-only preview while we finish CI, packaging, and Apple Privacy Manifest review. The code below is the final shape of the integration — once we publish to Maven Central, Swift Package Index, and npm, copy-pasting just works. Request access →
MainActivity.kt
// 1. Initialize once at app start.
OlikSplitSDK.init(
    config = OlikSplitSDK.Config(
        publishableKey = "pk_test_...",
        environment = OlikSplitSDK.Environment.TEST,
    ),
    sessionStore = SessionStore(applicationContext),
)

// 2. Exchange the link token your backend minted.
val session = OlikSplitSDK.openWithLinkToken("lnk_...")

// 3. Drop the full UI into your screen.
setContent {
    OlikSplitView(onEvent = { event -> println(event) })
}
AppDelegate.swift
// 1. Initialize once at launch.
OlikSplitSDK.shared.initialize(
    config: .init(
        publishableKey: "pk_test_...",
        environment: .test
    )
)

// 2. Exchange a link token minted on your backend.
let session = try await OlikSplitSDK.shared
    .openWithLinkToken("lnk_...")

// 3. Present the full SDK UI.
let vc = OlikSplitViewController(linkToken: "lnk_...")
present(vc, animated: true)
app.ts
import { OlikSplit } from "@oliksplit/sdk";

// 1. Mount the SDK into any DOM container.
OlikSplit.mount("#olik-container", {
  publishableKey: "pk_test_...",
  linkToken: "lnk_...",
});

// 2. Listen for SDK events for analytics or routing.
OlikSplit.on("expense.created", (event) => {
  console.log(event.expenseId);
});

Read the full Android quickstart →

See it in action

Four screens. One drop-in OlikSplitView. Tap a dot to jump.

Pricing snapshot

Free to start. No monthly minimum. No per-seat fee. You pay only for what you use.

Plan Monthly base Included Support & SLA
Free $0 1K API calls / mo, Quick scanning only Community
Pay-as-you-go $0 $1 per 1K calls, all scanning tiers Community
Pro $9/mo 5K calls + 50 Sharp-tier scans included Email, 2 business-day, 99.5%
Scale $49/mo 100K calls + 500 Sharp-tier scans included Priority email, same-day, 99.9%
Enterprise Custom Unlimited, BYO scanning provider, on-prem option Dedicated CSM, DPA, 99.95%

Receipt scanning tiers

Tier Per scan Best for
Quick Free On-device, offline. Printed receipts in supported languages. Privacy-first apps.
Sharp $0.10 Cloud scanning. Default for production apps — great accuracy across most receipt formats.
Brilliant $0.40 Premium accuracy. Hand-written receipts, non-Latin scripts, low-light photos, complex layouts.

Mix tiers per scan in the SDK — fall back from Quick to Sharp on low confidence. Failed scans are not billed. Manual entry is always free. Calculate your bill →

Olik Split vs Splitwise

The only embeddable expense-splitting SDK with free on-device OCR.

Olik Split

Olik Split

  • Free on-device OCR for every end-user
  • $0 entry, pay-as-you-go usage billing
  • Embeddable SDK for Android, iOS, Web
  • Apache 2.0 open-source SDK
  • Real-time WebSocket updates
  • EU-hosted, GDPR Article 28 DPA
Splitwise

Splitwise

  • OCR gated behind paid Pro tier
  • No public SDK or embed option
  • Consumer app only, not white-label
  • Closed source
  • No real-time push API
  • US-hosted, no developer DPA

How a request flows

Three tokens, four hops. Read it once, never think about auth again.

  1. 1

    Your backend

    Holds the secret key. Mints a single-use link token per end-user before they open your app.

    sk_live_…
  2. 2

    Your client

    Initialized once with the publishable key. Receives the link token from your backend and hands it to the SDK.

    pk_live_…
  3. 3

    Olik Split SDK

    Exchanges the link token for a session, persists it in secure storage, renders the UI, scans receipts, syncs in real time.

    session_token
  4. 4

    Olik API

    Stateless edge in Falkenstein, Germany. Postgres + Redis behind. WebSocket subscriptions fan out group events in < 100 ms.

    api.oliksplit.app
Secret key stays on your server. Never ships in client code. Used only to mint link tokens.
Publishable key is safe in client bundles. Identifies your tenant, can't read data on its own.
Session token auto-refreshes for 30 days. The SDK handles it — you never touch it.

Docs that get you shipping

Quickstart, full reference, and copy-pasteable code samples for every platform.

New

Built for AI-assisted developers

Drop our agent skill into Claude Code, Cursor, or any LLM-augmented editor. Your AI assistant will know how to wire Olik Split correctly the first time — auth flows, tier selection, theme overrides, error handling.

  • Claude Code skill — one file, full SDK awareness
  • Cursor rules.cursorrules template ready to commit
  • llms.txt — machine-readable doc index for any agent
  • Up-to-date on every release. No stale embeddings.
Install agent skill →
Add bill splitting with receipt scan to my Compose app.
Claude Code · using olik-split-sdk skill
I'll wire Olik Split into your app. Three steps:
1. Add deps to libs.versions.toml
2. Initialize OlikSplitSDK in MainActivity
3. Embed OlikSplitView with onEvent callback
For receipt scanning I'll use the Sharp tier with a Quick fallback — that's the recommended default per the SDK skill.

Ship with confidence

Compliance artifacts ready before you submit to the stores.

Frequently asked

What does it really cost?
Usage-based. Start on the Free plan with $0/mo base, 1,000 API calls included, and unlimited on-device OCR. Beyond that, $1 per 1,000 API calls, plus per-scan OCR if you use a server engine ($0.01 GPT-4o-mini, $0.10 Haiku, $0.40 Sonnet). No per-seat fee. No minimum.
Do I need to write my own UI?
No. OlikSplitView ships the complete UI — groups, expenses, balances, settlement, settings — with its own navigation stack. Fully themeable through the Appearance API (colors, corner radius, typography). If you'd rather build your own UI, the typed REST client and individual :sdk-ui components are available too.
What about Splitwise migration?
Splitwise CSV imports map cleanly to our group and expense schema. See the migration guide for the script and field mappings.
Where is end-user data stored?
Primary database in the Hetzner Falkenstein data center, Germany. Receipt images in Cloudflare R2 EU regions. Stripe billing data routes through their EU entity. Full residency details are on the developer privacy page.
Can I self-host?
Yes, on the Enterprise plan. You run the Public API in your own infrastructure; OCR can still use our managed pool or your own provider key. Contact sales@oliksplit.app.
Is it open source?
The SDK (Android, iOS, Web) is Apache 2.0. The backend is closed source — it runs as a managed service. Enterprise customers can license the server for on-prem deployment.

Request early access

We'll email you the moment the SDK and Public API open to the public — usually within 2 weeks of joining the list.

You're on the list!

Check your inbox — we'll email you when access opens. No spam, just one message.

0 / 200

By submitting, you agree we'll send one email when access opens. No marketing. Privacy.

Ship split in an afternoon.

Sign up, mint a key, drop the SDK into your app. The first 1,000 API calls and every on-device scan are on us.