Subscription revenue

Know where your subscription revenue comes from.

Connect payments and renewals to website visitors, see which acquisition sources bring paying customers, and understand the revenue behind your traffic.

14-day free trial · No card required · From $9/month

The Lifetime value figures of a fictional website, Launchpad, on a phone: 563 new customers, an average lifetime value of $125, 1.9 payments per customer and 47% of their revenue from renewals. Made-up data.
New customers
The customers whose first payment falls in the period, grouped by where their first visit came from.
Lifetime value
Everything those customers have paid since, renewals included and refunds left out, per customer.
Renewals
The share of their revenue that came from subscription renewals, and how long they've been paying.

Understand the payments behind your SaaS growth.

A subscription business is paid twice over: a first payment when someone subscribes, then a renewal every billing period they stay. Subscription revenue analytics looks at those payments and asks where the customers came from.

SuprAnalytics is website analytics that records the payments your provider reports and connects them to the visits before them. It doesn't bill anyone, manage subscriptions or forecast revenue; your payment provider keeps doing that.

See new payments and returning revenue.

Every payment is one of three things. The dashboard's revenue bars stack new revenue and renewals, and the chart's tooltip gives both amounts.

First payment
A new customer's first purchase. It counts toward new revenue and the conversion rate.
Renewal
A later payment of the same subscription, marked from what your provider reports. Revenue, but not a new customer.
Refund
Taken out of revenue, and shown on top of the chart's revenue bars.

A payment is a renewal when the provider says so: Stripe's subscription_cycle invoices, Lemon Squeezy's renewal payments, Polar's subscription cycles and updates, Paddle's subscription transactions, Dodo Payments' later subscription charges, or renewal: true from the Payment API. The conversion rate counts new paying customers only, so renewals don't inflate it. Renewals and refunds

Bring payment data into your website analytics.

Connect Stripe, Polar, Lemon Squeezy, Paddle or Dodo Payments with a webhook, or send payments from your own server with the Payment API.

Two steps for each provider

  • Add a webhook in your provider and paste its signing secret into Settings → Revenue.
  • Pass the visitor id to your checkout, so each payment can be matched to the visits before it. For Polar and Dodo Payments links and Paddle.js buttons, the script adds it for you.

Refunds differ by provider

Stripe
Full refund: Marked refunded
Partial refund: Ignored
Polar
Full refund: Marked refunded
Partial refund: The amount is lowered
Paddle
Full refund: Marked refunded once approved
Partial refund: The amount is lowered once approved
Dodo Payments
Full refund: Marked refunded
Partial refund: The amount is lowered
Lemon Squeezy
Full refund: Marked refunded
Partial refund: The whole payment is marked refunded
Payment API
Full refund: Send refunded: true
Partial refund: Send refunded: true for the whole payment

Payments are recorded from the moment you connect; there's no import of past payments from your provider. Failed payments aren't recorded. Payments don't count toward your plan's monthly events. Connect a payment provider

Find the channels bringing paying customers.

Every breakdown on the dashboard carries revenue: channel (search, social, referral, email, paid, AI, Direct), referrer, campaign and keyword, pages, countries and devices.

  • Each row shows its customers, conversion rate, revenue and revenue per visitor
  • Click a row to filter the whole dashboard to it
  • AI assistants such as ChatGPT and Perplexity are a channel of their own

Only payments matched to a visitor can be credited to a source. The rest still count in your total revenue. About UTM trackingAbout AI traffic

The same Referrer table on a phone, scrolled to its bounce rate, duration, customers, conversion, revenue and revenue per visitor columns. Made-up data.

Choose how revenue gets attributed.

Each payment remembers the customer's first visit and their last visit before paying. Each website chooses which one gets the credit.

  1. Finds you through a newsletter
  2. Returns directly
  3. Subscribes
Illustrative example.

First touch

The newsletter gets the credit: the visit that brought them in.

Last touch (the default)

Direct gets the credit: the visit before the payment.

Last touch doesn't skip direct visits, and there's no last non-direct option. Renewals follow the same setting. Under last touch, a renewal goes to the visit where the customer checked out when the provider carries it into the subscription (Polar, Paddle, Dodo Payments), and otherwise to their latest visit before the renewal. Switch at any time; past payments are credited again under the new setting. How revenue attribution works

Understand what customers bring over time.

The Lifetime value page follows the customers acquired in a period, with everything they've paid since.

A payment
One charge, as your provider reported it.
A customer's revenue
Everything one customer has paid, renewals included and refunds left out, matched by visitor id, customer id or email.
Lifetime value
The average of that, for the customers acquired in a period: what they've actually paid so far.

It groups customers by where their first visit came from (channel, source, campaign, country or device) or by your saved segments, whatever the attribution setting. Customers who paid without being matched to a visit are grouped as Unknown. It's revenue already received, not a prediction of what customers will pay. The Users page adds paying customers, revenue and the average spend per customer for any period.

See the journey from first visit to payment.

A customer's journey lists every visit, then the payments matched to them, in order.

  • Each visit with its source and campaign tags, its pages, goals and clicks
  • Each payment labelled New customer, Renewal or Refunded
  • Their name or email when your provider or your website supplies one

A payment that wasn't matched to a visitor has no journey. A journey is one browser's history; a phone and a laptop are two visitors. About visitor journeys

A visitor's profile in the live demo: two visits, the first from google.com and the second from a newsletter with UTM tags, with the pages viewed, the signup and checkout_started goals, and a $79 payment via Polar. Made-up data.

Payment revenue isn't the same as MRR.

They answer different questions, so they can disagree for the same month.

Payment revenue
What SuprAnalytics reports: the payments recorded in a period, less refunds.
MRR
Monthly recurring revenue: every active subscription normalised to a monthly amount. An annual plan paid once counts as a twelfth each month.
Churn
The customers or revenue lost over a period, as subscriptions end.

SuprAnalytics doesn't calculate MRR, ARR or churn, and doesn't track cancellations, upgrades or downgrades. Use it to see where paying customers come from; use your billing provider for subscription metrics. To model lifetime value from churn and margin yourself, try the free LTV calculator.

Practical ways to use subscription revenue analytics.

  • SaaS founders

    See which channels and campaigns bring customers who keep paying.

  • Indie hackers

    Connect a launch's traffic to the payments that followed.

  • Growth marketers

    Compare the revenue credited to each campaign, under first or last touch.

  • Small SaaS teams

    Read a customer's payments, renewals and refunds next to their visits.

Limits worth knowing

  • Each provider needs a webhook, and checkouts need the visitor id for matching
  • A payment is credited to a source only when it's matched to a visitor
  • Last touch can credit Direct
  • Unmatched payments count in revenue without a source
  • In cookieless mode a visitor is recognised for a day, so a payment days later can't reach back to the first visit
  • A phone and a laptop are two visitors; devices aren't merged
  • Refunds follow each provider's rules (see above)
  • No MRR, ARR or churn
  • No import of past payments from providers
  • Data is kept for your plan's history: 2 years to 5 years

Payments in another currency are converted to your website's currency with daily exchange rates. Revenue attribution docsFor indie hackers

Questions, answered.

What is subscription revenue analytics?

It looks at the payments a subscription business receives, first payments and renewals, and asks where the customers behind them came from. In SuprAnalytics that means connecting each recorded payment to the visits before it.

Can SuprAnalytics track recurring subscription payments?

Yes. Renewals are recorded from your payment provider's webhooks and marked as renewals, separately from first payments. The chart shows new revenue and renewals apart, and the Lifetime value page shows each group's share from renewals.

Which payment providers are supported?

Stripe, Polar, Lemon Squeezy, Paddle and Dodo Payments through webhooks, and any other provider through the Payment API from your server.

Can I see which traffic sources bring paying customers?

Yes. Every breakdown (channel, referrer, campaign, pages, countries, devices) shows customers, conversion rate and revenue, for payments matched to a visitor.

How does first-touch versus last-touch attribution work?

Each payment keeps the customer's first visit and their last visit before paying. First touch credits the first; last touch, the default, credits the last, even if it was a direct visit. You can switch at any time.

Can I track customer lifetime revenue?

Yes. The Lifetime value page shows what the customers acquired in a period have paid since, renewals included and refunds left out, grouped by where they first came from. It's revenue received, not a forecast.

Does SuprAnalytics calculate MRR, ARR, and churn?

No. It reports recorded payments and renewals, not subscription metrics. Your billing provider is the place for MRR, ARR and churn.

What happens when a payment can't be matched to a visitor?

It still counts in your revenue, without a source, and has no journey. On the Lifetime value page its customer is grouped as Unknown. Matching tries the visitor id from checkout, then a customer id or an email seen before.

Connect your traffic to the revenue it brings.

See recorded payments, understand paying customers, and discover which acquisition sources contribute to revenue.

14-day free trial · No card requiredPricingAll features