Current vs proposed, rendered with the real prod numbers as of Aug 2 (monitoring accounts excluded): one paying subscriber (Málaga, Jul 18) and one 7-day trial with cancellation already scheduled (País Vasco, started Aug 1, cancels Aug 8).
Current
One bucket. Trials, dead trials and paying subscribers are all "active".
▾ Subscription revenue
Active subscriptions
2
1 of these is a trial that already cancelled
MRR (approx)
€6
€3 of this was never charged
Annual run-rate (approx)
€72
doubles the real run-rate
What this hides during the hard-paywall test
Every checkout now starts a €0 trial, so MRR inflates the moment anyone tries the product.
A trial with cancellation scheduled still counts as revenue until Stripe deletes it at trial end.
No panel answers the test's actual question: how many trials convert to paid.
Proposed
Three explicit states. Paying (charged at least once), trial live (may convert), trial with cancellation scheduled (will churn at trial end). Same data sources, SQL-only change.
▾ Subscription revenue
Paying subscriptions
1
survived the 7-day trial, charged
status='active' AND started_at <= now() - 7d
MRR (approx)
€3
paying subscriptions only
count(paying) * 3
Annual run-rate (approx)
€36
paying subscriptions only
count(paying) * 36
In trial · live
0
may convert at trial end
started_at > now() - 7d AND NOT cancel_scheduled
In trial · cancellation scheduled
1
riding out the trial, churns at trial end
started_at > now() - 7d AND cancel_scheduled
Trial → paid conversion
–
no decided trials yet · first decision Aug 8
still-active / all trials with started_at <= now() - 7d
Trials in flight
every subscription inside its 7-day trial window
Gazette
Started
Trial ends
State
pais-vasco
Aug 1
Aug 8
cancellation scheduled
latest customer.subscription.updated per stripe_subscription_id → cancel_at_period_end (billing.stripe_events payload)
Trial funnel per day
trial starts vs conversions vs cancellations scheduled
Trial startsConversions to paidCancellations scheduled
What the operator can now read at a glance
Real money: MRR counts only people who were actually charged.
Pipeline honesty: a live trial is hope, a cancelled trial is not, and they never blur.
The test's verdict metric exists: trial to paid conversion, decided cohorts only.
"Trials in flight" gives the churn calendar: you know on which day each decision lands.
Also changes: "List to subscription rate" (Reader funnel row) numerator switches to paying subscriptions, same filter as MRR.
Definitions. Paying = active for more than 7 days (activation happens at checkout completion, which is trial start, and the trial length is the backend constant TRIAL_PERIOD_DAYS = 7 in StripeCheckoutAdapter). Cancel-scheduled = latest customer.subscription.updated event for the subscription in billing.stripe_events has cancel_at_period_end = true (verified against prod: the Aug 1 cancellation is fully recoverable from the ledger, including its exact trial_end).
Caveats. The 7-day cutoff is coupled to the backend constant: lengthening the trial or reverting the test undercounts new payers for their first week (conservative direction). A card that declines at trial end counts as paying for the few days until customer.subscription.deleted arrives. Pre-trial-era subscribers pass the age filter correctly. All panels keep the existing monitoring-account and gazette filters.