WS Geo-Targeting

Route browser sessions through residential proxies in specific countries with aligned timezone, locale, and language

Last updated Jul 22, 2026

Country-routed sessions

Pass ?country=XX (ISO 3166-1 alpha-2) when connecting to route your session through a residential proxy in that country:

wss://api.anakin.io/v1/browser-connect?country=GB

Aligned fingerprint signals

When you pass ?country=, the browser's timezone, locale, language, and Accept-Language all match the proxy's country. Anti-bot systems compare these against the IP — a UK IP that reports UTC and en-US is an obvious bot signal. With ?country=GB every signal lines up.

What websites see for ?country=GB:

SignalWhat websites see
Exit IPUK residential (e.g. BT, Virgin Media, Sky)
navigator.languageen-GB
navigator.languages["en-GB"]
Accept-Language request headeren-GB
Intl.DateTimeFormat().resolvedOptions().timeZoneEurope/London
new Date().getTimezoneOffset()-60 (BST) or 0 (GMT) depending on the date
Intl.NumberFormat default localeen-GB (formats currency as £)
Intl.NumberFormat(undefined, {style:'currency',currency:'GBP'})£1,234.56
WebRTC ICE candidatesmDNS-obfuscated (no real IP leak)
navigator.geolocationdenied by default (requires explicit user grant)

Supported countries

Per-country timezone and locale defaults:

CodeTimezoneLocale
USAmerica/New_Yorken-US
GBEurope/Londonen-GB
DEEurope/Berlinde-DE
FREurope/Parisfr-FR
ESEurope/Madrides-ES
ITEurope/Romeit-IT
NLEurope/Amsterdamnl-NL
SEEurope/Stockholmsv-SE
JPAsia/Tokyoja-JP
KRAsia/Seoulko-KR
CNAsia/Shanghaizh-CN
INAsia/Kolkataen-IN
SGAsia/Singaporeen-SG
HKAsia/Hong_Kongzh-HK
AUAustralia/Sydneyen-AU
NZPacific/Aucklanden-NZ
CAAmerica/Torontoen-CA
MXAmerica/Mexico_Cityes-MX
BRAmerica/Sao_Paulopt-BR
ARAmerica/Argentina/Buenos_Aireses-AR
AEAsia/Dubaiar-AE
SAAsia/Riyadhar-SA
ZAAfrica/Johannesburgen-ZA

Country codes not in this list still route through a residential proxy in that country (proxy availability permitting), but timezone and locale fall back to the browser's defaults (UTC and en-US). Open a support ticket if you need a country added to the alignment table.

If ?country= is omitted, the session is not geo-pinned: it does not go through a residential proxy, and timezone/locale stay at the browser defaults (UTC, en-US). Pass a country whenever the target site cares about where you are coming from.

Checking your exit IP: some IP-echo services (ipinfo.io, api.ipify.org, httpbin.org) block residential proxy ranges and fail with ERR_TUNNEL_CONNECTION_FAILED — that is the echo service, not your session. Use https://lumtest.com/myip.json instead.

Example: GB session

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.connect_over_cdp(
            "wss://api.anakin.io/v1/browser-connect?country=GB",
            headers={"X-API-Key": "your_api_key"},
        )
        page = browser.contexts[0].pages[0]

        # IP, timezone, language all align to GB
        info = await page.evaluate("""
            ({
                tz: Intl.DateTimeFormat().resolvedOptions().timeZone,
                lang: navigator.language,
                offset: new Date().getTimezoneOffset(),
            })
        """)
        print(info)  # {tz: 'Europe/London', lang: 'en-GB', offset: 0}

        await browser.close()

asyncio.run(main())

Sticky exit IP within a session

A single session keeps the same exit IP for its duration. Reconnecting issues a fresh proxy by default — pair with Saved Sessions if you need IP stickiness across reconnects (the saved session's proxy is preserved).