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. 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. 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. 3

    Align browser-side values

    For browser rendering, the timezone, Intl locale and navigator.languages must agree with the headers.

  4. 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

Python
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.

Try it with AlterLab

Send a URL, get the page back as HTML, markdown or JSON. Rendering, proxy rotation and retries are handled for you.

View API docs

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.

terminal
curl -X POST https://api.alterlab.io/v1/scrape \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "formats": ["markdown"]}'

No credit card required · Up to 5,000 free requests (about 5,000 Light, 500 Protected or 250 Dynamic requests) · Balance never expires