Documentation Python quickstart Blog Free tools hello@quanticdata.ioLog in

Zalando Proxies: 266 Words, One False 200

Bytes and words returned by zalando.it on 28 September 2026: 570,402 bytes of no-JavaScript HTML with 266 words, 1,607,265 bytes of rendered page with 268 words, and one collector run delivering 10 products with Omnibus reference prices in 3.6 seconds after one 200 interstitial was retried from a fresh exit
Bytes and words returned by zalando.it on 28 September 2026: 570,402 bytes of no-JavaScript HTML with 266 words, 1,607,265 bytes of rendered page with 268 words, and one collector run delivering 10 products with Omnibus reference prices in 3.6 seconds after one 200 interstitial was retried from a fresh exit

Zalando is Europe's largest online fashion retailer, and the thing to know before pointing a proxy at it is that its status codes do not tell you what you got. On 28 September 2026 zalando.it answered a plain HTTP client through an Italian residential exit with 200 OK, 570,402 bytes and 266 words; rendered, the same URL cost 1,607,265 bytes and returned 268 words. During the same hour our catalogue collector received a 200 that carried an Akamai interstitial instead of products, retried it from a fresh residential exit, and delivered 10 products with EU Omnibus reference prices in 3.6 seconds. The setting that works on Zalando is residential, plain HTTP, country matched to the domain, and a content check on every response instead of a status check.

The home gives a plain client 266 words, and the browser adds two

Zalando's home is server-rendered by what its own header calls rendering-engine/gender-split-stackset, behind Akamai. The seo_audit tool in our MCP server fetched it twice, as a pure HTTP bot and fully rendered, and the diff between the two views is two words. The no-JS page carries the title, the meta description and a self-referencing canonical; it carries no h1, no JSON-LD and no Open Graph tags, and neither does the rendered page. Zalando's home is a navigation surface, not a data surface, on both passes.

Fetch (28 September 2026)StatusBytes returnedTimeWordsNotes
zalando.it, plain HTTP, Italian exit200570,4028.4 s266Title, description, canonical; no h1, no JSON-LD
zalando.it, rendered, Italian exit2001,607,26539.1 s268Same title, description and canonical; still no h1
zalando.it, plain HTTP, German exit200n/a11.3 s (audit)266Identical Italian page; no redirect to zalando.de
zalando.it/robots.txt2005730.4 sn/aLast modified 8 September 2026

On 26 September the same audit counted 266 and 275; the render count moves with which teaser tiles have loaded at capture, the no-JS count does not move at all. Nothing in the diff justifies 2.8 times the bytes and 4.7 times the wall-clock. Read Zalando's HTML over plain HTTP and keep the browser for the one job where the page is actually built in the client, which on this site is not the home.

A 200 from Zalando is a claim, not a page

The build guide that ranks for "zalando scraper" says a plain fetch of a product page returns a 200 with the fields blank, or a challenge. We saw the sharper version of that in our own collector log. On one of the requests behind the run below, Zalando answered HTTP 200 with an Akamai bot interstitial in place of the catalogue. Nothing about the status distinguished it from a real page. The collector classified the body, discarded it, retried from a fresh residential exit, and got the catalogue on the second try. The whole run, including that retry, took 3.62 seconds.

This is the practical rule for anyone reading Zalando through a proxy of any brand: never accept a response on its status code. Check for the thing you came for, a product grid, an article SKU in the URL pattern, a price, and treat its absence as a miss to retry from a different exit. A status-only pipeline will log a 100 percent success rate and deliver a folder of interstitials. Our WAF detector will tell you Akamai sits in front; only a content check tells you whether this response got past it.

The collector reads the catalogue with the prices the law requires

We ran the Zalando collector once on 28 September 2026 with the query "nike air max" and max_results 10. It delivered 10 rows in 3.62 seconds, one retry included. Each row carries the brand, the product name with its colourway, the article SKU read from the product URL, the packshot image, the current price in euro and two fields most scrapers skip: Zalando's EU Omnibus reference prices, the 30-day median and the 30-day low, each with its own discount percentage.

Field in the runWhat came back for 10 rows
Current price10 of 10, from 71.99 € to 159.99 €; 4 flagged price_from, meaning the card shows a "da" price for the cheapest variant
30-day median reference8 of 10 carried one, from 89.99 € to 159.99 €, with stated discounts of 20, 25 and 30 percent
30-day low reference1 of 10 carried one, 119.99 € against a current 111.99 €, a 7 percent discount
SKU10 of 10, config id plus colour code, for example NI112O0BT-Q12
Brand9 Nike Sportswear, 1 Nike Performance

The Omnibus fields are the reason to prefer a collector over a card parser on this site. The EU price-indication rules require a retailer to show the prior price when it advertises a discount, and Zalando shows it as a median or a low with its own percentage; the two are not interchangeable, and a card may state either, both or neither. The collector labels which one it read. It also notes that rank is this response's order, because Zalando re-ranks between requests, so a monitor should key on SKU, not position. At $0.001 per delivered product, the run cost one cent.

What robots.txt closes, and what the country changes

Zalando's robots.txt is 573 bytes and was last modified on 8 September 2026. It disallows the whole site to ClaudeBot, AI2Bot, Bytespider, GPTBot, Google-Extended and Applebot-Extended. For everyone else it disallows any URL with three or more ampersands, the cart, wardrobe and account areas, /opinions, /reco-catalog/, /assistant and, with two named exceptions, everything under /api/: /api/navigation and /api/graphql/ are explicitly allowed, /api/navigation/* and /api/* are not. A crawler that stays on catalogue and product URLs with at most two filters is inside the file; one that hits the JSON endpoints behind the grid is not. The CGV page, fetched over plain HTTP at 620,167 bytes, governs purchases and returns; the automated-access rules live in robots.txt.

The country question on Zalando is answered by the domain, not the exit. Zalando runs one shop per market, 30 of them, and zalando.it fetched through a German residential exit returned the same Italian title, description and canonical and the same 266 words, with no redirect to zalando.de. The number that changes when you pick the wrong exit is, on the home, zero. Pin the exit to the market of the domain anyway, country=it for zalando.it, because prices, sizes and stock are per shop and a session that arrives from a different country than the shop it browses is the one pattern no real customer produces.

What we do not do on Zalando is the other intent in the autocomplete, "zalando order grabbing": bots that reserve limited drops. Automated checkout on a retailer is the retailer's decision, not a proxy setting, and we build nothing for it.

Cost math with real numbers

Prices from our pricing page: residential Basic $0.80/GB, Premium $2.20/GB, the web scraping API from $0.0002 per page ($0.001 rendered) and the Zalando collector at $0.001 per delivered product. One gigabyte is counted as 10^9 bytes.

ApproachBytes per pagePages per GBCost per 1,000
Plain HTTP over residential Basic ($0.80/GB)570,402about 1,753about $0.46 per 1,000 pages
Plain HTTP over residential Premium ($2.20/GB)570,402about 1,753about $1.25 per 1,000 pages
Rendered over residential Basic1,607,265about 622about $1.29 per 1,000 pages
Web scraping API, plain HTTPn/an/a$0.20 per 1,000 pages
zalando_search collectorn/an/a$1.00 per 1,000 products, 24 per catalogue page, Omnibus prices parsed

Byte figures are decoded HTML; wire transfer is lower and headers add a little back. The row that changes a decision is the collector: a thousand products is about 42 catalogue pages, so raw bandwidth for them is under two cents, and what the dollar buys is the retry on the false 200, the SKU, and the reference prices read correctly. For a marketplace where the raw page is cheap and stable, see Subito through residential proxies; for one where the render is not wasteful but shut out entirely, Idealista.

The setting that works on Zalando

  • Network: residential, Basic at $0.80/GB. The interstitial we saw was resolved by a fresh residential exit, not by a more expensive tier; Premium at $2.20/GB is for jobs where the exit must stay fixed for a session.
  • Fetch mode: engine: tls, plain HTTP. 266 words in 8.4 seconds; the rendered page returns 268 words for 1,607,265 bytes and 39.1 seconds. Validate every response on content, never on the status code.
  • Country: the country of the shop, country=it for zalando.it. The exit does not change the page (266 words from Germany, no redirect); pin it so prices, sizes and stock belong to one market.
  • When the proxy is not enough: the zalando_search collector, 10 products in 3.6 seconds with SKU, current price, the 30-day median and 30-day low Omnibus references and their discount percentages, $0.001 per delivered product, retries on interstitials included.
  • Every account gets $2 of free API usage per month, and failed requests are never billed.

Sources & further reading

FAQ

Quick answers on zalando proxies.

Something else? Ask us →

Do you need a proxy to scrape Zalando?

For the home page a residential exit and a plain HTTP client returned 200 OK, 570,402 bytes and 266 words on 28 September 2026. For the catalogue you need a pool and a content check: one of the collector requests received a 200 carrying an Akamai interstitial, and a retry from a fresh residential exit returned the products. The proxy is the retry path, not a key.

Does Zalando need JavaScript rendering?

Not the home: our seo_audit run counted 266 words without JavaScript and 268 with it, at 1,607,265 bytes and 39.1 seconds against 570,402 bytes and 8.4 seconds. The audit found no title, description or canonical that existed only in the browser, and no h1 on either pass.

Why does Zalando return 200 with no products?

Because Akamai can serve a bot interstitial with a 200 status. In our 28 September 2026 collector run, 1 request out of the batch came back as a 200 interstitial instead of the catalogue, was discarded, and was retried from a fresh exit; the run still finished in 3.62 seconds. Classify responses on content, not status.

What are the Omnibus prices in Zalando data?

Zalando shows an EU Omnibus reference price next to a discount: either the 30-day median or the 30-day low, each with its own percentage. In our 10-row run, 8 products carried a median reference with discounts of 20 to 30 percent and 1 carried a 30-day low, 119.99 € against a current 111.99 €. The collector returns both fields separately.

Which country should the proxy exit be in for Zalando?

The country of the shop you request. zalando.it fetched through a German exit returned the same Italian page with 266 words and no redirect, so the exit does not change access; pin country=it for zalando.it so prices, sizes and stock belong to one of the 30 markets Zalando runs.

Does Zalando robots.txt allow scraping?

The 573-byte file, last modified 8 September 2026, closes the whole site to ClaudeBot, GPTBot, Bytespider, AI2Bot, Google-Extended and Applebot-Extended, and closes /api/* to everyone except /api/navigation and /api/graphql/. Catalogue and product URLs with at most two filters are open; URLs with three or more ampersands are not.

Check the body, not the status

Every number here came from one platform: a plain fetch and a render of zalando.it, and one collector run that caught a 200 interstitial, retried it from a fresh exit and delivered ten products with Omnibus prices in 3.6 seconds. Every account gets $2 of free API usage per month, and failed requests are never billed.

Related reading