You close your spreadsheet at the end of month five. Your affiliate commission logic says you owe Partner A $14,200. You download Stripe's payout file. It shows a settlement of $12,840. You call Partner A. They call you back furious. The 12% gap is real, and you cannot explain it without digging through six weeks of transaction notes. This scenario repeats across affiliate programs once they cross roughly 15–20 active partners. Spreadsheet commission math works fine for simple flat-rate or percentage-of-sales models—until proration, midcycle refunds, subscription downgrades, or failed payment retries enter the picture. By month six, cumulative drift is usually 8–15%. By month twelve, partners are comparing their spreadsheet totals to Stripe and questioning your integrity. The fix is not a bigger spreadsheet. The fix is auditability: a repeatable process to spot where spreadsheet math and actual settlement diverge, and a tool that reconciles payouts automatically once you rebuild the logic. Why spreadsheet affiliate tracking breaks at scale Spreadsheet commission math assumes linear transactions. One sale, one commission, one payout. Reality in payment processing is messier. Refunds and chargebacks: A customer buys through Partner A's link, you pay commission immediately, customer refunds 30 days later. Your spreadsheet shows the full commission; Stripe reversed the charge. Your payout logic either forgets to reverse the commission or reverses it late, creating timing mismatches. Proration on subscription downgrades: Partner A drives a customer to annual billing at $120/month. Month three, the customer downgrades to $60/month. You owe Partner A a commission on the original deal and a pro-rata adjustment on the downgrade. Spreadsheet formulas rarely handle pro-rata reversal cleanly, especially across subscription cycles. Failed payment retries: A charge fails, Stripe retries it three days later. Your spreadsheet may count it twice—once on the original date, once on the retry. Or it may miss the retry entirely if you import Stripe files only once a week. Multi-currency settlement: Partner A is in GBP, your Stripe account is in USD. The exchange rate on settlement day differs from the rate when you recorded the commission. Spreadsheets rarely handle dynamic FX reconciliation. Midcycle payout holds or partial payouts: Stripe may hold 5% of a payout for 72 hours, or issue a partial settlement if your balance is low. A spreadsheet tracking "amount owed" and "amount paid" in separate columns grows out of sync when settlements are staggered. Each issue is individually solvable with enough spreadsheet discipline. Collectively, they create a reconciliation tax that grows exponentially with partner count and transaction volume. Audit your current drift: the five-step spot check Before rebuilding, measure how far your spreadsheet and Stripe have already diverged. Export Partner A's lifetime commission total from your spreadsheet. Include all transactions marked "paid" in the current month and all prior months. Total should include refunds reversed, if you track them. Export Stripe's balance sheet for the same date range. Go to Stripe Dashboard → Payouts → Download CSV. Filter to the date range covering all months you've tracked commissions. Sum the gross amount (before fees). Calculate the variance: (Spreadsheet Total − Stripe Total) / Stripe Total × 100. If the result is greater than ±3%, you have a drift problem that will worsen. Drill into refunds. Pull Stripe's refund report for the same period. Cross-check against your spreadsheet's refund reversals. If refunds in Stripe are higher than reversals in your sheet, that's one source of drift. Spot-check three recent partner payouts. For each, manually trace five transactions from your spreadsheet to the corresponding Stripe charge. Look for duplicates, missing reversals, or timing shifts. Document the three largest discrepancies. If your audit uncovers drift greater than 5%, stop issuing affiliate payouts until you've rebuilt the logic. Partners will forgive a one-month delay more readily than they'll accept systematic underpayment or overpayment. Rebuild: the payout reconciliation logic that sticks Once you've identified where your spreadsheet and Stripe diverge, rebuild the payout calculation to be Stripe-source-of-truth. That means: let Stripe settle first, then calculate commissions from the settled amounts. Step 1: Ingest Stripe payouts, not charges. Stop calculating commissions from the charge date. Instead, import Stripe's payout file (or use Stripe's API) to see what actually settled and when. This single shift eliminates timing drift caused by holds, retries, and reconciliation delays. Step 2: Group by partner and payout date. For each partner, sum the gross amount from all charges that settled in that payout. This total is your commission base, not the list of individual charges. Step 3: Apply commission rate to the settled amount, not the