Skip to content
· Vol. I · No. 2 · 3 min read

Net MRR hides five stories.

A flat week usually means expansion and churn are canceling out — not that nothing happened.

The Herald desk

Net MRR is the worst lagging indicator in your business. It’s a single number that averages five different things, and the averaging is the whole reason it looks calm.

“MRR +0.3% this week” sounds like nothing happened. It can also mean your two best accounts quietly expanded by $600 and one of your worst quietly downgraded by $570 — two signals pointed in opposite directions, canceled on the same line of the same chart.

The week is never flat. The week is composed.

The five stories inside the number

Any week of MRR movement is the sum of five things, and the founders who compound durably track all five.

New MRR is trial-to-paid conversions and net-new signups on a paid tier. Expansion MRR is existing customers adding seats, upgrading plans, or moving to an annual bump. Contraction MRR is the downgrade — the $199 account that becomes a $49 account and stops being a topic of conversation. Churn MRR is the full cancel. Reactivation MRR is the customer who came back.

Net MRR is the dashboard version. Gross is every one of those five lines, separately, with a dollar amount and a list of accounts attached to each. The difference between “net up $50 this week” and “$400 gross expansion, $350 gross churn and contraction” is the difference between a calm week and a week you need to act on by Tuesday.

Each line is a different question. New MRR is a marketing question. Expansion is a success question. Contraction is a product question. Churn is a retention question. Reactivation is a positioning question. When you track them as one number, you cannot tell which one is broken.

Helpkit, week of April 13

Concrete example. Helpkit is an $8,340 MRR B2B support tool, 140 paying accounts, billed on Stripe. Its founder opens Stripe on Monday, glances at the MRR line, sees a 0.6% uptick, and moves on. Here is what actually happened to the composition of that number.

Two expansions. Sunrise Labs moved from the Starter plan at $49 to the Team plan at $199. Bloomflow added a second workspace seat at $49. Gross expansion: +$249, from two accounts who both raised their hand within seven days of each other.

One contraction. Orbit Consulting stepped from Team at $199 to Starter at $49 at their April 9 renewal. Gross contraction: −$150. No cancel, no notification, no email to support — just a smaller invoice in the next cycle.

Three trial conversions on the Starter plan. New: +$147. One churn: Fern Studio canceled on Tuesday. Churn: −$196. No reactivations.

Net: +$50. Gross expansion plus new: +$396. Gross contraction plus churn: −$346. The week was not flat. The week had one signal worth chasing on Monday (Orbit Consulting is drifting) and one engine worth reinforcing (two accounts expanding in the same seven days).

On the Herald briefing the paragraph reads: “MRR +0.6% to $8,340. Gross expansion $249 from Sunrise Labs (Starter → Team) and Bloomflow (+1 seat). One contraction: Orbit Consulting stepped down on April 9 — worth asking why. Three new at $49 each; one churn at Fern Studio.” Forty-three words. Everything numbered. Nothing averaged.

A week that nets to nothing is the loudest week of the month if you’re listening on the right channels.

Why dashboards can’t do this for you

The MRR chart in Stripe, or any BI tool mirroring it, is a running total of a single aggregate. Every breakdown you want — new, expansion, contraction, churn, reactivation, by plan, by cohort, by geography — is a separate chart you configure and check. Five charts, every Monday, before coffee. You won’t. Nobody does.

The contraction row is the one that gets lost. Churn generates a support ticket, a cancel email, sometimes a phone call. A $199-to-$49 plan change generates a smaller invoice eighteen days later and pages nobody. By the time it registers as “MRR softened a bit last quarter,” the account has been drifting for ninety days and the reason is buried in a support thread nobody linked to it.

How Herald catches it

Herald keeps stripe_customers, stripe_subscriptions, and stripe_invoices denormalized inside each Product’s Durable Object. Every Monday the RevenueAgent walks the waterfall — new, expansion, contraction, churn, reactivation — by account, in dollars, linked to the subscription change that caused the move. When net is a shrug and gross is a conversation, the briefing is the conversation.

Next time you open your briefing, look for the week where net was flat and gross wasn’t.

Liked this? Get the briefing in your inbox.

Magic link. No password, no credit card.

By submitting, you agree Herald can email you the briefing and occasional product updates. See our Privacy Policy and Terms. Unsubscribe any time.