OTTO.de Scraper [~$0.76/1K💰] | Prices | Products | Repricing avatar

OTTO.de Scraper [~$0.76/1K💰] | Prices | Products | Repricing

Pricing

from $0.76 / 1,000 results

Go to Apify Store
OTTO.de Scraper [~$0.76/1K💰] | Prices | Products | Repricing

OTTO.de Scraper [~$0.76/1K💰] | Prices | Products | Repricing

The cheapest verified OTTO.de scraper — ~$0.76 per 1,000 products. Extract prices, compare-at UVP, discount %, ratings, availability, variants and product IDs from Germany's 2nd largest marketplace. Reads OTTO's tilelist JSON (no browser). Built for repricing, Preisüberwachung & market research.

Pricing

from $0.76 / 1,000 results

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Otto Scraper

Scrape OTTO.de (Germany's largest online department store) — search results, category listings and product pages — and extract product title, brand, price + compare-at price, discount %, rating + review count, availability, variants, images and product URL as clean structured JSON.

Built for DACH repricers, marketplace sellers, e-commerce analysts and catalog-matching pipelines. Runs on the Apify platform, so you get API access, scheduling, monitoring and proxy rotation out of the box.

Why use Otto Scraper?

  • Cheap and fast — listings are pulled from OTTO's own internal JSON API (/dundee/tilelist), not rendered in a browser. No Cloudflare/KPSDK challenge on the listing surface, no wasted compute units.
  • Full pricing picture — current price, strike-through compare-at price (UVP) and the site's own discount percentage, straight from OTTO's data.
  • Repricer-ready identifiers — productId, variationId and articleNumber.
  • Variant awareness — colour/size variant matrix with per-variant IDs and availability.
  • Pagination built in — walks every result page of a search or category up to your caps, deduplicated by product/variation ID.

How to use Otto Scraper

  1. Open the actor's Input tab.
  2. Enter one or more search terms (e.g. fernseher, kühlschrank, ecksofa), category URLs (e.g. https://www.otto.de/technik/fernseher/), and/or product URLs.
  3. Set maxItems and maxPagesPerListing to bound the run.
  4. Click Start and download the dataset as JSON, CSV, HTML or Excel.

Example input

{
"searchTerms": ["fernseher"],
"categoryUrls": ["https://www.otto.de/technik/fernseher/"],
"maxItems": 100,
"maxPagesPerListing": 10,
"sortBy": "topseller",
"proxyConfiguration": {
"useApifyProxy": true,
"proxyType": "ApifyProxy",
"apifyProxyGroups": []
}
}

Input

FieldTypeDescription
searchTermsarrayFree-text keywords searched on OTTO.de, paginated automatically.
categoryUrlsarrayOTTO.de category/listing URLs (e.g. https://www.otto.de/technik/fernseher/).
productUrlsarrayOTTO.de product page URLs (e.g. https://www.otto.de/p/<slug>-<id>/).
maxItemsintegerMax products returned across all inputs (default 100). Free users are capped at 10.
maxPagesPerListingintegerMax result pages per search/category (default 10). Each page holds ~158 tile entries, but only a subset carries the full product payload, so consecutive pages yield fewer new products.
sortByenumtopseller, preisaufsteigend, preisabsteigend, rabatt, neuheit, bewertung.
proxyConfigurationobjectNative Apify proxy editor. AUTO (datacenter) is fine for search/category listings.

Output

Each dataset item is a flat product record. Example:

{
"productId": "C2092091215",
"variationId": "2092091217",
"articleNumber": "88622148",
"name": "Philips 40PFS6050/12 LED-Fernseher (101 cm/40 Zoll, Full HD, Smart-TV)",
"brand": "Philips",
"price": 199.99,
"compareAtPrice": 379.0,
"discountPercent": 47,
"isOnSale": true,
"currency": "EUR",
"rating": 4.5,
"reviewCount": 15,
"availability": "AVAILABLE",
"availabilityText": "lieferbar - in 1-2 Werktagen bei dir",
"images": ["https://i.otto.de/i/otto/8baef01a-93f0-52ea-8656-3d122a16d13b?$responsive_ft2$"],
"productUrl": "https://www.otto.de/p/philips-40pfs6050-12-led-fernseher-101-cm-40-zoll-full-hd-smart-tv-C2092091215/",
"variants": [{ "variationId": "2092091217", "color": "schwarz", "name": "unknown", "selected": true }],
"topInfos": [{ "label": "Diagonale", "value": "101 cm/40 Zoll" }],
"ean": null,
"gtin": null,
"sku": null,
"source": "search:fernseher",
"scrapedAt": "2026-09-12T08:00:00.000Z"
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Data table

FieldDescription
productId / variationId / articleNumberOTTO's internal product identifiers
name / brandProduct title and brand
price / compareAtPrice / discountPercent / isOnSaleCurrent price, UVP compare-at price, discount % and sale flag (EUR)
rating / reviewCountAverage rating and number of reviews
availability / availabilityTextStock state (AVAILABLE, …) and human-readable text
imagesArray of image URLs
productUrlCanonical product page URL
variantsColour/size variant matrix with variation IDs
topInfosKey product attributes (e.g. screen diagonal, resolution)
ean / gtin / skuBarcode identifiers — best-effort via productUrls input (see known limitation)
source / scrapedAtWhich input produced the record and when

How much does it cost to scrape OTTO.de?

The actor is a lightweight CheerioCrawler (plain HTTP, no browser) sized at 256 MB, so compute-unit usage is minimal. A typical run of 100 products across a few search/category pages finishes in well under a minute. Product detail-page fetching is not offered — see the known limitation below.

Tips and advanced options

  • Repricing / price monitoring: run a search term on a schedule and diff price / compareAtPrice / discountPercent between runs.
  • Bigger crawls: raise maxItems and maxPagesPerListing; the actor dedupes by product/variation ID so sponsored repeats never inflate the dataset.

Technical notes — which data source is used

This actor does not render pages in a browser. It uses OTTO's own internal JSON API:

  • Listings (search + category): GET https://www.otto.de/dundee/tilelist?rule=<rule>&sortiertnach=<sort>&o=<offset> returns the full tile payload as clean JSON — title, brand, price, compare-at price, discount %, rating, review count, availability, images, variants and product URL. The rule for a search term is built as (und.(suchbegriff.<urlencoded-term>).(~.(v.1))); for category pages it is extracted from the served HTML (the page embeds the tilelist route). Pagination uses the raw o offset and steps by the number of tiles OTTO returns per page (~158). Note that OTTO only fully hydrates a subset of the ~158 tile entries per page — the rest are lightweight product cards without price/rating data and are filtered out, which is why a page can show "158 tiles" while yielding fewer products.
  • Product detail pages (only via the productUrls input): fetched as HTML and parsed from embedded JSON-LD / devalue state to best-effort EAN/GTIN/SKU. These pages sit behind a KPSDK JS challenge, so they are fetched through the Apify proxy.

FAQ, disclaimers and support

  • Is this legal? Scraping publicly available data for your own analysis is generally permitted, but you are responsible for complying with OTTO's Terms of Service and applicable law (including the German UrhG/BDSG where relevant). This actor is provided as-is.
  • Known limitation: OTTO serves a JavaScript challenge (KPSDK) on product pages (/p/...) that blocks plain-HTTP fetches even through residential proxies. The listing surface (search + category) is unaffected and always returns the full tile payload. This is why the fetchDetails option was dropped — ean/gtin/sku fields therefore stay null except for the rare productUrls page that serves without the challenge. If EAN/GTIN is a hard requirement, a browser-based (Playwright + stealth) detail fetcher is the recommended enhancement — contact us for a custom build.
  • Feedback: open an issue on the actor's Issues tab, or contact us for custom modifications (e.g. review scraping, incremental price-change tracking, custom output formats).