Skip to main content
ZeroSettle In-App Purchase is a web checkout SDK for mobile apps. It processes payments via Stripe instead of Apple’s StoreKit or Google Play Billing, with ZeroSettle acting as the Merchant of Record. The platform handles payments, tax compliance, refunds, receipts, and liability. The SDK supports Swift, Kotlin, and Flutter, with React Native coming soon.

Fee Comparison

Apple/Google IAPZeroSettle IAP
Fee30% (15% for small business)5% + 50¢
You keep on a $9.99 sale$6.99~$8.99
Tax handlingApple/Google handlesZeroSettle handles
ComplianceYour responsibilityZeroSettle’s responsibility
Payouts45+ daysInstant via Stripe
Your Stripe accountN/AUse your own (BYOS) or ours (Managed)
With Bring Your Own Stripe (BYOS), you connect your existing Stripe account and keep your products, prices, customers, and reporting. Charges go directly to your account — ZeroSettle adds the Merchant of Record layer on top. BYOS fee is 0.5%.

Payment Modes

Choose the integration that fits your business:
Managed (Default)BYOS (Bring Your Own Stripe)
Stripe accountCreated for you automatically (Express)You connect your own (Standard)
Products & pricesAuto-created by ZeroSettleYour existing Stripe catalog
Revenue reportingVia ZeroSettle dashboardYour Stripe dashboard + ZeroSettle
Customer dataManaged by ZeroSettleIn your Stripe account
Setup time~2 minutes~10 minutes (connect + map products)
Fee5% + 50¢0.5%
Both modes share the same SDK integration — no code differences. The only setup difference is on the dashboard.

How It Works

When a user taps “Buy” in your app, ZeroSettle presents a checkout experience powered by Stripe. The user pays with Apple Pay or a card, and your app gets a verified transaction back. There are three checkout modes, controlled server-side via remote config: checkoutSheet presents a native-feeling bottom sheet inside your app. It loads a WKWebView with Apple Pay and card entry. The user never leaves your app.
.checkoutSheet(item: $selectedProduct, userId: user.id) { result in
    switch result {
    case .success(let transaction):
        print("Purchased: \(transaction.productId)")
    case .failure(let error):
        print("Error: \(error)")
    }
}
This is the recommended approach for the best conversion rates.

In-App Safari

Opens an SFSafariViewController within your app. The checkout page loads in a Safari view controller, and the result comes back via universal link.

External Safari

Opens the checkout URL in the user’s default browser. The result returns to your app via universal link. This is the fallback mode.
The checkout mode is controlled by your remote config on the ZeroSettle dashboard. You can switch modes without an app update.

What ZeroSettle Handles

Payment Processing

  • Stripe-powered checkout
  • Apple Pay on the web
  • Credit/debit cards
  • Multiple currencies

Tax Compliance

  • Automatic sales tax calculation (US)
  • VAT handling (EU)
  • GST handling (AU, etc.)
  • Tax remittance to authorities

Merchant of Record

  • ZeroSettle is the legal seller
  • Disputes and chargebacks are handled automatically
  • Refunds are processed automatically
  • Receipts are sent automatically

Apple Compliance

  • Compliant with Apple’s external purchase guidelines
  • US geofencing (as required by Apple)
  • Required disclosure before leaving app (for Safari flows)

What You Can Sell

  • Subscriptions — Monthly, yearly, or custom periods
  • One-time purchases — Premium features, content packs
  • Consumables — Credits, tokens, virtual items
  • Non-consumables — Permanent unlocks

Platform Support

PlatformRequirementsStatus
Swift (iOS)iOS 17.0+, Swift 5.9+, Xcode 15.0+Available
Kotlin (Android)Android API 26+, Kotlin 1.9+Available
FlutterFlutter 3.3.0+, iOS 17.0+ / Android API 26+Available
React NativeComing soon

Beyond Checkout

ZeroSettle includes a full subscription lifecycle toolkit — all configured from the dashboard with built-in A/B testing.

Get Started