OTTO.de - Prices, Variants, Specs & Reviews avatar

OTTO.de - Prices, Variants, Specs & Reviews

Pricing

from $1.20 / 1,000 product results

Go to Apify Store
OTTO.de - Prices, Variants, Specs & Reviews

OTTO.de - Prices, Variants, Specs & Reviews

Extract rich product data from OTTO.de across fashion, furniture, electronics and homeware. Search or paste product and category URLs to get prices, discounts, colour and size variants, availability, brand, seller, EAN/GTIN, specifications, categories and customer reviews.

Pricing

from $1.20 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

OTTO Product Scraper

Pull rich product data from OTTO.de, Germany's major general-retail marketplace: fashion, furniture (Möbel), technik, household appliances and more. Search by keyword or category, or paste product and listing links directly. Every record includes the current price, the strike-through original price with computed discount when a product is marked down, the full colour/size variant matrix with per-variant availability, brand, seller identity, and native customer reviews.

Why This Scraper?

  • Was-price and discount, structured, not scraped from a badge. When a product carries a reduced price, both the current and original price are captured plus the computed discount percentage and the site's own promo label -- all from the listing fetch, zero extra cost.
  • Full colour/size variant matrix. Every colour or size option a product offers is returned with its own variation id and availability, exactly as the site's own selector shows it.
  • Specials, first-class. A specialsOnly toggle narrows any search to only products currently showing a reduced price, and sortBy: DISCOUNT surfaces the biggest reductions first -- both drive the site's own live discount signal, not a guessed category.
  • Seller transparency. OTTO is a marketplace: every product's seller is captured, distinguishing OTTO itself from third-party marketplace partners, with the partner's own identifier.
  • Native review history. Overall rating, review count, and every individual review with author, location, date, star rating, verified-purchase flag, body text, and helpful-vote counts -- sourced directly from the site, not a third-party review widget.
  • Rich detail on demand. Full breadcrumb category path, flattened technical specifications (varies per product category, never hardcoded), EAN/GTIN/SKU, full image gallery, and return policy.
  • Two ways in, one set of filters. Keyword or category search, or paste any product/search/category listing link -- brand, rating, price range, specials and sort narrow the results either way (a single pasted product link is a special case, see Input Parameters below).
  • Full-catalogue walk. maxPages is 0 (unlimited) by default -- the run walks every result page for a search/category/URL entry until the site's own last page, maxItems, or a run out of new products. Set maxPages to a positive number only if you want to cap it.
  • Resume a previous run. Paste a prior run or dataset id into resumeFromRunId to continue it: already-collected products are skipped, so the run returns only new products (a delta) instead of a full re-scrape.
  • Incremental changes for scheduled monitoring. Turn on incrementalMode and re-run the same search daily/weekly: the actor remembers what it saw last time and returns only NEW, UPDATED, and REAPPEARED products by default, marking each with changeType, changedFields, firstSeenAt, and lastSeenAt. Optional emitUnchanged/emitExpired toggles return (and bill) the full snapshot or expiry rows too. This is a different feature from resumeFromRunId: Resume continues one specific interrupted run, Incremental mode tracks the same search across many separate scheduled runs.
  • Survives interruption. Long unlimited-page runs checkpoint their progress; if the run is interrupted by an Apify platform migration or resumed via the Resurrect button, it picks up where it left off with no duplicate products and no double charges.
  • Optional export to your apps. Send results into Notion, Linear, Airtable, or any Apify MCP connector alongside the dataset.

Data You Get

FieldExample value
productId / variationId / articleNumberS0AB12CD, S0AB12CD4XYZ, S0AB12CDKIE
nameSample Brand Ecksofa, Sofa L-Form, mit Schlaffunktion
brandSample Brand
category / breadcrumbEcksofas, [{"name": "Möbel", "url": "..."}, {"name": "Sofas", "url": "..."}, {"name": "Ecksofas", "url": "..."}]
urlhttps://www.otto.de/p/sample-ecksofa-S0AB12CD/
price / currency799.00, EUR
originalPrice / discountPercent / promoLabel1599.00, 50, -50%
isOnSpecialtrue
availability / availabilityTextAVAILABLE, lieferbar in 5 Wochen
rating / reviewCount4.5, 26
variants[][{"variationId": "S0AB12CD4XYZ", "color": "Khaki", "hexCode": "BEB2A9", "selected": true}, {"variationId": "S0AB12CD55VQ", "color": "Gold", "hexCode": "BEB2A8", "selected": false}]
image / images["https://sample.example/img1.jpg", "https://sample.example/img2.jpg"]
ean / gtin / sku4068181820000, 4068181820000, S0AB12CD4XYZ
specs{"Höhe": "85 cm", "Breite": "289 cm", "Polsterung": "Schaumstoff", "Design": "Modern"} (flattened, varies per category)
seller{"name": "Sample Home Brands GmbH", "partnerId": "1000000", "sellerType": "MARKETPLACE_PARTNER"}
returnPolicy{"days": 30, "freeReturn": true}
reviews.averageRating / reviews.reviewCount4.5, 26
reviews.items[][{"reviewId": "sample-uuid", "author": "Sample R.", "location": "Sample City", "date": "11.04.2026", "rating": 5, "verifiedPurchase": true, "title": null, "body": "Sample review text.", "helpfulVotes": 5, "helpfulVotesTotal": 5, "variantPurchased": "Farbe: Khaki", "seller": "Sample Home Brands GmbH"}]
changeType / changedFields / firstSeenAt / lastSeenAt"UPDATED", ["price"], "2026-08-01T00:00:00Z", "2026-08-17T00:00:00Z" (incremental mode only)

Sample shape: values above are illustrative placeholders, not from a live product.

How to Use

1. Keyword search, first page, with reviews (default):

{
"mode": "search",
"searchTerm": "ecksofa",
"maxItems": 20
}

2. Category-style search, filtered to specials and sorted by biggest discount:

{
"mode": "search",
"searchTerm": "sofas",
"specialsOnly": true,
"sortBy": "DISCOUNT",
"maxItems": 50,
"maxPages": 5
}

3. Full product detail + reviews for pasted product links:

{
"mode": "url",
"urls": ["https://www.otto.de/p/sample-ecksofa-S0AB12CD/"],
"fetchDetails": true,
"fetchReviews": true,
"maxReviewsPerProduct": 0
}

4. Paste a listing link and keep paginating forward:

{
"mode": "url",
"urls": ["https://www.otto.de/suche/ecksofa/"],
"maxItems": 100,
"maxPages": 10
}

Input Parameters

ParameterTypeDescription
modestringsearch or url.
searchTermstringKeyword or category name (search mode only).
urlsarrayProduct or listing URLs to scrape (url mode only).
specialsOnlybooleanKeep only currently-discounted products. Applies to a keyword search and a pasted search/category URL. Also evaluated on a single pasted product URL, but the detail page never exposes special-offer status -- so it ALWAYS excludes a pasted product link, on-special or not. Leave it off when pasting a single product URL.
brandsarrayExact brand names to keep. Applies to a keyword search, a pasted search/category URL, and a single pasted product URL.
minRatinginteger1-5, minimum rating to keep. Applies to a keyword search, a pasted search/category URL, and a single pasted product URL.
minPrice / maxPricenumberEUR price band to keep. Applies to a keyword search, a pasted search/category URL, and a single pasted product URL.
sortBystringRELEVANCE, PRICE_ASC, PRICE_DESC, DISCOUNT, NEWEST, or RATING. Applies to a keyword search and a pasted search/category URL; has no effect on a single pasted product URL (nothing to reorder).
fetchDetailsbooleanFetch full product detail (breadcrumb, specs, seller, EAN/GTIN/SKU, return policy). A pasted product URL always fetches its detail page regardless of this toggle, since that is the only source of its data.
fetchReviewsbooleanFetch native customer reviews.
maxReviewsPerProductintegerCap on reviews per product; 0 = all the product page renders.
maxPagesintegerCap on result-page fetches per search/URL entry; 0 (default) = unlimited, walks the full catalogue until the site's own last page or Max products total.
maxItemsintegerCap on total products returned; 0 = unlimited.
resumeFromRunIdstringPaste a previous run id (or its dataset id) to continue that run: products already collected there are skipped, so this run only returns new products (a delta). Leave empty for a normal run. For recurring monitoring of the same search, use incrementalMode instead.
incrementalModebooleanOff by default. Turn on for daily/recurring monitoring of the same search or URL set: the actor remembers the previous run's products itself and classifies each result NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED.
stateKeystringOptional, incremental mode only. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to derive a key automatically from the search/URL and detail settings.
emitUnchangedbooleanOff by default, incremental mode only. Also return (and bill) products that have not changed since the last run.
emitExpiredbooleanOff by default, incremental mode only. Also return (and bill) products present in a previous run but no longer found. Only produced once a run fully scans the tracked search (not when Max products capped it or Resume was used).
proxyobjectApify proxy configuration for the listing route. Product detail/reviews always use residential regardless of this setting.
mcpConnectorsarrayOptional MCP connectors to export results into (Notion, Linear, Airtable, Apify).
notionParentPageUrlstringNotion connector only: page under which item pages are created.
maxNotifyListingsintegerCap on items exported to each connector per run. Does not affect the dataset.

Output Example

{
"productId": "S0AB12CD",
"variationId": "S0AB12CD4XYZ",
"articleNumber": "S0AB12CDKIE",
"name": "Sample Brand Ecksofa, Sofa L-Form, mit Schlaffunktion",
"brand": "Sample Brand",
"category": "Ecksofas",
"url": "https://www.otto.de/p/sample-ecksofa-S0AB12CD/",
"price": 799.00,
"currency": "EUR",
"originalPrice": 1599.00,
"discountPercent": 50,
"isOnSpecial": true,
"availability": "AVAILABLE",
"rating": 4.5,
"reviewCount": 26,
"variants": [
{ "variationId": "S0AB12CD4XYZ", "color": "Khaki", "hexCode": "BEB2A9", "selected": true }
],
"image": "https://sample.example/img1.jpg",
"reviews": {
"averageRating": 4.5,
"reviewCount": 26,
"items": [
{
"reviewId": "sample-uuid",
"author": "Sample R.",
"location": "Sample City",
"date": "11.04.2026",
"rating": 5,
"verifiedPurchase": true,
"body": "Sample review text.",
"helpfulVotes": 5,
"helpfulVotesTotal": 5,
"variantPurchased": "Farbe: Khaki",
"seller": "Sample Home Brands GmbH"
}
]
}
}

Sample shape: values above are illustrative placeholders, not from a live product.

Send results into your apps (MCP connectors)

Optionally pipe results into the apps you already use through Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it in the mcpConnectors field. Each connector receives a condensed, human-readable summary per product (title plus key fields), while the complete record always stays in the Apify dataset. For Notion, set notionParentPageUrl to the page the item pages should be created under, and use maxNotifyListings to cap how many items are exported per connector per run. Supported connectors: Notion, Linear, Airtable, and Apify. Leave the field empty to skip; it never changes the dataset output.

A note on plans

The proxy field governs the product listing/search connection, which works on every Apify plan including the free tier. Product detail and reviews (on by default) always use a residential connection at extra cost, regardless of this setting.