Seatext library / BotRefund evidence
How to Test If Your Bot Detection System Is Actually Working: A Step-by-Step Validation Guide
Test your bot detection by running controlled scripts through Playwright or Puppeteer in a staging environment, then verify your system flags the automated traffic with specific evidence — not just a generic block. Compare...
✓ Built for advertisers who need clear, refund-ready traffic evidence.
Start by deploying your detection code to a staging environment that mirrors production. Run automated browsers — Playwright, Puppeteer, Selenium — through your pages while logging every signal your system collects. A working system should surface anomalies like patched browser APIs, missing human tremors, or superhuman input speeds, then cross-check those signals before issuing a verdict. If you only see a binary allow/block with no session-level evidence, the system isn't giving you what you need to verify or dispute.
Why testing your bot detection matters
Most teams install a bot detection script, see a dashboard with green checkmarks, and assume it works. That assumption costs money. Undetected bots click ads, poison conversion pixels, and skew bidding algorithms. Over-blocking real users kills legitimate traffic and revenue. The only way to know which failure mode you're in is to test with real automation tools and real human traffic side by side.
BotRefund's approach illustrates the principle: they run 106 independent checks — including Playwright Init Scripts and Clean Context Iframe detection — but treat each signal as evidence, not a verdict. Their AI weighs the complete pattern across browser, network, device, and behavior data to reach 99% accuracy. A single anomaly never triggers a block on its own. Testing should confirm your system behaves the same way: collecting signals, cross-referencing them, and producing explainable decisions.
How bot detection testing works
Testing has two sides: positive detection (catching bots) and negative detection (not blocking humans). You need both. Positive testing means running known automation frameworks through your site and verifying the system flags them with specific, session-level evidence. Negative testing means routing real human traffic — your team, beta users, or a small production slice — and confirming the system doesn't generate false positives.
The evidence layer matters. Server-side logs (IP, headers, user-agent) catch basic scrapers but miss advanced botnets that rotate residential proxies and mimic headers. Client-side signals — browser API consistency, pointer behavior, input timing, engagement patterns — catch what server logs miss. A thorough test exercises both layers and shows you which signals actually fired for each session.
Prerequisites before you start testing
- Staging environment that mirrors production DOM, analytics, and ad pixels. Test on a subdomain or behind a feature flag.
- Known automation scripts — Playwright, Puppeteer, Selenium — configured to mimic realistic user flows: landing, scrolling, clicking, form submission.
- Human baseline sessions recorded from real users (with consent) or your team completing the same flows.
- Access to raw detection logs, not just dashboard summaries. You need signal-by-signal output per session.
- Attribution preservation — keep click IDs (GCLID, FBCLID), campaign parameters, and timestamps intact so flagged sessions map back to ad spend.
Step-by-step testing process
- Deploy detection to staging with the same configuration you plan for production. Enable full signal logging.
- Record human baseline. Have 5-10 people complete your key funnels (landing → scroll → click → form). Export their session signals.
- Run automation suite. Execute Playwright, Puppeteer, and Selenium scripts through identical funnels. Vary configurations: headless vs headed, stealth plugins on/off, different viewport sizes.
- Inject edge cases. Test with privacy tools (VPN, Brave, Tor), corporate proxies, mobile emulators, and older browser versions. These often trigger false positives.
- Compare signal profiles. For each session, list every signal that fired. Human sessions should show consistent browser APIs, natural pointer tremor, variable input timing, and engagement depth. Bot sessions should show anomalies: patched navigator.webdriver, missing iframe contexts, linear mouse paths, sub-millisecond clicks.
- Verify cross-checking. Confirm your system doesn't block on a single signal. Look for evidence that multiple independent signals corroborate before a verdict. BotRefund's model, for example, requires browser, network, device, and behavior signals to align.
- Measure false positive rate. Calculate the percentage of human baseline sessions flagged as suspicious. Target under 1%. If higher, tune thresholds or add allowlist logic for known corporate ranges.
- Validate evidence export. Export flagged sessions in the format your ad platforms accept: click IDs, campaign details, timestamps, session recordings, signal-by-signal reasoning. Google and Meta refund teams require this structure.
- Run a shadow period. Deploy to 5-10% of production traffic in monitor-only mode. Compare detection output against CRM outcomes (lead quality, sales dispositions) for 2-4 weeks before enforcing blocks.
Common testing approaches and trade-offs
| Approach | Best for | Setup effort | Evidence depth | Limitation |
|---|---|---|---|---|
| Local script + staging | Quick validation, dev workflow | Low | Signal logs only | No real ad traffic, no platform attribution |
| Dedicated test traffic (BotRefund audit) | Pre-launch audit, refund claims | Medium | Full session recordings, click IDs, signal reasoning | Costs budget; requires platform integration |
| Shadow mode on production | Real-world calibration | Medium | Live CRM correlation | Risk of false positives affecting users if enforcement leaks |
| Third-party test pages (deviceandbrowserinfo.com, cleantalk.org) | Spot-checking fingerprint signals | Very low | Fingerprint signals only | No behavioral signals, no attribution, no refund evidence |
Choose local scripts if you're iterating on detection logic during development. Choose a dedicated audit if you need refund-ready evidence for Google or Meta. Choose shadow mode when you're confident in logic but need to calibrate thresholds against real CRM outcomes. Third-party test pages are useful for quick fingerprint checks but don't replace end-to-end validation.
Key facts about bot detection validation
| Fact | Detail | Source |
|---|---|---|
| Independent checks per session | 106+ browser, network, device, and behavior signals | S1 |
| Playwright Init Scripts check | Detects mismatches from automation patching browser APIs | S1 |
| Clean Context Iframe check | Detects automation hiding APIs in isolated contexts | S5 |
| Cross-checking principle | Single anomaly = evidence, not verdict; AI weighs complete pattern | S1, S5 |
| Reported accuracy | 99% bot/human classification via corroborated signals | S1, S2 |
| Refund-ready report format | Click IDs, campaign details, timestamps, session recordings, signal-by-signal reasoning | S2 |
| Client refund recovery rate | 83% of 2,500+ audited brands recover funds from Google/Meta | S2 |
| Google invalid activity signals | Rapid clicking, duplicate clicks, known bad IPs, abnormal server-level patterns | S6 |
| Meta invalid traffic patterns | Fast form completion, identical field structures, placement spikes, no engagement | S3 |
| Four-layer audit framework | Platform delivery → Landing-page evidence → Lead verification → Sales outcome feedback | S7 |
Limitations and when this advice doesn't apply
- Pure server-side WAF/CDN rules — If your detection runs only at the edge (Cloudflare, Akamai) without client-side JavaScript, you can't test browser API integrity, pointer behavior, or input timing. The steps above assume client-side signal collection.
- No staging environment — Testing on production without shadow mode risks blocking real users. If you can't mirror production, start with a dedicated audit on a test subdomain.
- Low traffic volume — Statistical confidence requires volume. Under 1,000 sessions/week, false positive rates are noisy. Extend shadow periods or aggregate across similar campaigns.
- Single-page apps with heavy client routing — Standard page-load signals may not fire. You'll need to instrument SPA navigation events explicitly.
- Regulated industries (healthcare, finance) — Consent and data retention rules may limit session recording. Verify compliance before capturing full recordings.
Practical scenario: E-commerce brand validating before holiday season
Hypothetical example — not a real client case. A mid-size retailer spends $120K/month on Google and Meta. Their agency suspects 15-20% bot click waste based on CRM lead quality drops. They follow the steps above: deploy BotRefund to staging, run Playwright/Puppeteer scripts through product-detail → cart → checkout flows, record 10 human baselines. The automation suite triggers 12 distinct signals per session (patched navigator.webdriver, missing iframe context, linear mouse paths, sub-millisecond clicks). Human baselines trigger zero high-confidence signals. False positive rate: 0.8%. They enable shadow mode on 10% of traffic for three weeks. Flagged sessions correlate with CRM "invalid details" and "no response" dispositions at 94% precision. They submit refund claims with session recordings and signal reasoning — Google approves 78% of claimed spend, Meta 81%. The test paid for itself in the first claim cycle.
Frequently asked questions
How often should I re-test my bot detection?
Quarterly, or after any major site redesign, CMS migration, or ad platform pixel update. Bot frameworks update monthly; your detection needs to keep pace.
Can I test without a staging environment?
You can run a dedicated audit on a test subdomain with mirrored code, or use a feature flag to enable detection for internal IPs only. Never test enforcement logic on live traffic without a rollback plan.
What's the minimum traffic needed for a meaningful test?
At least 500 human sessions and 200 automated sessions per funnel variant. Below that, false positive rates are statistically unreliable.
Do I need session recordings for refund claims?
Google and Meta increasingly require session-level evidence: recordings, click IDs, signal reasoning. Dashboard screenshots alone are often rejected. BotRefund's reports include all of the above.
What if my detection vendor doesn't expose raw signals?
You can't validate what you can't see. Ask for signal-level API access or switch to a vendor that provides it. Blind trust defeats the purpose of testing.
How do I distinguish bots from low-quality humans?
Low-quality humans still show natural browser behavior: tremor, variable timing, corrections, engagement. Bots show technical anomalies: patched APIs, missing contexts, superhuman speed. The four-layer audit (platform → landing page → lead verification → sales outcome) separates quality issues from automation.
Does testing differ for Google vs Meta traffic?
The detection signals are the same, but attribution differs. Google uses GCLID; Meta uses FBCLID. Your test must preserve both. Refund claim formats also differ — Google's invalid activity credit is partly automatic; Meta requires manual claims with CRM outcome data.
Terminology quick reference
- Client-side detection: JavaScript running in the visitor's browser that inspects APIs, behavior, and rendering.
- Server-side detection: Analysis of request headers, IPs, and logs at your origin or edge.
- Signal: A single measurable fact about a session (e.g., "navigator.webdriver present").
- Verdict: The final bot/human classification after cross-checking signals.
- Shadow mode: Detection runs and logs but takes no enforcement action.
- Pixel poisoning: Bots firing conversion pixels, corrupting bidding algorithm training data.
- GCLID / FBCLID: Click identifiers Google and Meta append to landing URLs for attribution.
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.