Idealo Price Scraper: All Shop Offers, 6 Countries, No Login avatar

Idealo Price Scraper: All Shop Offers, 6 Countries, No Login

Pricing

from $3.80 / 1,000 product with offers

Go to Apify Store
Idealo Price Scraper: All Shop Offers, 6 Countries, No Login

Idealo Price Scraper: All Shop Offers, 6 Countries, No Login

Search idealo or paste product URLs and get every shop offer per product: price, shipping, total price, delivery time, shop rating and shop link, plus best price, category, brand, GTIN and rating. idealo.de, .at, .fr, .it, .es and .co.uk. No login.

Pricing

from $3.80 / 1,000 product with offers

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Idealo Price Scraper reads idealo price comparison pages and returns every shop offer for a product: shop, price, shipping, total price, delivery time, shop rating and shop link. It works on idealo.de, idealo.at, idealo.fr, idealo.it, idealo.es and idealo.co.uk.

Use it to track prices, compare shops or check your own shop against other sellers. The smallest run is one search word, for example airpods pro, and it gives you 10 products with their offers in about 30 seconds after the run starts. No login, no API key.

Idealo Price Scraper: search idealo or paste product URLs, get each shop offer with price, shipping and total price in 6 countries

Table of contents

What it does

idealo is a price comparison site. For one product it lists many shops and their prices. This Actor opens those pages for you and saves the data as rows.

  • Search mode: you type keywords. The Actor takes the products from the first results page of each search, in idealo's order, and reads each product page.
  • Products mode: you paste idealo product URLs or product IDs. The Actor reads exactly those products. URLs can come from different countries in one run.

One dataset row = one product. The row has product data (title, brand, GTIN/EAN, category, best price, highest price, number of offers, rating) and a list offers with the shops.

Good fit

  • Watch the price of your products in several countries every day.
  • See all shops that sell a product, with shipping and total price, not only the cheapest one.
  • Find a product's GTIN/EAN, brand and category from a keyword.

Not a fit / limits

  • Only the 6 idealo sites above. Other countries and other price comparison sites are not supported.
  • Search mode reads only the first results page of each search. Single-shop offers without an idealo price comparison page are skipped.
  • Up to 200 products and up to 200 offers per product in one run (20 offers per product by default).
  • Prices are what idealo shows at the time of the run. Shops can change prices at any time.
  • Used and refurbished offers are not in the offer list (idealo shows them separately).

Quick start

  1. Open the Input tab.
  2. Keep What to scrape = Search and the prefilled query airpods pro.
  3. Keep idealo site = idealo.de (Germany) and Max products = 10.
  4. Click Start.
  5. Open the Output tab. The Products view shows one row per product; the All offers view shows one row per shop offer.

Expected result: 10 AirPods products, each with up to 20 shop offers, in about 30 seconds.

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Track prices of my product listmode: products, productUrlsproduct rowbestPrice, offerCount, offers[].totalPriceSchedule + Google Sheets or webhook
Compare shops for one productproductUrls, maxOffersPerProduct: 100offersoffers[].shop, price, shipping, availabilityCSV / Excel export
Find products and EANs by keywordmode: search, queriesproduct rowtitle, gtin, brand, categoryAPI / JSON
Compare one product across countriesthe same product ID as URLs on several idealo sitesproduct row per sitedomain, currency, bestPriceAPI / JSON

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
modeWhat to scrapestringnodefault and prefill searchsearch, productsSearch by keywords or read pasted products"products"If you send only productUrls by API, products mode is used
queriesSearch queriesarray of stringsin search modeprefill ["airpods pro"]up to 20One idealo search per query["airpods pro", "galaxy s25"]Use product-like words, not one shop's offer title
productUrlsProduct URLs or IDsarray of stringsin products modeemptyup to 200; idealo product URLs of the 6 sites or numeric IDsReads these product pages["https://www.idealo.fr/prix/207671730/apple-airpods-pro-3.html", "207671730"]Bare IDs are read on the site in domain
domainidealo sitestringnodefault and prefill dede, at, fr, it, es, co.ukSite for searches and bare IDs"fr"URLs always use their own site
maxItemsMax productsintegernoprefill 10; empty = 10 for search, all pasted products in products mode1–200Stops after this many products50Main cost control
maxOffersPerProductMax offers per productintegernodefault 200–200Offers per product row1000 = product data and best price only
proxyConfigurationProxyobjectnono proxyApify Proxy settings (automatic or datacenter groups; residential is not supported)Sends requests through a proxy{"useApifyProxy": true}Turn on only if runs report a block

Empty or missing queries in search mode, or no product URLs in products mode, fail the run with a clear message before any idealo request. Duplicate products are read once and counted in RUN_SUMMARY as duplicatesSkipped. Invalid URLs (not idealo, unsupported country) become free error rows; the run continues.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Search modequeriesmaxItemsQueries run in order until maxItems products are saved3 queries, maxItems: 10Later queries may not run
Products modeproductUrlsmaxItemsOnly the first maxItems inputs are read200 URLs, maxItems: 5050 products read
Products modeproductUrls (URL)domainA URL keeps its own site; domain is only for bare IDs.fr URL + domain: deRead on idealo.fr
More than 20 offersmaxOffersPerProducttimeoutEvery 20 offers after the first 20 is one more pagemaxOffersPerProduct: 200One extra offer-page event per page; longer run

Input examples

Search one keyword on idealo.de

{
"mode": "search",
"queries": ["airpods pro"],
"domain": "de",
"maxItems": 10
}

Expected behavior: one search, then the first 10 products of the results page. Expected output: 10 rows with title, bestPrice, offerCount and up to 20 offers. Limit or cost note: Actor start + 1 country site + 1 search query + 10 products.

Products from several countries

{
"mode": "products",
"productUrls": [
"https://www.idealo.de/preisvergleich/OffersOfProduct/207671730_-airpods-pro-3-apple.html",
"https://www.idealo.fr/prix/207671730/apple-airpods-pro-3.html",
"https://www.idealo.co.uk/compare/207671730/apple-airpods-pro-3.html"
],
"maxOffersPerProduct": 60
}

Expected behavior: the same product on 3 sites; prices in EUR for .de/.fr and GBP for .co.uk. Expected output: 3 rows, each with up to 60 offers. Limit or cost note: Actor start + 3 country sites + 3 products + up to 2 extra offer pages per product. Products are read site by site, so the order of rows can differ from your list.

Output

Output fields

FieldMeaningTypeCan be empty?Example / enumSource / notes
statusResult of this rowstringnocomplete, partial, not_found, errorSee "Output entities" below
productIdidealo product IDstringnull for invalid input"207671730"Same ID on all idealo sites
titleProduct namestringyes"Apple AirPods Pro 3"Product page
urlProduct pagestringnoidealo URLYour input text for invalid entries
domainSite of this rowstringno"de"
category, categoryIdCategorystringyes"Kopfhörer", "2520"Category name in the site's language
brandBrandstringyes"Apple"
gtinGTIN / EANstringyes"0195950543650"Only when idealo lists one
imageUrlProduct imagestringyesidealo CDN URL
currencyCurrencystringyes"EUR", "GBP"
bestPriceLowest offer price (no shipping)numberyes193null when idealo has no new offers
highestPriceHighest offer pricenumberyes281.95For all offers on the site, not only returned ones
offerCountNumber of offers on idealointegeryes57Can be more than offersReturned
offersReturnedOffers in this rowintegerno20Up to maxOffersPerProduct
rating, ratingCountProduct ratingnumber, integeryes4.6, 10null when not rated
offers[].positionRank in idealo orderintegerno1Cheapest item price first
offers[].shop, shopIdShopstringyes"kaufland.de", "26895"Marketplace name for marketplace offers
offers[].marketplaceSellerSeller inside a marketplacestringyes"pricerush"null for direct shop offers
offers[].offerTitleTitle used by the shopstringyes
offers[].priceItem pricenumberyes193Without shipping
offers[].shippingShipping costnumberyes9.990 = free shipping; null = the shop does not state it
offers[].totalPricePrice with shippingnumberyes202.99null when shipping is unknown
offers[].availabilityDelivery textstringyes"Lieferung: bis Sa. 17.10."As shown, in the site's language
offers[].shopRating, shopRatingCountShop ratingnumber, integeryes4.5, 56444
offers[].urlLink to the offerstringyesidealo redirect URLOpens the shop page
searchQuery, searchPositionHow the product was foundstring, integeryes"airpods pro", 1Search mode only
inputYour URL or IDstringyes"207671730"Products mode only
errorWhy the row is not completestringyesnull for complete rows
source, fetchedAtSource and timestringno"idealo", ISO time

Output entities and surfaces

SituationDataset/API/KVS/live viewResult shapeUser action
Normal itemDataset, views Products and All offersstatus: complete, product fields and offersExport or use the fields
Product without new offersDatasetcomplete, offerCount: 0, bestPrice: null, empty offersidealo lists only used offers or no shops now
Search without productsKey-value store RUN_SUMMARYno row; query in queriesWithoutResultsTry a more general query
Product does not existDatasetstatus: not_found, error textCheck the ID or URL
Invalid input entryDatasetstatus: error, productId: null, your text in inputFix the URL
Product page could not be readDatasetstatus: error, error text, not charged; 3 such pages in a row stop the run with SOURCE_ERRORRun again later
Some offers could not be readDatasetstatus: partial, offers read so far, errorRun the product again
idealo blocked or did not answerRUN_SUMMARY (stopReason: SOURCE_ERROR), run status Failedrows saved before the problem stayRun again later or turn on the proxy

RUN_SUMMARY also has counts (complete, partial, notFound, error, saved, offers, duplicatesSkipped), warnings and stopReason (TIMEOUT, CHARGE_LIMIT, CANCELLED or null). Its domain field is the domain from your input; rows can come from other sites when you paste URLs.

Output example

{
"status": "complete",
"productId": "207671730",
"title": "Apple AirPods Pro 3",
"url": "https://www.idealo.de/preisvergleich/OffersOfProduct/207671730_-airpods-pro-3-apple.html",
"domain": "de",
"category": "Kopfhörer",
"categoryId": "2520",
"brand": "Apple",
"gtin": "0195950543650",
"currency": "EUR",
"bestPrice": 193,
"highestPrice": 281.95,
"offerCount": 57,
"offersReturned": 20,
"rating": 4.6,
"ratingCount": 10,
"offers": [
{
"position": 1,
"shop": "kaufland.de",
"shopId": "26895",
"marketplaceSeller": "pricerush",
"price": 193,
"shipping": 9.99,
"totalPrice": 202.99,
"currency": "EUR",
"availability": "Lieferung: bis Sa. 17.10.",
"shopRating": 4.5,
"shopRatingCount": 56444
}
],
"searchQuery": "airpods pro",
"searchPosition": 1,
"input": null,
"error": null,
"source": "idealo"
}

This example is trimmed: one of 20 offers, and some fields (imageUrl, offerTitle, url, fetchedAt) are left out. null means idealo does not show the value; it never means 0. For example, shipping: null means the shop does not state its shipping cost on idealo ("see shop").

Pricing and limits

Pricing unit

This Actor uses pay per event. You pay only for these events; platform usage is included.

EventPriceWhen
Actor start$0.009 per GB of memory ($0.018 per run at 2 GB)Once per run
Country site$0.0045Once for each idealo country site the run opens (idealo.de, .fr, …), after its first successful page
Product with offers$0.0045 (Free plan), $0.0042 (Bronze), $0.004 (Silver), $0.0038 (Gold and higher)Each complete or partial row, with up to 20 offers
Extra offer page$0.0015Each further 20 offers that were read (only when maxOffersPerProduct is above 20)
Search query$0.002Each search results page read, also when it has no products
Product not found$0.002Each not_found row

Invalid input entries (error rows) are free. A run with a search that finds nothing costs the start fee, one country site and one search query, about $0.0245. If idealo blocks the run, you pay only for events that happened before the stop.

Set Max total charge in run options to cap the cost. The Actor stops before it goes over the cap; rows that were already saved stay (stopReason: CHARGE_LIMIT).

Cost examples

Free plan prices, 2 GB memory.

ScenarioInput scopeEventsBase chargeOptional chargeStop/cap behavior
Prefill1 query, 10 products, 20 offersstart + 1 site + 1 query + 10 products$0.018 + $0.0045 + $0.002 + $0.045 = $0.0695none—
100 products10 queries on one site, 100 productsstart + 1 site + 10 queries + 100 products$0.018 + $0.0045 + $0.02 + $0.45 = $0.4925noneMax total charge stops earlier
6 countries6 product URLs, one per idealo sitestart + 6 sites + 6 products$0.018 + $0.027 + $0.027 = $0.072none—
Deep offer list1 product, maxOffersPerProduct: 200, 57 offers on idealostart + 1 site + 1 product + 2 extra pages$0.018 + $0.0045 + $0.0045 = $0.027$0.003Only pages that exist are read
Nothing found1 query without productsstart + 1 site + 1 query$0.0245none—

Limits

  • Up to 20 search queries and 200 product URLs or IDs per run; at most 200 products saved.
  • Up to 200 offers per product.
  • Default timeout is 900 seconds; 200 products with 20 offers take about 5 minutes. With many offers per product (100+), raise the timeout in run options.
  • Memory is fixed at 2 GB (a real Chrome browser is used).

API, export and integrations

  • API: start a run with the input JSON above and read the dataset items (Apify API docs). The All offers view returns one row per shop offer.
  • Export: JSON, CSV, Excel, XML or HTML from the Output tab or the dataset API.
  • Scheduling: create a schedule in Apify Console to collect prices every day.
  • Webhooks / no-code: use an Apify webhook or the Make, Zapier or n8n integrations to send new rows to your sheet or database.

Use with AI agents (MCP)

See the Apify MCP server docs.

  • MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/idealo-price-scraper
  • Smallest useful input: {"mode": "search", "queries": ["airpods pro"], "domain": "de", "maxItems": 10}
  • Key output fields: title (product), bestPrice (lowest item price), offers[].shop (shop name), offers[].totalPrice (price with shipping, null if not stated), status (complete, partial, not_found, error).
  • The prefill run takes about 30 seconds and costs about $0.07. Limits: 200 products, 200 offers per product, 6 idealo sites.

Troubleshooting

Symptom: the dataset is empty and RUN_SUMMARY.queriesWithoutResults lists your query. Likely reason: idealo found no product comparison pages. For very specific words idealo often shows only single-shop offers; the summary then has a warning about it. Check: search the same words on the idealo site in your browser. Action: use a shorter, more general query, or paste the product URL in products mode.

A product has bestPrice: null and no offers

Symptom: status: complete, offerCount: 0. Likely reason: idealo lists no new offers for this product now (often only used ones, which idealo shows separately). Action: nothing is wrong with the run; check again later.

shipping and totalPrice are null for some offers

Symptom: price is set, shipping is null. Likely reason: the shop does not state the shipping cost on idealo (for example "Spese di spedizioni addizionali, vedi negozio"). Action: open offers[].url to see the cost in the shop.

The run failed with a source error

Symptom: run status Failed, RUN_SUMMARY.stopReason: SOURCE_ERROR. Likely reason: idealo blocked the requests, did not answer within 20 seconds (including retries), or its product pages changed so they could not be read. Check: the rows saved before the error are still in the dataset. Action: run again later, or turn on Apify Proxy (automatic group) in Proxy.

The run stopped with TIMEOUT

Symptom: fewer products than maxItems, stopReason: TIMEOUT. Action: raise the timeout in run options, or lower maxItems or maxOffersPerProduct.

FAQ

Do I need an idealo account or an API key?

No. The Actor reads the public idealo pages. No login, no API key.

Is the output the same as other idealo scrapers?

The prices, shops and product IDs are the same as on idealo, but field names are different (for example title, gtin and a nested offers list). If you move from another Actor, map the fields once.

Why is offerCount bigger than the number of offers I got?

You get up to maxOffersPerProduct offers (default 20). Set a bigger number to get more; each further 20 offers is one extra offer page event.

Are the prices live?

Yes, they are read at run time. fetchedAt shows when. idealo and shops can change prices at any time.

Why are the rows not in the same order as my URLs?

In products mode the Actor reads all products of one idealo site, then the next site. This keeps the run fast and cheap. Use input to match rows with your list.

Is this an official idealo tool?

No. This Actor is not affiliated with or endorsed by idealo internet GmbH. It reads public pages of idealo. Check that your use of the data follows idealo's terms and the laws that apply to you.

Support

For a bug, a question or a feature request, open an issue in the Issues tab of this Actor. Include the run ID, your input (queries or product URLs) and the error or RUN_SUMMARY text. Never send tokens, cookies or billing data.