For founders
The bootstrapped founder’s $90 problem
Thirty refunds a month at $90 stranded each is $2,700 of runway burned by a boolean you have never seen. Not by a hacker, not by fraud — by a parameter defaulting to false inside Stripe Connect, in code possibly written by an AI assistant or copied from a tutorial that worked perfectly in testing. This page explains the mechanism in founder units and hands you a ten-minute check that ends with either peace of mind or a number worth acting on.
The mechanism, in founder units
Customer pays $100 for a $10-cut marketplace sale. $90 goes to your seller immediately. Customer refunds. Your balance returns the full $100; the seller’s $90 comes back only if code explicitly asked — reverse_transfer: true — and almost nobody’s boilerplate does. Result: each refund costs you $90 of real money for a sale where you earned $10. Multiply by your monthly refunds; that product is the size of the hole.
- Refunds/month × stranded each
- 30 × $90
- Monthly burn
- $2,700
- Annualised
- $32,400
- At 18-month runway math
- ~$48k of raise equivalent
AI-built codebases and copy-paste snippets
Assistants reach for the shortest correct-looking path: stripe.refunds.create({ charge }). It works, tests pass, customers get money back. Structural, not personal — the training data is full of examples omitting Connect parameters because most Stripe usage is not Connect. If AI wrote or finished your payment code, assume this gap exists until checked.
The ten-minute check
Option one: paste last month’s charge.refunded events into the free scanner — returns stranded totals in under two minutes, stores nothing. Option two: grep your repo for refunds.create and inspect every call site for both flags. Option three: connect a read-only key and let the 90-day lookback enumerate everything. Any order; all free.
Why "too small to care" inverts here
Enterprise platforms absorb leakage as rounding noise; seed-stage platforms feel every $90 twice — once in bank balance, once in runway math. Small platforms also fix fastest: one refund function, one flag addition, done. Detection tells you which world you are in before emotions or sunk costs get votes.
If the number is zero
Genuinely possible — low-refund platforms with careful code come back clean. That result costs nothing, takes minutes, and converts vague dread into a verified fact worth more than either outcome’s drama.
Common questions
We used a template/AI boilerplate — likely affected?
Check the refund call for both flags; thirty seconds answers it. Most templates omit them because most Stripe usage is non-Connect.
What does it cost if we find nothing?
Zero. Detection and the lookback are free forever; you pay only a success fee if automated recovery later moves actual dollars.