You closed five annual deals in March, and $60,000 landed in your Stripe account. Your dashboard is glowing, your bank balance looks heroic — and your accountant just told you March revenue was $5,000. Nobody is wrong. You are looking at two different numbers that happen to live in the same Stripe account: the cash you collected and the revenue you actually earned. Until you reconcile the two, every payout Stripe sends you is a riddle your books have to solve.
This guide shows you how SaaS companies that bill annually but recognize revenue monthly reconcile Stripe payouts without double-counting revenue, misstating deferred revenue, or getting fooled by the metric that hides the whole gap.
Why Stripe Payouts Are the Wrong Starting Point for Revenue
A Stripe payout looks like income. It arrives in your bank account as a single deposit, it has a date on it, and it feels like the month's earnings. It is none of those things. A payout is a net settlement: gross charges minus processing fees, minus refunds, minus dispute withdrawals, batched together on Stripe's payout schedule rather than yours.
That creates two separate distortions if you book payouts as revenue.
First, you understate revenue. If a customer paid $12,000 for an annual plan, Stripe keeps roughly $348 plus 30 cents and pays out the rest. Booking the payout records the net as your sales and buries the fee where you can never analyze it — or deduct it cleanly.
Second, and far more dangerous for annual billing, you misstate timing. The full $12,000 arrives in one payout in January, but under accrual accounting you earn it at $1,000 per month as you deliver the service. Book the payout as January revenue and January looks spectacular while February through December look dead, even though the business did exactly the same thing every month.
The fix is to treat the payout as what it is — a cash transfer — and recognize revenue on a completely separate track driven by your contracts, not your deposits.
The Three Numbers Founders Confuse: Bookings, Billings, and Revenue
Every annual-billing reconciliation starts with keeping three numbers apart:
- Bookings are the total value of contracts signed. A customer signs a $12,000 annual contract in January: $12,000 in January bookings. A booking is a commitment, not cash and not earnings.
- Billings are what you invoice and collect. If the contract bills annually upfront, January billings are $12,000. If it bills monthly, January billings are $1,000 even though the booking was $12,000.
- Revenue is what you have earned by delivering the service. One month of a twelve-month contract earns one-twelfth: $1,000 of January revenue either way.
The wedge between billings and revenue is deferred revenue (also called unearned revenue), a liability on your balance sheet representing service you still owe. Collect $12,000 in January and recognize $1,000, and you carry $11,000 of deferred revenue into February. That liability is not a problem — it is the proof your books are honest. It unwinds by $1,000 every month until the contract ends.
Put simply: bookings tell you how sales is doing, billings tell you how cash is doing, and revenue tells you how the business actually performed. Reconciliation breaks the moment you let one of them stand in for another.
Build the Deferred Revenue Schedule That Drives Monthly Recognition
The deferred revenue schedule is the engine of the whole process. It is a simple per-contract table — customer, contract start, term length, total contract value, monthly recognition amount, revenue recognized to date, remaining deferred balance — and it is the only document that should ever trigger a revenue journal entry.
For a $12,000 annual plan starting January 1, the entries look like this:
On collection (January):
Dr Stripe clearing $12,000
Cr Deferred revenue $12,000
Each month, January–December:
Dr Deferred revenue $1,000
Cr Subscription revenue $1,000Note what is missing: the payout appears nowhere in the revenue entries. Cash collection credits deferred revenue, a liability. Revenue is born later, one month at a time, from the schedule.
Two discipline points make or break the schedule. First, every new annual contract, renewal, and expansion must land on it the month it starts — a contract missing from the schedule is revenue that will never be recognized. Second, reconcile the schedule to the general ledger every month: beginning deferred balance, plus new billings, minus recognized revenue, must equal the ending deferred balance. If it doesn't, something bypassed the schedule — usually a refund, a mid-cycle change, or a payout someone booked straight to revenue.
Reconcile the Payout Itself With a Clearing Account
While the schedule handles revenue timing, you still have to account for the money moving through Stripe. The clean method is a Stripe clearing account — an asset account that represents "cash sitting inside Stripe."
Every Stripe event posts to the clearing account at gross:
Customer charged $1,000:
Dr Stripe clearing $1,000
Cr Deferred revenue $1,000
Stripe fee of $29.30 on that charge:
Dr Processing fees $29.30
Cr Stripe clearing $29.30
Payout of $970.70 lands in your bank:
Dr Bank checking $970.70
Cr Stripe clearing $970.70Refunds and dispute withdrawals post the same way, in reverse. When the payout sweep clears, the clearing account nets to zero for that payout's items — which is exactly what makes it a reconciliation tool rather than just a bookkeeping convention. A nonzero leftover means a fee, refund, or adjustment went unrecorded.
To tie each payout to its contents, use Stripe's payout reconciliation report, which itemizes every charge, refund, fee, and adjustment inside a payout, and verify that gross minus fees minus refunds equals the bank deposit. Do this payout by payout, not month by month: payouts straddle month-ends constantly, and monthly batching is where "the bank never matches Stripe" mysteries come from. If your volume is low, a weekly rhythm with the clearing account catches small discrepancies while they are still easy to trace.
True-Ups: The Mid-Cycle Changes That Break Schedules
Annual contracts rarely sit still for twelve months, and every change needs a true-up entry against the deferred schedule:
- Upgrades and seat expansions add to the remaining deferred balance. A customer who upgrades from $12,000 to $18,000 a year with six months left adds roughly $3,000 of new deferred revenue (six months at the extra $500 per month), on top of the unrecognized remainder.
- Downgrades shrink it. Reduce the plan with six months left and you move the difference out of deferred revenue — often as a credit toward future invoices rather than a cash refund, which still needs a journal entry even though no money moves.
- Prorations are the mechanism: Stripe handles subscription changes with unused-time credits, and those credits tell you exactly how much deferred revenue to shift between the old and new plan.
- Cancellations with refunds of prepaid time reduce deferred revenue, never current-month revenue. Refunding six unused months of a $12,000 plan is a $6,000 debit to deferred revenue — booking it against this month's revenue would understate a month that did nothing wrong.
- Failed payments on annual renewals need watching in the other direction: no cash collected means no new deferred balance, so the schedule must not keep recognizing revenue for a contract that stopped being funded.
The practical rule: no subscription change in Stripe without a matching schedule update the same month. Teams that let the two drift spend every quarter-end reconstructing what happened from invoice PDFs.
The SaaS Metric That Hides It All: Dashboard MRR Is Not Revenue
Here is the trap the whole setup conceals. Your Stripe dashboard shows MRR climbing beautifully — annual plans convert to monthly equivalents, upgrades add expansion MRR instantly, and the chart slopes up and to the right. Founders quite naturally start thinking of that number as "what we earn per month."
It isn't. MRR is a normalized run-rate metric: the monthly value of active subscriptions if nothing changed. Recognized revenue is what you actually earned under accrual accounting this month. They diverge constantly — annual prepayments collected this month are barely this month's revenue, expansion MRR from a mid-month upgrade is only half a month of earnings, and none of the dashboard's figures know about your deferred schedule, your refunds, or your true-ups.
The divergence is invisible until it bites. Taxable income follows recognized revenue, not MRR, so a huge bookings quarter can produce a tax bill that surprises founders who were watching the dashboard. And acquirers and lenders diligence GAAP revenue, not MRR — every dollar of "revenue" that was really unrecognized billings gets adjusted out of the valuation conversation.
Keep both numbers, but never let one do the other's job. A useful monthly sanity check: recognized revenue for the month, plus the change in your deferred balance, should reconcile back to billings. If MRR says you grew and that equation says otherwise, trust the equation.
Your Monthly Close Checklist for Stripe SaaS
Run this every month and the pieces stay tied together:
- Tie payouts to the bank. Export the payout reconciliation data, confirm gross minus fees minus refunds equals each deposit, and post the sweep through the clearing account.
- Zero the clearing account per payout. Any leftover balance is an unrecorded fee, refund, dispute, or adjustment — find it before month-end.
- Roll the deferred schedule. Add new contracts and renewals, post the month's recognition entries, and confirm beginning balance plus billings minus recognized revenue equals the ending balance.
- True up mid-cycle changes. Match every upgrade, downgrade, proration, cancellation, and refund in Stripe to a schedule adjustment.
- Reconcile MRR to recognized revenue. Explain the gap between dashboard run-rate and earned revenue; investigate anything you can't explain in one sentence.
- Review fees and refunds separately. Gross revenue, processing fees, and refunds each tell their own story — netting them hides all three.
Done consistently, this turns month-end from a forensic excavation into a routine: the payout side proves your cash is complete, and the schedule side proves your revenue is earned.
Keep Your SaaS Revenue Investor-Ready
As you scale annual billing, keeping recognized revenue, deferred balances, and Stripe cash tied together every month is what makes your numbers credible to accountants, tax authorities, and future acquirers. Beancount.io provides plain-text accounting that gives you complete transparency and control over your financial data — no black boxes, no vendor lock-in. Get started for free and see why developers and finance professionals are switching to plain-text accounting.





