Idealo Price Comparison Scraper avatar

Idealo Price Comparison Scraper

Pricing

from $1.05 / 1,000 results

Go to Apify Store
Idealo Price Comparison Scraper

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

Ibnu Adzim

Maintained by Community

Actor 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

recordTypeOne perCarries
QUERY_SUMMARYinputproducts found vs returned, offers returned, why it stopped
PRODUCTproductname, brand, images, canonical URL, and Idealo's aggregate lowPrice/highPrice/offerCount/availability
OFFERmerchant offershop, item price, total including shipping, derived shipping cost, offer link
ERRORfailed inputwhy
{
"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.