One SDK. Verified subscriptions, behavioural analytics, and runtime errors — on one customer timeline. Crossdeck is free forever up to $1,500 monthly app revenue, with unlimited apps, unlimited analytics, and the full revenue stack. Past that, three flat-rate tiers carry you to $100k. No per-app charges. No revenue cuts. The price you see is the price you pay.
No credit card to startUnlimited apps on every tierCancel anytime
Above $100k a month? Talk to us — we'll keep the flat-rate model and price for your scale.
Why flat-rate matters
At $50,000 MRR, the difference is $326 every month.
RevenueCat charges 1% of revenue above $2,500 MRR. A developer at $50,000 MRR pays them $475 in fees on top of any base subscription. On Crossdeck, that same developer pays $149 — flat. As you grow, we don't grow with you.
Flat. No percentage. Same price at $5k MRR or $25k MRR.
On every tier
Foundation is unlimited. Free isn't crippled.
Every tier ships the same SDKs, the same identity model, and the same three-pillar engine. Subscriptions, analytics, and errors — including alerts — are real and complete on Free. Paid tiers add depth (plain-English error summaries, breadcrumbs, source maps), longer retention, and higher volume caps.
Verified subscriptions
Apple StoreKit 2, Google Play, and Stripe receipts signed and reconciled — never approximated.
Real-time entitlements
isEntitled checks resolve from a hot edge cache. Sub-50ms. No paywall flicker.
Cross-platform identity
Anonymous, developer, and Crossdeck customer IDs unify across iOS, Android, and web.
Privacy-first analytics
Sessions, page views, and custom events. No fingerprinting, no IP logging on event docs.
Real-time MRR
New, renewal, expansion, and churn MRR — broken out and refreshed on cadence by tier.
Funnels and cohorts
Conversion funnels and behaviour cohorts on every tier. The analytics product is the analytics product, regardless of plan.
Real-time error capture
Uncaught exceptions, unhandled promise rejections, and network failures — captured the moment they happen.
Slack and email alerts
New errors notify your team within seconds. Errors without alerts is a useless product, so alerts ship on every tier.
Unlimited apps
One developer account covers every iOS, Android, and web app you ship — no per-app fee, ever.
What changes by tier
The short list of differences.
Tiers move on volume and operational support — not feature gates. If you can use Crossdeck on Free, you can use the whole product.
Free
Indie
Pro
Scale
Monthly price
$0
$49
$149
$349
Monthly app revenue
< $1,500
$1,500 – $5k
$5k – $25k
$25k – $100k
Apps
Unlimited
Unlimited
Unlimited
Unlimited
Data retention
90 days
12 months
12 months
12 months
Error capture (basic)
1k / month
50k / month
500k / month
Unlimited
Plain-English error summaries
Breadcrumbs & source maps
Real-time entitlements
Real-time error capture
Analytics dashboard refresh
5 min
1 min
1 min
30s
Slack & email alerts
Funnels & cohorts
SAML SSO
Direct SQL access
Support
Community
Email
Priority email
Dedicated
How fresh is your data?
Three pillars. Three different freshness contracts.
Crossdeck has three faces: revenue, behaviour, and errors. Each one has a different speed requirement. We don't apply one rule across all three — we honour what each one needs to actually be useful.
Revenue & entitlements — real-time, every tier
isEntitled() resolves sub-50ms across Free / Indie / Pro / Scale. New subscriptions, renewals, and refunds propagate instantly. Your paywall cannot wait. Non-negotiable on every plan.
Errors — real-time, every tier
Errors are useless if delayed. Captured → ingested → visible on the dashboard within ~5 seconds. Slack and email alerts fire within ~10 seconds, on every tier including Free. A 5-minute lag means the customer is already gone.
Analytics — refreshed on cadence by tier
Aggregations (KPI cards, MRR charts, funnels) refresh every 5 minutes on Free, every minute on Indie / Pro, and every 30 seconds on Scale. Events still ingest in real-time — only the dashboard rollup is batched. This is genuine cost optimisation, not a downgrade.
Frequently asked
The short answers to the big questions.
Still curious? Talk to a human — usually back within the hour.
How is monthly app revenue calculated?
Your MAR is computed in USD across every project you own, in production environment only, with three components added together:
1. Active paid subscriptions, normalised to a 30-day equivalent. Each subscription is normalised by its actual billing period — we divide its price by the period length and multiply by 30 days. A $120/year sub contributes $9.86. A $4.99/week sub contributes $21.39. A $9.99/month sub contributes $9.99. Subscriptions still count while Stripe is retrying a failed card or while Apple/Google are in their grace window — the customer is in a paid relationship and the retry usually succeeds.
2. One-off purchases paid in the trailing 30 days. A $49 lifetime unlock that landed yesterday adds $49 to your MAR for the next 30 days, then drops out. RevenueCat's MTR works the same way — without it, a developer with a one-off-purchase business model would never cross a tier on subscriptions alone.
3. Refunds and chargebacks subtract in the period the refund landed, even if the original purchase was outside the 30-day window. A $50 charge from 60 days ago that you refund today reduces this period's MAR by $50.
Trials don't count until they convert to a real charge. Sandbox transactions never count. Currencies other than USD are normalised via a daily FX rate snapshot.
Do trials count toward MAR?
No. A trial is a promise of money, not money. Your MAR clock on a customer starts the moment their trial converts to a real paid charge — same way your bank statement only shows the line item when money has actually moved. If a customer trials your $9.99/mo plan for 14 days, that customer contributes $0 to your MAR for those 14 days. As soon as the first paid charge lands, $9.99 starts contributing.
How do I upgrade when my app's revenue grows?
Crossdeck monitors your trailing-30-day MAR continuously and surfaces an upgrade prompt the moment you cross the next tier line. The actual tier change requires seven consecutive daily snapshots above the threshold before it fires — a deliberate buffer against launch-day spikes, one-off pack promotions, and timezone artefacts at month boundaries. If your MAR drops back below the line even once during those seven days, the counter resets. Conservative on your behalf.
If you cross and a payment method is on file, the upgrade fires automatically and we email you the receipt. If no card is on file when you qualify, the dashboard flips to read-only and we surface a card-required prompt — your subscriptions, entitlements, errors, and analytics ingestion all keep running. We never break your app over billing. The moment you add a card, the upgrade processes immediately without re-waiting the seven days.
What happens if my revenue drops back under a threshold?
Nothing automatic. If your trailing-30-day MAR drops back under your current tier's band, your tier stays where it is for the rest of the billing cycle. Crossdeck doesn't auto-downgrade. The qualifying counter that was tracking your next-tier ascent resets to zero, but your active tier is unchanged. You can manually downgrade from the billing page at any time and the change takes effect at the next cycle boundary.
Do you take a percentage of my revenue?
Never. Crossdeck is a flat per-month subscription. Your Apple, Google, and Stripe payouts go straight to your accounts — Crossdeck never sits in the money path. We're infrastructure, not a payment processor.
What does "unlimited apps" actually mean?
One Crossdeck account covers every iOS, Android, and web app you ship. No per-app fee. No per-bundle-ID surcharge. If you're on the Free tier and ship five apps, all five run on the Free plan against your shared monthly revenue pool.
Is the Free plan really free forever?
Yes. The Free plan is permanent, not a trial. It's designed to cover an indie launch end-to-end up to $1,500 in monthly app revenue. You'll only see a paid tier when your app's revenue tells us you've earned it.
What if my app is earning over $100k a month?
Talk to us. We continue the flat-rate model for larger accounts — no percentage fees regardless of revenue scale. Pricing scales with operational support (region of choice, SLAs, named CSM, custom retention) rather than with your top-line.
How does Crossdeck compare to RevenueCat, TelemetryDeck, or Sentry?
Crossdeck unifies what those three tools split. RevenueCat is solid revenue infrastructure but charges a percentage of your revenue and has no behavioural or error depth. TelemetryDeck is excellent privacy-first telemetry but doesn't verify subscriptions or capture errors. Sentry is great at error capture but has no idea who your paying customer is. Crossdeck does all three, on one identity graph, on one customer timeline — so a question like "did a paying customer hit a JavaScript error during checkout?" is one query, not a join across three vendors.
What kinds of errors does Crossdeck capture?
Uncaught JavaScript exceptions, unhandled promise rejections, network failures (4xx/5xx from fetch and XHR), resource load failures, and anything you manually capture with Crossdeck.captureError(). On paid tiers we add breadcrumbs (the last 100 events the user did before the error), source map symbolication for de-minified stacks, and plain-English summaries that tell you which paying customer was affected and how badly it hurts. We're honest about what no browser SDK can capture — errors before init, cross-origin scripts, and ad-blocked transports — so you go in eyes open.
What are plain-English error summaries?
Sentry shows you TypeError: Cannot read property 'price' of undefined at calcTotal (checkout.js:47:12). We show you "A paying customer ($29/mo, ACTIVE 14 months) hit the checkout page, the price field didn't render, they bounced. 4th time today. Critical — these users are mid-payment when it breaks." Same data. Different audience. The summary is generated by an LLM that reads the error, the breadcrumbs, and the customer's subscription state. The technical detail is one toggle away when you need it. Available on every paid tier (Indie+).
How fresh is the data on each tier?
Three different contracts, by pillar. Revenue and entitlements are real-time on every tier (sub-50ms isEntitled resolution) — your paywall cannot wait. Errors are real-time on every tier (visible on the dashboard within 5 seconds) — errors are useless if delayed. Analytics aggregations (KPI cards, funnels, MRR charts) refresh every 5 minutes on Free, every minute on Indie/Pro, every 30 seconds on Scale. Events themselves always ingest in real-time — only the dashboard rollup is batched. This is genuine cost optimisation, not a degraded product.
What happens if I exceed an error cap on Free?
Email warnings at 80%, 100%, and 110% of your monthly cap. At 150% of cap, error ingestion pauses until the next cycle. No surprise bills, ever. Subscriptions, entitlement checks, and analytics ingestion continue uninterrupted — your customers' apps are never affected. We will not replicate Sentry's overage-bill surprise model.
Can I switch between tiers?
Yes — upgrades take effect immediately, pro-rated. Downgrades take effect at the end of your current cycle. No data migration, no fees, no sales calls.
Verified revenue. Real analytics. Real-time errors. One SDK.
Five-minute install. Free forever up to $1,500 in monthly app revenue. No credit card required. We make money when your app does.