Metrivo
Back to blog

MRR attribution

MRR Attribution by Source: Knowing Which Channels Pay Your Server Bills

Signups by source is not enough. A guide to attributing actual MRR — and renewals — to traffic sources, landing pages, and campaigns with confidence labels.

11 min readDraft

Most SaaS dashboards show signups by source. That is a useful start, but it is not the same question as 'which marketing source paid for the business this month?' Signups can be free, can churn, can downgrade. MRR is what keeps the company running.

MRR attribution is the work of connecting actual recurring revenue — not just signup counts — to the traffic source, landing page, and campaign that created the buyer. Done well, it tells you which channels are actually paying your server bills and which look loud but contribute little to the bottom line.

Signup attribution vs MRR attribution

Signup attribution measures top-of-funnel quality. A channel that produces ten signups for the same effort as another channel that produces three is better at attracting attention. That matters for content investment and channel selection.

MRR attribution measures bottom-line value. The same ten-signup channel might produce two paying customers; the three-signup channel might produce all three. Attention and revenue are not the same metric. A good attribution stack tracks both and surfaces them separately.

The two views can disagree dramatically. AI-search channels frequently show low signup volume but higher paid conversion than their share of attention suggests. Brand-search shows the inverse. Without MRR attribution, the wrong channel can quietly absorb investment for months.

Why renewals make this harder

A signup happens once. MRR happens every month. That means MRR attribution has to survive renewals, plan changes, downgrades, dunning, and reactivations. None of these events happen in a browser, so client-side tracking cannot see them.

The fix is to attach the attribution metadata to the persistent customer object in your payment provider — not just the initial payment. Then every renewal webhook carries the same metadata, and the matcher keeps revenue attached to the original acquisition source.

The data model

Three pieces are needed for MRR attribution. First, a first-party visitor ID captured the moment a session starts and stored on your own domain. Second, that visitor ID attached to the payment provider's customer object at checkout creation. Third, server-side webhook listeners that verify signatures, write payment rows, read the metadata, and run a matcher with confidence labels.

For SaaS providers running on Stripe, the customer object is the right home for attribution metadata. For Dodo, Razorpay, Paddle, and Lemon Squeezy, the equivalent customer (or subscription notes) field plays the same role. The Manual Payment API supports the same pattern for custom checkout paths.

Confidence labels stop bad reports

Even with clean instrumentation, some renewals will arrive with weaker evidence than others. The buyer changed devices. The customer object was created before metadata was added. A merger or rename moved the account. Honest reports surface the confidence breakdown.

Metrivo uses four labels. High: exact visitor or customer match. Medium: hashed-email match across sessions. Low: UTM or referrer hint only. Unknown: no usable join. MRR totals are accurate; channel assignment requires evidence.

Handling plan changes and upgrades

When a buyer upgrades from Starter to Growth, the new MRR delta should usually stay attributed to the original acquisition source. Upgrade behaviour reflects product fit, which reflects the marketing source's qualification quality.

The exception is when a deliberate touchpoint drove the upgrade — a feature launch email, an in-product nudge tied to a specific campaign, a sales conversation. In those cases the upgrade can be attributed to that touchpoint. The point is to be deliberate about the model rather than letting the system default to whichever source is loudest.

Handling downgrades and churn

Downgrades reduce MRR but do not invalidate the original attribution. A customer who came in via Perplexity and stayed for nine months on Growth before downgrading to Starter contributed real MRR for that period.

Churn similarly. The lifetime revenue is what matters for the channel mix, not the snapshot at the moment of churn. Good MRR attribution exposes lifetime contribution by source, not just current MRR by source.

Failed payments and recovery

Stripe and Razorpay both have mature dunning systems that recover failed payments over several days. Without idempotency in the webhook handler, a recovered payment can be counted twice — once on the initial failure, once on the recovery. That inflates MRR reporting.

The right pattern is to key payment rows by the provider's payment ID and derive MRR from the latest state per subscription period. Attribution stays on the subscription, not on the individual retry. Metrivo's payment integrations handle this by default.

Reporting MRR by source

A useful MRR-by-source view has three columns: current MRR contribution by source, lifetime revenue by source, and confidence-weighted MRR. The confidence-weighted view is the one to lead with for decisions. It tells you which channels you can defend in front of a board.

Add a fourth view: MRR per signup by source. This catches channels that are quietly producing high-LTV customers even when their signup volume is modest. AI-search channels often look better in this view than in raw signup counts.

Connecting MRR attribution to product

MRR attribution is not just a marketing report. It is a product signal. If buyers from a specific source consistently churn faster, the source is producing the wrong customers — or the product is not solving the problem they came looking for. Either is actionable.

Conversely, channels that produce sticky customers deserve more depth in content, more support material, and more careful onboarding. The point is to let the data shape product decisions, not just channel budgets.

Common MRR attribution mistakes

Attributing only to the first payment. Renewals are most of subscription revenue. Attribution must cover the customer lifecycle, not just the initial signup.

Resetting attribution on plan changes. Unless a deliberate touchpoint drove the upgrade, the original acquisition source still owns the contribution.

Confusing MRR with paying customer count. Different plans contribute different MRR. Source mix can look different depending on which metric you weight.

Counting failed-then-recovered payments twice. Always derive from the latest payment state by subscription period.

Treating direct as a channel. Direct is the absence of evidence. Fix instrumentation before promoting it to a strategy.

A weekly MRR attribution workflow

Open the confidence-weighted MRR-by-source view. Sort by both current MRR contribution and lifetime revenue.

Compare the source mix to the signup-by-source view. Where they disagree, the difference is the insight: a channel that punches above its signup weight is a candidate for more investment.

Inspect the largest unattributed bucket. If it is over 20%, the next fix is instrumentation — not a new channel. Confirm metadata is flowing into the customer object, not just the initial payment.

Record the result in Revenue Memory. Over a few months, the source mix shifts as evidence improves, and the team starts seeing which channels actually pay the bills.

Frequently asked questions

What is MRR attribution and how is it different from signup attribution?

MRR attribution connects monthly recurring revenue — not just signup counts — to the traffic source, landing page, or campaign that created the buyer. It survives renewals, plan changes, and downgrades. Signup attribution tells you what attracts attention; MRR attribution tells you what funds the business.

How do I attribute SaaS renewals to the original marketing source?

Attach the visitor ID and other attribution metadata to the payment provider's customer object at checkout creation, not just the initial Checkout Session. Renewal webhooks will then carry the customer metadata, and the matcher keeps recurring revenue attached to the original source.

Should plan upgrades be re-attributed to a new source?

Usually no. Upgrade behaviour reflects product fit, which reflects the original source's qualification quality. The exception is when a deliberate, measurable touchpoint drove the upgrade — a campaign, a feature launch, a sales call. In that case the upgrade can be attributed to that touchpoint.

What is confidence-weighted MRR?

Confidence-weighted MRR is the recurring revenue total adjusted for attribution confidence. High-confidence matches contribute fully; medium and low matches contribute with appropriate weighting; unknown stays unknown. It is the view to lead with for board-level reporting because it is defensible.

Does Metrivo attribute MRR across multiple payment providers?

Yes. The attribution model is provider-agnostic. Webhook integrations for Stripe, Dodo, Razorpay, Paddle, and Lemon Squeezy share the same matcher and confidence-label structure. The Manual Payment API extends the same model to custom checkout paths.