Skip to main content
Intempt
Coming soon

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 soon

1 step Blu runs end to end. It drafts a plan and nothing runs until you approve it.

  1. 1

    Break MRR into its five parts

    Coming soon

    Blu 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.

Sign up to read the full recipe.md and run it with Blu Agent.

Sign up to see the full recipe

Inputs & outputs

What the recipe needs before it runs, and what it leaves in your workspace.

Inputs

  1. 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.

    1. 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. 1

      Sign up

      Create a free Intempt workspace.

    2. 2

      Connect your data

      Add the sources this recipe reads from.

    3. 3

      Ask Blu

      Type /mrr-movement-decomposition in Blu once this recipe is live there.

    4. 4

      Review and approve

      Blu builds each step and waits for your OK before anything goes live.

    More recipes by Sid Chaudhary

    Got a play worth sharing?

    Publish it to the Intempt Collective Marketplace and earn when other teams run it.

    Submit a recipe