Idealo Price Comparison Scraper
Pricing
from $1.05 / 1,000 results
Idealo Price Comparison Scraper
Per-merchant price comparison from Idealo: every shop's item price and total including shipping for a product, plus Idealo's own aggregate low/high range, brand and offer count. Browse by category or by product ID.
Pricing
from $1.05 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Per-merchant price comparison from Idealo, Germany's largest price comparison site — every shop's item price and the total including shipping for a product, plus Idealo's own aggregate low/high range, brand and offer count.
HTTP only, no browser, no login.
Input
{ "mode": "products", "productIds": ["201146263"], "includeOffers": true }
Or browse a category and read each product's offers:
{ "mode": "category", "categoryIds": ["16073"],"maxProductsPerCategory": 10 }
Both fields also accept full Idealo URLs.
What you get
recordType | One per | Carries |
|---|---|---|
QUERY_SUMMARY | input | products found vs returned, offers returned, why it stopped |
PRODUCT | product | name, brand, images, canonical URL, and Idealo's aggregate lowPrice/highPrice/offerCount/availability |
OFFER | merchant offer | shop, item price, total including shipping, derived shipping cost, offer link |
ERROR | failed input | why |
{"recordType": "OFFER","productId": "201146263","shopName": "computeruniverse.net","currency": "EUR","price": 379.0,"totalPrice": 379.0,"shippingCost": 0.0,"isFreeShipping": true}
Known limits — read these before you rely on the output
There is no keyword search, deliberately. Idealo's robots.txt
disallows MainSearchProductCategory.html — its search endpoint. The
category and offers pages are allowed, so this actor works the way that
surface does: browse a category for product IDs, then read each product's
offers. A search URL passed as input is refused with an explanation rather
than fetched.
totalPrice is the number that matters, and it is not the item price.
Idealo shows both, and they differ — one offer in testing listed an item
price of €399.00 against a total of €407.99. The total lives in the shipping
block ("407,99 € inkl. Versand"), not in the "best total price" element,
which Idealo renders only on the single cheapest offer. shippingCost is
derived from the two and left null unless both are known — Idealo never
states the delivery charge on its own, so it is never assumed to be zero.
Prices are German-formatted and are converted explicitly. 1.142,00 €
uses . for thousands and , for decimals, the reverse of English. Parsing
that with an English-locale cleaner turns a €1,142 graphics card into €1.14,
so the separators are swapped deliberately rather than stripped.
A category run costs one request per product. The category page lists
about 50 products and is a single request, but every product whose offers you
want is another page fetch. maxProductsPerCategory is the real cost control.
lowPrice/highPrice/offerCount are Idealo's own aggregate, taken
from its Schema.org data — not recomputed from the offers on the page. They
can legitimately exceed what you see: a product showing 20 offer rows
reported offerCount: 38, because the page paginates its merchant list. The
two are kept side by side so you can compare them rather than being silently
reconciled.
Offers are the live board at fetch time. Merchant prices on a comparison
site change through the day; treat a row as a timestamped observation, which
is what _scrapedAt is for.
Technical
Category pages are plain HTML with no JSON-LD and no hydration blob — product
IDs come from the /preisvergleich/OffersOfProduct/<id> links they render.
Offers pages carry Schema.org Product / ProductGroup JSON-LD for the
product record, with the per-merchant rows in markup under semantic
BEM-style classes.
No WAF: 5/5 TLS profiles returned 200.
robots.txt was checked at path level on every URL shape this actor
touches. Full recon trail is in CRAWLING_METHOD.md.