TEASEDocs
ProductsClubHow-to

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)

LineWhat it means
MRRActive, paid subscriptions with auto-renew still on
At-risk MRRSubscriptions that turned auto-renew off but haven't expired yet
Expiring in 30 daysSubscriptions (any renewal state) whose current period ends within 30 days
Trial potentialFree-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.

What's next

On this page