Seatext library / BotRefund evidence
How to detect a bot using a spoofed browser profile
Detect a bot with a spoofed browser profile by combining fingerprint analysis, mouse-movement patterns, execution speed, and interaction shape. No single signal is enough; cross-check browser, network, device, and behavior evidence before treating a...
✓ Built for advertisers who need clear, refund-ready traffic evidence.
A bot using a spoofed browser profile tries to look like a normal visitor by faking the user agent, screen size, fonts, or hardware details. You catch it by combining fingerprint analysis, mouse-movement patterns, execution speed, and interaction shape, then cross-checking those signals against each other. One mismatch is a clue; several matching mismatches are evidence.
What a spoofed browser profile actually is
A spoofed profile is a set of browser properties that an automation script or anti-detect tool has rewritten to look like a real device. Common faked fields include the user agent string, screen resolution, installed fonts, language, timezone, WebGL renderer, and audio context. The goal is to pass naive checks that only read those values.
Spoofing is different from a headless browser. A headless browser runs without a visible window and often leaks that fact through missing APIs. A spoofed profile usually runs in a real browser engine but lies about what it is. Both can be automated, but the detection signals overlap.
Prerequisites before you start
You need a way to collect client-side signals from each visit. At minimum, capture the user agent, screen size, timezone, language, WebGL renderer, list of fonts, audio context fingerprint, and pointer events. You also need server-side logs for IP, ASN, and session timing. Without both sides, you cannot cross-check.
Decide where the checks run. Browser-side JavaScript sees the most detail but can be tampered with. Server-side checks are harder to spoof but see less. A layered setup catches more bots than either alone.
Step-by-step detection process
Step 1: Compare the claimed device to the actual hardware
Read the user agent, then read what the browser actually reports. If the user agent claims a MacBook on Safari but the WebGL renderer string points to a virtualized GPU, or the audio context behaves like a Windows VM, the profile is inconsistent. Real browsers do not normally produce these mismatches.
Step 2: Check fonts, canvas, and WebGL together
Headless and spoofed setups often ship with a default font list that does not match the claimed operating system. Canvas and WebGL hashes can also drift between runs even when other fields stay the same. Compare the hash to a known-good baseline for the claimed device class.
Step 3: Measure pointer movement shape
Real mouse movement is curved, slightly jittery, and varies in speed. Bots tend to move in straight lines, snap to grid coordinates, or jump between elements without intermediate points. Flag sessions where the path is too clean or too uniform.
Step 4: Measure execution speed
Humans take hundreds of milliseconds between actions. Scripts can fire clicks, scrolls, or keystrokes in under one millisecond. Time the gap between pointer-down and pointer-up, between scroll events, and between form-field focus changes. Sub-millisecond gaps are a strong signal.
Step 5: Check interaction shape
Look at the order and content of events. A real visitor reads, hesitates, scrolls, then clicks. A bot often clicks before scrolling, fills forms without focus events, or triggers hidden honeypot fields that humans never see. Honeypot traps are a cheap way to catch naive automation.
Step 6: Cross-check network and session data
Compare the IP geolocation to the claimed timezone and language. Check whether the ASN matches a residential ISP or a datacenter. Look at session length, page depth, and referrer. A spoofed profile on a datacenter IP claiming to be a home user in another country is a strong combined signal.
Step 7: Score the session, do not rule on one signal
Weight each signal and combine them. A single odd font list is not a verdict; a datacenter IP plus sub-millisecond clicks plus a grid-aligned mouse path is. Treat the output as a probability, then route high-risk sessions to a challenge or manual review.
Key facts about spoofed-profile detection
| Signal | What a real browser shows | What a spoofed profile often shows |
|---|---|---|
| User agent vs WebGL renderer | Match the claimed OS and device | Mismatch, often a VM GPU string |
| Font list | Matches the claimed OS | Default or oddly small list |
| Pointer path | Curved with small jitter | Straight lines or grid snaps |
| Input timing | Hundreds of milliseconds between events | Under 1 ms between clicks or scrolls |
| Interaction order | Scroll, read, then click | Click before scroll, no focus events |
| IP and timezone | Country matches claimed timezone | Datacenter IP, foreign timezone |
Common mistakes to avoid
Do not block on a single signal. Privacy tools, corporate VPNs, and unusual devices can produce odd fingerprints for real people. Treat each anomaly as evidence, not a verdict.
Do not trust the user agent alone. It is the easiest field to spoof and the least useful on its own.
Do not run checks only on the server. Browser-side signals are where most spoofing tells appear.
Do not ignore session shape. A session that loads a page and converts in two seconds with no scroll is not human, even if every fingerprint field looks clean.
Limitations of this approach
Sophisticated anti-detect tools rotate fingerprints per session and can mimic jitter, timing, and font lists. Detection gets harder as the tooling improves, which is why corroboration across many signals matters more than any single check.
False positives are real. Users on old phones, locked-down corporate browsers, or strict privacy extensions can look unusual. Always keep a fallback path, such as a soft challenge or manual review, before blocking a paying visitor.
When this advice does not apply
If you only have server-side logs and no client-side script, you cannot read canvas, WebGL, or pointer events. In that case, lean on traffic-pattern analysis, IP reputation, and rate limits instead.
If your traffic is mostly API calls with no browser, spoofed profiles are not the threat. Focus on token, signature, and rate-limit checks instead.
Frequently asked questions
What is the strongest single signal against a spoofed profile?
Input timing under one millisecond between events is hard for a bot to fake without slowing itself down. Combine it with pointer-path shape for the strongest single pair.
Can a spoofed profile pass every fingerprint check?
Advanced anti-detect tools can mimic many fields, but they still struggle to mimic natural interaction shape over a full session. Session-level behavior is usually the giveaway.
How many signals do I need before I block?
There is no fixed number. Weight signals by reliability and require at least two strong, independent signals, such as timing plus IP mismatch, before blocking or challenging.
Will this catch residential proxy bots?
It catches many of them. Residential proxies fix the IP problem but do not fix pointer shape, timing, or interaction order. Cross-checking behavior against the claimed device still works.
Do I need a paid tool to do this?
You can build a basic version with client-side JavaScript and server logs. Paid tools add larger fingerprint databases, managed scoring, and ongoing maintenance against new spoofing kits.
How do I avoid blocking real users with unusual setups?
Score sessions instead of ruling on one signal, and route borderline cases to a soft challenge rather than a hard block. Keep a manual review path for false-positive reports.
How often should I update the detection rules?
Review signals monthly. Spoofing kits change quickly, and a rule that worked last quarter may miss new patterns or flag new legitimate setups.
Further reading and comparison sources
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
How BotRefund can help
BotRefund runs 106 independent checks across browser, network, device, and behavior signals, including WebGL texture constraints, pointer-path shape, input timing, and honeypot traps. Each check is treated as evidence rather than a verdict, and the signals are combined by a prediction model that weighs the full pattern. This layered approach is built for catching spoofed profiles, not just headless browsers.
BotRefund is designed for advertisers running Google or Meta campaigns who need refund-ready proof of invalid clicks. It is less suited to sites that only need a simple CAPTCHA or to non-browser environments such as pure API traffic.