Idealo Scraper & Price API: EAN Lookup and Merchant Offers avatar

Idealo Scraper & Price API: EAN Lookup and Merchant Offers

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Idealo Scraper & Price API: EAN Lookup and Merchant Offers

Idealo Scraper & Price API: EAN Lookup and Merchant Offers

Turn product EANs into idealo.de and idealo.at price comparisons. Get every merchant offer with shop, total price, delivery and payment methods, plus the full price range and a GTIN check. For pricing, brand and procurement teams.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

32

Total users

2

Monthly active users

10 days ago

Last modified

Share

This idealo scraper works as a simple idealo price API: send your product barcodes and get back the merchant offers that idealo.de and idealo.at list for each matched product. Compare total prices, delivery information and payment methods in one dataset item per product. Germany and Austria are selectable markets, and every result includes the original EAN so it joins directly to your catalogue.

What the idealo scraper returns

Each matched EAN produces one product row. Merchant offers are nested in its offers array rather than exported as separate dataset rows. The product includes its title, brand, idealo product identifier, product URL, image, currency and the lowest and highest total prices that idealo publishes. Individual offers contain the shop name, shop identifier, total price, position, delivery text, shipping information and available payment methods.

The scraper checks the requested barcode against the GTIN published by the product page. When the page explicitly identifies a different barcode, that lookup becomes a miss. When the page publishes no GTIN, a search match can still be returned, with ean_verified: false. This distinction helps you decide whether a result needs further catalogue reconciliation without losing product data just because the source omits a barcode.

Input

Provide eans, a list of barcode strings. The existing form accepts at most five entries per run. Non-digit characters are removed, invalid barcode lengths are discarded, and duplicate normalized values are looked up once. Valid lengths are eight through fourteen digits. Keep barcodes as strings so leading zeros remain intact.

country selects the marketplace: de for Germany, the default, or at for Austria. concurrency sets how many EANs are looked up in parallel, from one through five, with a default of five. Lower concurrency when you prefer to process barcodes sequentially. The market is determined by country; it does not change the EAN itself.

The following input was used for a successful recorded run:

{"eans": ["4242005218875"]}

For a longer catalogue, divide the input into batches of at most five barcode strings. A repeated EAN with spaces or hyphens normalizes to the same lookup as the clean barcode. The run summary reports the number of completed product lookups after this normalization.

Output

The dataset contains only found products. Existing output names and types remain available, including the string idealo_sku, lowercase country, nullable product attributes, and the nested offer fields. New fields include source, fetched_at, country_code, gtin, product_id, image_url, lowest_price, highest_price and offers_count. These additions support joining the results with other product datasets.

This is an excerpt from the recorded Bosch response. The offer list is shortened only for readability; the complete response is in the product example.

{
"ean": "4242005218875",
"country": "de",
"site": "idealo.de",
"found": true,
"idealo_sku": "200552720",
"title": "Bosch Styline TKA8A683",
"brand": "Bosch",
"url": "https://www.idealo.de/preisvergleich/OffersOfProduct/200552720_-styline-tka8a683-bosch.html",
"thumbnail": "https://cdn.idealo.com/folder/Product/200552/7/200552720/s1_produktbild_gross/bosch-styline-tka8a683.jpg",
"availability": "https://schema.org/InStock",
"currency": "EUR",
"offer_count": 23,
"offers_returned": 23,
"min_total_price": 87.99,
"max_total_price": 150.12,
"offers": [
{
"offer_key": "c6a43f5255496583f2c3bf8599b0c8ef",
"shop": "allesfuerzuhause.de",
"shop_id": "325043",
"position": 1,
"total_price": 87.99,
"price_text": "87,99",
"shipping_included": true,
"shipping_cost_text": null,
"delivery": "Lieferung: bis Sa. 10.10.",
"payment_methods": [
"Rechnung",
"Lastschrift",
"Vorkasse"
]
},
{
"offer_key": "4e63530758477a9000539da9478858f7",
"shop": "Aximax",
"shop_id": "12041",
"position": 2,
"total_price": 94.99,
"price_text": "94,99",
"shipping_included": true,
"shipping_cost_text": null,
"delivery": "Lieferung: bis Di. 13.10.",
"payment_methods": [
"Rechnung",
"Lastschrift"
]
}
],
"ean_verified": true,
"gtin_contradicted": false,
"matched_gtin": "4242005218875",
"source": "idealo-scraper",
"fetched_at": "2026-10-04T03:22:36.796Z",
"country_code": "DE",
"gtin": "4242005218875",
"product_id": "200552720",
"image_url": "https://cdn.idealo.com/folder/Product/200552/7/200552720/s1_produktbild_gross/bosch-styline-tka8a683.jpg",
"lowest_price": 87.99,
"highest_price": 150.12,
"offers_count": 23
}

offer_count is idealo's published number of merchant offers. offers_returned is the number actually collected. Compare them to identify an incomplete offer list. A short list keeps the genuine offers already collected and reports a warning. Null delivery or shipping values mean the page did not provide a usable value; they do not mean that shipping is free or that delivery is unavailable.

The default key-value store contains OUTPUT, including eansProcessed and, when applicable, notFound. Missing products are listed there rather than exported as billable dataset items. The errors record is written when a lookup reports an error. A missing listing, a mismatched GTIN or an unsuccessful lookup can finish with an empty dataset; examine these records to distinguish the cases.

Pricing

The existing price model is unchanged: $0.002 for the platform-managed actor-start event and $0.004 per found product delivered. A product with many merchant offers is still one result event. Offers are nested in the product row and are not charged individually.

A missing barcode has no result charge. An empty dataset therefore incurs no product-result events; the platform start event still applies. Users without a paid Apify plan have a maximum of ten delivered rows per run. The five-entry input limit means an ordinary run already stays below that cap. Results are delivered before result events are charged.

Use cases for the idealo scraper

Use the product price range to compare your selling price with the current merchant landscape in Germany or Austria. Use offers when the individual shop, total price or delivery option matters. Brand teams can reconcile competing listings with their product catalogue through the original EAN. Procurement teams can compare the same barcode across both supported markets by making a separate run for each country.

Prices and availability are snapshots of what the selected idealo marketplace returned. They can change between runs. A product may have a different number of merchants in Germany and Austria, and an EAN can match in one market while missing in the other. Keep the market and capture time alongside the price when comparing results over time.

Idealo scraper compared with other ways to get idealo prices

Checking idealo by hand works for a single product, but it does not scale to a catalogue and leaves you copying shop names and prices into a spreadsheet. This actor returns the same merchant list as structured JSON, CSV or Excel, keyed by your own EAN.

idealo's own partner interfaces are built for merchants who list their offers on idealo. They are not a way to read the full set of competing offers for a barcode you choose. If you need the price comparison itself, you need a scraper.

General-purpose web scraping APIs return a raw page that you still have to parse, match and clean. Here the matching is done for you: the barcode is checked against the GTIN on the product page, offers are already split into shop, total price, delivery and payment methods, and missing barcodes are reported separately instead of being returned as empty rows.

Other idealo actors in the Store often start from a product URL or a search phrase. This one starts from the EAN, which is what most product catalogues, ERP exports and marketplace feeds already contain, so no URL lookup step is needed before you can compare prices.

FAQ

Does each merchant offer count as a paid result?

No. One delivered product is one result event, regardless of how many offers are inside its array. Only found products reach the dataset.

Why is my EAN in notFound?

Idealo may have no listing for the barcode, or its search may have redirected to a product publishing a different GTIN. The scraper keeps that barcode in OUTPUT.notFound so you can reconcile the input with the delivered rows.

Can an unverified product still be returned?

Yes. A page that publishes no GTIN can still be a valid search match. It carries ean_verified: false. An explicitly contradictory GTIN is treated as a miss instead.

Why are some shipping or payment fields empty?

The information comes from the merchant cards that idealo returned. Fields remain null or lists remain empty when the source does not expose a usable value. No delivery promise or payment option is inferred.

Is this an official idealo API?

No. It is an independent idealo scraper that reads the public price-comparison pages for the barcodes you send. You call it like an API, through the Apify API, the Apify client libraries or a scheduled task, and receive JSON.

Can I run it on a schedule to track idealo prices over time?

Yes. Save your input as an Apify task and schedule it daily or weekly. Each run stores fetched_at, so you can stack the datasets into a price history per EAN and market.

How do I know that all offers were collected?

Compare offers_returned with offer_count and inspect the run warnings. Matching counts indicate that the published set was collected. A lower returned count makes an interrupted collection visible.