Seatext library / BotRefund evidence
Common Mistakes When Detecting Playwright Bots (And How to Avoid Them)
The biggest mistakes are relying on a single signal like user agent, treating any anomaly as proof of automation, and ignoring legitimate reasons why real users can look bot-like. Reliable detection uses 100+ independent...
✓ Built for advertisers who need clear, refund-ready traffic evidence.
Most teams start by checking the user-agent string or a single JavaScript property. Common mistakes include relying on a single signal, treating anomalies as verdicts, using server-side-only detection, failing to update detection logic, and blocking all headless traffic. A single check catches lazy scrapers but misses anything that runs Playwright with stealth plugins or a patched browser. The real problem is not that Playwright is invisible — it is that a single check is never enough evidence to block a visitor.
BotRefund runs 106 independent checks (now 110+) across browser APIs, hardware fingerprints, network attributes, and behavioral biometrics. Each check produces one piece of evidence. The system only flags a session as automated when multiple independent signals tell the same story, and an AI model weighs the complete pattern. A single anomaly — even a strong one like the Playwright Init Scripts mismatch — is kept as evidence, not a verdict.
Mistake 1: Relying on a Single Signal (User Agent or One Check)
User-agent strings are trivial to spoof. Playwright can send a perfectly normal Chrome UA while still running headless. The same goes for any single JavaScript property — navigator.webdriver, window.chrome, or a canvas fingerprint. Sophisticated bots patch or hide these one by one.
The Playwright Init Scripts check looks for a mismatch that automation tools create when they patch browser APIs. But the source documentation is explicit: "A single anomaly is not a bot verdict." Privacy tools, corporate proxies, unusual devices, and travel can all produce the same mismatch for a real person. Treating that one signal as a block decision creates false positives.
Mistake 2: Treating Anomalies as Verdicts Instead of Evidence
Every detection signal should be an independent fact that gets weighed alongside others. The BotRefund model uses three steps for each signal: (1) record it as independent evidence, (2) cross-check whether other signals support the same story, (3) feed the full pattern into an AI prediction that outputs a probability. Skipping step 2 or 3 turns a signal into a brittle rule.
This is why the documentation repeats the same structure for every check — Playwright Init Scripts, Scrollbar Width Leak, Clean Context Iframe, and 100+ others. Each one adds "one objective fact about the visit." The verdict comes from corroboration across browser, network, device, and behavior layers.
Mistake 3: Ignoring Legitimate Reasons for Automation-Like Behavior
Real users on corporate networks, VPNs, privacy browsers, or unusual hardware often trigger signals that look automated. A locked-down enterprise laptop may have a non-standard scrollbar width. A privacy-focused browser may strip certain APIs. A user on a high-latency connection may have unusual timing patterns.
The Meta CRM audit guide makes this point directly: "Not every bad lead is a bot, and that matters. Treating every unresponsive contact as fraud can make a team exclude a valuable audience." The same logic applies to detection — if you block everyone who fails one check, you lose real customers.
Mistake 4: Server-Side Only Detection
Server logs give you IP addresses, headers, and request timing. They cannot see what the browser actually rendered, how the mouse moved, whether the user scrolled, or if the Playwright Init Scripts mismatch exists. The Facebook ad bot detection guide explains: "Server-side audits look at server log files... While this catches basic scraper bots, it struggles to detect advanced botnets. Client-side audits analyze the visitor's browser..."
Client-side JavaScript is required to collect the behavioral and browser-level signals that distinguish a real Chrome session from a headless one. Without it, you are guessing from network metadata alone.
Mistake 5: Not Updating Detection Logic Against Evolving Evasion
Playwright stealth plugins, patched Chromium builds, and residential proxy networks update constantly. A detection rule that worked last quarter may be bypassed today. The SERP research shows active communities (BrowserStack, Zenrows, Reddit) sharing configurations specifically to avoid detection. If your signal set is static, your coverage decays.
BotRefund addresses this by maintaining 110+ signals and an AI model that re-weights patterns as new evasion techniques appear. The homepage notes "99% confidence in the bot traffic we flag" across 2,500+ brand audits — a figure that depends on continuous signal updates.
Mistake 6: Blocking All Headless Traffic Indiscriminately
Legitimate headless browsers exist: automated testing in CI/CD, accessibility auditing tools, archival crawlers, SEO auditors, and monitoring services. Blanket-blocking headless Chrome or Firefox breaks these use cases and can hurt your own testing infrastructure.
The better approach is to identify the intent behind the session. A monitoring service that loads a page, scrolls naturally, and spends time reading behaves differently from a scraper that requests 50 URLs in 10 seconds with linear mouse paths. Behavioral signals — pointer tremor, scroll hesitation, session duration variance — separate the two.
How Reliable Detection Actually Works
Reliable Playwright detection is not a checklist. It is a pipeline:
- Collect 100+ independent signals — browser API consistency (Playwright Init Scripts, Clean Context Iframe), hardware fingerprints (canvas, WebGL, scrollbar width), network attributes (IP reputation, TLS fingerprint, proxy markers), and behavioral biometrics (mouse tremor, scroll patterns, click timing, path curvature).
- Cross-check each signal — does the browser fingerprint match the claimed device? Does the network latency match the geo-location? Do the behavioral patterns align with the session duration?
- Feed the full pattern to an AI model — the model learns which combinations of weak signals reliably indicate automation, and which single strong signals are false positives in context.
- Output a session-level verdict with evidence — not just "bot" or "human," but a confidence score and the specific signals that drove it. This is what platforms like Google and Meta require for refund claims.
The Google Ads invalid activity guide notes that Google's own detection "is sophisticated but far from perfect" — it relies on server-level patterns (rapid clicking, duplicate clicks, known bad IPs) and misses client-side evasion. Advertisers who supplement with client-side evidence recover more budget.
Key Facts
| Fact | Detail | Source |
|---|---|---|
| Independent signals used | 110+ across browser, network, device, behavior | S2 |
| Detection confidence | 99% for flagged bot traffic | S2 |
| Refund recovery rate | 83% of clients recover funds from Google and Meta | S2 |
| Playwright Init Scripts check | One of 106+ checks; looks for API mismatch from automation patching | S1 |
| Scrollbar Width Leak check | Detects mismatch in scrollbar rendering from scripted interactions | S4 |
| Clean Context Iframe check | Detects API inconsistencies when automation patches browser contexts | S6 |
| Single anomaly policy | "A single anomaly is not a bot verdict" — kept as evidence, cross-checked | S1, S4, S6 |
| Server-side limitation | "Struggles to detect advanced botnets" without client-side data | S3 |
| Industry stat context | "Automated traffic represented more than half of web traffic in 2025; that does not mean half of a Meta advertiser's clicks are fraudulent" | S8 |
Limitations & When This Advice Does Not Apply
- Low-traffic sites — statistical models need volume to calibrate false-positive rates. A site with 50 visits/day cannot reliably train or validate a 110-signal model.
- Strict compliance environments — some regulations (GDPR ePrivacy, CCPA) restrict client-side fingerprinting. You may need consent before running behavioral collection.
- Internal tooling — if you control both the site and the automation (e.g., your own CI/CD tests), allowlist by IP or token instead of detecting.
- Real-time blocking at edge — the full 110-signal pipeline runs in the browser and sends results to a backend. Edge-only WAFs cannot execute the client-side checks.
FAQ
Can I detect Playwright with just a user-agent check?
No. Playwright sends a normal Chrome/Firefox/WebKit user agent by default. Stealth plugins make it match a real browser exactly. UA checks catch only the least sophisticated bots.
What is the Playwright Init Scripts mismatch?
Automation tools often patch browser APIs to hide their presence. The Init Scripts check runs a script in the page context and compares the result against a clean context. Inconsistencies reveal the patch. It is one of 106+ independent checks.
Why not block anyone who fails the Init Scripts check?
Privacy browsers, corporate proxies, and unusual devices can produce the same mismatch. The documentation states explicitly: "A single anomaly is not a bot verdict." Cross-checking against other signals prevents false blocks.
Does client-side detection slow down my page?
The script collects signals asynchronously. BotRefund's implementation is designed to be lightweight; the homepage offers a free audit so you can measure impact on your own pages.
How do I get refunds from Google or Meta for bot clicks?
You need session-level evidence with click IDs (GCLID, FBCLID), timestamps, behavioral recordings, and signal-by-signal reasoning formatted for the platform's review team. BotRefund builds these reports and has an 83% success rate across 2,500+ audits.
What if my traffic is mostly mobile app webviews?
App webviews (Facebook in-app browser, Instagram, etc.) have different fingerprint baselines. A good detection system maintains separate models for webview contexts so legitimate app traffic is not flagged.
How often do evasion techniques change?
Constantly. The SERP shows active communities sharing new Playwright configurations weekly. A static rule set decays fast; an AI model retrained on fresh labeled data adapts.
Further reading and comparison sources
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
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.