Importer
Apps, public SDK keys, catalog, customers, aliases, attributes, subscriptions, one-time purchases and revenue history.
Feature
Migrate in four phases: import your RevenueCat project with RevenueDot's importer, run both systems side by side with store notification forwarding, ship an app update that sets the SDK's proxy URL, then cut over. The importer copies your catalog, customers, purchases and SDK keys, so current access is imported and old app versions keep working.
Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.
Apps, public SDK keys, catalog, customers, aliases, attributes, subscriptions, one-time purchases and revenue history.
RevenueDot forwards the exact store notification body to RevenueCat, so both stay current while old app versions run.
Each app's production key is copied, so builds already in the store keep working.
A dry run writes nothing, a stopped import resumes, and a second run changes nothing that is already right.
Steps
The full walkthrough is on Migrate from RevenueCat.
Run the importer, enter each app's store credentials (the App Store In-App Purchase key and the Google Play service account, which cannot be exported), run the importer again, and check with import verify.
Point App Store Server Notifications at RevenueDot and set its forwarding URL to RevenueCat's. For Google Play, add a second Pub/Sub push subscription or forward the same way. Keep acting on RevenueCat's webhooks.
Set the SDK's proxy URL, turn off signature checks and call syncPurchases once on first launch. Users on older versions keep talking to RevenueCat, which stays correct because notifications are forwarded.
When import verify shows no differences and few users run old versions, create your webhooks in RevenueDot, turn off RevenueCat's and the forwarding URLs, and turn RevenueCat off.
One setting. Set the proxy URL before configure and turn entitlement verification off. The rest of your RevenueCat SDK code stays the same. Call syncPurchases() once on the first launch of the update.
import RevenueCat
// Point the SDK at RevenueDot; nothing else in the app changes.
Purchases.proxyURL = URL(string: "https://api.revenuedot.app")!
Purchases.configure(
with: Configuration.Builder(withAPIKey: "appl_...")
.with(entitlementVerificationMode: .disabled)
.build()
) The importer reads your RevenueCat project through RevenueCat's REST API v2 with a v2 secret key and writes it into RevenueDot. It sends no webhooks, resumes after a stop and asks for each key with hidden input, so no key lands in your shell history. The CLI is not on npm yet, so run it from the RevenueDot repository. Start with --dry-run, and add --limit 50 to try 50 customers first.
pnpm --filter revenuedot cli import --from-revenuecat --rc-project proj... --to https://revenuedot.example.com --dry-run
# Compare both systems customer by customer, and print the cutover steps
pnpm --filter revenuedot cli import verify --rc-project proj... --to https://revenuedot.example.com
pnpm --filter revenuedot cli import plan --to https://revenuedot.example.com --rc-project proj... | Brought over | Not brought over |
|---|---|
| Apps and each app's public SDK key | Store credentials. RevenueCat's API does not return them. |
| Products, entitlements, offerings and packages | Paywalls, targeting rules, experiments and virtual currency balances. Recreate them in RevenueDot. |
| Customers, aliases and attributes | Integrations and the webhooks themselves. Create them at cutover. |
| Subscriptions and one-time purchases | Refunds of subscriptions. RevenueCat's v2 subscription object does not show them, so a refunded subscription imports as expired. |
| Promotional access and revenue history | RevenueCat Billing renewals, and Google Play purchase tokens, which RevenueDot looks up with your service account. |
The migration guide and the cutover checklist cover each step with your app ids filled in by import plan.
FAQ
Import your project with the importer, which copies customers, subscriptions and your public SDK keys. Forward store notifications from RevenueDot to RevenueCat so both stay current. Ship an app update with the new proxy URL and a one-time syncPurchases call. Cut over when import verify shows no differences.
One setting. Set the SDK's proxy URL to RevenueDot before configure, and turn off entitlement verification, or use a RevenueDot fork. Your purchase, offerings and entitlement code stays the same.
Yes. The importer copies each app's public SDK key into RevenueDot, and notification forwarding keeps RevenueCat current for users who have not updated. Re-run the importer while old versions are in use.
Not yet. The importer copies catalog, customers, subscriptions and purchases. Paywalls, targeting rules, experiments and virtual currency balances are recreated in RevenueDot. Build paywalls from the ten templates or the visual editor.
RevenueCat's API gives Google Play order ids, not tokens. RevenueDot looks the tokens up with your Play service account, from a CSV you pass, from Google's next renewal notification, or from the app's syncPurchases call. Customers keep access in the meantime.
Get started
Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.
Already have an account? Sign in · Prefer your own servers? Self-host free