Stripe Reporting: MRR, Refunds and Fees
Four blocks cover a monthly Stripe report: net volume, the MRR bridge, what leaked out, and what failed. How to build each, and what to ask for.
A monthly Stripe report holds up when it has four blocks: net volume, the MRR bridge, what leaked out through refunds, disputes and fees, and what failed. This post lays out each block, how to build it by hand in a spreadsheet, and how to ask for it in plain English. The illustrative figures below are an example, not a benchmark.
Block 1: net volume by month
Net volume is gross volume less refunds, disputes and every Stripe fee. It is the anchor because every other block should reconcile to it. By hand, export balance transactions from the Stripe Balance report for the month, filter to sales activity, and sum the net column.
Example, one month (illustrative) Gross volume 48,000 Refunds -1,900 Disputes -300 Fees -1,650 Net volume 44,150
Keep the signs as Stripe shows them: refunds, disputes and fees negative. If you flip some and not others, the table will not add up and nobody will know why.
Block 2: the MRR bridge
MRR is a stock, a level at month-end, and the useful view is the movement between two month-ends. The bridge has five movements: new, expansion, contraction, churn and reactivation.
Example (illustrative) Opening MRR 20,000 + New 1,400 + Expansion 600 + Reactivation 150 - Contraction -300 - Churned -850 Closing MRR 21,000
Check that the bridge ties before you present it. Never add month-end MRR figures together across months; each month-end is a point in time, not a flow. One Stripe-specific wrinkle: a plan switch shows as one churn and one new, so a heavy upgrade month can inflate both lines. Read the two together.
Block 3: what leaked out
Show refunds, dispute losses and fees as their own lines rather than burying them in net. A rising fee line tells a different story from a rising refund line. Fees come in two kinds: the processing fee on each transaction, and fees Stripe bills separately for products such as Billing, Radar, Tax and Connect. Report both and total them, so the full cost of taking payments is visible.
Refunds also raise a dating question: a refund in March against a February sale lands in March in the balance. If you want the refund attributed to the original sale month, that is a different calculation, covered in attributing refunds to the right month.
Block 4: failed payments
Count charge attempts, successful and failed, and compute the success rate: successful payments divided by all attempts. A drop of a few points in a month is worth a look at the failure codes, which separate declined cards from other causes. For subscription businesses, also list customers with open invoices past their due date, since failed renewals show up there.
How to ask for it in Quiriz
The connector (in beta) imports Balance transactions, Payments, Subscriptions, Invoices, MRR by month, Subscription snapshots and Customers. Metrics exist for each block above: Net volume, Refunded amount, Dispute losses, Processing fees, Other Stripe fees, Payment success rate, MRR, ARR, New MRR, Expansion MRR, Contraction MRR, Churned MRR and Reactivation MRR. You can ask:
- What was net volume by month this year?
- How has MRR changed month by month this year?
- Which customers churned last month, and how much MRR did we lose?
- How many payments failed this month, and why?
Save those as a scheduled report and the pack arrives each month. Because the metric definitions live in Company Context, the March report and the September report use the same rules. Connectors are read-only, refresh daily and are included in paid plans. A broader intro is in Stripe AI: ask your payments data questions.
Cadence and ownership
A report like this only stays useful if someone owns it and the rules do not drift. Pick a fixed day after month-end, such as the third business day, so late-settling items have landed. Decide who reads it and which single question each block answers for them: finance reads net volume and leakage, the founder reads the MRR bridge, support reads failed payments.
Keep a small notes line at the bottom for anything unusual that month: a price change, a promotion with forever coupons, a bulk refund after an outage. Next quarter, that line is the difference between a number you can explain and one you have to reverse-engineer. Where the same numbers appear in a board or investor update, quote the definitions alongside them; see how to write a monthly business report for layout.
Three mistakes that quietly break the report
First, mixing signs: refunds, disputes and fees are negative in Stripe, and a report that shows some as positive will not foot. Second, adding month-end MRR across months to get a quarter figure; a quarter's MRR is the quarter-end value, not a sum. Third, switching time zone or currency between months, which shifts items across the month boundary and makes a trend that is really a definition change. Write the three rules at the top of the template and most of the arguments never start.
Limits to state in the report
- Time zone. Dates follow the Stripe account time zone, so a late-night payment on the last day may land differently from a UTC export.
- Currency. The defined metrics count only account-currency rows. Other-currency rows exist in the datasets and carry a flag; they are not converted and should not be summed with the home currency.
- Window. If an account exceeds the payment cap, the datasets say they start later than your first payment.
- MRR rules. Stripe Billing's: active and past-due subscriptions count, trials, metered items and tax do not, and forever coupons are subtracted. Put that sentence in the footer of the report.
Get the monthly Stripe report without the rebuild
Connect Stripe, ask for net volume and MRR movement by month, and schedule the report. Free to start.
Try Quiriz free →