TL;DR: A Stripe refund should reduce your gross revenue, not show up as a new expense line. Since February 2022, Stripe keeps its processing fee even when you refund the full charge, which means a refund actually costs you more than the sale amount alone. Partial refunds and any sales tax collected on the original charge both need to be pro-rated and reversed, and disputes get a completely different treatment than refunds.
What a Stripe refund actually touches
When a customer asks for their money back, most solo founders do the obvious thing: find the transaction in Stripe, click refund, and move on. The bookkeeping problem starts a few weeks later, when the transaction shows up in Mercury or wherever the Stripe payout lands, and it's not clear what account it belongs to.
A refund is not a new transaction. It's a reversal of one you already recorded. That distinction matters because a refund touches three things at once, and most people only think about one of them: the cash leaving your account.
Here's what actually moves when you refund a $99 Stripe charge:
- Revenue — the original sale needs to come back down, because you no longer earned that money
- Stripe fees — as of Stripe's 2022 policy change, the processing fee is generally not returned to you, even on a full refund
- Sales tax — if you collected tax on the original charge, that liability needs to be reversed too, or you'll remit tax you never actually kept
The wrong way: booking it as a refund expense
The most common mistake, and it's an easy one to make if you're doing your own books in QuickBooks or Xero, is creating a category called "Refunds" or "Customer Refunds" and treating it like any other expense — the same bucket as software subscriptions or contractor payments.
It feels intuitive because cash is leaving your account, and expenses are where cash-leaving-your-account transactions go. But refunds aren't a cost of doing business in the same sense a SaaS subscription is. They're a correction to revenue you already recorded but didn't actually keep.
Booking refunds as an expense creates two problems. First, it inflates your expense total and understates your revenue, which distorts gross margin — a number your CPA, an investor, or a lender will actually look at. Second, it breaks reconciliation against your Stripe 1099-K at tax time. The 1099-K reports gross processing volume before refunds, so if your books also show gross revenue plus a separate refund expense, your CPA has to manually untangle two numbers that should have nettted to one in the first place.
The right way: reverse revenue, not create an expense
The correct entry treats a refund as a contra-revenue transaction — it reduces the revenue account directly, or hits a dedicated "Refunds and Returns" account that nets against revenue on your P&L, rather than sitting in expenses.
Walk through the full lifecycle of a $99/month subscription charge to see how this plays out. On the original sale, Stripe charges its standard rate of 2.9% + $0.30, which works out to $3.17 in fees on a $99 charge. Your books should show:
Revenue: $99.00 (credit) — Stripe fees: $3.17 (debit, expense) — Cash: $95.83 (debit, net deposit)
Now the customer asks for a full refund. The correct entry is:
Revenue (or Refunds and Returns): $99.00 (debit) — Cash: $99.00 (credit)
Notice what's missing: there's no reversal of the $3.17 fee, because Stripe doesn't give it back. That $3.17 stays on your books as a sunk cost. Your net revenue on this transaction goes from $99 down to zero, but your actual cash position is worse than zero — you're out the $3.17 you paid to process a sale that ultimately didn't happen.
What happens to the Stripe fee on a refund
This is the part that trips up even people who get the revenue side right. Before February 2022, Stripe returned the percentage-based portion of its fee on a refund and kept only the flat $0.30. Founders who set up their chart of accounts before that change often still have a "Stripe fee refund" line item that no longer applies — and it quietly overstates their revenue every month.
Under Stripe's current policy, refunding a charge does not return any portion of the original processing fee, regardless of whether the refund is full or partial. If you refund 100% of a $99 charge, you get zero dollars back on the $3.17 fee. That fee already happened; Stripe processed a real payment and did real work, and they don't reverse it just because you decided to give the money back.
In practice, this means every refund is a little more expensive than the sticker price suggests. A SaaS business issuing a handful of refunds a month should expect the associated processing fees to sit permanently in the expense column — they don't come back out. QuickBooks and Xero both handle this correctly if your bank feed rules are set up to separate the refund transaction from the fee transaction, but the default bank-feed categorization in both tools tends to lump Stripe payouts into a single "deposit" line, which hides this detail unless someone is looking for it.
Partial refunds and sales tax remittance
Partial refunds work the same way as full refunds, just pro-rated. If a customer on a $99 plan gets a $49.50 goodwill credit instead of a full refund, you debit Revenue for $49.50 and credit Cash for $49.50. The Stripe fee stays untouched either way — Stripe doesn't pro-rate the fee refund based on how much of the charge you return, because there isn't a fee refund to pro-rate in the first place.
Sales tax is the piece most solo founders miss entirely, and it's the one your CPA cares about most, because it's the one with actual regulatory exposure. If Stripe Tax (or a manual process) collected sales tax on the original $99 charge — say $7.92 in a state with roughly 8% sales tax — that tax liability sits in a Sales Tax Payable account until you remit it. When you refund the sale, you have to reverse the liability too, not just the revenue.
Skip this step and you'll remit sales tax on a transaction that never actually closed. Most states will let you claim that back on a future filing, but it means tracking an adjustment across filing periods instead of just zeroing it out in the month it happened. For a partial refund, pro-rate the tax reversal the same way you pro-rated the revenue reversal — a 50% refund reverses 50% of the associated tax liability.
Refunds vs. disputes and chargebacks
A refund and a dispute look similar in your Stripe payout — money leaves your account — but they're different events with different bookkeeping treatment, and conflating them is a second common mistake.
A refund is something you initiate. A dispute (chargeback) is something the customer's bank initiates, usually because the cardholder claims they didn't authorize the charge or didn't receive what they paid for. When a dispute is opened, Stripe charges a $15 dispute fee, and — this is the part that surprises people — you keep paying that $15 fee even if you win the dispute and get the funds back.
Because the dispute fee is a real, non-refundable cost regardless of outcome, it belongs in your expenses as a distinct line item, something like "Payment Disputes" or "Chargeback Fees" — not netted against revenue the way a refund is. If you win the dispute, the disputed revenue stays on your books because you did earn it; only the $15 fee hits your expenses. If you lose, treat the lost transaction amount as a revenue reversal, the same way you'd handle a refund, on top of the $15 fee you were already out.
What your CPA wants to see at tax time
When a CPA opens your books to prepare a return, they're going to reconcile the revenue you reported against the gross payment volume on your Stripe 1099-K. If refunds are buried in expenses instead of netted against revenue, that reconciliation takes longer, costs more in CPA hours, and increases the odds of a manual adjustment that could have been avoided with the right entry in the first place.
At a minimum, your CPA wants to see the following handled consistently, month over month:
- Refunds recorded as a reduction to revenue or a dedicated contra-revenue account — never as a standalone expense
- Stripe processing fees left un-reversed on refunded transactions, since Stripe doesn't return them
- Sales tax liability reversed (or pro-rated for partial refunds) in the same period as the refund, where possible
- Dispute fees tracked separately from refunds, since they're a real cost regardless of outcome
- Net revenue in your books tying out to gross Stripe volume minus refunds, matching the 1099-K
How Prosper handles Stripe refunds automatically
This is exactly the kind of transaction that's easy to get wrong manually and tedious to fix after the fact. Prosper connects to Stripe and your bank via Plaid, and its auto-categorization is designed to recognize a Stripe refund as a revenue reversal rather than a new expense, keeping the fee treatment consistent with Stripe's actual refund policy instead of an outdated one.
Transactions Prosper isn't confident about — a large dispute, an unusual partial refund, anything that doesn't match a clean pattern — get flagged for your review instead of silently miscategorized. Your CPA still makes the final call on anything tax-related; Prosper's job is to make sure the entry they're reviewing is already close to correct instead of a pile of misfiled expenses they have to untangle by hand. Prosper runs $29/mo, and it's built for solo founders who want their books to reflect what actually happened in Stripe without hiring a bookkeeper to reconcile it every month.
Prosper is bookkeeping software and does not provide tax or legal advice. Consult a qualified professional for tax advice. Results vary based on transaction volume, data quality, and workflow setup.