Rule asn_reputation, read from the engine code

Datacenter click fraud, flagged by IP range

Datacenter click fraud is affiliate traffic sent from cloud and hosting servers instead of homes and phones. When at least 80% of an affiliate's clicks in 7 days come from those ranges, and they have 3 sales, the engine holds the sale.

By the AffiliateTracking teamUpdated 5 min read

Fraud page on demo data: held commissions, each with the rule that held it and Release and Uphold buttons, above the verdicts that explain each hold.

The fraud queue in the product, running on demo data.

The short answer

The rule needs 20 or more clicks in 7 days, 80% or more of them from a datacenter range. It also needs 3 or more sales in the same 7 days. Then it holds the commission being screened.

How the rule works

Read from internal/fraud/rules2.go. The code fixes the thresholds. No setting changes them.

  1. 01Checked at the click

    Each click's IP is checked against a built-in table of cloud and hosting ranges as it arrives. Only a yes or no is stored, never the address.

  2. 0280% of at least 20

    The engine adds up 7 days of clicks for the affiliate. Under 20 clicks it says nothing, so small affiliates can't trip it.

  3. 033 sales first

    Clicks cost an attacker nothing. Without 3 sales in the window, junk traffic aimed at your links can't put you on hold.

The exact logic

// internal/fraud/rules2.go, ASNReputation (condensed)
dc, total := sum of dc_click_daily for the affiliate, last 7 days
if total < 20 { return }
if dc/total < 0.80 { return }
if sales in the last 7 days < 3 { return }
hold(commission)

Condensed from the Go source in v0.5.0 (main 4f87f77). Comments are ours.

The signals

  • 80% or more datacenter clicks
  • 20-click minimum in 7 days
  • 3 or more sales in the window
Hold scope. It holds only the commission being screened. Nothing else in the affiliate's balance moves.

Our data

We ran the rule at its threshold

We ran 3 fixtures through the real engine on 3 Oct 2026: 2 below the line, 1 at or past it. These are the results and the engine's own words.

asn_reputation · 3 fixtures · fresh SQLite each
Each fixture run through the real engine, and whether datacenter traffic fired
FixtureResultThe engine's reason
15 of 20 clicks from datacenter ranges, 3 salesSilentNo verdict
16 of 20 clicks from datacenter ranges, 2 salesSilentNo verdict
16 of 20 clicks from datacenter ranges, 3 salesFired16 of 20 clicks in the last 7 days came from data centers, not homes or phones
The middle row shows the sales floor. 80% datacenter traffic with only 2 sales stays silent.
Datacenter traffic: where the rule fires Threshold chart: datacenter share of 20 clicks (%). The engine stayed silent at 75 and fired at 80. The line sits at 80. Datacenter share of 20 clicks (%) Fires at 80 Green: 75, silent Red: 80, fires 0100
Where datacenter traffic fires, from the fixtures above. Engine v0.5.0 (main 4f87f77), run 3 Oct 2026.

Method: one Go test against engine v0.5.0 (main 4f87f77), a new SQLite database per fixture, dry run so nothing was held. Re-run with go test ./internal/fraud/ plus the fixture list above.

What lands in your queue

When datacenter traffic fires, the verdict shows the rule, who it's about and what it saw. Release or uphold is your call, not the engine's.

Fraud queue · asn_reputation · demo dataMade-up numbers, real wording
Example held commission after datacenter traffic fired, on demo data, with the engine's reason text
PartnerWhat it sawCommissionResult
Affiliate 846 of 50 clicks in the last 7 days came from data centers, not homes or phones$130.00Commission held
heldWaits for youThe commission stays out of payouts until you decide.
releasedPaid normallyIt goes into the next payout.
upheldNot paidThe engine cancels it and takes the money back. Already paid? Use a refund.

In the wild

Almost half of web traffic is not people.

Each item re-read against its linked source on . Items we couldn't verify were cut.

Limits, and how attackers try to beat it

  • The table is small. It holds 15 IPv4 blocks from AWS, Google Cloud, Azure, DigitalOcean, Hetzner and OVH. Other hosts pass.
  • IPv6 clicks are never counted as datacenter traffic.

Residential proxies dodge the range table, at a price per click. Bought traffic still has to look human, and clicks missing normal browser headers is the next check. Fast bursts from one proxy meet the per-IP click speed limit.

Related rules

Thresholds checked against the code on . Windows roll with each sale.

Datacenter traffic questions

Is my visitors' traffic sent anywhere to classify it?

No. The ranges ship inside the engine. Classification happens on your server as the click arrives.

What about my customers on a VPN?

A few VPN clicks change little. The rule needs 80% of 20 or more clicks, plus 3 sales, before it holds anything.

When does the rule run?

On every credited sale, in the same database transaction as the credit. A sweep every 5 minutes also re-checks affiliates active in the last hour.

What does a hold cost me?

Nothing but time. A held commission stays out of payouts. Release it and it pays in the next payout. Uphold it and the engine cancels it and takes the money back.

Can I test it without holding anything?

Yes. Set AE_FRAUD_DRYRUN=1. The engine records each verdict and holds nothing.

Who wrote this

The AffiliateTracking team writes these pages from the engine's own code. Every threshold here is pinned by a test in the repository. Spot a mismatch? Tell us and we'll fix the page or the code.

This rule, on every sale,
before the payout.

Self-host for free, or let us run it for you.