Stripe COGS Mapping: How to Account for Refunds, Chargebacks,

June 5, 2026

Key takeaways

  • Refunds = contra-revenue. They reduce gross revenue. They are not an expense. Do not post refunds to a COGS or expense account.
  • Chargebacks = two entries. The disputed amount reverses revenue (or hits a suspense account pending resolution). The $15 dispute fee is a separate expense.
  • Processing fees on refunded transactions are never returned by Stripe. They stay on your fee expense line as a sunk cost.
  • Processing fees classify as COGS (cost of revenue) for e-commerce and SaaS businesses where fees scale directly with sales, or as SG&A where they don't.
  • Finlens maps every Stripe event  charges, refunds, partial refunds, disputes, fee retention  to the correct QBO accounts automatically. Free to start.

How should Stripe refunds be recorded in accounting

A refund is not an expense. Under GAAP, refunds are a reduction of revenue  specifically, they're "variable consideration" under ASC 606. When a customer gets their money back, the original sale partially or fully reverses. Your P&L shows less revenue, not more expenses.

The journal entry for a full refund:

Account Debit Credit
Sales Returns & Allowances (contra-revenue) $100
Stripe Clearing / Accounts Receivable $100

The processing fee from the original charge stays. Stripe changed this policy in 2019  processing fees are no longer returned on refunds, regardless of whether the refund is full or partial. Per Stripe's documentation, this applies to standard pricing. Some businesses on Interchange Plus (IC+) pricing may see partial interchange returns from issuing banks, but this is inconsistent.

That means a $100 charge with a 2.9% + $0.30 fee ($3.20) that gets fully refunded costs you $3.20 in irrecoverable fees. On a partial refund, Stripe retains the full original fee  not a prorated portion.

The accounting impact: Your fee expense line stays the same. Your revenue drops by $100. Your net margin on that transaction is negative $3.20. This compounds at scale  a business with a 5% refund rate on $1M in Stripe volume loses roughly $16,000/year in irrecoverable fees.

A bookkeeper on r/Bookkeeping walked through this exact scenario  a refund issued, the clearing account left with a negative balance equal to the retained fee. The negative balance offsets against your next positive sales payout, bringing the clearing account back to zero. If you reconcile before the next payout lands, that negative balance is expected, not an error.

Are Stripe processing fees COGS or operating expenses

GAAP doesn't prescribe a single answer. The classification depends on how directly the fee ties to revenue generation.

Processing fees as COGS (cost of revenue):

  • E-commerce businesses where every sale incurs a fee → fees scale 1:1 with revenue → cost of revenue
  • SaaS businesses where subscription payments run through Stripe → fees are a direct cost of earning that revenue → cost of revenue
  • Marketplace platforms where fees are part of the transaction cost structure → cost of revenue

Processing fees as SG&A (operating expense):

  • Businesses paying a fixed monthly fee to a processor regardless of volume → not directly tied to individual sales → SG&A
  • Companies where card processing is incidental to the core revenue model → operating expense

The practical test: if your Stripe fees would drop to zero if revenue dropped to zero, they're cost of revenue. If they'd stay roughly the same, they're SG&A.

Most SaaS and e-commerce businesses classify Stripe fees as cost of revenue. This is the approach Stripe's own SaaS accounting guide references, and it's consistent with how public SaaS companies report gross margins. Classify them consistently and document the policy in your accounting manual.

How to record Stripe chargebacks and disputes in QuickBooks

Chargebacks are not refunds. A refund is voluntary  you initiate it. A chargeback is involuntary  the cardholder's bank pulls funds from your Stripe balance without your consent. The accounting treatment is different at every stage.

Phase 1: Dispute opened (funds held)

When a customer disputes a charge, Stripe immediately deducts the disputed amount plus a $15 dispute fee from your balance. But the dispute isn't resolved yet — you might win it back.

Account Debit Credit
Stripe Disputes Held (asset — suspense) $100
Dispute Fees (expense) $15
Stripe Clearing $115

The disputed amount goes to a suspense asset account — not directly to expense. The $15 fee posts immediately to expense because Stripe does not refund it even if you win.

Phase 2a: Dispute lost

If you lose, the $100 moves from suspense to a loss account:

Account Debit Credit
Sales Returns & Allowances (contra-revenue) $100
Stripe Disputes Held (asset) $100

Phase 2b: Dispute won

If you win, the $100 returns to your Stripe balance:

Account Debit Credit
Stripe Clearing $100
Stripe Disputes Held (asset) $100

The $15 fee is gone either way. Using a separate "Disputes Held" asset account instead of dumping disputes directly to expense gives you visibility into how much capital is tied up in open chargebacks at any point.

A thread on r/Bookkeepingdebated this exact question "where do you stick chargebacks?" and the consensus was: separate account for the hold period, never lump into generic "Bank Charges."

Some bookkeepers on r/QuickBooks prefer skipping the suspense step and debiting Sales Returns immediately on dispute notification, then recording a won dispute as net-new income. Simpler registers, but you lose visibility into open dispute exposure.

Complete Stripe event to COA mapping table

This is the reference table. Every Stripe event, the QBO account it hits, and the journal entry direction.

Stripe Event QBO Account Entry Type Debit Credit Notes
Charge (successful) Sales Revenue Revenue Stripe Clearing Sales Revenue Gross amount, not net of fees
Processing fee Payment Processing Fees (COGS or SG&A) Expense Processing Fees Stripe Clearing Posts on the charge, not on the payout
Full refund Sales Returns & Allowances Contra-revenue Sales Returns Stripe Clearing Fee from original charge is NOT reversed
Partial refund Sales Returns & Allowances Contra-revenue Sales Returns Stripe Clearing Full original fee retained by Stripe
Dispute opened Stripe Disputes Held (asset) + Dispute Fees (expense) Suspense + Expense Disputes Held + Dispute Fee Stripe Clearing $15 fee is immediate; disputed amount is held
Dispute lost Sales Returns & Allowances Contra-revenue Sales Returns Disputes Held Moves from suspense to contra-revenue
Dispute won Stripe Clearing Asset recovery Stripe Clearing Disputes Held $100 returns; $15 fee stays as expense
Payout to bank Bank account (checking) Transfer Bank Account Stripe Clearing Net of all charges, fees, refunds, disputes
Stripe Capital repayment Stripe Capital Loan (liability) Liability reduction Loan Payable Stripe Clearing Deducted from payout; separate from fees
Currency conversion fee FX / Conversion Fees (expense) Expense Conversion Fees Stripe Clearing Separate from processing fees
Coupon / discount Sales Discounts (contra-revenue) Contra-revenue Sales Discounts Stripe Clearing Reduces gross revenue, not an expense

Post this table in your firm's Stripe onboarding documentation. Every new client running Stripe should have their COA mapped before the first sync runs.

When to accrue a chargeback reserve liability

If your dispute rate is material  generally above 0.5% of transaction volume  GAAP expects you to estimate expected chargeback losses and accrue a reserve. This is the same concept as a bad debt allowance applied to payment disputes.

The accrual:

Account Debit Credit
Chargeback Loss Expense $X
Chargeback Reserve (liability) $X

Estimate $X based on your trailing 6-month dispute loss rate applied to current-period revenue. When an actual dispute resolves as a loss, debit the reserve instead of hitting expense again:

Account Debit Credit
Chargeback Reserve (liability) $100
Stripe Clearing $100

When this matters:

  • Stripe flags accounts above 0.75% dispute rate for review. Above 1%, you risk account restrictions.
  • Visa's Dispute Monitoring Program triggers at 100 disputes/month AND 0.9% dispute ratio.
  • Investors and auditors expect accrued reserves when dispute volume is predictable and material.

For businesses below 0.5% dispute rate, expensing disputes as incurred is acceptable. Above that threshold, accrue.

Best tools for mapping Stripe events to QuickBooks accounts

Tool Refund Handling Chargeback Tracking COGS Mapping Fee Separation Best For
Finlens Full + partial refunds linked to original charge; fee retention tracked 3-phase tracking (opened → won/lost) with suspense account Auto-maps to configured COGS or expense accounts Per-charge separation SaaS and subscription businesses on QBO needing full event mapping
Acodei Full + partial refunds with original transaction linking Disputes with $15 fee separated; holds tracked Product-to-account mapping including COGS lines via Product ID, Price ID, or metadata Per-charge separation High-volume Stripe businesses needing granular product mapping
Synder Refunds synced with Smart Rules for account routing Basic dispute recording Product matching by name/SKU; auto-creates QBO items Daily summary or per-transaction Multi-channel businesses (Stripe + PayPal + Shopify) needing one tool
Growthy Refund entries with clearing account pattern 3-phase dispute tracking with separate asset account COGS vs operating expense classification guidance Per-payout journal entries Bookkeepers managing multiple QBO clients
Manual (clearing account) Manual JEs per refund Manual JEs per dispute phase Manual COA assignment Manual calculation per payout Low volume (<50 tx/mo) where automation cost isn't justified

For the full Stripe-to-QBO sync tool comparison, see 7 Best Stripe to QuickBooks Sync Tools (2026).

FAQ

Does Stripe return processing fees when you issue a refund?

No. Since 2019, Stripe retains the full processing fee on refunded transactions. This applies to both full and partial refunds. Some IC+ pricing accounts may see partial interchange returns from issuing banks, but this is inconsistent and usually minimal.

Should Stripe processing fees be classified as COGS or SG&A?

It depends on your business model. If fees scale directly with revenue (e-commerce, SaaS), classify as cost of revenue. If fees are fixed regardless of volume, classify as SG&A. Most SaaS and e-commerce companies use cost of revenue. Document the policy and apply consistently.

How do you record a chargeback in QuickBooks?

Three-phase approach: (1) When the dispute opens, debit a "Disputes Held" suspense asset and expense the $15 fee immediately. (2) If you lose, move the disputed amount from suspense to contra-revenue. (3) If you win, move it back to Stripe Clearing. The $15 fee is not refunded either way.

What's the difference between a refund and a chargeback in accounting?

Refunds are voluntary contra-revenue entries you control. Chargebacks are involuntary reversals initiated by the cardholder's bank  they require a suspense account for the hold period and a separate expense entry for the dispute fee. Refunds are one entry; chargebacks are two to three entries across periods.

When should you accrue a chargeback reserve?

When your dispute rate is material  generally above 0.5% of transaction volume. Estimate expected losses based on trailing 6-month dispute data and accrue a liability. Visa's monitoring program triggers at 0.9% dispute ratio. Auditors expect reserves when dispute patterns are predictable.

Does a partial refund change the fee accounting?

No. Stripe retains the full original processing fee even on partial refunds. The contra-revenue entry reflects the partial refund amount, but the fee expense line stays unchanged from the original charge.

What GAAP standard governs refund accounting?

ASC 606 (Revenue from Contracts with Customers) treats refunds as variable consideration. ASC 605-15 (legacy, pre-ASC 606) addressed product returns specifically. Under ASC 606, entities must estimate expected refunds and recognize a refund liability and corresponding adjustment to revenue at contract inception.