Otto.de Product Scraper
Pricing
from $1.20 / 1,000 results
Otto.de Product Scraper
[π° $1.2 / 1K] Scrape products from Otto.de, Germany's leading online marketplace: name, brand, price, compare-at price, discount, sale flags, rating, review count, availability, colors, images and sustainability badges. Search by keyword or paste Otto.de URLs, sort six ways, and skip sponsored ads
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Pull structured product data from Otto.de, one of Germany's largest online marketplaces β brands, EUR prices, compare-at prices, computed discounts, ratings, review counts, delivery availability, colour variants, images, and Otto's own sustainability badges. Search by keyword or paste any Otto.de search or category address. Built for pricing analysts, e-commerce teams, and market researchers who need a clean German marketplace dataset without babysitting a fragile in-house collector.
Why This Scraper?
- Six sort orders, including Biggest Discount β Topseller, Price: Low to High, Price: High to Low, Biggest Discount, New Arrivals, and Best Rated. Sorting by Biggest Discount surfaced products at 72β84% off in live testing β a ready-made deal feed you cannot build from a plain keyword dump.
- No result ceiling β a single
shirtsearch reaches all ~27,300 matching products, and collection runs to the true end of Otto's ranked list rather than stopping at an arbitrary page. Up to 50,000 products per run. - Sustainability badges on roughly 2 in 3 products β Otto's own eco labels (for example "Verbesserte Rohstoffbeschaffung") arrive as readable German text, not internal codes. Around 80 of every 120 products carry at least one β a genuinely differentiating signal for German market research.
- Discount percentage as a computed number, not a display badge β instead of relying on Otto's on-tile "-14%" tag, we calculate the exact percentage off against the compare-at price or the RRP. It populates on roughly 3 in 4 products in live testing, and on effectively every result once you sort by Biggest Discount β a numeric
discountPercentcolumn you can actually sort, threshold, and filter on. - Ad-free by default, and labelled either way β Otto mixes roughly 1 in 10 paid placements into its results. They are excluded by default and never charged for; turn them on and every row is still marked
organicorsponsored, so you can measure ad share on purpose. - Price range narrowed by Otto itself β a 10β300 EUR range is applied on Otto's side, so products outside your range are never collected and never charged for. Verified live: a 10β30 EUR range returns 10,21 β¬ to 29,99 β¬ and nothing else.
- Category addresses resolve to Otto's real taxonomy β
/damen/mode/shirts/and/herren/mode/jeans/sit under internal categories the address slug never reveals, and this scraper resolves them exactly as Otto does. Any facets already applied in a pasted address, such as a price band, are kept intact. - 26 typed fields per product β including average rating, review count, delivery availability text, base colour plus every available colourway, and a
From priceflag that tells you when a price is a "starting at" figure rather than the exact one. German prices like1.399,00 β¬arrive as real numbers (1399.0). - German keywords, umlauts, and phrases all work β
kΓΌchenmaschineandblaues hemdreturn full result sets, so you can search the way German shoppers actually search.
Use Cases
Price Monitoring & Repricing
- Track competitor prices across a product category on a daily schedule
- Detect discount events the moment Otto flags them, via the Biggest Discount sort
- Compare street price against RRP to measure real market positioning
- Feed EUR pricing into repricing engines for the DACH market
Competitor & Brand Research
- Measure a brand's shelf presence and average price point inside a category
- See which brands buy paid placement, and how often, by including sponsored results
- Benchmark your assortment against Otto's Topseller ranking
Market Research
- Size a German category by total product count before entering it
- Analyse rating and review-count distributions to find under-served segments
- Track new arrivals week over week to spot emerging products
Sustainability & ESG Analysis
- Quantify how much of a category carries Otto's eco labels
- Compare sustainability badge coverage across brands
- Build ESG-aware product shortlists for procurement
Catalogue & Content Operations
- Enrich internal catalogues with images, colourways, and delivery availability
- Build affiliate and comparison feeds with direct product links
- Populate merchandising dashboards with fresh German marketplace data
Getting Started
Simple Keyword Search
The minimum input β one keyword:
{"searchQueries": ["shirt"],"maxResults": 100}
Deal Hunting β Biggest Discounts in a Price Band
Find the deepest reductions on coffee machines between 200 and 800 EUR:
{"searchQueries": ["kaffeevollautomat"],"sortBy": "hoechste-reduzierung","minPrice": 200,"maxPrice": 800,"maxResults": 500}
Category and Search Addresses
Paste any Otto.de category or search page β both are collected exactly as Otto scopes them:
{"startUrls": ["https://www.otto.de/damen/mode/shirts/","https://www.otto.de/suche/shirt/"],"sortBy": "neuheiten","maxResults": 240}
Full Sweep β Everything, Ads Included
German keywords plus a category, best-rated first, with paid placements kept for ad-share analysis:
{"searchQueries": ["kΓΌchenmaschine", "blaues hemd"],"startUrls": ["https://www.otto.de/herren/mode/jeans/"],"sortBy": "bewertung","minPrice": 10,"maxPrice": 300,"includeSponsored": true,"maxResults": 0}
Input Reference
What to Scrape
Provide search keywords, paste Otto.de addresses, or both β at least one is needed to get results.
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | ["shirt"] | Keywords to search on Otto.de, such as "shirt" or "kaffeevollautomat". Each keyword runs its own search and the search is built for you β no need to create addresses. Umlauts and multi-word phrases are fully supported. |
startUrls | string[] | [] | Otto.de search or category page addresses, such as https://www.otto.de/suche/shirt/ or https://www.otto.de/damen/mode/shirts/. Both page types are collected exactly as Otto scopes them, and any filters already in the pasted address (for example a price range) are kept. |
Filters
Otto applies the sort order and price range itself, so these also decide which products you get when you set a result limit.
| Parameter | Type | Default | Description |
|---|---|---|---|
sortBy | string | "topseller" | Order in which products are collected. One of topseller (Topseller), preis-aufsteigend (Price: Low to High), preis-absteigend (Price: High to Low), hoechste-reduzierung (Biggest Discount), neuheiten (New Arrivals), bewertung (Best Rated). |
minPrice | integer | β | Only collect products priced at or above this amount, in euros. Leave empty for no lower limit. |
maxPrice | integer | β | Only collect products priced at or below this amount, in euros. Leave empty for no upper limit. |
includeSponsored | boolean | false | Otto mixes paid, sponsored products into its results (roughly 1 in 10). Leave off for a clean, ad-free product list. Turn on to get results exactly as a shopper sees them. Every product is labelled organic or sponsored either way. |
Limits
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResults | integer | 100 | Maximum number of products to return per search keyword or address. Set to 0 to collect everything available, up to a safety limit of 50,000 products per run. Products are collected about 120 at a time, so the final count is rounded up to the end of the last page. |
Output
Each record is one product with up to 26 typed fields:
{"productId": "1795988188","variationId": "1795988189","articleNumber": "7T3B4A0Q","name": "T-Shirt (Packung, 3-tlg., 3er-Pack)","brand": "TOM TAILOR","productType": "organic","url": "https://www.otto.de/p/tom-tailor-t-shirt-3er-pack-1795988188/#variationId=1795988189","price": 23.99,"currency": "EUR","comparativePrice": 24.99,"suggestedRetailPrice": 27.99,"isOnSale": true,"isStartingPrice": false,"discountPercent": 14.3,"rating": 4.6,"reviewCount": 218,"availability": "ORDERABLE","availabilityDetail": "Lieferung in 2-4 Werktagen","baseColor": "blau","colors": ["Navy", "WeiΓ", "Schwarz"],"imageUrl": "https://i.otto.de/i/otto/1795988189","sustainabilityBadges": ["Verbesserte Rohstoffbeschaffung"],"position": 7,"searchQuery": "shirt","scrapedAt": "2026-07-17T09:14:22.481293+00:00"}
Fields with no value are omitted from the record rather than returned as empty.
Product Identity
| Field | Type | Description |
|---|---|---|
productId | string | Otto's product identifier β stable across colourways of the same product. |
variationId | string | Identifier for this specific variation (colour). Unique per record; results are de-duplicated on it. |
articleNumber | string | Otto's article number, as shown on the product page. |
name | string | Full product name, including pack and variant wording. |
brand | string | Brand name (for example TOM TAILOR). |
productType | string | organic for a normal result, sponsored for a paid placement. |
url | string | Direct link to the product page on Otto.de. |
Pricing & Discount
| Field | Type | Description |
|---|---|---|
price | number | Current selling price in euros, parsed from Otto's German formatting (1.399,00 β 1399.0). |
currency | string | Always EUR. |
comparativePrice | number | Otto's compare-at (strike-through) price, when shown. |
suggestedRetailPrice | number | Manufacturer's recommended retail price, when shown. |
isOnSale | boolean | Whether Otto marks this product as on sale. |
isStartingPrice | boolean | true when the price is a "from" price across variations rather than the exact price for this one. |
discountPercent | number | Exact discount percentage computed against the higher of the compare-at price and the RRP, rather than Otto's display-only on-tile tag. Populated whenever a product has a higher reference price β around 3 in 4 products, and effectively all of them on the Biggest Discount sort. |
Ratings & Availability
| Field | Type | Description |
|---|---|---|
rating | number | Average customer rating out of 5. |
reviewCount | integer | Total number of customer reviews behind that average. |
availability | string | Stock state as Otto reports it (for example ORDERABLE). |
availabilityDetail | string | Delivery detail text in German (for example Lieferung in 2-4 Werktagen). |
Variants & Media
| Field | Type | Description |
|---|---|---|
baseColor | string | Base colour of this variation, in German (for example blau). |
colors | string[] | Every colourway available for this product. |
imageUrl | string | Product image. |
sustainabilityBadges | string[] | Otto's eco and sustainability labels, in readable German (for example Verbesserte Rohstoffbeschaffung). Present on roughly 2 in 3 products. |
Result Context
| Field | Type | Description |
|---|---|---|
position | integer | The product's rank in Otto's own result list for your sort order. |
searchQuery | string | The keyword that produced this record. Present on keyword results. |
sourceUrl | string | The pasted Otto.de address that produced this record. Present on address results. |
scrapedAt | string | ISO 8601 timestamp of when the record was collected. |
Tips for Best Results
- Use German keywords β Otto.de is a German marketplace, and its search matches German product wording.
kaffeevollautomatreturns a far richer result set thancoffee machine. Umlauts and multi-word phrases such asblaues hemdwork exactly as typed. - Sort deliberately when you set a limit β Otto applies the sort order before you ever see the results, so a 500-product limit on Price: Low to High gives you the 500 cheapest matches, not 500 random ones. This is the single most useful lever in the whole input.
- Biggest Discount is the deal-hunter's sort β combined with a price band it produces a ready-to-use markdown feed. In testing, the top of a
hoechste-reduzierungrun sat at 82β84% off. - Treat
isStartingPrice: truewith care β that price is a "from" figure across sizes or colours, not the exact price of that variation. Filter those rows out before doing exact price comparisons or you will understate the true price. - Results arrive about 120 at a time β asking for 50 returns roughly 120, and you are charged for what you receive. Start with 100 to test the shape of the data, then raise the limit.
- Paste addresses with your filters already applied β click a brand or price facet on Otto.de in your browser, copy the address from the bar, and paste it in. Those facets are carried through, which is faster than recreating them here.
- Leave sponsored results off unless you want them β the default gives you a clean organic dataset. Turn them on only when measuring how much paid placement a category carries.
Pricing
From $1.20 per 1,000 results β a flat rate per product returned, cheaper than the German marketplace alternatives. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.
| Results | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 100 | $0.14 | $0.135 | $0.13 | $0.12 |
| 1,000 | $1.40 | $1.35 | $1.30 | $1.20 |
| 10,000 | $14.00 | $13.50 | $13.00 | $12.00 |
| 100,000 | $140.00 | $135.00 | $130.00 | $120.00 |
A "result" is one product record in your dataset. No compute or time-based charges β you pay per result, plus a small fixed per-run start fee. Products filtered out before you receive them β those outside your price range, and sponsored placements you opted out of β are never charged for.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n β Workflow automation
- Google Sheets β Direct spreadsheet export
- Slack / Email β Notifications on new results
- Webhooks β Trigger custom APIs on run completion
- Apify API β Full programmatic access
Legal & Ethical Use
This actor is built for legitimate price monitoring, market research, and competitive analysis on publicly available product listings. It collects no personal data β only product information that any visitor to Otto.de can see. You are responsible for complying with applicable laws and Otto.de's Terms of Service, for respecting copyright in product images and descriptions when redistributing them, and for using the collected data fairly. Do not use it for spam, misrepresentation, or any illegal purpose.