Amazon Scraper API vs Proxy: Choose a Product Data Source
Distinguish authorized Amazon APIs, licensed product data and proxy-based page checks by record quality and access rights.
Read guide →Separate a German network exit from de-DE content, EUR pricing, VAT display and the delivery address used by the target.
A German proxy is useful when it produces the German result your job requires. The target may select a language, show a EUR amount, calculate VAT, or require a German delivery address. A DE exit can coexist with a non-German account, cookie jar or checkout market. Decide which of those fields the job actually needs before comparing suppliers.
Put each supplier's exact product in the same worksheet before choosing. Prefer the offer that meets the required German result at the lower total cost of accepted records, including retries and minimum spend.
| Offer field | Decision rule |
|---|---|
| Current DE inventory and account entitlement | Confirm country access and Berlin or Munich only where the job requires city egress |
| Residential definition and sourcing | Require documented network class; compare datacenter separately when it is acceptable |
| City match and no-match response | Declare the allowed metro tolerance and reject silent fallback outside it |
| Session duration and replacement | Require continuity through the selected account, product and delivery sequence |
| Target and VAT display | Test the same account type and record gross/net labels, tax line and currency rather than comparing unlike prices |
| Account and workload terms | Confirm permitted targets, billing units, retry charges, minimum purchase and expiry |
For example, a country-level offer that holds a session can suit a German checkout controlled by delivery address. A city-specific offer with per-request rotation may be a worse fit for that journey. Conversely, a Berlin-localized campaign needs the city match even if the country offer is cheaper. These are selection rules, not vendor performance results.
Use DE as the ISO 3166 country field and EUR as the ISO 4217 currency field. BCP 47 gives you a standard form for a locale such as de-DE; IANA's time-zone database supplies Europe/Berlin for the browser context. These are test inputs. They do not turn a proxy selector into proof of German egress.
Germany's Federal Ministry of Finance states that the general VAT rate is 19% and that some transactions use a reduced 7% rate. That distinction matters when a buyer compares a displayed price: record whether tax is included, excluded, or unavailable on the target instead of adding 19% to every amount. The tax rule is a market fact, not a provider price or a ProxyLane promise.
Deutsche Post's address data documentation uses a five-character field for the postal code. Use a real, authorized test address and keep its postcode separate from the observed IP city.
Two hypothetical jobs illustrate why the account and destination belong in the buying decision. For a Berlin consumer storefront check, require the same SKU, German delivery postcode, German page text, EUR amount and the target's tax-inclusive or tax-exclusive label through checkout. Reject a redirect that changes to a global catalog. For a Munich business-account check, use an authorized business test account and require the agreed catalog tier, delivery eligibility and explicit net/gross labels. Do not compare its net amount with the Berlin consumer total. Require city egress only if the target behavior being tested depends on it; a Munich delivery address alone calls for a delivery test.
| Requirement | Example German fixture | Pass condition |
|---|---|---|
| Country exit | requested_country=DE |
A named lookup reports DE and keeps its source, date and uncertainty |
| City rule | requested_city=Berlin or Munich |
The observed city fits the predeclared city or metro tolerance |
| Browser context | locale=de-DE, timezone=Europe/Berlin |
The automation uses the intended language and clock inputs |
| Delivery market | delivery_country=DE, authorized five-digit postcode |
The target accepts the selected German delivery context |
| Offer record | currency=EUR, amount, VAT display, final URL |
Every value comes from the target observation, with no invented total |
Playwright's Python API accepts a proxy at browser-context creation and emulates locale and timezone in the same context. This example checks the exit using httpbin's /ip response contract. It does not inspect a German shop, establish residential classification, or claim that a request succeeded. Credentials arrive through environment bindings and the browser resources are closed even when the check fails.
import asyncio
import json
import os
from playwright.async_api import async_playwright
async def main():
user, password = os.getenv("PROXY_USER"), os.getenv("PROXY_PASSWORD")
if bool(user) != bool(password):
raise ValueError("Provide both proxy credentials or neither")
proxy = {"server": os.environ["PROXY_SERVER"]}
if user:
proxy.update(username=user, password=password)
async with async_playwright() as playwright:
browser = await playwright.chromium.launch()
try:
context = await browser.new_context(
proxy=proxy, locale="de-DE", timezone_id="Europe/Berlin"
)
try:
page = await context.new_page()
response = await page.goto("https://httpbin.org/ip", timeout=20000)
if response is None or response.status != 200:
raise RuntimeError("IP echo failed")
payload = json.loads(await page.locator("body").inner_text())
origin = payload.get("origin")
if not isinstance(origin, str) or not origin:
raise RuntimeError("IP echo did not return origin")
print({"observed_exit": origin, "locale": "de-DE", "timezone": "Europe/Berlin"})
finally:
await context.close()
finally:
await browser.close()
asyncio.run(main())
The navigation timeout is 20,000 milliseconds (20 seconds).
Keep PROXY_SERVER free of credentials. If the supplier requires a different authentication scheme, use its documented client configuration rather than adapting a username format from another provider. Compare the returned IP with a dated lookup. MaxMind notes that city-level IP results have uncertainty, so a city label alone is not a delivery address.
Run the permitted target in the same context after the exit check. Keep the product or variant ID, account state, device, delivery postcode and capture time fixed. Record observed_exit_country, observed_city, browser_locale, timezone, delivery_country, currency, amount, vat_display, final_url, and the exact page language marker.
An IP lookup returning DE with a USD price and a US delivery address is not a German offer. A page in German with a EUR amount may still use a non-German account or a different delivery market. Treat a redirect to login, a “contact sales” result, or a missing tax breakdown as an observed state rather than filling the gap with a calculation.
Residential, datacenter and mobile routes answer different buyer requirements. Select residential when the target or acceptance rule requires an end-user network class and the supplier documents its sourcing. A datacenter route can fit a server-side German job when network class is not part of the requirement. Mobile is a separate product with separate inventory and terms; a German residential selector cannot satisfy a mobile requirement. Compare the route types in the residential versus datacenter guide and mobile and ISP guide.
For a German product journey, hold one session when cart, login state or several pages must remain comparable. Rotate between requests when the test is about a new exit, and record whether the changed route also changed currency, tax display, delivery or access status. The rotation and sticky-session guide gives the relevant fields.
Budget the experiment in workload units: transferred traffic, attempts, retries and accepted records. Keep any minimum purchase or expiry rule beside those observations. The residential buying guide and cost-per-successful-request guide help turn a German quote into a comparable decision.
Distinguish authorized Amazon APIs, licensed product data and proxy-based page checks by record quality and access rights.
Read guide →Connect a buyer-owned proxy to an Apify Actor, keep the session boundary clear, and validate records instead of counting requests.
Read guide →Separate Australian egress from en-AU content, AUD pricing, GST display, postcode validation and the state delivery context.
Read guide →