Product
Publishers
Advertisers
Networks
Help
Pause animations

Fraud Defense

Bad installs get stopped, and each rejection says why.

We check every tap, keep watching traffic after it and reject users behind what looks wrong. Their conversions are held, unpaid and uncharged.

Four checkpoints, one offer

Four checkpoints, one offer

Skip this animation Skip these steps
  1. 01 At the tap

    Every tap goes through our checks

    Before the redirect, each tap passes our checks. One that fails never reaches the advertiser, so nobody pays for it.

    Harbor Blocks on Pebble Rewards

    • u_48213 Passed iPhone, Texas
    • u_48262 Passed Android, Texas
    • u_48190 Passed iPhone, Ohio

    What our checks said about u_48213

    Device
    Nothing wrong found
    Pass
    Connection
    Nothing wrong found
    Pass
    Account
    Not on a reject list
    Pass
  2. 02 Around the clock

    Patterns are checked across accounts

    We keep comparing each offer's traffic across publishers and over time, so what looks fine in one click still shows up. u_48262 looks like a farm account, so it's rejected.

    Harbor Blocks on Pebble Rewards

    • u_48213 In line iPhone, Texas
    • u_48262 Rejected Android, Texas
    • u_48190 In line iPhone, Ohio

    What the pattern checks compared

    This offer's traffic
    In line with other publishers on it
    Pass
    Against itself
    In line with its own history
    Pass
    u_48213
    Nothing found
    Pass
    u_48262
    Looks like a farm account
    Rejected
  3. 03 At the conversion

    A rejected user's conversion pays nobody

    Their taps are refused at the click page. A conversion that still arrives is held: the advertiser isn't charged, the publisher isn't paid and no postback goes out.

    Harbor Blocks on Pebble Rewards

    • u_48213 Paid $4.20 iPhone, Texas
    • u_48262 Rejected Android, Texas
    • u_48190 Paid $4.20 iPhone, Ohio

    When the conversions arrive

    u_48213, install
    $4.20 to the publisher, postback sent
    Paid
    u_48190, install
    $4.20 to the publisher, postback sent
    Paid
    u_48262
    Taps refused. A conversion that still arrives is held: $0, no postback, no charge
    Held
  4. 04 Looking back

    Farm accounts found later are reversed

    When a user we paid for turns out to be one of several accounts, we reverse that pay and send a reversal postback with the same action ID and the reason.

    Harbor Blocks on Pebble Rewards

    • u_48213 Paid $4.20 iPhone, Texas
    • u_48262 Rejected Android, Texas
    • u_48190 Reversed iPhone, Ohio

    When something turns up later

    u_48190
    Found to be a farm account
    Rejected
    Its install
    $4.20 reversed, dated on the day it was earned
    Reversed
    Reversal postback
    Same action ID, with the reason
    Sent
    u_48213
    Nothing found
    Paid

Step 1 of 4

Follow u_48213's click into Reporting

01What we stop

The install fraud we stop.

We use more signals than we name here, and we don't publish them or where their limits sit. A published limit is one people stay just under.

  • Farms

    Account farms.

    One person behind many accounts, whether on one device or many.

  • Devices

    Faked devices.

    Emulators, and devices made to look like something they aren't.

  • Locations

    Hidden locations.

    Traffic dressed up to look like it comes from somewhere else.

  • Bots

    Automated traffic.

    Bots and scripted browsers tapping offers in place of people.

02Real-time fraud defense

Fraud flagged before you count the money.

Elsewhere, fraud shows up at the reconciliation, 15 to 60 days after the install. We flag most of it in real time, before anyone is credited.

One install on Pebble Rewards u_48262

The usual way

Fraud found at the reconciliation

  1. The install

    Install credited Credited

    $4.20 counted as owed to you.
    2,100 pebbles credited to the player.

  2. 15 to 60 days

    Waiting on the reconciliation

    The player can spend or cash out the pebbles meanwhile.

  3. The reconciliation

    Reversal arrives Reversed

    Your books
    $4.20 marked down
    Player balance
    2,100 pebbles clawed back

On AffiliateOS

Fraud flagged as it happens

  1. The install

    Install rejected Rejected

    $4.20 kept off your books.
    2,100 pebbles kept off the player's balance.

  2. The reconciliation

    Nothing to reverse

Cleaner books, happier players. Anything found later is reversed as usual, with a reversal postback carrying the original action ID and the reason.

Rejected conversions, explained

03Over-blocking

Built to leave real users alone.

A rule that blocks real users costs the publisher and the user. These limits are written into the rules.

  • Offer stays on

    The offer keeps running.

    When one publisher's traffic on an offer looks wrong, we reject the flagged users. Our checks never pause the offer; a person decides that.

  • Second look

    A person checks what you question.

    Send us the user ID. If we got it wrong, we release the user and their new conversions pay.

  • End dates

    Every rejection ends.

    A rejection expires 30 days after it's set, or sooner if a person reviews it and releases the user.

04What each side sees

What publishers and advertisers each see.

Publishers see every rejected user and why. Advertisers see what each channel cost them. Neither sees the other's numbers.

Publishers · Traffic Quality

Traffic Quality

Rejected users and reasons (sample)
User (sub id) Offer Reason Rejected Expires
u_48262 Harbor Blocks One device, many users 10/29/2026 11/28/2026
u_48277 Harbor Blocks Failed our connection checks 10/29/2026 11/28/2026
u_48251 Harbor Blocks Failed our connection checks 10/24/2026 11/23/2026
u_48239 Tidewater Putt Failed our device checks 10/22/2026 11/21/2026
  • Every rejected user, the offer, the reason in plain words and the day it expires.
  • Their conversions show as rejected in Conversions: not paid, no postback.
  • The same list by API: GET /publisher/traffic-quality.

Advertisers · By channel

By channel

Spend and conversions for each channel. Traffic sources show as channel IDs.

Spend by channel (example)
Channel Conv. Spend Cost/conv Action
7fKa9cZ2eQ… 38 $117.80 $3.10 Report an issue
1bXd4aT05w… 21 $69.30 $3.30 Report an issue
c4Ne20fR7k… 12 $42.00 $3.50 Report an issue
  • Spend, conversions and cost per conversion for each channel.
  • Each traffic source appears as a channel ID, never a publisher's name.
  • Report an issue on any row. Our team reviews every report.

This offer isn't available for your account.

What the player sees

On a tracking link, a rejected user's tap stops at our click page with this line and never reaches the advertiser. It doesn't say the offer ended, so nobody reports a live offer as dead. On the Hosted Offerwall, a rejected player can't start a new offer.

Our promise

A rejected user charges nobody and pays nobody.

Their taps stop at our click page. A conversion that still arrives is held.

  • Not charged

    The advertiser's balance isn't touched.

  • Not paid

    The publisher earns nothing on it, and the line shows as rejected.

  • No postback

    Nothing is sent, so no player is credited by mistake.

Questions

What publishers and advertisers ask us.

Something else? Email hello@affiliateos.ai.

Will this block my real users?

Our checks are built to catch what real users don't do. A flagged offer keeps running, every rejection ends after 30 days and a person reviews any rejection you question.

What if you rejected a real player?

Send the user ID from Traffic Quality to hello@affiliateos.ai. A person checks the rule that fired. If we got it wrong, we release the user and their new conversions pay. Conversions we held while they were rejected aren't paid automatically; a person reviews them.

What do advertisers see?

Spend, conversions and cost per conversion for each channel, with each traffic source shown as a channel ID, never a publisher's name. Every row has a Report an issue button, and our team reviews every report.

Can a conversion wait to be cleared before it pays?

Yes. Our team can turn it on for a publisher. A conversion is then recorded but isn't paid and sends no postback until it's cleared or a person reviews it.

Can you take back pay you already sent?

Yes, for example when a user we paid for turns out to be a farm account. You get a reversal postback with the original action_id and the reason. The reversal is dated on the day of the conversion and takes back exactly what the credit paid. Not every rejection does this; some only hold conversions from then on.

Will I still get reversals later?

Sometimes. An advertiser can still take a conversion back after the fact, and we pass that on as a reversal postback with the original action_id. A rejected user's conversion was never paid, so it never needs reversing.

Every rejection shows its reason and end date.