Ship subscriptions. Skip the backend.
Works with everything your app already uses
- App Store
- Google Play
- StoreKit 2
- Play Billing
- Swift
- Kotlin
- Flutter
- React Native
AppActor at a glance
4
SDKs, one contract
iOS, Android, Flutter, and React Native share the same customer and entitlement model.
2
App stores, one source of truth
App Store and Google Play purchases validated, reconciled, and kept current by store notifications.
0
App updates to change pricing
Offerings, package slots, and Remote Config are defined in the dashboard and fetched at runtime.
1
Dashboard for every number
Revenue, subscribers, trials, refunds, and LTV, split by country and platform.
One SDK. Every store. Zero receipt plumbing.
AppActor sits between your app, the app stores, and your access rules. The SDK fetches offerings and starts the store purchase; AppActor validates the receipt and refreshes customer entitlements — the same contract on every platform.
- Server-side receipt validation for the App Store and Google Play
- One customer model across iOS, Android, Flutter, and React Native
- Restores and background syncs recover purchases the same way on every platform
- Store notifications keep access current even while the app is closed
// Configure once during app bootstrap.await AppActor.configure(apiKey: "pk_YOUR_PUBLIC_APP_KEY")// Fetch offerings and render your paywall from packages.let offerings = try await AppActor.shared.offerings()let current = offerings.current// Purchase a package chosen in your own UI.guard let package = current?.monthly else { return }let result = try await AppActor.shared.purchase(package: package)// Gate access from customer info and entitlements.let info = try await AppActor.shared.getCustomerInfo()let isPremium = info.hasActiveEntitlement("premium")Change what you sell without shipping an update.
Offerings, package slots, and Remote Config live in the dashboard and are fetched by the SDK at runtime. Your app renders its own paywall from them, so pricing, package order, and paywall copy change without a release.
- Which offering is current, and which packages it contains, is decided server-side
- Remote Config values (toggle, number, text, JSON) per project, platform, or app
- Targeting rules by store, app version, country, or entitlement state
- Cached on device with your own defaults, so paywalls load instantly and offline
You keep your paywall UI. AppActor never renders or hosts it — your app fetches offerings, renders packages, and starts the purchase.
Stop guessing. Start measuring.
Run controlled A/B tests on paywalls, onboarding, offers, and lifecycle moments. AppActor assigns variants deterministically and evaluates results with subscription context — trials, paid conversions, cancellations, refunds, and revenue — not just taps.
- Variants with traffic allocation and holdout groups for incremental impact
- Each variant carries the values your app needs, with a safe default for unassigned users
- Subscription-aware analysis: trial-to-paid, cancellations, refunds, and LTV per user
- Roll the winner into Remote Config when it is a server-driven payload
Know your subscription numbers at any moment.
Every purchase, renewal, cancellation, and refund AppActor processes lands in one dashboard: revenue, subscribers, trials, refunds, and LTV, broken down by country and platform. The same numbers are available to your AI assistant through the AppActor MCP server.
Sales
$61,480
+9.8%
Proceeds
$52,260
+9.6%
New trials
1,284
+6.2%
Refund rate
0.7%
−0.2 pts
Subscriptions
New subscriptions vs cancellations
- New subscriptions
- Cancellations
Proceeds by country
- United States · iOS$21,950
- Germany · Android$8,884
- United Kingdom · iOS$7,317
- Brazil · Android$4,703
- Japan · iOS$3,658
Revenue
Sales, proceeds, and gross or net LTV per user and per paid user.
Conversion
User-to-trial, user-to-paid, and trial-to-paid rates over time.
Quality
Trial cancellations, subscription cancellations, and refunds.
Cohorts & breakdowns
Lifetime cohorts or fixed 30-day windows, split by country and platform.
One purchase layer, built for the whole team.
Developers integrate it once. Growth changes what is sold. Founders and ops get one set of numbers everyone trusts.
Developers
Integrate once with typed SDKs. Receipt validation, restores, and background sync stay out of your codebase.
- Typed SDKs for Swift, Kotlin, Dart, and TypeScript
- Server notifications, signed webhooks, and a REST API
- Trusted entitlements and offline mode built in
Growth & Product
Change offerings, package order, and paywall copy from the dashboard, then test the change and read subscription-aware results.
- Switch the current offering without a release
- Typed Remote Config with targeting rules
- Experiments judged on trials, paid, refunds, and LTV
Founders & Ops
One source of truth for revenue, subscribers, and store health, with the lifecycle events your backend and support tooling need.
- Revenue, trials, cancellations, refunds, and LTV in one place
- Customer timelines and transaction history for support
- Ask your AI client through the AppActor MCP server
Built for developers. Documented for humans and AI.
Native SDKs with real type signatures, a REST API behind a project secret key, signed webhooks, and documentation your AI tooling can read directly.
iOS
Swift
appactor-iosSwiftPM · CocoaPodsAndroid
Kotlin
com.appactor:appactor-androidGradleFlutter
Dart
appactor_flutterpubspec.yamlReact Native
TypeScript
appactor-react-nativenpm · yarn
REST API & server-side access checks
Call api.appactor.com with a project secret key to gate premium API responses, files, or AI credits from your own backend.
Server notifications & signed webhooks
App Store Server Notifications and Google RTDN flow in. Normalized lifecycle events flow out with HMAC-SHA256 signatures, retries, and idempotent delivery.
Trusted entitlements
Signed customer info with explicit verification states, so you choose fail-open or fail-closed per feature.
Offline SDK mode
Cached offerings, cached customer info, and offline entitlement keys keep the app usable when the network is not.
Remote Config & Experiments APIs
Typed config reads with memory, disk, and ETag caching, plus deterministic experiment assignment by key.
AI-ready
A remote MCP server at mcp.appactor.com, a plugin for Claude Code and Codex with SDK skills, and llms.txt for any agent.
Built for money you can't afford to guess.
Purchase infrastructure has to survive network loss, delayed store callbacks, app restarts, and users switching identities. AppActor is designed around recoverable state, not one-shot purchase assumptions.
Server-authoritative state
Access is decided from AppActor customer info and entitlements, never from a local button tap.
Receipts retried until confirmed
Receipts are retried until the backend confirms them, and queued work stays queued instead of turning into irreversible grants.
Restore & account recovery
Explicit restore, quiet sync, and receipt-queue drain paths, with a stable app user ID so reinstalls keep their purchases.
Cache & fallbacks
Cached offerings and Remote Config keep the UI responsive; offline-derived entitlement state stops the app from going blind during outages.
Questions, answered from the docs.
Everything below is documented in more depth in the AppActor docs.
AppActor ships native SDKs for iOS (Swift, iOS 15+) and Android (Kotlin, Android 24+), plus wrapper SDKs for Flutter and React Native (React Native 0.85+) that run on top of the native plugins. Purchases go through the App Store and Google Play, and all four SDKs share the same customer model.
Still have questions?
The docs cover setup, catalog modelling, recovery flows, and go-live checks in detail.
Browse the documentationReady to ship subscriptions?
Create a project, add your apps, connect the stores, and make your first sandbox purchase. Your paywall, our purchase infrastructure.