Idealo Scraper & Price Data API
Pricing
$5.00 / 1,000 results
Idealo Scraper & Price Data API
Real-time Idealo price data across 6 European markets. Look up any product by EAN/GTIN, ID, search term, or URL
Pricing
$5.00 / 1,000 results
Rating
5.0
(3)
Developer
PricePirate
Maintained by CommunityActor stats
3
Bookmarked
45
Total users
25
Monthly active users
8 days ago
Last modified
Categories
Share
Idealo Price Comparison Data API
Tap into Idealo, one of Europe's largest price-comparison portals, through a single clean Actor. Look up a product by barcode (GTIN/EAN), Idealo product ID, product URL, or search term and get the full list of merchant offers Idealo shows for it: prices, shipping, totals, delivery/availability, shop ratings and voucher flags, all in one JSON structure. You can also pull shop profiles (metadata, ratings, payment & shipping info, top products) by Idealo shop ID.
Built by PricePirate, a UCX Media product. Full developer documentation lives at pricepirate.com/docs.
๐ What's new in 1.1
This release moves the Actor onto our new scraping backend:
- 2ร bigger batches โ up to 50 values per run (previously 25), processed as a single bulk job instead of one job per value.
- Up to 5ร faster โ bulk lookups are scheduled and executed together on the new backend, so large batches finish in a fraction of the old wall-clock time.
- AI offer matching on non-product pages โ when a barcode lookup lands on
a search or category page instead of a dedicated product page, an LLM now
classifies every offer against verified product data. Each offer carries a
classification(e.g.same_variant,different_product,multipack) with aconfidencelevel, and each result reports thepage_typeit was extracted from โ so you can filter to exactly the matches you trust. - Significantly higher product coverage โ products without a dedicated
Idealo product page used to come back
not_found, because raw search results were too unreliable for barcode matching. With AI offer matching those pages are now usable, so lookups succeed for many products that previously returned nothing.
Perfect for price-comparison sites, repricing and margin tools, price monitoring and dynamic pricing engines, deal & coupon apps, browser extensions, dropshipping and product research, and AI shopping assistants targeting European markets.
โ 5 Ways to Look Up Idealo Data
Choose whichever identifier you already have:
| Operation | Value format | Returns |
|---|---|---|
search-by-gtin | GTIN / EAN / UPC barcode, 8-14 digits | Product with all merchant offers |
search-by-id | Idealo product ID (e.g. 207562448) | Product with all merchant offers |
search-by-url | Idealo product URL | Product with all merchant offers |
search-by-term | Free-text search term (e.g. iphone 16) | Best-matching product listing (no per-merchant offers) |
shop-info | Numeric Idealo shop ID | Shop profile + top products (Germany only) |
search-by-term returns the top-matching listing (id, name, URL, images, rating, lowest price, and offer count) with an empty
offersarray. To pull the full per-merchant offer breakdown, follow up with search-by-id using the returned productid. More on the difference between listings and offers in the docs.
โ 6-Country Coverage
Query localized pricing across Idealo's European marketplaces:
Germany (de, default), Austria (at), Spain (es), France (fr),
Italy (it), United Kingdom (uk).
shop-info currently supports Germany (de) only.
โ Complete Multi-Merchant Offer Data
A barcode, ID, or URL lookup returns everything Idealo shows for the matched product:
- Product: title, listing URL, matched ID, EAN, brand, description, image gallery, categories, review rating and review count
- Price summary: lowest price, highest price, average price, total offer count
- Per-merchant offers: shop name, shop URL, shop type (standalone vs. marketplace), marketplace name, price, shipping cost, total price (price + shipping, the number Idealo actually ranks by), currency, item condition, delivery/availability, voucher and free-return flags, and ranking position
- Store trust signals: per-shop review rating and review count
โ Bypass Idealo Bot Protection
We handle the rotating infrastructure and anti-bot evasion, so you get clean, structured data without managing proxies or headless browsers yourself. There is no job polling either: start the Actor with your values and read the finished results straight from the dataset.
๐ป Input
{"operation": "search-by-gtin","values": ["4009803341163", "4014835778306"],"country": "de"}
operation(required): one ofsearch-by-gtin,search-by-id,search-by-term,search-by-url,shop-info. All values in a run share the same operation.values(required): 1-50 strings, each one lookup (barcodes, product IDs, search terms, product URLs, or shop IDs, matching the selected operation). Duplicates and blank entries are dropped. Run the Actor multiple times for larger lists, one run after another, since your account may have only 50 lookups in flight at once (see Concurrent lookup limit).country(optional, defaultde): 2-letter marketplace code:de,at,es,fr,it,uk. URLs passed tosearch-by-urlmust belong to the same country.
๐ป Output
One dataset item per input value:
{"query": "4009803341163","operation": "search-by-gtin","country": "de","status": "found","result": {"id": "207562448","name": "Example Product Name","url": "https://www.idealo.de/preisvergleich/OffersOfProduct/207562448","ean": "4009803341163","brand": "Example Brand","description": "Short spec summary from the listing","image_urls": ["https://cdn.idealo.com/โฆ/product.jpg"],"review_rating": 4,"review_count": 312,"categories": null,"category_ids": null,"price_min": 129.0,"price_avg": 142.5,"price_max": 159.0,"offers_count": 8,"page_type": "product","offers": [{"sellerId": "Example Store","classification": "same_variant","confidence": "high","shop_name": "Example Store","shop_url": "http://www.example-store.de","shop_type": "standalone-shop","marketplace_name": null,"shop_review_rating": 5,"shop_review_count": 1240,"position": "0","condition": "new","currency": "EUR","price": 129.0,"shipping": 4.99,"total": 133.99,"voucher": false,"free_return": null,"availability_code": "short","availability_text": "Lieferung in 1-2 Werktagen"}],"source": "idealo","country": "de","fetched_at": "2026-07-17T12:00:03.000Z"}}
For shop-info, result contains the shop profile instead:
{"query": "123456","operation": "shop-info","country": "de","status": "found","result": {"shop": {"id": "123456","name": "Example Store","url": "http://www.example-store.de","logo_url": "https://cdn.idealo.com/โฆ/logo.png","description": "โฆ","address": { "street": "โฆ", "zip": "โฆ", "city": "โฆ", "country": "DE" },"review_rating": 4.6,"review_count": 1240,"payment_methods": ["PayPal", "Kreditkarte"],"shipping_methods": ["DHL"],"shipping_costs": {"inland": "4,99 โฌ","foreign": null,"free_from": "50,00 โฌ","min_order_value": null},"legal_urls": { "terms": "โฆ", "imprint": "โฆ" },"top_categories": ["Haushalt"]},"top_products": [{"id": "207562448","title": "Example Product","category": "Haushalt","url": "https://www.idealo.de/โฆ","image": "https://cdn.idealo.com/โฆ","price": 129.0,"delivery_price": null,"currency": "EUR","offers_count": 8,"review_rating": 4,"review_count": 312,"test_note": null,"available": true}],"source": "idealo","country": "de","fetched_at": "2026-07-17T12:00:03.000Z"}}
๐ค AI Offer Matching
Every offer in a search-by-gtin, search-by-id, or search-by-url result
carries an AI match verdict:
classificationโ how the offer relates to the product you asked for:same_variant,likely_same_variant,same_family_different_variant,different_product,multipack,unclear, orproduct_page_match(the lookup resolved to a dedicated product page, where every offer belongs to the product by construction).confidenceโ how sure the model is about that verdict.page_type(on the result) โ which kind of Idealo page the data came from, e.g. a dedicated product page or a search/category page.
This is what makes lookups on non-product pages usable: when a barcode
only surfaces on a search or category page, the LLM separates true matches
from accessories, multipacks, and lookalikes, instead of the lookup coming
back empty or, worse, mixing wrong offers into your price data. Filter on
classification/confidence to keep exactly the strictness you need.
๐ป Statuses & Errors
status is found, not_found, or error.
not_found means the product is not listed on Idealo: neither on a
dedicated product overview page (the page listing all offers for that
specific product) nor on a search or category page. When a lookup resolves to
a product overview page, the EAN match is almost 100% reliable
(page_type says so and offers carry product_page_match). When it resolves
to a search or category page instead, AI offer matching classifies each offer
against your query; check classification and confidence to apply the
strictness you need.
Error items have result: null and carry a stable errorCode plus a numeric
statusCode:
errorCode | statusCode | Meaning |
|---|---|---|
invalid_input | 400 | The value does not match the selected operation |
free_limit_reached | 402 | The free plan's lifetime result allowance is used up |
timeout | 408 | The lookup did not finish within the per-query deadline |
concurrency_limit_reached | 429 | Your account already had 50 lookups running; see Concurrent lookup limit |
blocked | 500 | Idealo could not be fetched for this value right now |
internal_error | 500 | An unexpected upstream failure |
statusCode only appears on error items; successful items are identified by
status (found / not_found) alone. A 429 always means your own
concurrency limit, which you can avoid by running fewer batches at once.
Error items are never charged. Even when every item is an error, the dataset contains one item per input value telling you what happened.
๐ฐ Pricing
You pay per successful query result: each query that completes with
found or not_found is charged once. Failed queries (errors and timeouts)
are always free. If something goes wrong (for example every query fails), the
reason is written to the run's log and status message, and nothing is charged
for queries that produced no result.
Example: a batch contains 20 queries; 10 come back found, 5 come back
not_found, and 5 time out. You are charged for the 15 successful results;
the 5 timeouts are free.
There are no separate Apify platform usage charges. You only pay for successful requests.
Free Apify plans are capped at 50 results in total. The cap is per Apify
account and counts every query that came back found or not_found, across
all runs. It does not reset: once the 50 are spent, further queries return
free_limit_reached instead of a result. Errors and timeouts never count
toward it, the same way they are never charged. Upgrade your Apify plan to
remove the cap.
When a run hits the cap, the capped queries are written to the dataset as
free_limit_reached error items whose error names how much of the allowance
is used (for example
Free tier limit reached: 50 of 50 results used. Upgrade your Apify plan to continue.The allowance is checked per batch, before the batch starts. A run that asks for more results than your remaining free allowance is rejected as a whole. On a fresh free account, submit at most 50 values per run (fewer if you have already used part of the allowance).
๐ Concurrent lookup limit
Your Apify account may have at most 50 lookups running at once, counted across all of your runs together, not per run. A lookup occupies a slot from the moment it starts until its result is returned.
Because a run accepts up to 50 values, one full-size run can use the whole
allowance on its own. Start a second run while the first is still working and
it has to wait: the Actor retries automatically for up to about 8 minutes,
re-checking as capacity frees up, and the run's log shows each wait. Only when
the limit is still exhausted after that are the values written to the dataset
as concurrency_limit_reached error items (statusCode 429); if every value
in a run ends that way, the status message and log say why. Nothing refused is
ever billed.
Slots are released as your lookups finish, so the limit clears by itself; there is nothing to request or unlock. To stay under it:
- Run batches one after another, not side by side
- Use smaller batches if you want several runs in parallel, e.g. four runs of 12 values rather than four runs of 50
- Stagger scheduled runs so they do not all start on the same minute
Need more headroom? Contact us at support@pricepirate.com for a higher limit.
โฑ Timing
For search-by-gtin and search-by-id, all values in a run are processed
together as one bulk job: the run's status message shows a live progress
bar while the batch is worked through, and all results are written to the
dataset when the batch finishes. For search-by-term, search-by-url, and
shop-info, values are looked up in parallel and each result is written the
moment its lookup finishes. The average run takes 1-2 minutes.
โฑ Timeouts
A run is given at most 900 seconds before unfinished lookups are reported
as timeout errors (uncharged); everything that did finish is still written
to the dataset and delivered. While most runs take 1-2 minutes, some take
longer: the backend tries multiple scraping methods per query to maximize the
final success rate, and a query only gives up after every method has been
exhausted.
If you see many timeouts, try the following:
- Use smaller batches of requests per run
- Spread requests throughout the day instead of sending them all at once
- Avoid busy times, usually around 7-9 am UTC, when Idealo's bot protection is most strict
Failed or timed-out requests are never billed.
๐ Documentation & Guides
Full documentation is hosted at pricepirate.com/docs:
- Idealo API: price & offer data without building a scraper
- Listings vs. offers: how Idealo data is structured
- Total price: why price + shipping decides the ranking
- Idealo repricing: automate your Idealo prices
๐ฌ Contact & Support
For custom solutions or higher limits, reach out via pricepirate.com or contact us directly: support@pricepirate.com.
Need a deeper build, like custom pricing automation, data pipelines, or a tailored e-commerce integration? That's what we do at UCX Media, the software studio behind PricePirate.