Growthy
AI BookkeepingFor BookkeepersFor AccountantsBlogTopicsPricing
Sign InJoin the Alpha
Growthy

© 2026 Growthy. All rights reserved.

  1. Blog
  2. Stripe Bookkeeping

Stripe Refunds and Chargebacks: Bookkeeping Treatment

Bobby Pro

Content Writer

May 11, 2026
10 min read
Stripe Bookkeeping
Stripe Refunds and Chargebacks: Bookkeeping Treatment

In this article

Most bookkeepers treat refunds and chargebacks the same way. Both reduce what the customer paid. Both show up as negative items in Stripe. But they're different events, and they need different journal entries.

Get this wrong and your gross revenue is overstated, your net revenue is understated, and your bank reconciliation has unexplained gaps. None of those are fun to find at month-end.

This article covers the correct accounting treatment for each, including the three-phase chargeback entry that most guides skip, and the timing difference that causes hours of unnecessary reconciliation work.

What is the difference between a Stripe refund and a chargeback for bookkeeping purposes?

A Stripe refund is voluntary. You initiate it, and it reverses the original charge. Book it as a debit to Sales Refunds (a contra-revenue account) and a credit to your clearing account or bank. A chargeback is involuntary. The customer's bank initiates it, and Stripe charges you a $15 dispute fee whether you win or lose. Chargebacks require a three-phase journal entry: an initial dispute reserve, then either a reversal (if you win) or a loss entry plus fee recognition (if you lose). The two events look similar on your bank statement but hit the books differently.

Key Takeaways

  • Refunds are contra-revenue, not expense. Debit Sales Refunds, not a cost account. Booking them as expenses overstates gross revenue and understates net revenue at the same time.
  • Chargebacks need three journal entries. Open a dispute reserve when the chargeback is filed. Reverse it if you win. If you lose, move the amount to contra-revenue and recognize the $15 fee as an expense.
  • The $15 Stripe dispute fee hits regardless of outcome. Win or lose, book it to Chargeback Fee Expense when the dispute closes.
  • Timing differences aren't errors. Stripe deducts refunds and chargebacks from your next payout, not the current one. Your Stripe balance and bank account will disagree until the payout settles. A clearing account absorbs this gap.
  • Refunds that cross payout periods resolve on their own. A refund issued on Day 12 of a two-week payout cycle won't appear in the first payout. It shows up in the next one. Your clearing account handles it automatically.
  • High-refund businesses should break out sub-accounts. If your refund rate is above 5%, add a sub-account under contra-revenue. Track by reason code to spot patterns.

Refunds vs. Chargebacks: Different Events, Different Accounting

A refund is something you choose to do. A customer asks for their money back, you agree, and you issue the refund through Stripe. Stripe reverses the original charge and deducts the amount from your next payout.

A chargeback is something that happens to you. The customer contacts their bank, disputes the charge, and the bank pulls the funds back. Stripe notifies you, holds the disputed amount, and charges a $15 dispute fee. You can fight it or accept it.

Both reduce revenue. But the accounting path is different.

With a refund, you control the timing. You know why it happened. The entry is simple.

With a chargeback, you're in a pending state until the dispute resolves. You need to hold a reserve while the outcome is uncertain. That creates a three-step entry, not one.

If you record chargebacks like refunds, you're missing the reserve phase, misclassifying the dispute fee, and leaving your books in a state that doesn't reflect reality while the dispute is open.

Refund Accounting: Contra-Revenue, Not Expense

The correct account for refunds is Sales Refunds (or Sales Returns and Allowances). This is a contra-revenue account, meaning it offsets gross revenue on the income statement. It's not an expense account.

Here's the entry when you issue a $150 refund:

1Dr Sales Refunds $150.00
2 Cr Stripe Clearing Account $150.00

The credit goes to your Stripe clearing account because Stripe hasn't paid the money out yet. It reduces what Stripe owes you. When the payout settles, the clearing account nets to zero.

If Stripe has already paid out the original charge and the refund pulls from your next payout, the entry is the same. The clearing account holds the debit until the next payout settles it.

Why not expense? When you book a refund to an expense account, two things go wrong at once. Your gross revenue stays high because nothing reduced it. And your expenses go up artificially. Your P&L is wrong in both directions simultaneously.

A $150 refund booked to expense shows:

  • Gross revenue: $1,000 (unchanged, overstated)
  • Expenses: $1,150 (inflated by $150)
  • Net income: -$150 (instead of the correct -$0 if refund equals all revenue)

A $150 refund booked to contra-revenue shows:

  • Gross revenue: $1,000
  • Less: Sales Refunds: $150
  • Net revenue: $850

The second version tells you what you actually earned. The first version hides the refund activity in expenses, making your gross margin look better than it is and your cost structure look worse.

Chargeback Accounting: The Three-Phase Journal Entry

Chargebacks move through three phases: the dispute opens, then it either closes in your favor or against you. Each phase has its own entry.

Scenario: A customer disputes a $200 charge. Stripe files the chargeback, holds the funds, and charges a $15 fee.

Phase 1: Dispute Opens

When Stripe notifies you of the chargeback, book a reserve:

1Dr Dispute Reserve (asset) $200.00
2 Cr Stripe Clearing Account $200.00

This reflects that $200 is in limbo. It's not yours yet, but it's not definitively lost either. The Dispute Reserve is a current asset (or contra-liability, depending on your chart of accounts setup). The clearing account credit reduces what Stripe owes you on the next payout.

Don't touch revenue yet. The outcome is unknown.

Phase 2a: You Win the Dispute

Stripe returns the $200 to your account. Reverse the reserve:

1Dr Stripe Clearing Account $200.00
2 Cr Dispute Reserve $200.00

Now book the $15 fee:

1Dr Chargeback Fee Expense $15.00
2 Cr Stripe Clearing Account $15.00

The $15 fee hits your books even when you win. Stripe keeps it regardless. Net result: you recovered $200, but paid $15. The $185 shows up in your next payout.

Phase 2b: You Lose the Dispute

The $200 goes to the customer. Now the loss is confirmed. Close the reserve and record the contra-revenue:

1Dr Sales Refunds (contra-revenue) $200.00
2Dr Chargeback Fee Expense $15.00
3 Cr Dispute Reserve $200.00
4 Cr Stripe Clearing Account $15.00

You lost the $200 (contra-revenue) and paid the $15 fee (expense). Both hits are in the right place.

The reserve approach keeps your books clean during the pending period. If you skip it and book the loss immediately, your revenue is understated while the dispute is still open, and you'll need to adjust if you win.

The Timing Problem: When Stripe Deducts Before the Bank Shows It

Stripe doesn't send a separate payment for each refund or chargeback. It deducts them from your next payout.

This creates a timing difference. If you issue a refund on a Tuesday and your payout doesn't settle until Friday, your Stripe balance already reflects the deduction but your bank doesn't yet. They disagree.

This isn't an error. It's timing.

Your clearing account is what bridges the gap. When you book the refund entry, the credit goes to Stripe Clearing. That account shows the amount in transit. When the payout settles, the clearing account nets to zero.

If you reconcile your Stripe payout deposit against your bank balance and see a difference, check the clearing account before assuming something's wrong. Nine times out of ten, you'll find a refund or chargeback that hasn't settled yet.

This is the same logic behind why your Stripe deposits don't match your sales figures. The payout is net of fees, refunds, and chargebacks. The clearing account is what makes the math work.

Refunds That Cross Payout Periods

Here's the version that confuses people most. A customer asks for a refund on Day 12 of your two-week payout cycle. But Stripe already paid out Days 1-7 last week.

The refund doesn't go back to that old payout. Stripe deducts it from the next one, the Days 8-14 payout.

When you book the summary journal entry for the first payout, that refund isn't in it. It shouldn't be. It hadn't happened yet.

The refund shows up in the Days 8-14 payout, in the next accounting period. Your clearing account absorbs it and it resolves cleanly on the next settlement.

If you're using the payout-period model for recording Stripe in QuickBooks, this is handled automatically. You book one summary entry per payout period. Refunds that fall in that period are already netted into the payout total. Refunds that cross periods resolve in the next cycle.

The mistake is trying to force the refund back into the prior period. That creates false entries, artificial adjustments, and a cleared balance that won't stay cleared. Leave it in the period where Stripe processed it.

Understanding whether to book individual transactions vs. payout summaries makes this much clearer. The payout-period model prevents most cross-period timing issues before they start.

High-Refund Businesses: When to Add a Refund Sub-Account

For most businesses, a single Sales Refunds contra-revenue account is enough. But if your refund rate runs above 5%, or you have predictable refund patterns, one account hides useful information.

Common triggers for sub-accounts:

  • Subscription businesses with trial cancellations (high-volume, recurring)
  • E-commerce with satisfaction guarantees
  • Services with milestone-based refunds

In those cases, break Sales Refunds into sub-accounts:

  • Sales Refunds: Trial Cancellations
  • Sales Refunds: Customer Disputes
  • Sales Refunds: Processing Errors

Each sub-account feeds into the parent contra-revenue. Your P&L presentation doesn't change. But you can now see where refund volume is coming from.

Stripe assigns a reason field to each refund. Common reasons include duplicate, fraudulent, and requested_by_customer. If you're doing this manually, track reason codes in a column next to your entries. If you're using AI-assisted bookkeeping tools, reason codes can be used to auto-route refunds to the correct sub-account.

Chargebacks get similar treatment at high volume. If you're seeing 20+ chargebacks per month, a Chargeback Losses sub-account separate from Sales Refunds helps you track dispute exposure separately from voluntary refunds.

Automating Exception Handling

Most Stripe refunds and chargebacks aren't exceptions at all. They're just line items with a reporting_category of refund or charge_failure. When you use a payout-period model, they net into the payout total and your summary entry captures them automatically.

The actual exceptions are:

  • Refunds that cross payout periods (timing mismatch)
  • Disputes in pending status (reserve required, outcome unknown)
  • Won disputes where the $15 fee still needs to be recognized

These are the cases that require manual attention. The rest sort themselves.

Standard refund entries route to contra-revenue automatically through pattern learning, not static rules. Negative reporting_category: refund entries go to Sales Refunds, not an expense account. The $15 dispute fee recognizes as a separate line item from the disputed amount.

For pending disputes, the triage queue surfaces the open dispute, the proposed reserve entry, and both possible outcomes. You confirm. The entry posts. When the dispute closes, the final entry routes to the correct account automatically.

That's the part that's actually hard to automate reliably. Not the categorization, but the uncertainty. You want a tool that holds the reserve correctly and doesn't prematurely close a dispute as a loss.


Stripe refunds and chargebacks look alike on a payout statement. They're not alike in the books. A refund is one entry. A chargeback is three. The timing difference between when Stripe deducts and when your bank settles is predictable once you understand the payout model.

The biggest time waster in Stripe reconciliation is chasing discrepancies that resolve themselves on the next payout. Get the clearing account right, use the three-phase chargeback entry, and most of that work disappears.

If you want standard refunds categorized correctly, pending disputes flagged for review, and reserve entries posted automatically, Get Started with Growthy.

See It Work on Your Data

Free during alpha. Read-only access. You review every sync.

✓ No credit card✓ Works with QuickBooks✓ 85% accuracy
Request Early Access

Bobby Pro • Content Writer

Bobby Pro is a contributor to the Growthy blog.

View all articles →

Growthy is dedicated to helping businesses of all sizes make informed decisions. We adhere to strict editorial guidelines to ensure that our content meets and maintains our high standards.

Keep reading

Comparing Stripe accounting tools
Stripe Bookkeeping

Best Stripe Accounting Tools Compared (2026)

A practitioner comparison of A2X, Synder, Bookkeep, Acodei, native Stripe-QBO sync, and Growthy for Stripe reconciliation, with pricing, model breakdowns, and a decision table.

B
Bobby Huang
11 min
Featured image for Bank Reconciliation: What It Is, Why It Matters, How to Do It
Stripe Bookkeeping

Stripe Payouts vs. Individual Transactions: Which Booking Method?

Payout-level summary journal entries vs. individual transaction booking in Stripe: when each method works, where individual booking breaks, and why most bookkeepers land on the summary approach.

B
Bobby Huang
8 min
Marketplace platform connecting buyers and sellers
Stripe Bookkeeping

Stripe Connect Accounting for Platforms and Marketplaces

Stripe Connect splits one payment into three parties. Most bookkeepers record it wrong. Here's the correct journal entry for application fees, destination charges, and connected account payouts.

B
Bobby Huang
10 min