Recovery playbook
The spreadsheet recovery: working findings from a CSV export
You exported 90 days of charges, built a pivot table, and found gaps. Now comes the part nobody writes down: turning a spreadsheet of discrepancies into reversed transfers with evidence attached. The workflow is genuinely viable below a few thousand charges a quarter — and knowing exactly where it stops scaling is what makes starting with it rational rather than naive.
The export
Columns that matter: charge id, amount, amount_refunded, transfer id, transfer amount, amount_reversed, fee id, fee amount, fee amount_refunded, dispute id/status. Dashboard exports provide some directly; transfer-level fields require the API or a tool. Build the sheet once with all ten columns — retrofitting columns mid-quarter is how manual audits die.
The formulas
Expected reversal per row: =ROUND((refunded/amount)*transfer, 0). Owed: =expected - SUM(existing reversals). Net-margin column across both levers to kill double-counts. Filter where owed exceeds two minor units — the tolerance that stops rounding noise from filling the sheet with ghosts.
- Expected reversal
- $54.00
- Actual reversals
- $0.00
- Owed
- $54.00
The workflow, and where it breaks
Sort by owed × recoverability tier; batch executions per seller with notices; record reversal ids back into the sheet — it is now the audit trail, so treat it like one. Where it breaks: snapshot staleness (your export ages while reversals land elsewhere), no serialisation when two people work overlapping rows, and the calendar itself — next quarter you do all of it again by hand.
The graduation path
FeeGuard’s CSV export matches these columns exactly, so the sheet becomes intake format rather than system of record. Teams typically start manual, graduate when the ritual exceeds an hour a quarter, and keep the spreadsheet habit as the working-paper layer on top of automated findings.
Common questions
Can this be done entirely in the Stripe dashboard?
Partially — exports exist, but per-transfer reversal sums and tolerance logic do not. The sheet fills exactly that gap.
How long does a manual audit take?
Modelled: about an hour per thousand charges once the sheet exists, dominated by export time and spot-checking rather than formula work.
Why does my sheet disagree with the scanner?
Snapshot versus live state, plus tolerance settings. Both tools agree once inputs and tolerance match.