Invalid Traffic

Stop bots before they hit Meta CAPI, Google Ads, and your warehouse

Up to half of programmatic ad traffic is invalid. When bot conversions reach Meta CAPI or Google Ads server-side, they corrupt Smart Bidding, inflate ROAS, and waste delivery quota. Datafly Signal filters bots at the Signal Core, before any vendor delivery, with rules you control per pipeline.

20-50%

Of programmatic traffic is bots

Industry estimates from HUMAN Security and Pixalate IVT reports

$0

CAPI quota spent on bots

Bot events stripped before vendor delivery, not after

6 layers

Of detection

Identity cache, signatures, browser signals, IP and ASN, velocity, impossible travel

Per pipeline

Configurable rules

Web, mobile, and server pipelines tuned independently

Why client-side bot detection isn't enough

Most bot filtering happens after the fact, in vendor dashboards or analytics tools, after the bot conversion has already polluted Smart Bidding signals and burned your delivery budget. By the time you spot it, the damage is done.

Vendor APIs don't reject bots well

Meta CAPI, Google Ads, TikTok Events API, and LinkedIn CAPI accept whatever events you send them. They have their own IVT detection downstream, but a bot conversion arriving with a valid event ID and matching hashed PII will be ingested. Smart Bidding learns from it. Lookalike audiences use it. The pollution happens upstream of any vendor-side filtering.

gtag.js and Meta Pixel run inside the bot

If a headless Chromium scraper visits your checkout page, it executes gtag.js, fires the purchase event, and the conversion is recorded. Client-side tags can't reliably distinguish bots because they run in the same JavaScript context the bot is driving. The browser fingerprint looks legitimate because it is a real browser, just one being remote-controlled.

Bot CAPI events still cost you quota

Vendor APIs are rate-limited and metered. Every bot event pushed to Meta CAPI counts against your quota whether the conversion is later flagged invalid or not. For high-traffic pipelines this means burning real budget on traffic you should never have delivered, and risking legitimate events being throttled at peak.

How Datafly Signal filters invalid traffic

1

Capture every event server-side

Datafly.js sends every event to your own first-party subdomain. The Ingestion Gateway captures the raw HTTP request, including headers, IP, user agent, and timing data that a client-side tag wouldn't have access to.

2

Run the bot filter at the Signal Core

Before any pipeline transformation, the Signal Core evaluates the event against the bot filter ruleset. Six layers of detection run against it: a cache of identities already judged to be bots, known-bot user-agent signatures, browser-signal validation, IP and autonomous-system classification, request velocity, and impossible travel.

3

Observe before you enforce

Every detection layer can run in observe mode first. The layer still scores each event into bot_score and reports exactly what it would have caught, but its score never counts toward the drop decision, so no real conversion is ever lost while you evaluate it. Watch a new layer on live traffic, confirm it isn't flagging real users, then switch it to enforce per layer when you're confident. New environments start with every layer in observe mode, so the first deploy measures bot rate without changing delivery.

4

Drop, quarantine, or tag

Once a layer is enforcing, each rule has a configurable action. Drop removes the event entirely. Quarantine routes it to a separate warehouse table for analysis without delivering to vendors. Tag passes the event through with an is_bot flag for downstream filtering.

5

Real-time metrics and audit

Every filtered event is logged with its match reason. The management UI shows the bot-filtered rate per pipeline in real time, alongside delivered and consent-filtered counts. Drill into any specific event to see which rule matched.

6

Network intelligence refreshes itself

Cloud provider IP ranges, Tor exit nodes, Spamhaus lists, and autonomous system data refresh automatically inside your own deployment, with no redeploy and no call to us. Every source can be pointed at an internal mirror, so this works air-gapped. The user-agent signature list ships with platform releases.

Bot filter configuration

Rules are versioned alongside the rest of your pipeline configuration. Change them via the management UI or by committing to your blueprint repo. Every rule change is auditable.

bot-filter.yamlYAML
# bot-filter.yaml
# Bot filtering is evaluated at the Signal Core, before any
# transformation or vendor delivery. Each layer contributes a
# weighted score; the thresholds decide what happens.

enabled: true
preview_mode: false      # true = nothing is dropped, scores still recorded
flag_threshold: 0.5      # score >= this  -> tagged, still delivered
block_threshold: 0.7     # score >= this  -> dropped
log_blocked_events: true # dropped events routed to the bot-events topic
server_side_bypass: true # skip for HMAC-authenticated server events

layers:
  # Identities already judged to be bots short-circuit the rest.
  identity_cache:
    enabled: true
    auto_write: true
    ttl_seconds: 86400

  # IAB/ABC spiders and bots, plus automation framework tokens.
  iab_patterns:
    enabled: true
    custom_patterns:
      - "my-internal-crawler*"

  # What a real browser reports and automation often does not.
  signal_validation:
    enabled: true
    require_screen_dimensions: true
    require_timezone: true
    require_user_agent: true
    check_tz_geo_mismatch: true

  # One question, two sources: published ranges, then the
  # autonomous system for the hosting providers they miss.
  ip_classification:
    enabled: true
    observe: false
    block_spamhaus: true
    block_tor: true
    block_datacenter_ips: true
    allowlisted_cidrs: ["203.0.113.45/32"]
    check_asn: true
    allowlisted_asns: [64496]   # your own corporate network
    blocked_asns: []

  # Per-identity sliding window: velocity and impossible travel.
  behavioural:
    enabled: true
    window_seconds: 5
    max_events_per_window: 50
    impossible_travel_enabled: true
    max_km_per_hour: 1000

allowlisted_user_agents:
  - "DataflyHealthCheck*"

Six layers of detection, one config

No single signal catches every bot. Datafly Signal layers detection so each rule covers what the others miss.

Known-bot signatures

Catches the declared crawlers and the automation tools that name themselves in the request: headless Chrome, Selenium, Puppeteer, Playwright, PhantomJS. Built on the IAB/ABC Spiders and Bots list, and you can add your own patterns per pipeline.

IP and autonomous system

Real customers do not shop from a data centre. Spamhaus, Tor and the published cloud ranges are covered, and autonomous-system lookup catches the hosting providers those ranges never list. Allowlist your own networks by range or AS number.

Browser-signal validation

Real browsers report a screen size, a timezone, a locale and a language. Automation frequently does not, and rarely keeps its browser version current. A timezone that contradicts the location of the IP is another tell. Each is weighted, so no single quirk condemns a real visitor.

Velocity

Some bots look perfect. Genuine browser, residential address, clean user agent, and 400 events in ten seconds. A sliding window per visitor identity catches the traffic that passes every static check but behaves like nothing human.

Impossible travel

One visitor in London and Skopje 37 milliseconds apart is not a visitor. Catches residential-proxy rotation across countries while the cookie persists, which every other layer here would wave through.

Observe mode + quarantine

Run any detection layer in observe-only mode: it scores events and shows what it would catch, without dropping a single one. Flip it to enforce per layer once you trust the numbers, and quarantine filtered events to a warehouse table for analysis.

What gets filtered, by detection layer

Each detection layer targets a different category of invalid traffic. They run in parallel at the Signal Core, with the first match determining the outcome.

LayerWhat it catchesDefault action
Identity cacheIdentities already judged to be bots, without re-running the restDrop
Known-bot signaturesDeclared crawlers, and automation frameworks that name themselvesDrop
Browser-signal validationMissing screen, timezone or locale; stale browser; timezone contradicting the IPScore
IP and autonomous systemSpamhaus, Tor, cloud ranges, and hosting networks those ranges missScore
VelocityScripts hammering the endpoint from one browser identityScore
Impossible travelResidential-proxy rotation across countries on a persistent cookieScore

Frequently asked questions

What is invalid traffic and why does it matter for paid media?
Invalid traffic (IVT) is bot, scraper, datacenter, and automation traffic that reaches your site without a real user behind it. Industry estimates from HUMAN Security and Pixalate put IVT at 20-50% of programmatic ad traffic. When bot conversions reach Meta CAPI, Google Ads, or TikTok server-side, they corrupt Smart Bidding, inflate ROAS calculations, and burn delivery quota that should be available for real customers.
How is server-side bot filtering different from gtag.js or Meta Pixel?
Client-side tags run inside whatever browser context loads them, including headless Chromium scrapers and Selenium-driven bots. They cannot reliably distinguish a bot from a real user because the JavaScript fingerprint is genuine, just remote-controlled. Datafly Signal filters at the Signal Core, after events arrive at your gateway, using server-observed signals (IP and autonomous system, request velocity, geography, and headers) that client-side tags do not have access to.
Will filtering bots reduce my reported conversions?
In dashboards yes, in true performance no. Reported conversion counts may drop because bot conversions stop being counted. The conversions that remain are real, which is what Smart Bidding and lookalike audiences should be optimising on. Most teams see CAPI match rates and ROAS calculations improve once bots are filtered upstream.
Can I see which events were filtered and why?
Yes. Every filtered event is logged with the rule that matched, the action taken (drop, quarantine, or tag), and the original event payload. The management UI shows bot-filtered rate per pipeline in real time and lets you drill into specific events for investigation. You can route filtered events to a quarantine warehouse table for offline analysis instead of dropping them entirely.
Can I trial a new bot rule without risking real conversions?
Yes. Every detection layer has an observe mode. In observe mode the layer still scores each event and reports what it would have filtered, but its score never counts toward the drop decision, so no real conversion is ever lost while you evaluate it. The management UI shows the would-be filter rate per layer in real time. When the numbers look right, you switch that layer from observe to enforce. New environments start fully in observe mode, so your first deployment measures bot rate before it changes any delivery.
Does Datafly Signal replace IVT detection at the vendor level?
No, it complements it. Vendors like Meta and Google have their own downstream IVT detection. Datafly Signal filters upstream so the bot conversion never reaches the vendor in the first place, saving your CAPI quota and preventing the bot signal from polluting Smart Bidding before vendor-side IVT catches it. The two layers stack.
Can I bring my own bot signature list?
Yes. You can add your own user-agent patterns, IP allowlists, and ASN allow and block lists per pipeline, and tune the velocity and impossible-travel thresholds. Network intelligence (cloud provider ranges, Tor exit nodes, Spamhaus, and autonomous system data) refreshes automatically in your own deployment without a redeploy. The user-agent signature list ships with platform releases. Every rule is version-controlled alongside your blueprint.

Stop paying for traffic that doesn't convert

Request a technical walkthrough. We'll show you the bot rate on a sample of your current event stream and what filtering it server-side would recover in CAPI quota and Smart Bidding signal quality.