Attribution

MRR and SaaS attribution: which channels bring revenue that stays

How MRR is calculated, what moves it, how churn is measured, and how to tie subscription revenue to the campaigns that brought each customer.

On this page

SaaS attribution ties subscription revenue in your billing system to the campaign or source that first brought each customer, so you can compare channels by the MRR that stays rather than by signups. The join is an id passed from the visit into the checkout; once the first payment carries it, every renewal, upgrade and cancellation belongs to that source too.

This guide defines MRR and churn precisely, then shows how to make the join and how to judge channels by revenue that lasts.

MRR, precisely

Monthly recurring revenue is the monthly value of every subscription that is paying now. Stripe's definition is the sum of the monthly-normalized value of all active and past_due subscriptions, excluding taxes, free plans and metered (usage-based) prices (Stripe).

"Monthly-normalized" means every billing interval is turned into a month:

PlanPriceAdds to MRR
Monthly$49 a month$49
Yearly$480 a year$40
Quarterly$135 every 3 months$45
Monthly, 3 seats$20 a seat$60

The choices that cause most arguments:

  • Trials add nothing until they turn into a paid plan.
  • Discounts. A coupon that applies every month lowers MRR while it runs. Whether a one-time coupon should lower it is a choice; Stripe lets you set it either way (Stripe).
  • Past due subscriptions still count until they are canceled or marked unpaid, because most failed payments are recovered.
  • Usage-based prices have no known monthly amount ahead of time, so most MRR reports leave them out and say so.

MRR is not revenue. A customer who pays $480 for a year adds $480 to this month's cash and $40 to MRR. Report both, labeled.

What moves MRR

Every change in MRR is one of four moves, and a good report shows each:

MoveExample
NewA trial converts at $49 a month: +$49
ExpansionA customer goes from 3 seats to 5: +$40
ContractionA customer moves from $99 to $49: −$50
ChurnA $49 subscription is canceled: −$49

Stripe also counts reactivation, a canceled customer paying again, as its own move (Stripe). Net new MRR is the sum. A business can add plenty of new MRR and still shrink, which is why the moves matter more than the total.

Churn, two ways

Customer churn is the share of paying customers who stopped in a period. Stripe divides customers who churned in the last 30 days by the active customers 30 days ago plus the new ones since (Stripe).

Revenue churn is the MRR lost to cancellations and downgrades. When expansion from the customers who stay outweighs it, revenue retention goes above 100 percent: the customers you already have grow on their own.

Say which one you mean. Losing 5 small customers and 1 large one gives a low customer churn and a high revenue churn.

Tying revenue to sources

Analytics knows that a visitor came from a podcast link. Stripe knows that cus_123 pays $49 a month. Neither knows the other. The join needs an identifier that passes from the visit to the payment:

  1. The visitor id on the payment. Stripe Payment Links take a client_reference_id in the URL and return it on the completed checkout (Stripe). A Checkout Session you create in code can carry the same field or your own metadata. Put your analytics' visitor id there.
  2. UTM parameters on the payment link. Payment Links accept the five UTM parameters, and pass them on to a redirect after payment (Stripe). Useful, but it only records the last link, not where the customer first came from.
  3. The email. If the person gave their email on your site before paying, the payment's email can be matched to that visit.

Once the first payment is tied to a person, every renewal, upgrade and cancellation after it belongs to the same source, because Stripe keeps them on the same customer.

Which touch gets the credit

A SaaS customer often reads a blog post from search, comes back from a newsletter, starts a trial from a retargeting ad and pays after a sales call. The attribution model decides who gets the MRR:

  • First touch answers "which channels find future customers?". It suits content and search.
  • Last touch answers "what pushed them over the line?". It suits retargeting and email.

For subscription revenue, first touch is often the more honest default: the payment that matters most is month six, and no ad caused that. Look at both before you cut a channel.

Judge channels by revenue that stays

Signups per channel is the wrong scoreboard. Compare channels by revenue per customer over a fixed span, such as the first 90 days or the first year, and only for customers who have had that long:

First sourceCustomersPaid per customer, first 180 daysStill paying at 180 days
Organic search48$31071%
Paid social95$14238%
Partner referrals22$40582%

Example numbers, made up for illustration.

Paid social brought the most customers and the least money that stayed. Hold the per-customer column against the cost per customer from each channel, and the budget conversation changes. The cohorts guide covers the reading rules.

Where Sporetag fits

From Sporetag's revenue code and help, on paid plans with the Stripe connector: MRR counts yearly, weekly and quarterly plans by their monthly worth, counts quantity, counts trials from their first paid day, keeps past due subscriptions, lowers MRR for recurring coupons but not one-time ones, and leaves out usage-based prices while saying how many there are. It shows new, upgrades, downgrades and canceled, each tied to the customer's source, plus lifetime value by first source and campaign. Payments tie to visits through the Payment Link visitor id, client_reference_id or metadata.st_id, a Stripe customer seen before, or an email given on the site. Money in other currencies is never converted.

Common questions

How do you calculate MRR?

Add the monthly value of every paying subscription: monthly plans at their price, yearly plans divided by 12, quarterly plans divided by 3, times the quantity. Leave out trials, free plans, taxes and usage-based prices.

What is the difference between MRR and revenue?

Revenue is money received in the period, including yearly plans paid up front and one-off charges. MRR is the monthly value of active subscriptions, a measure of the run rate.

What is a good churn rate for SaaS?

It depends on price and customer size; small business products churn faster than enterprise ones. Track your own monthly churn by acquisition source, and compare sources with each other.

How do I see which marketing channel brought a Stripe customer?

Pass your analytics' visitor id into the checkout as client_reference_id or metadata, or match the payment's email to a visit, so the first payment, and every renewal after it, carries that visit's source.

Sources

Spotted something wrong or out of date? Email hello@sporetag.com and we will fix it.