Scrape the Zalando Ads Library, the public EU ad repository of every sponsored product on Zalando, by search term, sponsor or ad id. One row per distinct ad, charged once: sponsor, product title in up to 44 languages, image, period, 26 markets, reach, targeting. JSON, CSV, API.
Unreleased (2026-10-27): the archive dropped its sort orders and its period filter (PENDING 666)
Between 2026-10-20 and 2026-10-26 Zalando's archive changed its GraphQL schema: AdvertisementsOrderBy holds NATURAL alone (PRIMARY_KEY_ASC, PERIOD_DESC, REACH_DESC and FULL_TEXT_RANK_DESC are refused), and the filter has no period any more (dates are filtered by activeMonths, the first days of the months an ad ran). Build 0.1.7 asked PRIMARY_KEY_ASC for its density probe, so every search ended bad_request with 0 ads in a SUCCEEDED run; every run with dates or activeOnly would have been refused too. Now: every query asks the natural order (ARCHIVE_SORTS false: no density probe, no tail helper, which the archive no longer needs: a rare word and a word with no ad answer in about 1.5 s); dates go to the archive as a month filter and every row's period is checked against the days (in the walk, so out of window rows are never hydrated or charged, and again on the full record, so an id outside the days is a free ad_not_found row); the all known stop of a memory run is off (new ads no longer come first); a walk read past about 10,000 rows of one search is not called complete (the natural order is not stable there); sortBy newest is still accepted and the coverage row says the ads were not sorted. With dates, countResults counts the whole months of the window and the coverage row says so. README and input schema descriptions say the same.
Unreleased (2026-10-20): the archive's 100 row cap
Since a day between 2026-10-09 and 2026-10-20 Zalando's archive refuses every query that asks for more than 100 rows, so every search ended with 0 ads and the coverage row said bad_request. Every query now asks for 100 rows or fewer (one constant, ARCHIVE_MAX_FIRST): the walk reads pages of 100 rows with the cursor, the density probe is read with the cursor, the id lookups and the hydration ask for 100 at most. The rare word walk is asked in the archive's relevance order, the one order in which the archive still answers it in pages of 100, and ends once it has read as many rows below the tail slice as the archive counts there (one count call); under the newest order a rare word's ads therefore come in relevance order and a memory run reads it to its end (its coverage row says so). maxPagesPerSearch keeps its unit of 2,000 rows. No input, output field or price changed.
0.1.5 (2026-10-09)
Text only: the searchTerms description no longer says that a word with a few hundred ads comes back as a free row. A word with no ad comes back free; a rare word is read through a second query shape and listed completely (and charged like any ad); when even that meets the archive's 30 second limit, the search comes back as a free archive_timeout row; if a later page meets the limit, the ads already delivered for that search stay charged and its coverage row says archive_timeout. Nothing else changed.
0.1.4 (2026-10-08)
Text only: the dataset schema names the image format (jpg or png) and the sortBy description carries the condition of the early stop of a memory run.
0.1.3 (2026-10-08)
After the independent audit: the free status rows say the id or search was not charged (the run's start fee stands); the language and market counts in every text (up to 44 languages, 26 markets), the image format (jpg or png), the targeting and creative sentences, and the memory FAQ now say when a monitor run stops. The languages cap equals the archive's code list.
0.1 (2026-10-08)
First release: Zalando's sponsored content archive (the EU DSA ad repository) by search term, sponsor name or ad id, in 26 markets and any period; one row per distinct ad with sponsor, title and text in up to 44 languages, image, period, markets, reach and targeting; a free coverage row per search, free rows for misses, a named memory for monitors.