Crossdeck Docs
Dashboard

Billing & plans

Getting started 7 min read · Flat tiers on trailing-30-day revenue, never a percentage

Crossdeck's price follows one number: your app's Monthly App Revenue — the trailing-30-day total your apps earn across Stripe, Apple, and Google. Not seats. Not events. Not monthly active users. Under $1,500/month you pay nothing, forever. Above it, you pay a flat monthly subscription — $49, $149, or $349 — that stays the same no matter how many apps you ship, events you send, or customers you track within the band. Crossdeck never takes a percentage of your revenue and never sits in the money path: Apple, Google, and Stripe pay out to your accounts directly.

TL;DR

The model in one paragraph

Most analytics and subscription-infrastructure tools bill on a usage axis you have to manage — seats, tracked users, event volume, or a percentage of the revenue flowing through them. Crossdeck bills on the axis you already optimise: the money your app makes. Your tier is a pure function of Monthly App Revenue (MAR), the same trailing-30-day figure shown on your Billing page. When your app earns more, you move up a band; the price within a band is flat and identical at the bottom and top of the band. There is no metering to watch and no overage bill to fear — the only thing that changes your Crossdeck price is your own revenue.

What counts as revenue (MAR)

MAR is computed from your tracked production revenue, normalised to USD, as:

Subscriptions count while the customer is in a paid relationship: ACTIVE, in billing retry, in an Apple/Google grace period, or Stripe-paused. Trials contribute $0 — a trial is a promise of money, not money. The customer starts counting at their first successful paid charge. Non-USD revenue converts at a daily FX snapshot recorded with each computation.

Production only.

Sandbox subscriptions and sandbox purchases are excluded from MAR entirely — a TestFlight build hammering StoreKit's sandbox can never move your tier. See Sandbox vs production.

The tiers

TierMonthly App Revenue bandPriceSupport
Free$0 – $1,500 / month$0Community
Indie$1,500 – $5,000 / month$49 / monthEmail
Pro$5,000 – $25,000 / month$149 / monthPriority email
Scale$25,000 – $100,000 / month$349 / monthDedicated
EnterpriseAbove $100,000 / monthCustom quoteDedicated

Band boundaries are lower-inclusive, upper-exclusive: a MAR of exactly $1,500.00 sits in the Indie band, not Free. One account covers every app you ship — all apps pool into the same MAR, and there is no per-app charge. Feature differences between tiers (error-capture volume, retention, alert depth) are listed on the pricing page; tiers gate volume and support, not the core product.

When tiers change

How often MAR is recomputed

MAR recomputes on two schedules. In real time, every change to a tracked subscription or purchase — a renewal, a new sale, a refund — triggers a recompute for your account, typically 2–5 seconds after the rail's webhook lands. And once a day, at 02:00 UTC, a full reconciliation recomputes every account to catch trailing-window expiry, period rollovers, late-arriving events, and FX drift. The daily run also writes the day's MAR snapshot that the qualifying counter reads.

The 7-day qualifying period

Crossing a tier line once does not change your tier. An upgrade requires 7 consecutive daily snapshots at or above the next tier's threshold. If MAR drops back below the line even once during those 7 days, the counter resets to zero. This is deliberate protection against launch-day spikes, one-off pack promotions, and timezone artefacts at month boundaries — conservative on your behalf. Multiple recomputes on the same day count as one snapshot.

When the qualifying period is satisfied and a card is on file, the tier moves up and the corresponding Stripe subscription is created (Free → paid) or its price is swapped with proration (paid → paid). When the qualifying period is satisfied and there is no card on file, nothing is charged — see below.

No silent promotions.

Tier promotion is additionally human-supervised right now: even when an account fully qualifies, the upgrade surfaces as a prompt and is reviewed before any subscription is created. You will never discover a charge the dashboard didn't tell you about first.

Moving down or out

Downgrades cancel at the end of the current billing period, never mid-cycle — you paid for the period, you keep the tier until it expires. Above $100,000 MAR there is no auto-charge at all: the account is flagged for an Enterprise conversation with sales ([email protected]) and a custom-priced contract; the same flat-rate model, priced for your scale.

Tier event history

Every billing decision writes an audit row — qualifying-day advances, counter resets, card-required flags, upgrades, Enterprise handoffs, card additions and removals, subscription changes, and paid or failed invoices — each with the reason recorded verbatim. The Billing page shows the most recent 10 under Billing history, so "why did my tier change on this date" is always answerable from the dashboard, not a support ticket.

How payment works

Crossdeck charges through Stripe. You add a card once on the Billing page (Add a card); the form is Stripe Elements over a SetupIntent, so the card number is tokenised by Stripe and never touches Crossdeck's servers — all Crossdeck ever stores is the brand and last four digits shown back to you. 3-D Secure / SCA runs at card-add time, and the card is saved for off-session use, which is what lets a tier crossover charge succeed without you being present.

Charges happen only through the tier subscription:

If a renewal charge fails, the subscription enters past_due and Stripe's Smart Retries take over — your plan stays active by default while Stripe retries the card, and the dashboard shows an "update your card" banner. Failed invoices are recorded in the billing history. If retries exhaust (or you cancel), the subscription is marked canceled; telemetry ingestion continues regardless, and reactivating is adding a card again.

If there's no card on file at the line

No card means no charge — there is no mechanism by which Crossdeck can bill an account without a saved payment method. Concretely, when a Free-tier account completes the 7-day qualifying period without a card:

What's never charged

Where to manage it

Everything in this doc is visible and operable on your dashboard's Billing page: your current tier and price, live MAR with progress through the band, the trailing-30-day revenue breakdown (subscriptions, one-time purchases, refunds & disputes), your saved card (replaceable any time), and the audited billing history. The page updates live — adding a card or a webhook firing re-renders it within seconds.

Billing questions, disputes, or anything that needs a human: contact us with the billing topic — it routes to [email protected] with a first response within one business day.