Sites that adapt to the visitor's location — prices, currency, language, banners, legal notices — decide largely by IP. Cloudflare, for example, adds the visitor's country to every request it forwards, in a CF-IPCountry header, once the site turns on IP geolocation — so the site can branch on it.
That's why you can't QA another market from your office, and why search engines can miss it too: Google says Googlebot's default IPs appear to be in the US and that it may not crawl, index or rank every locale version of a page that adapts by location. Google recommends separate locale URLs with hreflang instead.
Location is more than the IP. Browsers also send a language (Accept-Language) and expose a time zone, so a test that changes only the IP can still get the default language. Change IP, locale and time zone together — Playwright sets locale and timezoneId per browser context.
Scroll horizontally with the arrow keys to read all content.
Recommended geo testing setup
Criterion
Choose
Why
Product
Rotating residential proxy
Household IPs in the place you test, billed per GB
Exit mode
Choose region / sticky IP
Keeps one exit for the whole test run; Global rotation has no fixed country
Targeting
Region, then State and City
City-level differences — store availability, delivery, local offers — show up
How many proxies
One per market or city
Each test context gets its own location
Browser settings
Locale and time zone matching the exit
IP, language and time zone tell the same story
Line
Budget, US$1.50/GB; Premium (US$5.00/GB) to pick the ISP
Premium adds ISP (optional) when a test depends on the network
The button below opens Rotating Residential Proxies with the AI and automation use case. Pick the country and city for each market before you generate.
The button below opens Rotating Residential Proxies with the AI and automation use case. Choose a Line, then open Add traffic and buy a package or a Custom GB (from 1 GB).
Generate one proxy per market
Under Connection settings set Exit mode to Choose region / sticky IP, pick Region, State and City, keep Protocol on HTTP and click Review cost and generate. Repeat for every market you test.
Copy the lines
In My assets, Copy each proxy and store it as PROXY_US, PROXY_DE, PROXY_JP in the form http://USER:[email protected]:2222.
Run the script
The code below opens the same URL once per market in its own context, with that market's locale and time zone, and saves a screenshot.
Expected result One screenshot and page title per market; the language matches the market.
Compare and file bugs
Put the screenshots side by side. When a market shows the wrong price, language or banner, note the exit IP from My assets so the team can reproduce it.
Screenshot a page from three markets (Playwright, Node.js)
Scroll horizontally with the arrow keys to read all content.
// npm i playwright then npx playwright install chromium
import { chromium } from 'playwright'
const url = 'https://www.example.com/pricing'
// One Proxy302 exit per market (Exit mode "Choose region / sticky IP"), with matching locale and time zone
const markets = [
{ name: 'us', proxy: process.env.PROXY_US, locale: 'en-US', timezoneId: 'America/New_York' },
{ name: 'de', proxy: process.env.PROXY_DE, locale: 'de-DE', timezoneId: 'Europe/Berlin' },
{ name: 'jp', proxy: process.env.PROXY_JP, locale: 'ja-JP', timezoneId: 'Asia/Tokyo' },
]
const browser = await chromium.launch()
for (const m of markets) {
const { host, username, password } = new URL(m.proxy) // http://USER:PASS@HOST:PORT
const context = await browser.newContext({
proxy: { server: `http://${host}`, username: decodeURIComponent(username), password: decodeURIComponent(password) },
locale: m.locale,
timezoneId: m.timezoneId,
})
const page = await context.newPage()
await page.goto(url)
await page.screenshot({ path: `pricing-${m.name}.png`, fullPage: true })
console.log(m.name, await page.title())
await context.close()
}
await browser.close()
Checked on 2026-10-18 with Playwright 1.63.0 and Chromium 153 against a local page that echoes the browser language: each context reached it through its proxy with its own Accept-Language (en-US, de-DE, ja-JP) and saved a screenshot.
Check Does a cookie, saved setting or logged-in account remember your country? Did you reuse a browser context?
Fix Use a fresh context per market and test logged out, or with an account that belongs to that market.
Right country, wrong language
Check Is the context's locale set to the market's language?
Fix Set locale (and timezoneId) on newContext() for each market.
Content says it isn't available in your region
Check Is the exit really in that country? Open an IP-check page in the same context.
Fix Regenerate the proxy with the right Region or City, or try the other Line.
Different results on every run
Check Is Exit mode set to Global rotation?
Fix Use Choose region / sticky IP so the whole run keeps one exit.
Geo testing proxy FAQ
How do I see my website from another country?
Open it through a proxy in that country with the browser's language and time zone set to match. One rotating residential proxy per market, set to Choose region / sticky IP, does it.
Can I test by city?
Yes. Choose region / sticky IP lets you pick State and City as well as the country.
Residential or datacenter for geo testing?
Residential shows what a home visitor in that city sees. Datacenter is fine for quick checks of sites that treat server IPs like any other visitor.
Will Google see my localized versions?
Not reliably if the page changes by IP: Googlebot mostly crawls from US IPs and doesn't send Accept-Language. Google recommends separate locale URLs with hreflang.
Test your website from different countries: language, currency, prices, forms and redirects as local visitors see them. Residential IPs with country, state and city choice, HTTP and SOCKS5.
SERP proxies for rank tracking: check Google results from the searcher's country and city on household IPs, validate every page and record captchas as unknown.
Rotating residential per-GB prices as published on the pricing page and used by the console (Budget US$1.50/GB, US$1.35/GB in the 100 GB package; Premium US$5.00/GB; 1 PTC = US$1). Static ISP and datacenter IPs are quoted live per IP and term.
Option names, billing modes and limits as shown in the live console on 2026-10-18: Line (Premium/Budget), Exit mode, Region, State, City, Protocol (HTTP/SOCKS5), Quantity (1–500), Term, Auto-renew IP (not yet available), My assets → Copy / Rotate / Renew / Copy for AI. Rotating residential connects through proxy.proxy302.com:2222 (HTTP) and :3333 (SOCKS5).
Local proxy fixture run
Local example · Checked:
The code block was executed on 2026-10-18 against a local password-protected HTTP proxy that answers 407 without valid credentials; Playwright 1.63.0 and Chromium 153 against a local page that echoes the browser language: each context reached the page through its proxy with its own Accept-Language (en-US, de-DE, ja-JP) and saved a full-page screenshot.
A local check proves the configuration syntax and authentication path, not access to any specific website, country or platform.
Ready to connect?
Create an account, top up once and pick rotating residential, static ISP or datacenter. Rotating residential exits cover 195+ countries and regions.