Revenue Recognition methodology
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.
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 |
---|---|---|
AccountsReceivable | DeferredRevenue | Invoice being finalized |
UnbilledAccountsReceivable | Unbilled invoice item being invoiced | |
PassthroughFees | Finalize an invoice with passthrough fees | |
TaxLiability | Finalize an invoice with tax | |
BadDebt | AccountsReceivable | Mark an invoice as uncollectible |
PendingCash | Mark an invoice with a pending ACH as uncollectible | |
Recoverables | Mark an invoice which is partially paid with customer balance as uncollectible | |
Cash | AccountsReceivable | Invoice is paid |
CustomerBalance | Paying for a negative customer balance | |
Exclusion | Cash is excluded | |
PendingCash | ACH paying invoice is confirmed | |
Recoverables | Winning a dispute for amounts that were previously adjusted from deferred revenue balance | |
ConnectTransferLoss | Cash | Loss from a transfer |
CreditNotes | AccountsReceivable | Prepaid credit note is issued on an unpaid invoice |
CustomerBalance | Post paid credit note credits customer balance | |
ExternalCustomerBalance | Post paid credit note credits external customer balance | |
CustomerBalance | CustomerBalanceAdjustments | Reduce the amount owned by the customer |
CustomerBalanceAdjustments | CustomerBalance | Increase the amount owned by the customer |
DeferredRevenue | Cash | Caused by Refunds and Disputes |
Revenue | Revenue is recognized | |
ExternalAsset | AccountsReceivable | Mark an invoice as paid outside of Stripe |
Refunds | Cash | Refund |
TaxLiability | CustomerBalance | Credit note on an invoice with tax, and it credits customer balance |
ExternalCustomerBalance | Credit note on an invoice with tax, and it credits external customer balance | |
UnbilledAccountsReceivable | Revenue | Revenue recognized on unbilled invoice item |
UnbilledVoids | UnbilledAccountsReceivable | Unbilled invoice item is deleted |
Voids | AccountsReceivable | Void an invoice |
BadDebt | Void an uncollectible invoice | |
CustomerBalance | Void 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-21 | UnbilledAccountsReceivable | Revenue | $10 | il_1 |
Revenue | UnbilledAccountsReceivable | $30 | il_2 | |
2022-05-01 | AccountsReceivable | DeferredRevenue | $30 | il_3 |
Cash | AccountsReceivable | $30 | il_3 | |
DeferredRevenue | Revenue | $30 | il_3 | |
AccountsReceivable | UnbilledAccountsReceivable | $10 | il_1 | |
Cash | AccountsReceivable | $10 | il_1 | |
UnbilledAccountsReceivable | AccountsReceivable | $30 | il_2 | |
AccountsReceivable | Cash | $30 | il_2 | |
2022-05-04 | Refunds | Cash | $10 | il_1 |
Cash | Refunds | $30 | il_2 | |
Revenue | Cash | $30 | il_3 |