Check the revenue forecast
See a next-30-day run-rate projection by revenue stream, plus which subscriptions are at risk or expiring soon.
The forecast answers two different questions together: "if nothing changes, what will the next 30
days earn?" and "how healthy is my recurring subscriber base right now?" Read it directly as a
workspace owner or chatter lead via GET /api/admin/chatters/forecast; the same underlying
computation also feeds the "Subscription revenue forecast" figure on the Dashboard's Fans
metric block.
The projection
Revenue is split into five streams — subscription, rebill, PPV, tips, other — and each stream is projected from its own last-30-days-vs-prior-30-days trend, clamped to ±50% so one volatile stream can't distort the whole number. The account-level projection also carries a low/high band that widens with how much of your revenue is PPV (PPV is the most volatile stream).
Subscription health (MRR)
| Line | What it means |
|---|---|
| MRR | Active, paid subscriptions with auto-renew still on |
| At-risk MRR | Subscriptions that turned auto-renew off but haven't expired yet |
| Expiring in 30 days | Subscriptions (any renewal state) whose current period ends within 30 days |
| Trial potential | Free-trial subscribers with auto-renew on — kept as a separate line, not counted in MRR |
Trials are potential, not MRR
A free trial hasn't paid anything yet, so it never inflates MRR even with auto-renew on. It's
reported separately as trial_potential_mrr_gross_cents — money that could arrive if the trial
converts, not money you have today.
"Unknown" subscriptions
If the background feed sweep hasn't confirmed a subscriber's row since your last respawn/reindex, that row is reported as unknown — deliberately kept apart from both "active" and "expired."
MRR right after a respawn/reindex
updated_at=0 on a subscriber row means no feed sweep has confirmed it yet. If every row on the
account is still unconfirmed, the forecast reports them all as unknown_subs rather than
claiming active_subs: 0 — an honest "don't know yet" instead of a false "the book is empty."
Give the sweep time to complete before reading MRR as final right after an engine restart.