MRR movement waterfall
Reports monthly recurring revenue movement by summing new and churned MRR from subscription data. Shows gross additions and losses by month.
Authored by Sid Chaudhary
Founder & CEO at Intempt
Agentic workflow
Coming soon1 step Blu runs end to end. It drafts a plan and nothing runs until you approve it.
- 1
Break MRR into its five parts
Coming soonBlu builds a step
About this recipe
When to use it
Net MRR change hides five different things happening at once: new business, expansion, contraction, churn, and reactivation. This decomposes it into the canonical SaaS waterfall so each driver is visible on its own.
What it delivers
Computes the canonical MRR waterfall - new, expansion, contraction, churn, and reactivation - per month, derived from real subscription_updated delta events rather than estimated.
How you prompt this
Describe the outcome in your own words and Blu Agent maps it to this recipe, or run it by name. It drafts a plan first and nothing runs until you approve it.
Tell Blu Agent what you want
“Reports monthly recurring revenue movement by summing new and churned MRR from subscription data. Shows gross additions and losses by month.”
recipe.md preview
Built from the published catalog. Blu Agent's full step prompts load in your workspace when you run it.
Inputs & outputs
What the recipe needs before it runs, and what it leaves in your workspace.
Inputs
- Nothing declared beyond an Intempt workspace. Blu asks for anything else it needs as it goes.
Outputs
How the recipe runs
Blu follows the steps in order and shows you each one before anything goes live.
- 01Break MRR into its five partsCreate an Insights report called "MRR Movement Decomposition". This is the canonical SaaS MRR waterfall. Compute the five movement categories per month: New MRR: Sum of Subscription started.amount in the period for users who had no active subscription previously, unit: $ Expansion MRR: From Subscription updated events: for each event, compute (new amount − prior subscription amount on the same subscription_id). Sum the positive deltas where changed_fields indicates plan upgrade or seat/quantity increase, unit: $ Contraction MRR: Same Subscription updated computation; sum the negative deltas (will appear as negative values in the waterfall), unit: $ Churned MRR: Sum of the prior subscription amount for each Subscription canceled event in the period (negative in the waterfall), unit: $ Reactivation MRR: Sum of subscription_resumed.amount where the user previously had a Subscription canceled in the prior 90 days, unit: $ Net New MRR: New + Expansion + Contraction (negative) + Churned (negative) + Reactivation Net Revenue Retention (NRR): (Starting MRR + Expansion + Reactivation − Contraction − Churn) / Starting MRR × 100, unit: % Time granularity: Monthly Time range: Last 12 months Compare: Year-over-year Chart type: Waterfall chart per month (New, Expansion, Reactivation as positive stacks; Contraction, Churn as negative stacks; Net New as the connecting line), with a secondary line showing trailing 12-month NRR Annotations: - Add benchmarks: a healthy SaaS business has Expansion + Reactivation ≥ |Contraction + Churn| (NRR ≥ 100%). - Flag any month where Net New MRR went negative. - Flag any month where Churned MRR exceeded New MRR. - Top-quartile NRR is ≥ 110%; world-class is ≥ 120%. Taxonomy notes: - The canonical Intempt taxonomy does NOT have separate subscription_upgraded, subscription_downgraded, or subscription_reactivated events. The available subscription state-change events are: Subscription started, Subscription updated, Subscription canceled, subscription_paused, subscription_resumed, subscription_expired, subscription_activated. - Expansion / Contraction split must be computed by Lovable's translation layer from Subscription updated by comparing new vs. prior subscription amount. The changed_fields property indicates what changed; plan_items carries the new state. - Reactivation is computed as subscription_resumed (or subscription_activated) where the same customer_id had a recent Subscription canceled. - This recipe requires the workspace to have these subscription state-change events flowing reliably from Stripe / HubSpot / Shopify subscription integrations. If Subscription updated is sparse, the report degrades to New MRR + Churned MRR only: still valuable but missing the expansion/contraction decomposition.
Install Intempt and run it
- 1
Sign up
Create a free Intempt workspace.
- 2
Connect your data
Add the sources this recipe reads from.
- 3
Ask Blu
Type /mrr-movement-decomposition in Blu once this recipe is live there.
- 4
Review and approve
Blu builds each step and waits for your OK before anything goes live.
