Your affiliate program paid out ₹50,000 last month. Your records show ₹52,100. Stripe says ₹51,940. No one knows where the ₹2,100 went. This is not a spreadsheet error. It is not a data entry miss. It is three separate systems—your GL, Stripe's settlement ledger, and Razorpay's payout journal—each using different rounding rules, settlement windows, and FX conversion rates. Over six months, that ₹2,100 becomes ₹18,500. By year-end, your affiliate program's true cost is invisible. We audited 500+ affiliate payouts across three processors and two accounting integrations. The drift cluster into six patterns. Most are invisible without a systematic audit; all are recoverable once you know where to look. The three layers where payout drift lives Affiliate commission payout reconciliation fails because three systems process the same transaction using different math. Layer 1: Your GL account vs. payout ledger You record an affiliate commission in your GL the moment you create it: ₹1,000 to Expense:Affiliate Commissions, Credit: Accounts Payable. Stripe doesn't payout for 3–7 days. When the payout clears, Stripe charges a small fee (₹18–₹45 per batch) and applies a processor spread. Your GL shows ₹1,000; the actual cash cleared at ₹984. The difference lives in three places: Processor fee: Stripe charges 0.8–1.2% + ₹5 per payout batch. Razorpay charges 0.5–0.9% or a flat ₹8. Most affiliates don't reconcile this line-by-line. Settlement lag: You record the commission on Tuesday. Stripe settles on Friday (T+2 to T+7 depending on your Stripe tier). Your GL and Stripe's settlement report are out of sync for 5 days minimum. GL account mismatch: You may code the commission to Expenses:Affiliate Commissions, but the payout hits Bank:Checking. The two accounts never touch without a manual journal entry. Layer 2: Multi-currency FX rounding If you pay affiliates in multiple currencies, Stripe applies FX conversion at settlement, not at commission creation. Here's what that means: You promise an affiliate ₹10,000 (your GL records this on Day 1). On Day 5, Stripe converts at the day's rate: 1 USD = ₹83.42. The ₹10,000 becomes $119.89 in Stripe's system. Stripe's processor fee of 0.8% is applied: $119.89 × 0.992 = $119.03. Stripe converts back to INR for settlement: $119.03 × ₹83.55 = ₹9,945. Your GL still shows ₹10,000. Stripe settled ₹9,945. The gap is ₹55—invisible unless you trace the FX chain. At scale (100+ multi-currency payouts), this rounding alone costs ₹2,000–₹4,000 per month. Most finance teams assume it is a system error and write it off. Layer 3: Processor settlement windows and batching Stripe settles payouts in batches, not individually. If you have three payouts due on Friday, Stripe may batch them on Friday at 2 PM UTC. Your accounting system may record them as three separate line items on Friday morning. Razorpay batches on different days depending on your payout tier and aggregate amount. This creates a 1–7 day window where your GL, Stripe's payout report, and your bank statement do not agree. If you reconcile weekly, you will miss small variances and assume they resolve in the next week. They don't—they stack. Anatomy of a real 500-payout audit We pulled six months of affiliate payouts (May–October) from a software partner program: 512 payouts across Stripe, Razorpay, and manual ACH. Here are the gaps we found. Gap Type Occurrences Avg. Per Payout Total 6-Month Drift Processor fee (not coded to GL) 412 / 512 ₹18–₹42 ₹14,320 FX rounding (multi-currency) 156 / 512 ₹15–₹89 ₹8,940 Settlement delay (GL vs. bank, 3–7 day lag) 512 / 512 N/A (time lag) Invisible until month-end reconciliation GL account mismatch (Expense vs. Bank) 512 / 512 N/A (balance sheet lag) ₹50K+ sitting in AP vs. clearing from bank Duplicate payout (manual + processor batch) 8 / 512 ₹1,200–₹3,500 ₹18,640 (recovered) Payout reversal (partial, fee dispute) 12 / 512 ₹320–₹1,100 ₹7,280 (not coded back to GL) Total 6-month drift: ₹49,180 across 512 payouts. That is 9.2% of gross affiliate spend unaccounted for. None of it was a processor error. All of it was reconciliation gap. Detection checklist: Spot payout drift in 30 minutes You do not need a full audit to find the leak. This checklist isolates the three highest-impact gaps in one session. Pull three parallel reports (this week): Your GL: Accounts Payable and Expense:Affiliate Commissions for the past month. Stripe Dashboard: Payouts tab, filtered to last 30 days. Export the full payout ledger (not just summary). Your bank: Last 30 days of cleared transactions, filtered by known affiliate payout dates. Layer them side by side: Pick one affiliate (choose someone who got paid in multiple currencies or multiple times). Trace one payout from GL creation → Stripe record → bank clearing. Note the amounts at each step. GL amount ≠ Stripe amount? Likely a processor fee not coded. Stripe amount ≠ Bank amount? Likely FX rounding or a second processor fee. Measure the time lag: When did you record the c