Skip to content
Sign in
An image of the Stripe logo
/
Create account
Sign in
Home
Payments
Finance automation
Banking as a service
Developer tools
No-code
All products
Home
Payments
Finance automation
Home
Payments
Finance automation
Banking as a service
Developer tools
Overview
Billing
Tax
Reporting
    Overview
    Basic financial reports
    Advanced revenue reporting
    Revenue recognition
      Get started
      How revenue recognition works
        Subscriptions and Invoicing
        One-time payments
        Refunds and disputes
      Multi-currency
      Connect platforms
      Revenue contracts
      Frequently asked questions
      Reports and features
      Overrides
      Audit your numbers
      Examples
      Revenue recognition rules
      Accounting period control
      Revenue controls
      Map to your chart of accounts
      Import data to Stripe
      Export data from Stripe
    Reconciliation
Data
Startup incorporation
HomeFinance automationReportingRevenue recognition

Revenue Recognition methodology

Learn how Revenue Recognition works out of the box within Stripe.

Revenue Recognition is integrated with other Stripe objects to provide intelligent default settings for how revenue should be recognized.

Revenue Recognition automatically calculates all transactions that happen within Stripe down to the millisecond, including subscriptions, invoices, one-time payments, refunds, disputes, and so on.

Note

Revenue recognition requirements vary based on a number of factors and the parameters listed above may or may not fit your business. You need to ensure that you understand and comply with the requirements applicable to your business, and that you model your business accordingly.

Chart of accounts

Revenue recognition is built on top of a double-entry accounting ledger that tracks debits and credits resulting from your business activity.

To get the most out of Revenue Recognition, it helps to understand the default chart of accounts and the debits and credits that impact those accounts.

Account Debit/Credit type Description
RevenueRevenue (credit)Recognizable portion of finalized invoices, prorated invoice items, and metered billing that count towards revenue during the month. For example, if an invoice line item is for 90 USD with 10 USD in taxes, the total invoice is 100 USD, but the recognizable portion is only 90 USD.
RefundsContra Revenue (debit)Portion of the refunded amount previously recognized. For example, if you issue a 120 USD refund on an annual subscription during the second month, 20 USD for the first 2 months is contra revenue. The remaining 100 USD is adjusted and reflected in your deferred revenue balance in the balance sheet.
DisputesContra Revenue (debit)Portion of the disputed amount previously recognized. For example, if there’s a 120 USD dispute on an annual subscription during the second month, 20 USD for the first 2 months is contra revenue. The remaining 100 USD is adjusted and reflected in your deferred revenue balance in the balance sheet.
CreditNotesContra Revenue (debit)Portion of the credit note amount previously recognized. For example, if there’s a 120 USD credit note on an annual subscription during the second month, 20 USD for the first 2 months is contra revenue. The remaining 100 USD is adjusted and reflected in your deferred revenue balance in the balance sheet.
BadDebtContra Revenue (debit)Previously recognized revenue from invoices that have been marked as uncollectible.
VoidsContra Revenue (debit)Previously recognized revenue from invoices that have been voided.
UnbilledVoidsContra Revenue (debit)Previously recognized revenue from prorated invoice items that have been deleted. These items are sometimes deleted when they generate unbilled accounts receivable and revenue.
TransferContra Revenue (debit)Previously recognized revenue from separate transfers.
DiscountsContra Revenue (debit)Recognized revenue from invoices that received discounts. Revenue Recognition discount as contra revenue support is currently in private beta.
CustomerBalanceAdjustmentsExpense (debit)Expenses incurred due to manual adjustments to a customer credit balance or exclusion associated with post-paid credit notes on customer balance.
ExternalCustomerBalanceAdjustmentsExpense (debit)Expenses incurred due to exclusion associated with post-paid credit notes on external customer balance.
UnderpaymentsExpense (debit)Expenses incurred due to transfers that underpay an invoice, as used by the customer credit balance payment method or Sources.
FeesExpenses (debit)Expenses incurred due to Stripe fees. Revenue Recognition Stripe fees support is currently in private beta.
RecoverablesGains (credit)Recovered funds that aren’t attributable to revenue. For example, if you have a 120 USD dispute on an annual subscription during the second month, 20 USD for the first 2 months is contra revenue and the remaining 100 USD is adjusted from the deferred revenue balance. If you win the dispute and 120 USD is returned to you, 20 USD is reflected as revenue and the remaining 100 USD is reflected as recoverables.
FxLossLoss (debit)Total loss due to foreign currency exchange rates.
ConnectTransferLossLoss (debit)Total loss due to destination charge refund, and the transfer reversal will reverse the ConnectTransferLoss account.

Data modeling for Revenue Recognition

You can better understand Revenue Recognition by understanding the data modeling—see the following descriptions of how Revenue Recognition handles common Stripe resources.

Subscriptions and Invoicing

Subscriptions and Invoices are higher level resources that contain detailed information about each transaction.

Subscriptions create invoices on each cycle, with each subscription item corresponding to an invoice line item. The period of each line item is automatically populated with the period of the subscription item.

Revenue recognition treats each invoice line item as its own performance obligation. When the invoice finalizes, the total recognizable amount is deferred and subsequently amortized evenly over the period of each invoice line item.

If a period isn’t set on an invoice line item, the amount on that invoice line item is recognized entirely when the invoice is finalized. Use the Data Import feature to configure your invoice data, or set rules to customize when and how invoice line items are recognized.

For more details and examples regarding how Revenue Recognition handles subscriptions and invoices with specific scenarios involving upgrades, downgrades, discounts, taxes, and so on, review the Subscriptions and Invoicing page.

One-time payments

One-time payments created in the Dashboard or through the Charges and PaymentIntents APIs don’t contain as much information as invoices.

Because no service period or fulfillment information exists for them, by default, one-time payments are recognized immediately when the payment occurs.

Import data to add a service period or split a payment into different revenue recognition schedules. This allows you to customize revenue treatment behavior and configure rules such as payment amount, description, and customer email.

For more details and examples on how Revenue Recognition handles one-time payments, review the One-time payments page.

Refunds and disputes

Revenue Recognition handles refunds and disputes by generating contra revenue to offset already recognized revenue.

For transactions with both already-recognized and deferred revenue, the recognized portion is added to either the refunds or disputes contra revenue account, which cancels out the deferred revenue.

For more details and examples on how Revenue Recognition handles refunds and disputes, review the Refunds and Disputes page.

External transactions

You can track revenue collected outside of Stripe using invoices. Configure the invoice as you would any other, and then mark the invoice as paid either directly in the Dashboard, or through the paid_out_of_band option in the API.

Invoices marked as paid outside of Stripe contribute not to the cash account, but rather to the external asset account.

Caution

If you’d like to consolidate your financial data from outside Stripe onto Revenue Recognition, review the Data import page.

Multi-currency

If your business handles transactions in multiple currencies, accurately recognizing revenue can be complicated.

Revenue Recognition processes transactions and generates journal entries based on your account’s settlement currencies. Transactions with presentment currencies that aren’t supported as settlement currencies are automatically converted to your account’s default settlement currency.

For payments and paid invoices, we use the exchange rate for the actual money movement (that is, reflected on the balance transaction). If you incur a time delay between issuing a bill (for example, an invoice) and it getting paid, the difference in amounts because of changing exchange rates between the two times is added to the FxLoss account.

For more details and examples on how Revenue Recognition handles multiple currencies, review the Multi-currency page.

Journal entries

Every billing activity in Stripe generates a set of journal entries. A journal entry is a record of a transaction. Each journal entry consists of a debit and a credit account. For example, an entry which finalizes an invoice would debit AccountsReceivable and credit DeferredRevenue. Paying an invoice would debit Cash and credit AccountsReceivable.

These entries may occur in asset, liability, equity, expense, or revenue accounts. You can learn more about the definitions of each account that will appear in a journal entry under our Chart of accounts section.

The table below shows the applicable billing activities for common journal entries. You can export journal entries to CSV using the debits and credits report, which you can find in the Reports tab in the Dashboard. In addition, there are options to download debits and credits reports by the event type, which provide a brief description of the recorded event, making it easier to understand the nature of each journal entry.

Caution

The following table isn’t the complete set of entries. We’ll be periodically updating the entries. If there’s a specific entry that you require assistance with, contact the Revenue Recognition team.

Debit Credit Definition
AccountsReceivableDeferredRevenueInvoice being finalized
UnbilledAccountsReceivableUnbilled invoice item being invoiced
PassthroughFeesFinalize an invoice with passthrough fees
TaxLiabilityFinalize an invoice with tax
BadDebtAccountsReceivableMark an invoice as uncollectible
PendingCashMark an invoice with a pending ACH as uncollectible
RecoverablesMark an invoice which is partially paid with customer balance as uncollectible
CashAccountsReceivableInvoice is paid
CustomerBalancePaying for a negative customer balance
ExclusionCash is excluded
PendingCashACH paying invoice is confirmed
RecoverablesWinning a dispute for amounts that were previously adjusted from deferred revenue balance
ConnectTransferLossCashLoss from a transfer
CreditNotesAccountsReceivablePrepaid credit note is issued on an unpaid invoice
CustomerBalancePost paid credit note credits customer balance
ExternalCustomerBalancePost paid credit note credits external customer balance
CustomerBalanceCustomerBalanceAdjustmentsReduce the amount owned by the customer
CustomerBalanceAdjustmentsCustomerBalanceIncrease the amount owned by the customer
DeferredRevenueCashCaused by Refunds and Disputes
RevenueRevenue is recognized
ExternalAssetAccountsReceivableMark an invoice as paid outside of Stripe
RefundsCashRefund
TaxLiabilityCustomerBalanceCredit note on an invoice with tax, and it credits customer balance
ExternalCustomerBalanceCredit note on an invoice with tax, and it credits external customer balance
UnbilledAccountsReceivableRevenueRevenue recognized on unbilled invoice item
UnbilledVoidsUnbilledAccountsReceivableUnbilled invoice item is deleted
VoidsAccountsReceivableVoid an invoice
BadDebtVoid an uncollectible invoice
CustomerBalanceVoid an invoice partially paid with customer balance

The activities above are all based on positive amounts. It is important to note that these billing activities can be reversed. These reverse activities occur when activities are triggered on negative invoice line item amounts.

Negative Line Item

A negative line item occurs when the value of the line item becomes higher than the amount it is paid for. This occurs typically during a subscription downgrade or upgrade when the product tier changes.

Here is an example of journal entries which contains a negative line item caused by a downgrade:

  • On April 1, the invoice is generated for a monthly subscription worth $90 USD and the customer pays for it.
  • On April 21, the customer requests a downgrade of their service to a $30 USD subscription. This results in 2 unbilled line items for the remaining time of the subscription.
    • il_1 is for the remaining time on new plan worth $10
    • il_2 is for the remaining time of old plan worth $-30
  • On May 1, the invoice is generated containing the line items generated by the downgrade as well for the new line item, il_3, representing the month of May. The customer pays for the invoice on the same day.
  • On May 4, the customer requests a full refund on the invoice for May, resulting in full refunds on the line item created by the downgrade as well as the new line item for May. We process the refund.
Date Debit Credit Amount Line Item
2022-04-21UnbilledAccountsReceivableRevenue$10il_1
RevenueUnbilledAccountsReceivable$30il_2
2022-05-01AccountsReceivableDeferredRevenue$30il_3
CashAccountsReceivable$30il_3
DeferredRevenueRevenue$30il_3
AccountsReceivableUnbilledAccountsReceivable$10il_1
CashAccountsReceivable$10il_1
UnbilledAccountsReceivableAccountsReceivable$30il_2
AccountsReceivableCash$30il_2
2022-05-04RefundsCash$10il_1
CashRefunds$30il_2
RevenueCash$30il_3
Was this page helpful?
Need help? Contact Support.
Watch our developer tutorials.
Check out our product changelog.
Questions? Contact Sales.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
On this page
Chart of accounts
Data modeling for Revenue Recognition
Journal entries
Negative Line Item
Products Used
Revenue Recognition
Stripe Shell
Test mode
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Log in to your Stripe account and press Control + Backtick (`) on your keyboard to start managing your Stripe resources in test mode. - View supported Stripe commands: - Find webhook events: - Listen for webhook events: - Call Stripe APIs: stripe [api resource] [operation] (e.g., )
The Stripe Shell is best experienced on desktop.
$