Everything a site can read about your location
Your location leaks from several independent places at once, and they are all supposed to agree:
- Browser timezone -
Intl.DateTimeFormat().resolvedOptions().timeZonereturns a named zone like"Europe/Berlin";new Date().getTimezoneOffset()returns the numeric offset from UTC. Both come from the operating system. - Language -
navigator.language,navigator.languages, and theAccept-Languageheader. - IP geolocation - the server maps the connecting IP to a country/region/city using a GeoIP database (MaxMind and similar).
- Geolocation API - if you grant permission, exact GPS coordinates.
- Locale-derived signals - currency, number/date formatting, and even the set of bundled fonts can hint at your region.
On a real device these all line up, because they trace back to the one place where the person installed and configured their OS. A scraper instead assembles them from different sources - a US server timezone, a default en-US locale, and a proxy IP in Brazil - and the seams show.
Why rotating proxies make it worse
The mismatch is most damaging with rotating proxies (proxies that change exit IP from request to request). The browser process keeps one fixed timezone for its whole lifetime, but the exit IP may hop from Germany to Japan to Brazil across requests. Within a single session the timezone is now wrong for two of the three countries. Worse, an IP that changes country mid-session while the timezone stays fixed is itself behaviour no real user shows - so the inconsistency is not just static but temporal (it shows up over time).
Anti-bot vendors specifically watch for: a timezone offset that does not match the IP country, an Accept-Language that does not match the IP country, and an IP whose country changes while the client-side geo signals stay constant. Any one of these is a soft signal; two together is usually a block.
Keeping geo coherent
The fix is to derive every location signal from the exit IP, per session, instead of leaving OS defaults in place. That means: set the browser timezone to the IP's zone, set navigator.languages and Accept-Language to a locale plausible for that country, and if geolocation is granted, return coordinates inside the IP's region. Pin the proxy to one country for the lifetime of a session so the timezone never contradicts a later request.
Serious anti-detect browsers and managed scraping APIs automate this: they look up the proxy exit IP, then configure timezone, locale, language, and geolocation to match before the first page load. This is exactly why frameworks warn against using a separate proxy-auth path the fingerprint layer does not know about - if the browser does not know the exit IP, it cannot align the timezone to it. Keeping geo coherent is a clustering problem, not a single setting: see fingerprint clustering.
