Seatext library / BotRefund evidence

How to Add Multi-Signal Bot Detection Without Slowing Down Your Site

Use lightweight client-side signals like device fingerprinting and behavioral checks that run asynchronously, cache analysis results, and send only verdicts to your server. BotRefund's 106 independent checks operate this way, adding one objective fact...

Built for advertisers who need clear, refund-ready traffic evidence.

Multi-signal detection works best when each signal runs as a small, independent check in the browser and reports back without stopping the page from rendering. BotRefund uses 106 such checks—things like console debug evaluation, window.open tampering tests, and impossible tab speed detection—each adding one objective fact about the visit. The signals are cross-checked against network, device, and behavior data, then weighed by an AI model that identifies bots with 99% accuracy. Because the heavy analysis happens off the critical rendering path, the visitor sees no delay.

What multi-signal detection means for bot protection

Traditional bot defenses often rely on a single challenge—a CAPTCHA, a JavaScript challenge, or an IP reputation lookup. Those approaches either interrupt the user or miss sophisticated bots that rotate IPs and solve challenges. Multi-signal detection collects many small, independent observations: browser API consistency, pointer movement patterns, input timing, navigation behavior, and network characteristics. No single observation decides the verdict. Instead, the system looks for corroboration across signals. BotRefund describes this as “independent evidence” that is “cross-checked context” before an “AI prediction” weighs the complete pattern.

Why performance matters for detection scripts

A detection script that blocks rendering or adds hundreds of milliseconds to page load hurts conversion rates and Core Web Vitals. Visitors abandon slow pages, and search engines rank them lower. The goal is to gather enough evidence to separate humans from automation while keeping the script off the critical path. That means no synchronous DOM blocking, no large payloads, and no round-trips before the page becomes interactive.

Lightweight signal categories that don't block rendering

  • Browser API consistency checks – Tests like the Console Debug Evaluator verify that standard APIs behave as designed. Automation tools often patch or hide APIs, creating mismatches a real browser doesn’t produce. The check runs in microseconds and returns a single boolean flag.
  • Behavioral biometrics – Pointer movement, click timing, scroll patterns, and form interaction speeds. Bots struggle to reproduce human tremor, hesitation, and varied timing. These signals are collected passively as the user interacts; they don’t require extra network requests.
  • Navigation and context anomalies – Checks like window.open tamper detection and impossible tab speed look for scripting artifacts that don’t occur in normal browsing. They execute once per session and add negligible overhead.
  • Device and network fingerprints – Lightweight collection of screen properties, timezone, language, and connection type. These are read once and cached.

Step-by-step implementation process

  1. Add the detection script asynchronously. Load it with async or defer so it never blocks HTML parsing. BotRefund’s snippet installs in about one minute and starts collecting signals immediately.
  2. Configure signal sampling. Not every signal needs to run on every pageview. High-value pages (landing pages with ad traffic, checkout, signup forms) get the full 106-check suite. Blog pages can run a lighter subset.
  3. Send signals to the analysis endpoint in batches. Queue observations in the browser and flush them with sendBeacon or a non-blocking fetch. This avoids adding latency to user interactions.
  4. Cache the verdict client-side. Once the AI model returns a bot/human probability, store it in a first-party cookie or localStorage with a short TTL (e.g., 15 minutes). Subsequent pageviews read the cached verdict instead of re-running the full analysis.
  5. Expose the verdict to your backend via a header or cookie. Your server reads the cached verdict to suppress conversion pixels, block form submissions, or flag the session in analytics—without calling an external API on every request.
  6. Monitor script performance in Real User Monitoring (RUM). Track the script’s execution time, payload size, and impact on LCP/INP. If any signal pushes the 95th percentile above 50 ms, disable or defer it.

Common mistakes that add latency

  • Synchronous third-party calls – Waiting for an external API before rendering the page. Always use async collection and local caching.
  • Over-collecting on every page – Running the full signal suite on low-risk pages wastes CPU and bandwidth. Scope the heavy checks to pages where ad spend or conversions are at stake.
  • Large fingerprint payloads – Sending full canvas fingerprints or WebGL dumps on every request. Hash or truncate fingerprints client-side; send only the hash.
  • No cache strategy – Re-evaluating the same visitor on every navigation. A short-lived client-side cache eliminates redundant work.

How to verify the setup works

  1. Open DevTools Network tab and confirm the detection script loads with async/defer and finishes before DOMContentLoaded.
  2. Check the Console for any blocking warnings or long-task entries attributed to the detection script.
  3. Verify the verdict cookie appears after the first batch of signals is sent and that subsequent pageviews read the cookie instead of re-posting signals.
  4. Run a Lighthouse or WebPageTest audit; the script should add <50 ms to Total Blocking Time and <10 KB to transfer size.
  5. Confirm your backend receives the verdict header/cookie and can suppress pixels or log the session accordingly.

Key facts

FactDetailSource
Independent checks106 signals collected per visitS1, S7, S9
Signal philosophyEach signal adds one objective fact; cross-checked before AI predictionS1, S7
Reported accuracy99% bot/human identification via corroborated patternS1, S7
Setup timeAbout one minute to add to websiteS2
Ad spend recoveryRefunds from Google and Meta dating back to 2017S2, S8
Case study resultFinTrust recovered $140,000, 14% bot click rate, +18% conversion rateS4
Detection coverageHeadless browsers, CAPTCHA solving, residential proxies, spoofed dataS5
Behavioral signalsSuperhuman input speed, absent pointer movement, disposable emailsS5

Limitations and when this approach doesn't apply

  • First-visit latency – The very first pageview for a new visitor runs the full signal suite. On extremely performance-sensitive landing pages (e.g., AMP, zero-JS environments), even async collection may be too much. Consider a server-side heuristic for the first hit and client-side enrichment thereafter.
  • Privacy regulations – Some jurisdictions treat fingerprinting as personal data. Ensure you have a lawful basis (legitimate interest or consent) and honor Do Not Track / Global Privacy Control signals.
  • Sophisticated adversaries – Well-funded bot operators can eventually mimic any client-side signal. Multi-signal raises the cost, but it’s not a cryptographic guarantee. Pair with server-side anomaly detection (rate limits, IP reputation, conversion outcome tracking).
  • Non-browser clients – API traffic, mobile apps, and headless crawlers that don’t execute JavaScript won’t be evaluated by client-side signals. Use separate API authentication and rate limiting for those channels.

FAQ

How many signals do I actually need?

Start with 10–15 high-signal checks (API consistency, pointer behavior, input speed, navigation anomalies). Add more only if your false-positive/false-negative rates demand it. BotRefund’s 106 checks are designed for enterprise volume; smaller sites often reach diminishing returns after 20 well-chosen signals.

Does caching the verdict create stale decisions?

A 15-minute TTL balances freshness and performance. If a visitor’s behavior changes mid-session (e.g., they open a headless automation tool), the next signal batch will update the verdict. For high-stakes actions (checkout, form submit), force a fresh check on that specific interaction.

What’s the impact on Core Web Vitals?

When loaded asynchronously and kept under 10 KB gzipped, the script typically adds <10 ms to Total Blocking Time and has no measurable effect on Largest Contentful Paint or Interaction to Next Paint. Monitor your own RUM data to confirm.

Can I run this without a third-party service?

Yes. Open-source libraries like FingerprintJS, BotD, or custom behavioral collectors can implement the same pattern. The trade-off is you maintain the signal logic, model updates, and false-positive tuning yourself. BotRefund’s managed service handles model retraining and signal updates automatically.

How do I handle visitors who block third-party scripts?

Host the detection script on your own domain (first-party) and serve it from your CDN. This avoids ad-blocker and tracking-prevention filters that target known third-party domains. BotRefund supports first-party deployment.

What’s the cost model for multi-signal detection?

BotRefund tiers pricing by monthly ad spend: under $10K, $10K–$50K, $50K–$250K, $250K–$1M, $1M–$5M, over $5M. Enterprise plans are custom. The free tier includes a bot audit and basic protection. Self-hosted open-source options have zero licensing cost but require engineering time.

When should I escalate to a refund request?

When your detection system consistently flags invalid clicks (bot traffic, competitor clicks, publisher fraud) and you have client-side proof logs (GCLID/FBCLID, behavioral video, signal timestamps). BotRefund’s guide outlines the exact evidence Google and Meta require for a successful dispute.

Further reading and comparison sources

These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.

Learn more

Visit the website for more information.

Learn more