Subscriptions, analytics, and errors.
One SDK. One timeline.

Verify revenue. Understand behaviour. Catch errors. Crossdeck connects all three to the same customer — so you know who broke, what they did, and what you stand to lose.

iOS · Android · Web · Free until $1,500 monthly app revenue · No credit card to start
Acme Inc. · Overview Live · Production

Overview

May 12 – Jun 10, 2025
MRR $0 ▲ 8.2%
Active subs 0 ▲ 412
Trial → paid 0% ▲ 1.4 pp
At-risk $0 ▼ 3.1%
MRR over time
Net of refunds and chargebacks · USD
Day Week Month
$1,452,204 ▲ 8.2%
Verification stream

Platform

Three things every paid app needs to know.

Who's paying. What they're doing. What's breaking. Crossdeck answers all three from one SDK install.

Verified subscriptions

Apple, Google Play, and Stripe receipts verified server-side. One entitlement model across rails. isEntitled("pro") resolves in under 50ms — your paywall never waits.

Apple · Google Play · Stripe

Behavioural analytics

Sessions, page views, custom events, funnels, cohorts. Privacy-first by default — no third-party cookies, identifiers hashed on-device. Same SDK as your subscriptions and errors.

No PII required · GDPR-clean

Real-time errors

Uncaught JavaScript exceptions, unhandled promise rejections, network failures — captured the moment they happen. On paid plans, every error comes with a plain-English summary telling you which paying customer was affected.

Real-time on every tier

One customer. One timeline.

Every subscription event, every page view, every error lives on the same customer record. So you can see exactly what the user was doing — and paying — when something broke.

One SDK · iOS · Android · Web

Why Crossdeck exists

Three signals. One customer record.

Today this lives in three separate tools. RevenueCat for subscriptions. Mixpanel for behaviour. Sentry for errors. Three SDKs, three identity systems, three dashboards. None of them know about the others. Crossdeck puts all three on the same timeline.

What they pay

Subscriptions and entitlements.

Verified Apple, Google Play, and Stripe receipts. One entitlement model. Real-time access decisions across rails.

  • Stripe · invoice.payment_succeeded · $29
  • App Store · annual_pro · $79.99
  • Apple · billing_retry → grace period
  • customer.entitlements("pro") → active
What they do

Sessions, page views, custom events.

What users did before they paid, churned, or hit a wall. Privacy-first, no third-party cookies, no cross-app tracking.

  • track("Paywall.viewed")
  • track("Checkout.started")
  • track("Plan.selected", { tier: "pro" })
  • session.duration: 4m 12s
What's breaking

Real-time errors with customer context.

Uncaught exceptions, network failures, runtime errors. Plain-English summaries on paid plans tell you exactly which paying customer was affected.

  • captureError(TypeError, "checkout.js")
  • fetch / api/checkout → 500
  • 3 ACTIVE customers affected today
  • Critical: users mid-payment
One customer record Subscription state · behaviour · errors · all on one timeline
customer_847 · ACTIVE · $29/mo · hit 4 errors today

Install

One install. All three pillars.

Add the SDK. Configure with your public key. Identify your user. Three lines of code activate subscriptions, analytics, and error capture together. Add new pillars later by toggling a flag — no second SDK, ever.

iOS Android Web
import { Crossdeck } from "@cross-deck/web";

// One init. Subscriptions + analytics + errors all activate together.
Crossdeck.init({
  publicKey: "cd_pub_live_xxx",
});

await Crossdeck.identify(user.id);

// Behavioural analytics — auto-tracks page views and sessions.
Crossdeck.track("Checkout.started");

// Real-time entitlement check — under 50ms, no await.
if (Crossdeck.isEntitled("pro")) {
  showProFeatures();
}

// Errors are captured automatically. Or report a caught one:
try { await processCheckout(); }
catch (err) { Crossdeck.captureError(err); }

Verified setup, not a checklist

Crossdeck only marks a step complete when it observes the evidence. No manual ticking, no false starts.

1
Add the SDK npm, SwiftPM, or Maven · under 5 min
Verified
2
Connect Apple, Stripe, Google Play Guided flow · webhook signing handled
Verified
3
Map products to entitlements One access model across platforms
Verified
4
First signal received Live the moment the SDK pings home
Awaiting

Replace three vendors

One product. Three things you no longer integrate separately.

Today, paid apps install RevenueCat for subscriptions, Mixpanel or TelemetryDeck for analytics, and Sentry for errors. Three SDKs, three identity systems, three invoices. Crossdeck does all three on one install.

Capability RevenueCat TelemetryDeck Sentry Crossdeck
Verified subscriptions across rails Yes No No Yes
Behavioural analytics (events, funnels) No Yes No Yes
Real-time error capture No No Yes Yes
Errors with paying-customer context No No No Yes
Plain-English error summaries No No No Yes
One SDK across iOS, Android, web Multiple Multiple Multiple Yes
Free until your app earns $1,500/month No No No Yes
Flat-rate pricing (no percentage of revenue) No Yes Yes Yes

Trust

How we keep your revenue data accurate.

Crossdeck is built to feel like infrastructure. The trust comes from architecture, not assurance copy.

Every receipt is verified

Apple receipts checked with JWS. Stripe webhooks verified by signature. Google Play notifications validated end-to-end. The client can never grant access on its own.

Secrets stay on the server

Apple .p8 keys and Stripe secrets live in encrypted secret storage. Only your public SDK key ships with your app. Private keys never reach a browser or a phone.

Reconciled, not just reported

Webhooks are real-time signals, not the final truth. Scheduled reconciliation against Apple, Google, and Stripe catches missed events and keeps the ledger authoritative.

One SDK. Three answers. Free until you earn.

Verified subscriptions, behavioural analytics, and real-time errors — on one customer timeline. Free forever up to $1,500 monthly app revenue. No credit card required.