Geo-targeting that actually works

Picking a country is the easy part. Making the rest of the request agree with it is what determines whether you get the local page.

PK

Priya Kapoor

Solutions engineering

21 Jul 2026 · 7 min read

You set the exit to Germany, fetch the page, and get English prices in dollars. The proxy worked; your request did not. Geolocation is inferred from a bundle of signals and the IP address is only the loudest of them.

The signals that matter

SignalWhere it livesHow often sites use it
IP geolocationNetwork layerAlmost always
Accept-LanguageRequest headerVery often
Locale cookieSet on first visitOften, and it overrides everything
TimezoneJavaScript, Intl APIOn JS-rendered sites
URL path or subdomain/de/, de.example.comCommon in retail
CDN edge headersCloudflare, AkamaiIncreasingly

Make them agree

python
LOCALES = {
    "de": ("de-DE,de;q=0.9,en;q=0.6", "Europe/Berlin", "EUR"),
    "jp": ("ja-JP,ja;q=0.9,en;q=0.5", "Asia/Tokyo", "JPY"),
    "br": ("pt-BR,pt;q=0.9,en;q=0.5", "America/Sao_Paulo", "BRL"),
}

def request_for(country, url):
    lang, tz, currency = LOCALES[country]
    proxy = f"http://wp-acc4821-country-{country}:pass@res.wproxy.io:8000"
    return requests.get(
        url,
        proxies={"https": proxy},
        headers={"Accept-Language": lang},
        timeout=30,
    )

In a headless browser you can go further and set the timezone and locale on the context itself, which covers the JavaScript-visible signals that a header cannot reach.

javascript
const context = await browser.newContext({
  proxy: {
    server: "http://res.wproxy.io:8000",
    username: "wp-acc4821-country-de-city-munich",
    password: "pass",
  },
  locale: "de-DE",
  timezoneId: "Europe/Berlin",
  geolocation: { latitude: 48.14, longitude: 11.58 },
  permissions: ["geolocation"],
});

The most common cause of wrong-locale results

A locale cookie set during an earlier request with a different exit. It survives the proxy change and overrides everything you just configured. Use a fresh browser context or clear cookies whenever you change country.

Go below country when the target does

In the United States, sales tax, shipping estimates, delivery windows and quite often the prices themselves vary by state and metro. A country-level exit in the US gives you a random one of those realities. If you are monitoring retail pricing, target the state or the city and be explicit about which one you sampled — otherwise your time series is measuring rotation, not the market.

Get started

Try it against your own target

One gigabyte free. It is normally enough to find out whether any of this applies to you.