Revenue Recognition Fresh
Automated accrual accounting. Stripe Revenue Recognition calculates recognized and deferred revenue across all your Stripe transactions — subscriptions, invoices, one-time payments, refunds, and disputes.
Who needs Revenue Recognition
| Business type | Why |
|---|---|
| Public companies or businesses with $25M+ annual revenue | Legally required to comply with ASC 606 / GAAP / IFRS |
| Startups raising investment or seeking loans | Investors and lenders require accrual accounting |
| Subscription and service businesses | Revenue is earned over time, not at the point of payment |
| Businesses with upfront prepayment | Customer pays before service is delivered |
How it works
Revenue Recognition is built on a double-entry accounting ledger. Every billing event in Stripe (invoice finalized, payment received, refund issued, dispute opened) generates journal entries that debit and credit the appropriate accounts.
For subscriptions and invoices:
- When an invoice finalizes, Revenue Recognition defers the total recognizable amount
- It amortizes the deferred amount evenly over the invoice line item period
- If no period is set on a line item, the full amount is recognized immediately at finalization
For one-time payments:
- Revenue is recognized immediately when the payment occurs
- Import data to add a service period or split recognition across a schedule
Chart of accounts
Income statement accounts
| Account | Type | Description |
|---|---|---|
| Revenue | Revenue (credit) | Recognizable portion of finalized invoices, prorated items, usage billing |
| Refunds | Contra revenue (debit) | Portion of refunded amount previously recognized |
| Disputes | Contra revenue (debit) | Portion of disputed amount previously recognized |
| Credit notes | Contra revenue (debit) | Portion of credit note amount previously recognized |
| Bad debt | Contra revenue (debit) | Previously recognized revenue from invoices marked uncollectible |
| Voids | Contra revenue (debit) | Previously recognized revenue from voided invoices |
| Discounts | Contra revenue (debit) | Recognized revenue from invoices with discounts applied |
| Fees | Expenses (debit) | Stripe fees |
| Recoverables | Gains (credit) | Recovered funds not attributable to revenue (e.g., won disputes) |
| Fx loss | Losses (debit) | Loss due to foreign currency exchange rates |
Balance sheet accounts
| Account | Type | Description |
|---|---|---|
| Accounts receivable | Assets (debit) | Amount billed to customers; increases on invoice finalize, decreases on payment |
| Cash | Assets (debit) | Net cash received (excludes Stripe fees and payouts) |
| Deferred revenue | Liabilities (credit) | Services invoiced but not yet recognized |
| Long-term deferred revenue | Liabilities (credit) | Deferred revenue for service periods beyond 12 accounting periods |
| Unbilled accounts receivable | Assets (debit) | Accrued revenue from prorations not yet invoiced |
| Tax liability | Liabilities (credit) | Tax component of issued invoices |
| Customer balance | Liabilities (credit) | Credits accrued by customers |
| Pending cash | Assets (debit) | Unconfirmed payments (e.g., ACH debit — moves to Cash when confirmed) |
Journal entry examples
One-time payment ($10)
| Event | Debit | Credit | Amount |
|---|---|---|---|
| Invoice finalize | AccountsReceivable | DeferredRevenue | $10.00 |
| Payment received | Cash | AccountsReceivable | $10.00 |
| Revenue recognized | DeferredRevenue | Revenue | $10.00 |
Net result: Cash +$10, Revenue +$10.
Annual subscription ($120/year)
When invoice finalizes, $120 deferred. Each month $10 is recognized.
| Month | DeferredRevenue | Revenue |
|---|---|---|
| Month 1 | -$10 | +$10 |
| Month 2 | -$10 | +$10 |
| ... | ... | ... |
| Month 12 | -$10 | +$10 |
Refund on annual subscription ($120, issued after 2 months)
- $20 recognized so far → becomes contra revenue (Refunds)
- $100 remaining deferred → contra adjustment to deferred revenue balance
Data modeling
Subscriptions and invoices
Revenue Recognition treats each invoice line item as its own performance obligation. The period of each line item determines the amortization schedule.
- Subscription items automatically populate line item periods with the subscription billing period
- Invoice items with no period: recognized immediately at finalization
- Subscription changes (upgrades, downgrades): prorations generate unbilled accounts receivable
External transactions
Track revenue collected outside Stripe by marking invoices as paid out-of-band:
bash
curl https://api.stripe.com/v1/invoices/{{INVOICE_ID}}/pay \
-u "sk_test_YOUR_KEY:" \
-d paid_out_of_band=trueOut-of-band payments credit the External Asset account (not Cash).
Multi-currency
- Journal entries use your account's settlement currencies
- Presentment currencies not supported as settlement currencies are converted at the exchange rate of the money movement
- Exchange rate differences between invoice issuance and payment are recorded to Fx Loss
Reports
Access in Dashboard → Revenue Recognition → Reports:
| Report | Description |
|---|---|
| Monthly summary | Recognized and deferred revenue totals by month |
| Waterfall chart | How deferred revenue from each cohort amortizes over time |
| Debits and credits | Exportable journal entries by event type |
| Audit numbers | Drill down to individual transactions behind any revenue number |
Export debits and credits to CSV for import into your accounting system (QuickBooks, Xero, NetSuite, etc.).
Customization
Recognition rules
Create rules to override default recognition behavior for specific transactions:
- Override when revenue is recognized based on amount, description, or customer email
- Split a payment across multiple revenue schedules
- Exclude certain transactions from revenue recognition
Configure in Dashboard → Revenue Recognition → Rules.
Data import
Import external data to attach service periods to one-time payments or add off-Stripe transactions to your revenue reports:
bash
curl https://api.stripe.com/v1/revenue_recognition/data_imports \
-u "sk_test_YOUR_KEY:" \
-d file={{FILE_ID}}Supported import types: service period assignment, exclusions, external revenue.
Accounting period controls
Set your accounting period close dates to lock historical periods and prevent backdating. Configure in Dashboard → Revenue Recognition → Settings.