Matching Request Headers to the Region of Your Exit IP
Short answer
Which headers should match the country of the exit IP for cross-border requests?
Accept-Language, browser timezone, locale and currency settings should all match the exit IP's country. A German IP sending en-US headers with a US timezone looks inconsistent. Set them together per request rather than individually. AlterLab's location option routes the request through the chosen country and aligns language and locale for you.
Step by step
- 1
Pick the country first
Decide the target country, then derive every regional value from it rather than mixing defaults from your own machine.
- 2
Align language and locale
Set Accept-Language to the country's primary language with a sensible fallback, for example de-DE,de;q=0.9,en;q=0.8 for Germany.
- 3
Align browser-side values
For browser rendering, the timezone, Intl locale and navigator.languages must agree with the headers.
- 4
Keep header order natural
Send headers in the order the real browser build sends them. Extra or reordered headers are a signal of their own.
Example
import requests
response = requests.post(
"https://alterlab.io/api/v1/scrape",
headers={"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
json={
"url": "https://example.de/produkte",
"location": {"country": "DE"},
},
)
print(response.json())Frequently Asked Questions
Is changing only Accept-Language enough?
No. Language is one of several regional signals. When a page is rendered in a browser, timezone and locale are visible to scripts too, and they must agree with the header and the IP's country.
Does the response change with the region?
Often. Prices, currency, availability and even page layout vary by country, which is why the region should be chosen deliberately rather than left to whatever exit is free.
Read the full guide
How to avoid getting blocked while scrapingTry it with AlterLab
Send a URL, get the page back as HTML, markdown or JSON. Rendering, proxy rotation and retries are handled for you.
Your first scrape.
Sixty seconds.
Up to 5,000 free requests — about 5,000 Light, 500 Protected or 250 Dynamic requests. No credit card.
Just a POST request.
No credit card required · Up to 5,000 free requests (about 5,000 Light, 500 Protected or 250 Dynamic requests) · Balance never expires