Affiliate fraud detection that holds the money.
AffiliateTracking's affiliate fraud detection runs 12 rules on every sale the moment it's credited. When one fires, it holds the commission with the evidence attached, and no payout run can pay it until you decide.
Runs on every saleHolds, never auto-paysThresholds published below
A flag is a note. A hold is a stop.
What happens to every sale
Most tools flag fraud on a dashboard, then pay it anyway. Here the check happens before the money can move.
- 01Sale comes in
Your billing sends the event. It keeps its ID, so a retry can't count it twice.
- 02Commission credited
Attribution picks the affiliate and writes the commission as pending.
- 0312 rules run
Right away, on that commission. A sweep runs them again every 5 minutes.
- 04Held with evidence
If a rule fires, the commission gets a payment hold. Payout runs skip it.
- 05You decide
Release it and it pays out as normal. Uphold it and it's cancelled and clawed back.
It fails closed. If the fraud check itself errors on a sale, that commission is held with the reason screening_error instead of slipping through unchecked.
From the product code
The 12 rules, with their exact thresholds
No black box. Each rule below says what it catches, when it fires and what it holds. The code name is what you'll see in your fraud queue.
| Rule | What it catches | When it fires | What happens |
|---|---|---|---|
| Buying from yourself 3 rules | |||
Self-referralself_referral | An affiliate buying through their own link | The buyer's email matches the affiliate's, after +tags are stripped, and dots too on Gmail | Hold |
Duplicate accountsduplicate_account | One person running several affiliate accounts | The affiliate's email, with aliases stripped, is also on another active affiliate account | Hold |
Shared buyerspayment_fingerprint | A ring of affiliates buying from each other | 2 or more of the affiliate's buyer emails also bought through other affiliates' links | Hold |
| Coupon abuse 1 rule | |||
Coupon hijackcoupon_hijack | A leaked coupon stealing credit for customers other affiliates already brought in | The coupon took credit for 3 or more customers bound to other affiliates within 7 days | Hold Freezes coupon owner |
| Fake or bought traffic 4 rules | |||
Click velocityclick_velocity | Click bursts from one source | 50 or more clicks from one IP address in the last hour | Hold + burst's commissions |
Datacenter trafficasn_reputation | Clicks from servers, not people | 80% or more of 20+ clicks in 7 days came from datacenter or hosting IP ranges | Hold |
Bot trafficbot_class_gating | Traffic that gets past the known-bot filter but still looks automated | Half or more of 20+ counted clicks in 7 days are suspected bots | Hold + those clicks' commissions |
IP overlapip_overlap | Referral farms, many "affiliates" behind one office or VPN | 2 or more of the affiliate's visitor IPs also clicked other affiliates' links in 30 days | Hold + overlapping clicks' commissions |
| Suspicious conversions 4 rules | |||
Conversion velocityconversion_velocity | A sudden flood of sales on one affiliate | 30 or more commissions credited to one affiliate within an hour | Hold |
Odd conversion hoursconversion_time_anomaly | Sales that never sleep, the pattern of scripts and farms | More than half of 20+ conversions in 7 days landed between 00:00 and 05:59 UTC, far above your program's normal share | Hold |
Geo mismatchgeo_mismatch | Sales from countries the affiliate's audience isn't in | 3 or more of 5+ geo-tagged conversions in 7 days, and at least 1 in 10, came from countries none of their clicks came from | Hold |
IP fallback anomaliesip_fallback_anomaly | Affiliates living on the weakest form of credit | More than 5% of 10+ conversions in 7 days were credited by IP match, the last-resort attribution step | Hold |
One more backstop. A commission credited to a frozen or removed affiliate is held too. It isn't one of the 12. It closes a gap.
The rule most tools don't have
Coupon hijack, caught on the third customer
Your affiliate brings in a customer. Later that customer finds a coupon code on a coupon site and uses it at checkout. The coupon's owner now looks like they made the sale.
When one coupon does that to 3 customers in 7 days, its owner is frozen and the commission is held. It's the only rule that can freeze an account, because nobody else can make an affiliate's own coupon override other affiliates' customers.
Built so it can't be aimed at your best affiliates
Fake clicks cost nothing. A rule that anyone can trigger would let a rival freeze your top partner. So the rules hold narrowly.
Only the sale in question is held
A hold covers the commission being checked, plus commissions from the flagged clicks. It never locks an affiliate's whole balance.
Traffic rules need real sales first
Datacenter traffic, bot traffic and IP overlap only act once the affiliate has 3 or more conversions in the window. Junk clicks alone do nothing.
One rule can freeze an account
Coupon hijack, and it freezes the coupon's owner. Duplicate accounts reports a freeze but only holds, since anyone can sign up with someone else's email alias.
You make the call
Each hold waits in the fraud queue with its evidence, for example coupon "SPRING40" overrode 17 existing customer bindings in 7d
. Release or uphold it with one API call. Buttons in the admin screen are not built yet.
Release
The hold lifts and the commission carries on to maturity and payout as normal.
Uphold
The commission is cancelled and the money is clawed back through the ledger, so the books still add up.
Already paid?
Upholding is refused, and the refund flow reverses it instead. That way the payout record and the ledger never disagree.
Every reversal is written down, never edited. See how the ledger records it.
Try the rules without holding anything
Turn on dry-run mode and every rule still runs and records its verdict, but nothing gets held. Read what would have been caught, then switch to enforce when you trust it.
Held commissions are skipped when payout runs pick who to pay.
# Score only. Nothing gets held. $ AE_FRAUD_DRYRUN=1 ./affiliate-engine -listen :8080 -db sqlite:affiliate.db # Read the verdicts: /admin, then Fraud queue # Happy with it? Restart without the flag to enforce. $ ./affiliate-engine -listen :8080 -db sqlite:affiliate.db
Fraud checks next to the usual tools
From each tool's public homepage and pricing page, checked .
| Feature | AffiliateTracking | Rewardful | FirstPromoter | Tolt |
|---|---|---|---|---|
| Fraud checks | 12 rules, money held | Self-referral | Self-referral, suspicious leads | Not listed |
| Coupon hijack detection | ✓ Yes | Not listed | Not listed | Not listed |
Fraud FAQ
What is affiliate fraud?
It's commission paid for a sale the affiliate didn't bring in. Buying through your own link, stealing credit with a leaked coupon and sending bought or fake traffic are the common ones.
What are examples of affiliate fraud?
Self-referrals, one person running several accounts and affiliates buying from each other. Coupon codes leaked to coupon sites. Click bursts, datacenter and bot traffic. Sales from countries the affiliate's audience isn't in.
Is this AI fraud detection?
No. It's 12 fixed rules with the thresholds published on this page. Every hold says which rule fired and why, so you can check it yourself.
Can a rule hold a good affiliate by mistake?
Yes, it can happen. That's why a rule holds the money instead of cancelling the sale. You release it with one API call and the commission pays out as normal.
Can someone send junk traffic to my best affiliate to get them frozen?
No. Traffic rules need 3 or more real conversions before they act, holds cover only the flagged sales, and only coupon hijack can freeze an account.
What happens if a held commission turns out to be fraud?
You uphold it. The commission is cancelled and clawed back through the ledger. If it was already paid, the refund flow reverses it instead.
Can I test the rules before they hold anything?
Yes. Start it with AE_FRAUD_DRYRUN=1 and the rules record their verdicts without holding. Restart without it to enforce.
What if the fraud check itself breaks?
The commission it was checking is held with the reason screening_error. A broken check can't wave a sale through.
Which plans include the fraud engine?
All of them. Self-host and every cloud plan get all 12 rules and money holds. See what each plan costs.
The next coupon hijack
gets held.
Buy self-host for $99 and run all 12 rules today. Or let us run it, free for 14 days.