← Glossary / Timezone Detection

What is Timezone Detection?

Timezone detection is a passive anti-bot technique that compares the geographic location of your IP address against the timezone configured in your browser's runtime. When a scraper routes traffic through a US residential proxy but the headless Chrome instance leaks a UTC or IST timezone offset, the mismatch provides a deterministic signal of proxy usage. It is one of the cheapest, highest-confidence checks in a modern bot mitigation stack.

Anti-BotBrowser FingerprintingProxy LeakHeadlessLocale
// 02 — definitions

The geography
of time.

Why your proxy location and your browser's internal clock must tell the exact same story to survive a modern bot challenge.

Ask a DataFlirt engineer →

TL;DR

Timezone detection looks for inconsistencies between network-layer geography (IP address) and application-layer geography (JavaScript Date APIs). If your proxy exits in Dallas but your headless browser reports Asia/Kolkata or a generic UTC offset, vendors like Cloudflare and DataDome will immediately flag the session as an automated proxy tunnel.

01Definition & structure
Timezone detection is the process by which a server or anti-bot script determines the local time settings of a client. It relies on JavaScript APIs like Intl.DateTimeFormat().resolvedOptions().timeZone and Date.getTimezoneOffset(). Because these APIs read directly from the operating system or browser configuration, they provide a highly accurate geographic signal that operates independently of the IP address.
02How it works in practice
When a scraper visits a protected site, the WAF looks up the geographic location of the IP address (e.g., London). Simultaneously, a JavaScript challenge executes in the browser and reports the internal timezone (e.g., UTC, because the scraper is running on an AWS server). The WAF compares the two. If the IP says London but the browser says UTC, the WAF concludes the IP is a proxy tunnel and blocks the request.
03The Daylight Saving Time trap
Many amateur scraping scripts attempt to bypass this by hardcoding a static minute offset. This fails because it ignores Daylight Saving Time (DST). A real browser in New York shifts its offset twice a year. If a script hardcodes a -300 minute offset during the summer (when it should be -240), the anti-bot script detects the impossible state and flags the session.
04How DataFlirt handles it
We never use JavaScript injection to spoof timezones. Instead, our orchestration layer dynamically maps the assigned proxy IP to its IANA timezone string. We then use the Chrome DevTools Protocol (CDP) command Emulation.setTimezoneOverride to configure the Blink rendering engine before the page loads. This ensures all native Date APIs, DST calculations, and Intl objects are perfectly coherent with the proxy location.
05Did you know?
Timezone detection isn't just about catching proxies; it's also used for tracking. The combination of your exact timezone, your system language, and your installed fonts creates a highly unique fingerprint. Even if you aren't using a proxy, your specific timezone configuration contributes significant entropy to your overall bot score.
// 03 — the mismatch math

How timezone
leaks are scored.

Anti-bot classifiers don't just check if the timezone matches the IP. They check if different JavaScript APIs within the same browser agree with each other. DataFlirt's emulation layer ensures all vectors align.

IP vs Browser Match = GeoIP(IP) == Intl.DateTimeFormat().timeZone
The primary proxy-leak check. Must match exactly to avoid a hard block. Standard WAF logic
Offset vs Name Coherence = Date.getTimezoneOffset()ExpectedOffset(TZ_Name)
Catches naive spoofing scripts that patch the name but forget the minute offset. Client-side JS probes
DataFlirt Geo-Coherence = 1.0 − (TZ_mismatch + Locale_mismatch)
Internal SLO for session generation. Must equal 1.0 before a request fires. DataFlirt orchestration layer
// 04 — the JS probe

A timezone leak,
caught in the act.

A trace from a basic Puppeteer script using a US proxy but running on an AWS Linux container defaulting to UTC. The classifier catches the discrepancy instantly.

PuppeteerAWS us-east-1Residential Proxy
edge.dataflirt.io — live
CAPTURED
// Network layer (Proxy)
ip.address: "198.51.100.42"
ip.geo: "US / Texas / Dallas"
ip.expected_tz: "America/Chicago"

// Application layer (JS Probes)
js.intl_tz: "UTC" // AWS default
js.date_offset: 0 // UTC offset
js.date_string: "Mon May 19 2026 14:22:10 GMT+0000"

// Cross-check evaluation
check.ip_vs_intl: FAIL
check.offset_vs_dst: FAIL // UTC doesn't observe DST

// Classifier output
bot_score: 0.98
flag: "PROXY_LEAK_TZ_MISMATCH"
action: BLOCK
// 05 — detection vectors

Where the clock
betrays you.

Timezone data leaks through multiple APIs. Patching just one is a common mistake that actually increases your bot score by creating an impossible browser state.

EVALUATED ·  ·  ·  ·  ·   Every JS challenge
SEVERITY ·  ·  ·  ·  ·    Critical
UPDATED ·  ·  ·  ·  ·  ·  2026-05-19
01

Intl.DateTimeFormat

Primary string · The modern standard for extracting the exact IANA timezone.
02

Date.getTimezoneOffset()

Minute offset · Returns the minute offset. Must account for Daylight Saving Time.
03

Date.prototype.toString()

String format · The string representation includes the timezone abbreviation.
04

Accept-Language Header

HTTP layer · If TZ is Chicago but language is en-IN, it raises suspicion.
05

navigator.language

JS locale · Must logically align with the geographic region implied by the timezone.
// 06 — our emulation layer

Synchronised geography,

from the IP down to the V8 engine.

Spoofing timezones via JavaScript injection (like redefining the Date object) is easily detected by checking Function.prototype.toString. DataFlirt handles timezone alignment at the browser protocol level. When a session is assigned a proxy, our orchestration layer uses the Chrome DevTools Protocol to set the timezone override natively in the Blink engine before the first document request is ever made. The IP, the locale, and the clock are perfectly bound.

Session Geo-Binding

Live configuration of a DataFlirt worker assigned to a German proxy.

proxy.exit_node DE · Frankfurt · ASN3209
cdp.timezone_id Europe/Berlin
cdp.locale de-DE
js.offset_winter -60
js.offset_summer -120
webrtc.leak_state disabled
coherence_score 1.000verified

Stay ahead of the pipeline

Data engineering
intel, weekly.

Anti-bot shifts, scraping infrastructure updates, dataset delivery patterns, and business outcomes from our pipelines. Short, technical, no fluff.

// 07 — FAQ

Common
questions.

Common questions about timezone spoofing, Daylight Saving Time complications, and proxy alignment.

Ask us directly →
Can't I just override the JavaScript Date object? +
No. Monkey-patching native objects is trivial to detect. Anti-bot scripts call Date.toString.call(Date) — if it doesn't return [native code], you are instantly flagged as a bot. You must use browser-level emulation, not JS injection.
How does Daylight Saving Time (DST) affect detection? +
DST is a major trap. If you hardcode a timezone offset of 300 minutes for New York, but the current date falls in DST (where it should be 240), the classifier knows you are spoofing. You must emulate the IANA timezone ID, not just the offset, so the browser handles DST logic natively.
Does my server's system time matter? +
If you are using a headless browser without CDP overrides, yes. The browser inherits the host OS timezone. Since most cloud servers run on UTC, running unmodified Puppeteer on AWS while using US proxies guarantees a timezone mismatch and an instant block.
How does DataFlirt handle timezone alignment at scale? +
Our proxy gateway automatically maps the exit IP to its corresponding IANA timezone and locale. This metadata is passed to the browser orchestration layer, which applies the CDP Emulation.setTimezoneOverride command before the page loads. The alignment is fully automated.
What if a residential proxy IP is near a timezone border? +
GeoIP databases are sometimes inaccurate at the city level. We map timezones at the state/region level where confidence is highest, and we filter out proxy IPs that frequently bounce across timezone borders to maintain stable, credible session identities.
Do HTTP headers leak timezone information? +
Not directly, but the Accept-Language header strongly correlates with geography. A timezone of Europe/Paris paired with an Accept-Language of en-US is anomalous. We align the entire locale stack, not just the clock.
$ dataflirt scope --new-project --target=timezone-detection READY

Tell us what
to extract.
We do the rest.

20-minute scoping call. Pilot dataset within the week. Production within two. Whether you need a one-off catalogue dump or a continuous feed across millions of records — we scope, build, and operate the pipeline.

hello@dataflirt.com  ·  Bengaluru  ·  IST  ·  typical reply < 4h