MRR movement types


Every change to a customer's MRR is classified as a specific movement type. Understanding these types—and their subtypes—helps you interpret your reports, build accurate dashboards, and explain your metrics to stakeholders.

This article covers the five main movement types, the subtypes that add context, how segment movements work for plan-level analysis, and edge cases you might encounter.


The five main movement types

TypeWhen it happensCustomer count effect
NewFirst payment from a customer+1 customer
ExpansionExisting customer's MRR increasesNo change
ContractionExisting customer's MRR decreases (but stays >$0)No change
ChurnCustomer's MRR goes to $0 with no active subscriptions-1 customer
ReactivationPreviously churned customer starts paying again+1 customer

New

A "New" movement occurs when a customer makes their first payment and has no prior payment history.

What triggers it:

  • First paid invoice after signup
  • Trial converting to paid
  • Lead purchasing a subscription

What doesn't count as New:

  • A customer who churned and comes back (that's Reactivation)
  • Adding a second subscription to an existing account (that's Expansion)

Expansion

An "Expansion" movement occurs when an existing paying customer's MRR increases.

Common causes:

  • Upgrading to a higher plan
  • Adding more seats or licenses
  • Adding a second subscription
  • Discount expiring (price goes up)
  • Switching from annual to monthly (if monthly is more expensive per month)

Contraction

A "Contraction" movement occurs when an existing customer's MRR decreases but remains above $0.

Common causes:

  • Downgrading to a lower plan
  • Removing seats or licenses
  • Applying a discount
  • Switching from monthly to annual (usually cheaper per month)
  • Canceling one of multiple subscriptions

Important: Contraction means the customer is still paying—they haven't churned.

Churn

A "Churn" movement occurs when a customer's MRR goes to $0 and they have no remaining active subscriptions.

Common causes:

  • Canceling their subscription
  • Subscription expiring without renewal
  • Payment failing beyond the grace period (involuntary churn)

What doesn't count as Churn:

  • Downgrading to a free plan (if they still have an active subscription record)
  • Removing one of multiple paid subscriptions (that's Contraction)

Reactivation

A "Reactivation" movement occurs when a previously churned customer starts paying again.

Requirements:

  • Customer must have paid before (has payment history)
  • Customer must have been churned ($0 MRR, no active subscriptions)
  • Customer starts a new paid subscription

Movement subtypes

Subtypes provide additional context about what caused the movement. They're visible in detailed views and exports.

SubtypeApplies toWhat it means
quantity_changeExpansion, ContractionCustomer added or removed seats/licenses
discount_changeExpansion, ContractionA discount was added, removed, or modified
price_changeExpansion, ContractionThe plan price changed (same plan, new price)
plan_changeExpansion, ContractionCustomer switched to a different product/plan
frequency_changeExpansion, ContractionBilling interval changed (monthly↔annual)
add_onExpansionCustomer added a second subscription
voluntaryChurnCustomer chose to cancel
delinquentChurnCancellation due to failed payments

Quantity changes

When a customer changes the number of seats or licenses:

Example:

  • Customer has 10 seats at $10/seat = $100 MRR
  • Customer adds 5 seats
  • New MRR: $150
  • Movement: Expansion (+$50), subtype: quantity_change

Discount changes

When a discount is added, removed, or expires:

Discount applied:

  • Customer pays $100/month, gets 20% discount
  • New MRR: $80
  • Movement: Contraction (-$20), subtype: discount_change

Discount expires:

  • Customer was paying $80 (with 20% discount)
  • Discount expires, full price resumes
  • New MRR: $100
  • Movement: Expansion (+$20), subtype: discount_change

Price changes

When the plan price changes but the customer stays on the same plan:

Example:

  • You increase prices from $99 to $129
  • Existing customer renews at new price
  • Movement: Expansion (+$30), subtype: price_change

Plan changes

When a customer switches to a different product:

Example:

  • Customer switches from "Starter" ($50) to "Pro" ($150)
  • Movement: Expansion (+$100), subtype: plan_change

Frequency changes

When the billing interval changes. This is where it gets interesting.

Monthly to annual (usually contraction):

  • Customer pays $100/month = $100 MRR
  • Customer switches to $960/year = $80 MRR
  • Movement: Contraction (-$20), subtype: frequency_change

Annual to monthly (usually expansion):

  • Customer pays $960/year = $80 MRR
  • Customer switches to $100/month = $100 MRR
  • Movement: Expansion (+$20), subtype: frequency_change

This often surprises people: switching to annual billing frequently shows as contraction because annual plans are typically discounted. The customer committed to a longer term, which is positive, but their normalized monthly revenue is lower.


Segment movements

When filtering MRR by plan (or other dimensions), you need to understand how customers moving between plans affect the numbers.

Segment entry and segment exit

These are internal movement types used for plan-level reporting:

TypeWhat it means
Segment entryCustomer joined this plan/segment
Segment exitCustomer left this plan/segment

How plan switches are recorded

When a customer switches from Plan A to Plan B, GrowPanel records:

  1. Segment exit from Plan A (negative MRR)
  2. Segment entry to Plan B (positive MRR, equal to what exited)
  3. Expansion or Contraction on Plan B (the MRR difference)

Example: Customer upgrades from Starter ($50) to Pro ($150)

MovementPlanMRR changeType
1Starter-$50Segment exit
2Pro+$50Segment entry
3Pro+$100Expansion

What this means for reporting:

  • Company-level MRR report: Shows +$100 Expansion
  • Starter plan report: Shows -$50 (segment exit)
  • Pro plan report: Shows +$150 (segment entry + expansion)

Why this matters

If you filter the MRR report to show only "Pro" plan:

  • You'll see customers entering from other plans (segment entry)
  • You'll see customers leaving to other plans (segment exit)
  • You'll see organic expansion/contraction within the plan

Without segment movements, plan-level reports would only show customers who started fresh on that plan, missing the full picture.


Movement grouping

When multiple changes happen in quick succession, GrowPanel can group them into a single movement.

The problem grouping solves

Without grouping, a customer who signs up and immediately upgrades shows:

  • 10:00 AM — New: $50 (signed up for Starter)
  • 10:02 AM — Expansion: $100 (upgraded to Pro)

This inflates your "New" count with the wrong plan and creates an artificial expansion.

How grouping works

With grouping enabled (default: 24 hours), these become:

  • 10:00 AM — New: $150 (on Pro)

The final state is what matters, not the intermediate steps.

Configuring the grouping window

Settings → Reporting → Group MRR movements

SettingEffect
0 hoursNo grouping (every change is separate)
24 hours (default)Same-day changes are grouped
48+ hoursChanges over multiple days are grouped

When to adjust grouping

Increase the window if:

  • Your sales process involves multiple subscription changes during onboarding
  • Customers frequently adjust seats immediately after purchase

Decrease the window if:

  • You need precise timing of each change
  • You're auditing specific transactions

Self-serve vs. enterprise differences

Movement patterns differ significantly between self-serve SaaS and enterprise sales.

Self-serve SaaS patterns

Typical characteristics:

  • High volume of small New movements
  • Frequent small expansions (adding seats one at a time)
  • Higher churn velocity (but often lower revenue impact)
  • Many monthly billing customers
  • Plan changes are common (upgrade paths)

What to watch:

  • Trial-to-paid conversion rate
  • Quick ratio (expansion + new vs. contraction + churn)
  • Churn by customer age (early churn vs. mature churn)

Enterprise sales patterns

Typical characteristics:

  • Low volume of large New movements
  • Expansions often happen at renewal (annual upsells)
  • Lower churn velocity but higher revenue impact per churn
  • Most customers on annual contracts
  • Plan changes are less common (custom deals)

What to watch:

  • Net revenue retention (NRR)
  • Expansion timing (end of year vs. throughout)
  • Multi-year contract value

Hybrid models

Many companies have both:

  • Self-serve for SMB customers
  • Sales-assisted for enterprise

Use plan filters or custom variables to analyze each segment separately.


Edge cases

Customer has multiple subscriptions

When a customer has multiple active subscriptions:

  • Churn requires all subscriptions to end
  • Canceling one subscription is Contraction, not Churn
  • Each subscription is tracked independently

Example:

ActionMRRMovement
Subscribe to Plan A$100New (+$100)
Add Plan B$150Expansion (+$50)
Cancel Plan A$50Contraction (-$100)
Cancel Plan B$0Churn (-$50)

Free plans and $0 subscriptions

Customers can have active subscriptions with $0 MRR:

  • Free tier subscriptions
  • 100% discounted plans
  • Trial-like "free forever" plans

These customers are:

  • Counted as "active" (not churned)
  • Show $0 MRR
  • Only churn if the subscription is actually cancelled

Upgrading from free:

  • If they never paid before: New
  • If they paid before, churned, went to free, now upgrading: Reactivation

Involuntary vs. voluntary churn

GrowPanel tracks why churn happened:

SubtypeCauseWhat it means
voluntaryCustomer cancelledThey chose to leave
delinquentPayment failedThey didn't choose to leave

Involuntary churn (delinquent) is often recoverable—these customers may just need a payment method update.

Immediate upgrade during trial

If a trial customer upgrades to paid immediately:

  • The trial doesn't create any movement (no MRR)
  • The paid subscription creates a New movement
  • No "trial conversion" movement exists (it's just New)

Downgrade to free = Churn?

Depends on your setup:

If free tier has an active subscription record:

  • Downgrading is Contraction (to $0 MRR)
  • Customer remains "active"
  • Later canceling the free subscription is Churn (but $0 impact)

If free tier has no subscription (just an account):

  • Downgrading is Churn (subscription ends)
  • Customer becomes "churned"
  • Later subscribing again is Reactivation

Reading movement data in reports

MRR report breakdown table

The breakdown table shows movements aggregated by type and period:

ColumnWhat it shows
NewSum of all New movements
ExpansionSum of all Expansion movements
ReactivationSum of all Reactivation movements
ContractionSum of all Contraction movements (negative)
ChurnSum of all Churn movements (negative)

Click any cell to see the individual movements.

MRR movements report

The dedicated movements report shows every individual movement:

  • Date and time
  • Customer name
  • Type and subtype
  • Plan name
  • MRR change
  • Description

Use filters to focus on specific movement types, plans, or time periods.

Exports

Exported data includes:

  • Movement type
  • Subtype
  • Segment entry/exit flags
  • Group ID (for related movements)

Summary

Main types classify what happened to the customer relationship:

  • New, Expansion, Contraction, Churn, Reactivation

Subtypes explain why it happened:

  • Quantity, discount, price, plan, or frequency change

Segment movements enable plan-level analysis:

  • Segment entry/exit tracks customers moving between plans

Grouping consolidates rapid changes:

  • Prevents artificial intermediate states from appearing

Understanding these classifications helps you:

  • Interpret reports accurately
  • Build meaningful dashboards
  • Explain metrics to stakeholders
  • Identify specific areas for improvement