How Stripe Subscription Events Map to QuickBooks

A technical guide to mapping Stripe Billing lifecycle events to QuickBooks Online journal entries. Covers new subscriptions, plan changes with proration,...

Acodei Content Team · 4/28/2026 · 12 min read

Stripe Billing is powerful, but its transaction patterns break most generic QuickBooks sync tools. A new subscription, a mid-cycle upgrade, a failed payment that recovers three days later, and a cancellation with a partial-period refund are not the same event, yet they often land in QuickBooks as a single "Stripe deposit" line. That is how revenue gets miscategorized, deferred revenue goes untracked, and month-end reconciliation turns into a spreadsheet exercise.

This guide maps each Stripe subscription lifecycle event to the journal entries QuickBooks Online needs to keep books accurate. It covers new subscriptions, plan upgrades with proration, plan downgrades with proration credits, trial conversions, dunning retries, cancellations, refunds, pauses, metered billing, and annual-to-monthly plan changes. Every mapping below is grounded in actual Stripe Billing behavior as documented in the Stripe Billing docs.

Why Stripe subscription billing breaks generic QuickBooks sync

Most Stripe-to-QuickBooks tools were built around one-time payments. A charge comes in, a fee is deducted, a payout hits the bank, and the tool posts an income line plus a processing-fee expense. That model works for a Stripe Checkout store. It does not work for Stripe Billing.

Stripe Billing emits events in a specific order: customer.subscription.created, invoice.created, invoice.finalized, invoice.payment_succeeded, charge.succeeded, and eventually a payout. An upgrade adds invoice.upcoming with proration line items. A dunning retry adds invoice.payment_failed followed by up to four retry attempts per Stripe's default smart retry schedule. A cancellation at period end adds customer.subscription.updated with cancel_at_period_end: true but no immediate refund. Each of these patterns needs a different QuickBooks treatment.

Generic AI-categorization tools, including Synder, PayTraQer, and Finlens, inspect transaction descriptions and guess. A proration credit that reads "Unused time on Pro plan" often gets booked as income instead of a contra-revenue entry. A dunning retry that succeeds on attempt three shows up as three separate events in QuickBooks if the tool does not dedupe against the original invoice. Acodei maps to the invoice object itself, not the charge description, because the invoice is the source of truth in Stripe Billing.

How do Stripe subscription charges show up in QuickBooks?

A Stripe subscription charge in QuickBooks Online should produce a sales receipt or invoice for the gross amount (not the net), a processing-fee expense for the Stripe fee, and a deposit entry that matches the net payout to your bank. If you use accrual accounting, a recurring subscription should also post to a deferred revenue account and recognize revenue across the billing period. A properly configured sync creates all three entries and links them through a Stripe clearing account so the payout reconciles to the penny.

New subscription creation: invoice plus first charge

When a customer signs up for a $100 per month plan, Stripe fires this sequence:

  1. customer.subscription.created
  2. invoice.created for $100
  3. invoice.finalized
  4. invoice.payment_succeeded
  5. charge.succeeded for $100 with a fee of about $3.20 (2.9% + $0.30)
  6. payout.paid a day or two later for $96.80

The QuickBooks mapping for cash-basis bookkeeping looks like this:

  • Sales receipt: $100 to Subscription Revenue
  • Expense: $3.20 to Stripe Processing Fees
  • Bank deposit: $96.80 to the operating account, offset through a Stripe clearing account

For accrual bookkeeping on a monthly plan with the full period consumed in the same calendar month, the entry is effectively the same. For an annual plan billed upfront, the $1,200 charge should credit Deferred Revenue, not Subscription Revenue, and recognize $100 per month through a recurring journal entry. This is where most generic tools fail. They book the full $1,200 as income on day one, overstating revenue and understating deferred revenue by $1,100.

Plan upgrade with proration (worked example)

Proration is the single most misunderstood Stripe Billing event. Here is a concrete example.

A customer is on a $100 per month plan. On day 15 of a 30-day billing cycle, they upgrade to a $200 per month plan. Stripe calculates:

  • Unused time on the old plan: 15 days of $100 = $50 credit
  • Prorated cost of the new plan: 15 days of $200 = $100 charge
  • Net proration charge: $50, billed immediately (if proration_behavior is set to create_prorations, which is the default)

At the next billing date, Stripe invoices the full $200 for the following month.

In QuickBooks the entries are:

  1. Immediate invoice at upgrade: $100 line item for "Remaining time on Pro plan" plus a negative $50 line item for "Unused time on Basic plan," netting to a $50 charge. Book the full $100 to Subscription Revenue and the negative $50 as a contra-revenue entry (or a negative sales-receipt line that hits Subscription Revenue), so the net effect on revenue is $50.
  2. Stripe fee on the $50 charge: about $1.75, booked to Stripe Processing Fees
  3. Next month's invoice: $200 to Subscription Revenue

The mistake generic tools make is booking the $50 net charge as $50 of revenue. That is wrong. The gross revenue recognized in that billing cycle is $150 ($50 from the original Basic plan already earned, plus $100 for the second half of the month at the Pro rate). The $50 net on the bank deposit is the cash movement, not the revenue movement. Getting this right matters for MRR reporting, SaaS metrics, and year-end audits.

Plan downgrade with proration credit

Downgrades work in the other direction and are even more error-prone.

Same customer, now on the $200 per month plan. On day 10 of a 30-day cycle, they downgrade to the $100 per month plan. Stripe calculates:

  • Unused time on the $200 plan: 20 days of $200 = roughly $133 credit
  • Prorated cost of the $100 plan for 20 days: roughly $67 charge
  • Net: a $66 credit applied to the customer's next invoice

No charge hits the bank. No payout reflects this event. The credit sits on the customer's Stripe balance and reduces their next invoice. If the next invoice is $100, Stripe charges $34 and closes the credit. If the customer cancels before the next cycle, the credit is forfeited unless you explicitly refund it.

QuickBooks treatment:

  1. At downgrade: post a contra-revenue entry for the $66 credit against Subscription Revenue. Do not wait for the next invoice.
  2. At next billing: the invoice shows $100 with a $66 credit line, netting to $34 cash. Book $100 to Subscription Revenue and $66 to a customer credit liability account, netting the cash to $34.

Most generic tools simply do not handle the credit. They wait for a cash event that never fully arrives, and the next month's invoice looks like a $34 sale instead of a $100 sale with a credit applied. Your MRR report will be wrong by $66.

Trial-to-paid conversion

Stripe trials emit a customer.subscription.trial_will_end event three days before the trial ends and a customer.subscription.updated event when the trial converts. The first actual invoice is generated at the end of the trial period.

Practical implication for QuickBooks: do not book anything during the trial. No invoice, no deferred revenue, no sales receipt. The trial is a promise, not a transaction. When the trial converts, treat it as a new subscription creation (see section above). When a trial does not convert, no entry is needed because no entry was made.

A common mistake is booking a $0 sales receipt at trial start for reporting purposes. This pollutes QuickBooks with zero-value transactions that slow down reports and confuse reconciliation. Track trial starts in Stripe or your product analytics, not in your general ledger.

Failed payment and dunning retries

Stripe's smart retries attempt a failed card up to four times over about three weeks by default. Each attempt fires invoice.payment_failed or invoice.payment_succeeded. The right QuickBooks treatment depends on which retry succeeds.

Example: a $50 charge fails on the billing date, retries on days 3, 5, and 7, and succeeds on day 7.

  • Day 0: invoice.payment_failed. Do not book anything in QuickBooks yet. The invoice exists in Stripe, but no cash has moved.
  • Days 3, 5: additional failed attempts. Still no QuickBooks entry.
  • Day 7: invoice.payment_succeeded. Now book the sales receipt for $50, the fee, and the deposit.

If the retries exhaust and the invoice is marked uncollectible after about 21 days, write off the receivable (for accrual accounting) or simply do not book any revenue (for cash accounting). If you have already recognized deferred revenue for this customer, reverse it.

Generic tools frequently book the failed attempt as a negative transaction, then book the succeeded attempt as a positive transaction, doubling up the activity. Acodei suppresses failure events and books only on success, matching how bookkeepers actually want to see the ledger.

Cancellation: end-of-period vs immediate, plus partial-period refunds

Stripe supports two cancellation modes:

  1. Cancel at period end (cancel_at_period_end: true): service continues until the end of the paid period. No refund. No new invoices after the final one.
  2. Immediate cancellation (cancel_at: now): subscription stops immediately. Optionally, you can issue a prorated refund for the unused portion.

For end-of-period cancellation, no accounting action is needed at the cancellation event itself. The final paid invoice has already been booked. When the period ends, simply stop recognizing subscription revenue for that customer going forward.

For immediate cancellation with a prorated refund, the mapping is:

  • A customer paid $100 on day 1 and cancels on day 15 with a $50 refund.
  • Stripe fires charge.refunded for $50.
  • QuickBooks entry: a refund receipt or credit memo for $50 against Subscription Revenue, plus a bank withdrawal of $50 from the operating account through the Stripe clearing account. Note that Stripe does not refund the original processing fee on most accounts (fees are non-refundable as of 2019), so your Stripe Processing Fees expense stays at $2.90. For more on how fees flow through the clearing account, see How to Reconcile Stripe Fees in QuickBooks.

Subscription pause, metered billing, and annual-to-monthly changes

Three more patterns that generic tools consistently misclassify.

Subscription pause. Stripe lets you pause a subscription with pause_collection. No invoices are generated during the pause. No QuickBooks entries are needed. When the pause ends, billing resumes and normal entries resume.

Metered and usage-based billing. For usage-priced plans, the invoice amount is unknown until billing time. Stripe calculates usage and finalizes the invoice at period close. QuickBooks entries should be driven by the finalized invoice amount, not any preliminary estimate. If you need accrued revenue during the period for accrual-basis reporting, post a month-end accrual journal entry and reverse it when the invoice finalizes.

Annual-to-monthly plan change. A customer on a $1,200 annual plan switches to $100 per month on day 200 of their annual term. Stripe credits the unused portion (165 days of $1,200 = roughly $542) and starts monthly billing on the change date. In QuickBooks, you need to reverse $542 of deferred revenue (the remaining unearned portion) and treat the new monthly billing as a new subscription. If your generic sync tool does not handle deferred revenue, this is where annual-plan downgrades create real damage: revenue recognized in prior months cannot be unwound cleanly.

For more on pricing models that drive these events, see Subscription Management for SaaS: Leveraging Stripe Billing and Acodei's QuickBooks Integration and Stripe Fee Structure Explained.

How Acodei handles these patterns automatically

Acodei is the only Stripe-sanctioned embedded QuickBooks integration, listed on Stripe's accounting software integrations page. That distinction matters because the integration is built against Stripe Billing's actual event model, not against transaction-description heuristics.

Here is what Acodei does with the patterns above, out of the box:

  • New subscriptions: books gross revenue to Subscription Revenue, Stripe fees to Processing Fees, and nets the payout through a Stripe clearing account.
  • Proration upgrades and downgrades: books the correct contra-revenue and charge lines separately, preserving gross MRR accuracy.
  • Trial conversions: ignores trial starts and books only on first paid invoice.
  • Dunning retries: suppresses failure events and posts only on the succeeding retry, avoiding duplicate entries.
  • Cancellations and refunds: end-of-period cancellations trigger no entry, immediate cancellations with refunds post a refund receipt without touching the non-refundable fee.
  • Subscription pauses: no entries during pause, automatic resume on reactivation.
  • Metered billing: entries driven by finalized invoice amounts, with optional month-end accruals.
  • Annual-to-monthly changes: handles deferred revenue reversal and switch to monthly recognition.

Acodei supports unlimited Stripe accounts and unlimited users on every plan. Pricing starts at $12 per month on the Scale plan (or $120 per year) with a 100-transaction entry tier. Every paid plan includes Email and Zoom support with a 24-hour response target. Acodei has been on the Stripe Partner Ecosystem and the QuickBooks App Store since 2020.

Ready to stop hand-correcting subscription entries? See pricing and start a trial.

FAQ

Does Stripe send the processing fee back on a refund? No. As of 2019 Stripe does not return the original processing fee when you issue a refund on most accounts. Your Stripe Processing Fees expense stays booked even though the sale has been reversed. Plan your QuickBooks categories to account for this asymmetry.

How should I book a Stripe proration credit in QuickBooks? Book the credit as a contra-revenue entry (a negative line item against Subscription Revenue) at the time Stripe generates it, not when the credit is eventually applied to a future invoice. Waiting distorts your MRR and deferred revenue balances.

Do I need to book anything during a Stripe free trial? No. A trial is not a transaction. Track trial starts in Stripe or your analytics tool. QuickBooks entries should begin only when the trial converts to paid and Stripe generates the first real invoice.

How do I handle Stripe dunning retries in QuickBooks? Do not book the initial failed payment. Wait for a successful retry or for the invoice to be marked uncollectible. Booking each failed attempt creates duplicate noise that has to be reversed later.

What is the correct QuickBooks entry for an annual subscription paid upfront? Credit Deferred Revenue for the full amount on the payment date. Recognize subscription revenue monthly (or per whatever period matches your accounting policy) via a recurring journal entry. Do not book the full annual amount as revenue on day one unless you are on cash-basis accounting.

How does Acodei differ from Synder or PayTraQer for Stripe Billing? Acodei maps to Stripe's invoice and subscription objects directly, which captures proration, dunning, and deferred-revenue patterns accurately. Synder and PayTraQer rely more on transaction-description categorization, which works for one-time payments but tends to misclassify subscription-specific events. Acodei is also the only Stripe-sanctioned embedded QuickBooks integration, listed on Stripe's accounting integrations page.

Can I sync multiple Stripe accounts to one QuickBooks file with Acodei? Yes. Every Acodei plan supports unlimited Stripe accounts and unlimited users. You can route separate Stripe accounts to separate QuickBooks entities or consolidate them into one file with product mapping rules.

Share

Automate your Stripe to QuickBooks sync

Save hours every month. Acodei automatically syncs your Stripe transactions, invoices, and payouts to QuickBooks Online.

Get more operational finance guides like this one

We will only send high-value product and finance content.