Your own IVT server. Every flag explained.

Invalid traffic detection at ad-tech scale: 125 detectors, a Go engine built for 500M+ scans per day, on a dedicated server that scans nothing but your traffic.

Detectors
125 in total: 98 high risk, 18 medium, 9 low. Each one open, documented, and inspectable.
Ships
Browser snippet, Go detection server, React dashboard, Kafka and ClickHouse data pipeline.
Runs on
A dedicated server rented for you alone. Your signals, your database, your rules.
Billing
No per-scan billing. No black boxes.
Waitlist

Dedicated OpenIVT servers are being made available in stages. Leave a work email and the team will contact you directly.

The black-box problem

The IVT industry runs on closed, proprietary scoring engines that don't talk to each other. One vendor routinely flags another's clean traffic as invalid, and vice versa, with no shared methodology.

Publishers get penalized twice. Advertisers lose trust. Legitimate traffic gets caught in the crossfire.

OpenIVT's stance: every detector is open, documented, and inspectable. When traffic is flagged, you can see exactly which signal fired and why.

Four components, one pipeline

A full-stack platform that catches bots, click farms, spoofed devices, and cookie-fraud rings that drain digital advertising budgets. Everything below ships together on a dedicated server that runs only your scans.

ComponentStackRole
Browser SnippetTypeScriptA ~500 byte loader plus a ~12 KB probe bundle that collects client-side signals.
Detection ServerGoRuns all 125 detectors concurrently against every signal.
DashboardReact, ViteManage threats, inspect events, browse the catalog, view analytics.
Data PipelineKafka, ClickHouse, RedisHigh-throughput ingest, storage, and caching.

How a beacon becomes a verdict

The browser snippet sends beacons to a Go ingest API, which publishes them to Kafka. A worker pool consumes the topic, runs the 125 detectors, and writes results to ClickHouse. Redis provides caching and the cookie-collision aggregation.

The dashboard talks to the same Go API, backed by PostgreSQL for configuration and ClickHouse for analytics.

Ingest and detection
Browser snippetTypeScript, 4 beacons per page view
Ingest APIGo, POST /api/v1/signals
Kafkasignal topic
Worker poolruns 125 detectors
ClickHouseevents and results, 90-day TTL
Rediscache, cookie-collision aggregation
Query
DashboardReact, Vite
APIGo
PostgreSQLconfiguration
ClickHouseanalytics

Four beacons per page view

BeaconCarriesTiming
MainPage-load signalssent immediately
AuctionPrebid and SSP signalsdelayed ~500 ms, polls up to 6 s
NSFWOn-device image classification with TF.js MobileNetV2fires after 5 s idle
Session summaryDwell and interaction totalssent when the page is left

125 detectors in three risk tiers

High risk98
Medium risk18
Low risk9
RangeCategoryExamples
High risk, 98 detectorsHeadless and WebDriver bots, click and impression fraud, canvas and WebGL spoofing, ad injection, proxy and VPN, session replay, cookie-jar injection, honeypot traps.
H001-H010Bot and automationWebDriver, headless Chrome, Selenium, Puppeteer, Playwright
H011-H020Click fraudClick farms, rapid clicks, click injection, invisible clicks
H021-H030Impression fraudPixel stuffing, ad stacking, background tabs, pop-unders
H031-H040Datacenter, proxy and spoofingDC IPs, VPN, Tor, domain and referrer spoofing
H041-H050Device and hardware spoofingCanvas, WebGL, timezone, platform mismatch
H051-H060Malware and injectionAd injection, DOM tampering, script injection, form jacking
H063-H070Session and network anomaliesSession replay, IP rotation, geo mismatch, DNS anomalies
H071-H080Behavioral anomaliesRobotic mouse paths, no-interaction sessions, instant form fill
H081-H094AI crawlers, farms and timingGPTBot, human farms, botnets, impossible timing
H096-H109Measurement tampering and environmentSDK spoofing, IP, ASN and device blocklists, VM and container detection
H112-H124Advanced signals, audience and cookie fraudWorker abuse, cookie injection, TLS fingerprinting, click-coordinate replay, honeypot traps
Medium risk, 18 detectorsSuspicious referrers, viewability spoofing, floor manipulation, adult-content misrepresentation.
M001SuspiciousRefererKnown traffic brokers, high-risk TLDs, NXDOMAIN referrers
M010AbnormalErrorRateAbnormal error rates
M023AudienceInjectionPrebid RTD fake segments, inflated ORTB2 floors, DMP script stacking
M024AdultContentMisrepresentationRTA label, adult-only ad network scripts, IAB25 categories, age gates, on-device ML image classification
Low risk, 9 detectorsOld browsers, deprecated OSes, missing headers, incomplete signals.
L001OldBrowser
L002DeprecatedOS
L003UncommonScreenResolution
L004MissingExpectedHeaders
L005NoJavaScript
L007HighLatencyClient
L008IncompleteSignalPayload
L009FirstTimeVisitor
L014UnusualFontList

Code numbering is sparse: retired detectors keep their codes reserved.

From the catalog

Five entries, as they appear in the Threat Catalog. Every detector in the dashboard is documented at this level: what signal it reads, what it correlates against, and what a hit means.

CodeNameWhat it catches
H116AudienceCookieInjectionDMP and identity-graph cookies (BlueKai, LiveRamp, TradeDesk UID2, Lotame, Adobe AAM) present without the data-provider script ever having loaded. These orphan cookies are the fingerprint of tools like Humanex, MultiLogin and AdsPower that pre-load premium audience cookie jars to inflate CPMs.
H117CookieValueCollisionAudience-cookie replay: the same DMP cookie value hash seen across many distinct IPs in a 30-minute rolling window. A ClickHouse aggregation job runs every 5 minutes and writes collision counts to Redis. Only a djb2 fingerprint of the cookie ever leaves the browser.
H123AdClickPointCollisionCoordinate-replay click bots: the same 2 px-quantized ad-click coordinate hash correlated across distinct IPs and across different sites in a 30-minute window.
H124HoneypotThe snippet plants an off-screen decoy ad and a visually hidden trap link no human can see or reach. Any click on them is programmatic by construction. Server-side corroboration keeps link prefetchers and preview crawlers clean.
M024AdultContentMisrepresentationRTA label, adult-only ad network scripts, explicit meta declarations, IAB25 categories, age gates, URL and title keywords, and on-device ML image classification.

Your signals, your database, your rules

Nothing is shared. Your server scans your traffic and nobody else's. There is no vendor-side scoring, no per-scan billing, and no black box between a flagged event and the signal that fired.

ItemDetail
Cookie valuesNever leave the browser in plaintext. Only a lightweight fingerprint is emitted.
RetentionRaw signal events and detection results live in ClickHouse, partitioned by day, with a 90-day TTL.
GeoIPOptional MaxMind GeoLite2 databases enable the IP and ASN detectors.
ProvisioningA dedicated server with the full stack ready to go: Go detection server, snippet, dashboard, PostgreSQL, Redis, ClickHouse and Kafka. Single tenant, so no other customer's scans ever run on it. Optional GeoIP and your admin account are set up in the dashboard.
APIPOST /api/v1/signals for ingest, plus threat toggles, analytics stats, top threats, cookie collisions, an events log, and API keys.

Two script tags to integrate

The loader is about 500 bytes. It pulls in the ~12 KB probe bundle, which collects client-side signals and posts them to the ingest endpoint on your server.

From there the dashboard takes over: Threats, Threat Catalog, Reports, Events, Inventory Quality, Cookie Collisions, Implementation, and Settings.

Snippet integration
<script src="https://your-cdn.com/ivt-loader.min.js"></script>
<script>
  window.__ivt = window.__ivt || { q: [], t: Date.now(), v: '1.0.0' };
  window.__ivt.q.push(['config', {
    endpoint: 'https://your-server.com/api/v1/signals',
    apiKey: 'YOUR_API_KEY',
    probesUrl: 'https://your-cdn.com/ivt-probes.min.js'
  }]);
</script>