Skip to content
Back to Resources
How-To

Stripe Revenue Analytics: Reading Payments Like an Operator

Skopx Team
July 27, 2026
15 min read

Most people open Stripe to check one number: did money arrive. Operators open it to answer a harder question: what is the shape of the money, and what is quietly leaking out of it. That gap is where Stripe analytics gets interesting, and where the default dashboard stops being enough.

Stripe holds an unusually complete record of a subscription business. Every upgrade, every downgrade, every declined card, every partial refund, every dispute, every payout net of fees. The problem is not missing data. The problem is that the interesting questions cut across objects that Stripe stores separately: subscriptions, invoices, charges, balance transactions, customers, and disputes. Answering them well takes a method, not just a chart.

This is that method. Five things worth measuring, how to actually get each one out of Stripe, and how to put the recurring ones on a schedule so nobody has to remember to pull them.

What Stripe analytics actually has to answer

Before touching a tool, get specific about the questions. Vague reporting requests produce vague dashboards. These are the five that matter for a subscription business, in rough order of how much money they move:

  1. MRR movement. Not the MRR total, the decomposition. New, expansion, contraction, churn, reactivation. The total tells you nothing you can act on.
  2. Involuntary churn. Failed payments, decline reasons, and how many of those customers you actually recover.
  3. Revenue quality. Refunds, disputes, and credit notes, measured against the period the revenue was booked in, not the period the refund landed in.
  4. Cohort retention. Whether customers who signed up in March behave like customers who signed up in September.
  5. The reconciliation gap. Why Stripe says one number and the accounting system says another, and which one is right.

Everything else in a payments dashboard is a leading indicator for one of these five.

MRR movement, and why the total is the least useful number

A flat MRR line can hide a business that is bleeding customers and papering over it with new logos, or a business that is quietly compounding through expansion. Same line, opposite futures. The decomposition is the whole story.

The standard categories:

MovementDefinitionWhat it tells you
NewMRR from customers who had none last monthAcquisition engine health
ExpansionIncreases from existing customers: upgrades, added seats, usage tiersProduct value delivered after the sale
ContractionDecreases from existing customers who stayedEarly churn warning, usually 30 to 90 days ahead
ChurnMRR from customers who cancelled entirelyRetention failure, voluntary or involuntary
ReactivationMRR from previously churned customers returningWin-back and dunning recovery

Take a hypothetical month. MRR opens at 100,000 and closes at 104,000. Comfortable, until you decompose it: new 14,000, expansion 2,000, contraction 4,000, churn 8,000. The business added 4,000 net, but it burned 14,000 of new sales to do it, and 12,000 of the base eroded. Growth is real and the retention problem is also real. Only the decomposition shows both at once.

Two practical cautions when pulling this from Stripe.

Stripe's MRR is a normalized figure, not your bookings. Annual plans are typically spread across twelve months rather than counted in the month they were billed, one-time charges are excluded, and taxes are excluded. That is the correct treatment for a recurring revenue metric, and it is a common source of confusion when someone compares the MRR chart to a bank statement. They are measuring different things on purpose.

Contraction hides inside upgrades. A customer who drops from 40 seats to 25 seats and simultaneously moves to a higher-priced tier shows up as a single subscription update. If your query looks only at final subscription price, you will miss that seat count is collapsing. Track quantity and unit price separately, not just the product of the two.

Failed payments and dunning: the leak you can actually plug

Involuntary churn is the least glamorous and most recoverable line in the whole model. A customer who wanted to keep paying and could not is a very different problem from a customer who left.

Start by separating decline reasons, because they demand different responses:

  • Insufficient funds. Highly recoverable with retry timing. Retrying near payday patterns works better than retrying immediately.
  • Expired card. Recoverable, but only with a customer touch. Automatic card updater services help; not every card or issuer participates.
  • Do not honor and generic declines. The issuer is not telling you much. Retries sometimes succeed, sometimes never will.
  • Authentication required. A regulatory step, common in Europe under SCA. The customer must complete a challenge, so a silent retry cannot fix it.
  • Lost, stolen, or fraudulent. Do not retry. Reach out or write it off.

Stripe's Smart Retries adjusts retry timing based on signals across the network rather than a fixed schedule, and Stripe Billing can send dunning emails and route customers to a hosted payment update page. Turn those on. Then measure whether they are working, which the retry engine will not tell you on its own.

The metrics worth tracking weekly:

  • Recovery rate: of the invoices that failed in a given week, what fraction were eventually paid within 30 days.
  • Time to recovery: how long the median recovery takes. A long tail means you are collecting cash late even when you collect it.
  • Failure rate by card country and by plan. Geographic concentration usually means an authentication or issuer problem, not a customer problem.
  • Repeat failures per customer. A customer failing three months running is a churn event that has not been recorded yet.

The operational move that pays for itself is a Monday list of currently unpaid, still-open invoices routed to whoever owns the account, with the decline reason attached so the message is specific. "Your card was declined" gets ignored. "Your card expired last month and your renewal is on hold" gets fixed.

Refunds, disputes, and the quality of revenue

Refunds are where gross revenue and honest revenue separate. Two rules make the analysis useful instead of misleading.

Attribute refunds to the original charge period. A refund issued in April against a February invoice is a February revenue problem. If you net refunds against the month they were issued, you will see phantom bad months and phantom good ones, and you will never link refunds back to the cohort or plan that produced them.

Segment by reason. Duty-of-care refunds after a support failure, prorated refunds on downgrade, goodwill credits, and fraud-driven reversals are four different business events. Stripe stores a refund reason, but it is only as good as the discipline of whoever issues refunds. Agreeing on a short list of reason codes and using them consistently is a five minute policy decision that makes months of analysis possible.

Disputes deserve separate handling because they cost more than the transaction. A chargeback typically carries a dispute fee in addition to the reversed amount, and a rising dispute rate can put an account into a card network monitoring program. Watch dispute count as a share of transaction count, not just absolute dollars, and watch the trend rather than the level. Stripe Radar rules can block the patterns that generate disputes, but a rule that is too aggressive quietly rejects good customers, so pair any Radar change with a false-positive check on authorization rates.

Cohort retention: does month 12 look like month 1

Aggregate churn is an average of businesses you no longer run. If acquisition mix changed, this quarter's churn number is measuring a different population than last quarter's.

Build cohorts by first paid invoice month, then track two curves for each:

  • Logo retention: the share of customers still active in month N.
  • Net revenue retention: the MRR of the surviving cohort in month N divided by its MRR in month 0, including expansion and contraction.

Net revenue retention above 100 percent means a cohort grows even as some members leave. It is among the most predictive numbers in a subscription business, and it is only meaningful per cohort. If your March cohort holds and your September cohort collapses at month three, something changed in September: a channel, a pricing page, an onboarding flow, or a promise sales started making.

Cohort analysis is also where Stripe alone runs out of road. Stripe knows what customers paid. It does not know which campaign, which sales rep, or which onboarding path produced them. Joining payment data to CRM data is what turns a retention curve into a decision, which is the same argument made in HubSpot AI Analytics about pipeline questions, and in Google Analytics With an AI Assistant about acquisition questions GA4 makes hard. The pattern repeats: each system holds one part of the answer.

The reconciliation gap between Stripe and your accounting system

This is the section finance teams care about most and product teams skip. It is worth understanding either way, because the gap is not an error. It is structural.

Stripe payouts arrive in your bank net of fees, refunds, disputes, and adjustments. Your accounting system, if it is doing things properly, records gross revenue and processing fees as a separate expense. So the deposit will essentially never match a revenue figure, and anyone comparing the two directly will conclude the numbers are broken.

Five specific causes of the gap, roughly in order of how often they trip people up:

  1. Gross versus net. Stripe fees are deducted before payout. Revenue is gross. Fees are an expense line.
  2. Timing. A charge on the 30th settles into a payout that lands in the next month. Cash and revenue live in different periods by design.
  3. Refunds and disputes against prior periods. These reduce a current payout while belonging to an earlier month's revenue.
  4. Currency conversion. Multi-currency charges convert at Stripe's rate on settlement, and your books use a different rate convention. The difference is a real FX gain or loss, not a mistake.
  5. Cash versus recognized revenue. An annual invoice is cash now and revenue over twelve months. Stripe's Revenue Recognition product handles this inside Stripe; if you recognize revenue in your accounting system instead, the two will legitimately disagree until you reconcile the deferred balance.

The clean fix is a Stripe clearing account in the general ledger. Every charge credits revenue and debits the clearing account. Every fee, refund, and dispute hits the clearing account. Every payout is a transfer from the clearing account to the bank account. At month end, the clearing account balance should equal the Stripe balance on the same date. If it does not, the difference is a real unexplained item, and you now know exactly where to look. Stripe's balance transaction records, which list every fee and adjustment individually, are the source of truth for this, not the payment records.

Run the check monthly. The month you skip it is the month a duplicate refund or a misrouted payout hides for a quarter.

Choosing a tool for Stripe analytics

There is no single right answer, only a right answer for the question you are asking. Verify current capabilities and pricing with each vendor, since all of this moves.

ApproachBest forReal limits
Stripe DashboardDaily monitoring, billing overview, quick lookupsFixed views; hard to join with non-Stripe data
Stripe SigmaSQL over Stripe data, scheduled queries, deep custom reportingRequires SQL fluency; Stripe data only; paid add-on
Stripe Data Pipeline into a warehouseJoining Stripe to product and CRM data at scaleWarehouse cost and modeling work; check supported destinations
BI tool on top of the warehouseDashboards, visualizations, board reportingNeeds modeled data; someone must own it
Spreadsheet exportsOne-off analysis, ad hoc board asksStale immediately; no audit trail; error prone
Chat layer across tools (Skopx)Recurring questions, cross-tool answers, scheduled alertsNot a dashboard builder; use BI for visualization

Be clear-eyed about the last row. If what you need is a revenue dashboard the whole company looks at, build it in a real BI tool on modeled data. That is what BI is for. What chat is genuinely better at is the long tail: the specific question asked once a week, the alert that should fire when something slips, and the answer that requires reaching into three systems at once.

Scheduling Stripe analytics instead of pulling reports

The reason most of this analysis does not happen is not difficulty. It is that pulling it is a chore that competes with everything else on a Monday. The fix is to make the report arrive rather than be fetched.

Skopx connects to Stripe as one of nearly 1,000 integrations and lets you ask questions in plain language across those tools, with answers that cite where each number came from. It is not a BI tool and does not build dashboards. What it does well here is answer recurring questions and act on the answers.

A concrete example. In Skopx chat you would type:

Every Monday at 8am, pull all Stripe invoices that failed in the last 7 days and are still unpaid. Include customer name, email, amount, decline reason, and how many retry attempts have run. Group them by decline reason, then post the list to the #billing Slack channel and email it to finance.

What that builds is a scheduled workflow: a weekly trigger, a Stripe action that fetches the failed invoices, a transform that groups and formats them, and two delivery steps. You describe it in chat rather than assembling it in a builder, and every run is inspectable step by step, so when a Monday list looks wrong you can see exactly which step produced what. The limits are worth knowing up front: workflows are acyclic, capped at 20 steps, have no human-approval step and no custom code step, and any AI step runs on your own provider key.

The same pattern covers the rest of this article. A monthly MRR movement breakdown on the first business day. A daily dispute alert when a new chargeback opens. A month-end reconciliation summary comparing the Stripe balance to the clearing account. And the daily morning brief surfaces what changed across connected tools without being asked, which is how a failed payment spike gets noticed on Tuesday instead of at month end.

Cross-tool questions are where this earns its keep. "Which customers with a failed payment this month have an open support ticket" touches Stripe and your helpdesk. "Which accounts that contracted last quarter had no customer success activity logged" touches Stripe and your CRM, which is the same joining problem covered in Salesforce AI Assistant. And when a billing incident is unfolding, the conversation record itself is data, a point made in Slack Analytics.

Skopx is a paid product and every plan bills from day one. Solo is $5 per month, Team is $16 per seat per month with no seat caps, and Enterprise and White Label are each $5,000 per month. Full details are on the pricing page. AI runs on your own provider key, and Skopx does not mark up model costs.

A 30 day plan to get this running

Week one: agree on definitions. Write down how your company defines expansion, contraction, and churn, and where an annual plan sits. A surprising share of revenue reporting arguments turn out to be definitional.

Week two: instrument involuntary churn. Turn on Smart Retries and dunning emails if they are off, then start a weekly failed payment list with decline reasons attached and a named owner for follow-up.

Week three: build the clearing account reconciliation and run it once against last month. Expect to find at least one surprise the first time.

Week four: pick two recurring reports, the MRR movement breakdown and the failed payment list, and put them on a schedule so they arrive without anyone pulling them. Then leave cohort analysis as a monthly deep dive, because it is a thinking exercise, not a monitoring one.

Skopx catches what falls between your tools, and payments is one of the places where the most money falls: a card that expired, a refund that never got attributed, a cohort that quietly stopped renewing. None of it is hard to see. It is only hard to remember to look.

Frequently asked questions

Does Stripe have built-in analytics?

Yes. The Stripe Dashboard includes payment and billing reporting, and Stripe Billing customers get subscription metrics including MRR, churn, and subscriber counts. Stripe Sigma adds SQL access to your Stripe data with scheduled queries, as a paid add-on. The built-in tools are strong for Stripe-only questions and limited when you need to join payment data to CRM, product, or support data. Check Stripe's current documentation for what is included in your account.

Why does Stripe's MRR not match my accounting system's revenue?

Because they measure different things. Stripe's MRR is a normalized recurring figure that typically spreads annual plans across twelve months and excludes one-time charges and taxes. Your accounting system records recognized revenue under your accounting policy, and your bank shows cash received net of fees, refunds, and disputes after payout timing. All three can be correct simultaneously. Reconcile through a Stripe clearing account rather than comparing headline numbers.

How do I track failed payments in Stripe?

Watch the invoice.payment_failed event and the set of invoices in an open, unpaid state. The useful cut is by decline reason, since insufficient funds, expired card, and authentication required each need a different response. Track recovery rate over a 30 day window, time to recovery, and customers failing repeatedly, since a third consecutive failure is usually a churn event that has not been recorded yet.

Can I query Stripe data with SQL?

Yes, through Stripe Sigma, which runs SQL against your Stripe data and supports scheduled queries. For joins against non-Stripe data at scale, Stripe Data Pipeline can sync your Stripe data into a data warehouse; verify current supported destinations in Stripe's documentation. Skopx can also query PostgreSQL, MySQL, and MongoDB in chat, which is useful when your product database holds the usage data that explains a billing pattern.

Does Skopx replace a BI tool for Stripe analytics?

No, and it should not be sold as one. Skopx does not build dashboards or visualizations. If your goal is a revenue dashboard the whole company watches, use a dedicated BI tool on modeled warehouse data. Skopx is the right fit for recurring questions, cross-tool answers, scheduled alerts, and documents generated from live data, and it acts only with your approval.

What does Skopx cost, and how is AI billed?

Skopx is paid from day one. Solo is $5 per month, Team is $16 per seat per month with no seat caps, and Enterprise and White Label are each $5,000 per month. There is no trial period and no unpaid tier. You also bring your own AI provider key, and Skopx does not mark up model costs. Data is encrypted with AES-256 at rest and TLS 1.3 in transit, isolated per organization at the row level, and never used to train a model.

Share this article

Skopx Team

The Skopx engineering and product team

Related Articles

Stay Updated

Get the latest insights on AI-powered code intelligence delivered to your inbox.