Skip to content

Analytics

Exact metric definitions: MRR, active subscriptions, churn, trial conversion, refunds, LTV, ARPU, cohort retention, and paywall funnels.

Every number in the Xizor dashboard (and every number your agent reads via MCP) is computed in the database from server-verified transactions and App Store Server Notifications — never from client events. This page defines each metric exactly as the SQL computes it.

Conventions

  • Amounts are in micro-units of the currency (price_micros; 1,000,000 = 1 unit) — the dashboard formats them.
  • Proceeds = estimated payout after Apple's cut, computed as revenue × 0.85 (Small Business Program, 15%).
  • Trial = a transaction with introductory offer type and price 0. Paid intro offers count as paying.
  • Environment: all metrics default to Production; the dashboard toggle switches to Sandbox (or both).
  • Time windows are half-open: [from, to). Time series support day, week, and month granularity; point-in-time series (MRR, active subscriptions) are measured at each bucket's end (or "now" for the running bucket).
  • Refunds: revoked transactions (revocation_date set) are excluded from revenue, MRR, active counts, trial conversion, LTV, and cohort retention.
  • A subscription is identified by its original_transaction_id; the "covering" transaction at time T is the newest transaction of that subscription with purchase_date ≤ T < expires_date and no revocation.

Active subscriptions & active trials

Active subscriptions at time T = number of subscriptions (by original_transaction_id) whose covering transaction at T is _not_ a free trial.

Active trials at time T = subscriptions whose covering transaction at T _is_ a free trial (introductory offer, price 0).

The overview compares each value with its value 28 days ago.

MRR

Monthly Recurring Revenue normalizes every currently active paid subscription to a monthly amount:

MRR(T) = Σ over covering paid transactions at T of
         price_micros / months(purchase_date → expires_date)

months(a → b) = seconds(b − a) / 2,629,746        -- average month (365.2425 d / 12)

So a $59.99/year subscription contributes ≈ $5.00/month; a $9.99/month subscription contributes ≈ $9.99. Free trials contribute 0 (they're not paid yet). The MRR time series evaluates MRR(bucket end) per bucket.

Revenue & proceeds

Revenue in a window = sum of price_micros of all non-revoked transactions with purchase_date in the window (renewals count at their renewal date). Proceeds = revenue × 0.85. The overview shows revenue for the last 28 days vs. the 28 days before.

New subscriptions & new customers

New subscriptions per bucket = subscriptions whose _first_ transaction (min(purchase_date) per original_transaction_id) falls in the bucket.

New customers (overview) = subscribers whose first transaction of any kind falls in the last 28 days.

Churn

Churn comes from App Store Server Notifications, not from expiry heuristics: a churn event is an EXPIRED notification, bucketed by its signed date and broken down by subtype:

ColumnMeaning
voluntarysubtype VOLUNTARY — the user turned off auto-renew and the period ended
billingsubtype BILLING_RETRY — Apple's billing retry ended without recovery
otherany other/missing subtype (e.g. price increase not consented)

Trial conversion

For trials started in the window (first free-trial transaction per subscription):

  • Converted = the subscription has any later paid, non-revoked transaction (at any time — the conversion may happen after the window).
  • Pending = not converted yet, and the trial hasn't expired — it still can convert.
  • Conversion rate = converted / started (rounded to 4 decimals).

Refund rate

Within a window: refund_count = transactions revoked in the window, refunded_micros = their summed price, purchase_count = purchases made in the window, and refund_rate = refund_count / purchase_count. (Note the numerator is by revocation date and the denominator by purchase date — it's a period rate, not a per-purchase probability.)

LTV

Lifetime value to date, across all time (not a projection):

  • Paying customers = subscribers with at least one paid, non-revoked transaction.
  • LTV = average total revenue per paying customer.
  • Average lifetime days = average of (latest expiry − first purchase) per paying customer.

ARPU

For a window: ARPU = revenue / active users, where active users = distinct subscribers who either sent at least one event or made at least one purchase in the window (union, deduplicated). Apps that don't send engagement events get a purchase-only denominator, so treat cross-app ARPU comparisons with care.

Cohort retention

Monthly cohorts by first purchase: a subscription belongs to the cohort of the month of its first transaction. For each month offset _m_:

  • Retained = the subscription has a non-revoked transaction covering some moment in month cohort_month + m (i.e. purchased before the end of that month and expiring after its start).
  • Retention rate = retained / cohort size.

Month 0 is the cohort month itself (≈ 100% by construction). Buckets that lie in the future are not reported.

Paywall funnel

Computed from SDK events (paywall_view, purchase_started, purchase_completed), grouped by placement + paywall version — publishing a new version starts a fresh funnel row, so A/B-style before/after comparisons are built in:

  • Start rate = purchase_started / paywall_view
  • Conversion rate = purchase_completed / paywall_view

Breakdowns

Revenue, purchases, refunds, and current active subscriptions broken down by country (App Store storefront of the transaction) and by product (store product id). Active counts are as of now; revenue/purchase/refund columns respect the selected window.

Reading these numbers via MCP

Every metric on this page is exposed as an MCP tool (get_overview_stats, get_stats_timeseries, get_trial_conversion, get_ltv, get_arpu, get_cohort_retention, get_paywall_funnel, get_refunds, get_breakdown) — see the MCP guide. Definitions are identical: the tools call the same SQL.