1
3 Comments

The part of a DIY affiliate program that bites six months later

Every few weeks someone here decides to drop their affiliate platform and build it themselves. Usually for a good reason: the subscription costs the same whether you have two affiliates or two hundred, and at two affiliates that is a hard bill to justify.

Tracking is the easy part. A referral code, a cookie, a row saying this customer came from that partner. You can have that working in a weekend.

The part that costs you is reversal.

A commission gets credited when a payment succeeds. Then, weeks later, that payment stops being real. A refund. A chargeback landing 90 days after the charge. A subscription disputed after three renewals. Now you owe yourself money back from someone you have already paid.

Three things I would get right on day one, because retrofitting them is miserable:

Store the charge id on the commission row at write time. Not the invoice id, the charge id. A dispute arrives on the charge, and if you kept only the invoice reference you are doing a reverse lookup at the exact moment you want zero ambiguity.

Make the clawback idempotent and order independent. A refund and a dispute can both land against the same charge. You do not want to claw back twice for one loss, and you cannot assume they arrive in a sensible order.

Pay on first successful payment, not on trial start and not on trial-to-paid. Everything before the money actually arrives is a forecast.

None of this is difficult. It is just invisible until the first chargeback lands, and by then you have paid a real person for revenue you did not keep.

Disclosure: I build Referralful, which is affiliate software, so I have skin in the build versus buy argument. The build case is genuinely strong when the program is small. Just budget for the reversal path rather than the tracking.

on July 30, 2026
  1. 1

    the part affiliates feel is the surprise tho. a commission vanishing months later reads as u cheating them unless the clawback window was in the terms on day one.

  2. 1

    The reversal insight is correct and under-appreciated, and the charge-id-not-invoice-id detail is the kind of thing you only know if you've been burned by it. But the sharper thing worth naming, for anyone reading this deciding build vs buy, is what you're actually doing with this post, because it's a masterclass in positioning and most founders selling a tool get it exactly backwards.

    The instinct when you sell affiliate software is to argue against building it yourself. You did the opposite. You conceded the build case is genuinely strong for small programs, then showed the one place it quietly costs more than it looks. That's far more persuasive than "don't build it," because you're not fighting the reader's instinct, you're agreeing with it and then extending it one step further than they'd thought. The honesty is the sales mechanism. A reader trusts the person who just told them "yes, build it" and then respects the caveat, in a way they'd never trust "just buy mine."

    The deeper move: you've reframed the buy decision away from tracking (where DIY looks easy and you look expensive) toward reversal (where DIY looks deceptively hard and your value becomes obvious). Same product, completely different frame, and the frame is chosen so the comparison happens on the ground where you win. Most tool founders let the customer anchor on the easy 80% and then wonder why "I'll just build it" keeps winning. You moved the fight to the invisible 20% that bites later. That's the whole game.

    The only thing I'd add for the reader: reversal is the first hidden cost, but the second is the reconciliation and payout surface (tax forms, minimum thresholds, currency, affiliate disputes over what they're owed). Same pattern, invisible until you have fifty partners, and it's where "small program" quietly becomes "not so small."

    Sharp post, and a sharper piece of positioning than it lets on.

    1. 1

      honestly the frame was less deliberate than that. i wrote reversal because it is the part i actually deal with, and the tracking side is genuinely easy, so there was nothing interesting to say about it. taking the more flattering read anyway.

      your payout point is right and it compounds with the reversal one in a way i left out. minimum thresholds are the ugly interaction: hold commission until a partner clears fifty dollars, pay it out, then a refund lands and you are clawing back against a balance that is now zero. you carry a negative balance for someone who may never earn again, and there is no clean answer, you eat it or you chase an invoice.

      the general version is that reconciliation is hard because there are two ledgers, what your app says is owed and what the rail actually sent. each is fine on its own. partial payouts, failed transfers and fx make them disagree, and almost nobody builds the join until the first partner argues about a number.