# Idealo Price Comparison Universal Scraper (`scrapifier/idealo-price-comparison-universal-scraper`) Actor

🛒 Scrape idealo products by keyword or URL on 6 country sites (DE, AT, UK, FR, IT, ES). Get best price, all shop offers, shipping, specs, ratings and daily price history. No login, pay per result.

- **URL**: https://apify.com/scrapifier/idealo-price-comparison-universal-scraper.md
- **Developed by:** [Scrapifier](https://apify.com/scrapifier) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.06 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Idealo Price Comparison Scraper

Scrape idealo, Europe's leading price comparison site, by keyword or by pasting any idealo search, category or product URL, and export products with prices, shop offers and price history as JSON, CSV or Excel, or pull them straight from the API.

⚡ For every product you get the **title, best price, number of shop offers**, user rating, review count, energy class, image and **product URL**. Turn on the detail options and each row also carries the **full price comparison list** (every shop with its price, shipping cost, delivery estimate and payment methods), the **technical datasheet**, product **variants**, GTIN / EAN, and the **daily price history** with average, lowest and highest price. Works on **6 idealo country sites**: Germany, Austria, the UK, France, Italy and Spain. No login needed. You **pay per product**.

[![Apify Actor](https://apify.com/actor-badge?actor=scrapifier/idealo-price-comparison-universal-scraper)](https://apify.com/scrapifier/idealo-price-comparison-universal-scraper)

### 🎯 Why scrape idealo prices?

- **Price monitoring**: track the best price of your products, or your competitors' products, across every shop that lists them, on a schedule.
- **Repricing input**: the full offer list tells you exactly which shop is cheapest, at what total price with shipping, so you can position your own price.
- **Market and assortment research**: search any category on 6 country sites and compare prices, ratings and the number of active sellers per market.
- **Price history analysis**: daily best-price points with statistics make "is this a real discount?" a one-line check, and feed buy-timing models.
- **Dropshipping and sourcing**: find products with high offer counts, big price spreads between shops, and stable demand signals.
- **E-commerce datasets**: titles, GTINs, specs, images and prices at scale for matching, enrichment or machine learning.

### 📊 What data does Idealo Price Comparison Scraper extract?

| Field | Description |
|---|---|
| `productId` | idealo's unique product id |
| `type` | `PRODUCT` (catalog product with a price comparison) or `OFFER` (standalone marketplace offer) |
| `title`, `subheading`, `characteristics` | Product name, category label and key characteristics |
| `price`, `formattedPrice`, `currency` | Best (lowest) price as a number and as displayed, with the site currency |
| `offerCount` | Number of shop offers competing on the product |
| `rating`, `reviewCount` | User rating (0 to 5) and review count |
| `testRating` | Aggregated professional test verdict when available |
| `energyClass` | EU energy efficiency class when applicable |
| `gtin`, `brand` | GTIN / EAN barcode and brand (product pages) |
| `bestOfferShop` | The shop behind the displayed best offer, with shipping costs |
| `priceRange` | Lowest and highest price across all offers |
| `offers` | Full comparison list: `shopName`, `price`, `totalPriceNote`, `deliveryEstimate`, `deliveryProviders`, `paymentMethods`, `offerUrl` |
| `specs` | Technical datasheet grouped by section (Display, Battery, Hardware...) |
| `variants` | Sibling variants (other colors / sizes) with their product URLs |
| `priceHistory` | Daily best-price points over 1M to 1Y, plus average, lowest and highest price |
| `imageUrl`, `url` | Product image and product page URL |
| `country`, `domain`, `searchInput`, `position` | Where the row came from and which input produced it |

### 🚀 How to scrape idealo

1. Type your **search keywords** (`iphone 15`, `lego star wars`, an EAN, a model number), one per line, and pick the **country site** (Germany, Austria, UK, France, Italy or Spain).
2. Or paste **idealo URLs**: a search results page, a category page with your filters already applied, or product pages. Product pages always return their full offer list.
3. Optionally sort (price ascending, biggest discount, newest first), **exclude used products**, and set a **min / max price**.
4. Turn on the detail options you need: **all shop offers**, **technical specifications**, **price history** (1 month to 1 year).
5. Set **Max products** and click **Start**. Open the **Storage** tab to preview the rows and export them as JSON, CSV, Excel or XML, or read them from the dataset API.

The same run can be started from the Apify API, the Python or JavaScript client, or put on a schedule for continuous price monitoring.

### 📥 Input parameters

| Field | Key | Type | Default | Description |
|---|---|---|---|---|
| Search keywords | `queries` | array | `iphone 15` (prefill) | One search per line. Brand, model, category words or an EAN. |
| Start URLs | `startUrls` | array of URLs | none | idealo search, category or product URLs, from any of the 6 country domains. |
| Country site | `country` | select | `de` | `de`, `at`, `uk`, `fr`, `it` or `es`. Pasted URLs keep their own country automatically. |
| Max products (total) | `maxItems` | integer | `100` | Hard cap across all searches. This is also your cost cap. |
| Max products per search | `maxItemsPerQuery` | integer | none | Optional cap per keyword or URL. |
| Sort order | `sort` | select | `RELEVANCE` | Relevance, price ascending / descending, biggest discount, newest first. |
| Exclude used products | `excludeUsed` | boolean | `false` | Only new products. |
| Min / max price | `minPrice`, `maxPrice` | integer | none | Keep products whose best price falls in the range. |
| Include all shop offers | `includeOffers` | boolean | `false` | Attach the full price comparison list to each product. |
| Max offers per product | `maxOffersPerProduct` | integer | `40` | Cap on the attached offer list. |
| Include specifications | `includeSpecs` | boolean | `false` | Attach the technical datasheet. |
| Include price history | `includePriceHistory` | boolean | `false` | Attach daily best prices and statistics. |
| Price history period | `priceHistoryPeriod` | select | `3M` | `1M`, `3M`, `6M` or `1Y`. |
| Proxy configuration | `proxyConfiguration` | object | Apify Proxy | Default settings work well; switch to residential if runs report blocking. |

### 📤 Output example

```json
{
  "productId": "202092559",
  "type": "PRODUCT",
  "title": "Apple AirPods Pro 2",
  "subheading": "Bluetooth-Kopfhörer",
  "price": 201.52,
  "formattedPrice": "201,52 €",
  "currency": "EUR",
  "offerCount": 53,
  "rating": 4.5,
  "reviewCount": 30,
  "testRating": "1,5",
  "brand": "Apple",
  "imageUrl": "https://cdn.idealo.com/folder/Product/202092/5/202092559/s1_produktbild_mittelgross/apple-airpods-pro-2.jpg",
  "url": "https://www.idealo.de/preisvergleich/OffersOfProduct/202092559_-airpods-pro-2-apple.html",
  "bestOfferShop": {"name": "handy24.de", "id": "333680", "shippingCosts": "4,90 €"},
  "priceRange": {"low": 201.52, "high": 249.0, "offerCount": 53},
  "offers": [
    {
      "shopName": "handy24.de",
      "price": 201.52,
      "totalPriceNote": "206,42 € inkl. Versand",
      "deliveryEstimate": "Di. 08.09.-Mi. 09.09.2026",
      "deliveryProviders": ["DHL"],
      "paymentMethods": ["klarna", "mastercard", "paypal", "visa"],
      "offerUrl": "https://www.idealo.de/relocator/relocate?offerKey=..."
    }
  ],
  "priceHistory": {
    "period": "3M",
    "points": [{"date": "2026-06-05", "price": 189.0}],
    "statistics": {"averagePrice": 187.35, "lowestPrice": 165.9, "highestPrice": 201.55, "daysCovered": 94}
  },
  "country": "DE",
  "searchInput": "airpods pro 2",
  "position": 1
}
```

### 💡 Ready-to-run examples

- **Track a product's market in Germany**: `queries: ["airpods pro 2"]`, `includeOffers: true`, `includePriceHistory: true`. One row per model with every shop's price and 3 months of price points.
- **Cheapest first, new only**: `queries: ["nintendo switch 2"]`, `sort: "PRICE_ASC"`, `excludeUsed: true`. Bargain hunting across a whole search.
- **Compare a product across countries**: paste the product URL from each country domain in `startUrls`. Same product, six prices, one dataset.
- **Category watch with your own filters**: filter a category on idealo (brand, features, price) in your browser, paste the resulting URL, schedule the run daily.
- **Spec sheets at scale**: `queries: ["washing machine"]`, `country: "uk"`, `includeSpecs: true`. Full technical datasheets for catalog enrichment.
- **Discount radar**: `sort: "DISCOUNT_DESC"` with `includePriceHistory: true`, then check `statistics.averagePrice` against today's price to spot real deals.

### 💰 Pricing: how much does it cost to scrape idealo?

You pay **per product row**, nothing else: no subscription, no starting fee. A product with its 40 shop offers, specs and price history attached still counts as **one** result. The detail options make runs slower, not more expensive per row. A typical price watch (200 products, offers and history on) costs well under a dollar per run. Set `maxItems` to control your spend exactly.

### ⚙️ Performance, proxies and limits

- **36 products per results page** are collected in one request, so keyword searches are fast even at thousands of products.
- Each detail option adds one or two requests per product; expect roughly 1 to 2 seconds per product with all options on.
- The default **Apify Proxy (automatic)** settings work well. If a run reports `blocked` in its output, switch the proxy configuration to **residential** and retry.
- Search results are capped by idealo itself at around **4,000 products per search** (about 112 pages). Split a broad category into narrower searches to go beyond that.
- Rows are deduplicated by product id within a run, so overlapping searches never produce duplicates or double charges.

### 🔌 Integrations and API

Start the Actor from the [Apify API](https://docs.apify.com/api/v2), the [Python](https://docs.apify.com/api/client/python/) or [JavaScript](https://docs.apify.com/api/client/js/) client, or a webhook, and connect the dataset to Google Sheets, Slack, Make, Zapier or your own pipeline through [Apify integrations](https://apify.com/integrations).

Run synchronously and get the products in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapifier~idealo-price-comparison-universal-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["airpods pro 2"], "country": "de", "maxItems": 20, "includeOffers": true}'
```

Schedule it (hourly, daily, weekly) from the **Schedules** tab to build your own price tracker.

### ❓ FAQ

**Is it legal to scrape idealo?**
The Actor collects publicly available product and price data, the same information any visitor sees. You are responsible for how you use the data; respect applicable laws and idealo's terms.

**Do I need an idealo account or API key?**
No. No login, no cookies, no API key. Pick a country, type a keyword, run.

**Does idealo have an official API?**
Not a public one; idealo's partner APIs are reserved for registered shops. This Actor is the practical alternative: it returns the same product, offer and price history data as structured JSON through the Apify API, with no partnership required.

**Which countries are supported?**
Germany (idealo.de), Austria (idealo.at), the UK (idealo.co.uk), France (idealo.fr), Italy (idealo.it) and Spain (idealo.es). One run can mix them through pasted URLs.

**How do I get every shop's price for a product?**
Turn on **Include all shop offers**, or paste the product URL directly; pasted product pages always return the full offer list with shipping and delivery details.

**How fresh is the price history?**
It is idealo's own daily best-price series, fetched live at run time, over 1 month to 1 year, with average, lowest and highest price computed for the period.

**Can I filter by brand, features or other category filters?**
Yes. Apply any filters on idealo in your browser and paste the resulting category URL as a start URL; the Actor scrapes exactly that filtered view.

**Why do some rows have type OFFER?**
idealo mixes standalone marketplace offers into search results. They carry a shop price but no price comparison; filter on `type` if you only want catalog products.

**What does the `blocked` error in the run output mean?**
The site refused the connection for the IP used. Switch the proxy configuration to residential proxies and run again; the Actor also rotates sessions automatically.

### 🔗 Related scrapers

- [Trustpilot Scraper](https://apify.com/scrapifier/trustpilot-universal-scraper): company reviews and ratings for the shops you find here.
- [Leboncoin Scraper](https://apify.com/scrapifier/leboncoin-universal-scraper): listings from France's biggest marketplace.
- [Vinted Scraper](https://apify.com/scrapifier/vinted-universal-scraper): second-hand fashion listings and prices.
- [Indeed Jobs Scraper](https://apify.com/scrapifier/indeed-jobs-universal-scraper): job listings with salaries on 20 country sites.
- [Glassdoor Company Search Scraper](https://apify.com/scrapifier/glassdoor-company-search-universal-scraper): company profiles with ratings at scale.

### 💬 Support

Found a bug, missing a field, need another idealo country or a custom feature? Open an **Issue** on the Actor page and I usually answer within a day. If this scraper saves you time, a ⭐ review on the Actor page helps a lot.

# Actor input Schema

## `queries` (type: `array`):

Products to search for, one keyword per line (e.g. <code>iphone 15</code>, <code>lego star wars</code>, a brand, a model or an EAN). Each keyword becomes one search on the selected country site.

## `startUrls` (type: `array`):

idealo URLs to scrape directly: a search results page, a category page (with or without filters), or a product page. Product pages always return the full list of shop offers.

## `country` (type: `string`):

Which idealo country site to search on. Pasted URLs keep their own country automatically.

## `sort` (type: `string`):

How to order search results before the cap is applied.

## `excludeUsed` (type: `boolean`):

Only return new products (skip refurbished and second-hand listings).

## `minPrice` (type: `integer`):

Only keep products whose best price is at or above this value (in the site currency).

## `maxPrice` (type: `integer`):

Only keep products whose best price is at or below this value (in the site currency).

## `maxItems` (type: `integer`):

Hard cap on the total number of products across all searches and URLs. You pay per result, so this is also your cost cap.

## `maxItemsPerQuery` (type: `integer`):

Optional cap per individual keyword or URL. Leave empty to only use the total cap.

## `includeOffers` (type: `boolean`):

Visit each product page and attach the full price comparison list: every shop, its price, shipping cost, delivery estimate and payment methods. Slower, but this is the core idealo data.

## `maxOffersPerProduct` (type: `integer`):

Cap the number of shop offers attached to each product.

## `includeSpecs` (type: `boolean`):

Attach the full technical datasheet of each product (grouped by section, e.g. Display, Battery, Hardware).

## `includePriceHistory` (type: `boolean`):

Attach the daily best-price history of each product with statistics (average, lowest, highest price over the period).

## `priceHistoryPeriod` (type: `string`):

How far back the price history goes.

## `proxyConfiguration` (type: `object`):

Proxy settings. Apify Proxy (automatic) works well; switch to residential proxies if you see blocked runs.

## `verbose` (type: `boolean`):

Log progress details for every search.

## Actor input object example

```json
{
  "queries": [
    "iphone 15"
  ],
  "country": "de",
  "sort": "RELEVANCE",
  "excludeUsed": false,
  "maxItems": 50,
  "includeOffers": false,
  "maxOffersPerProduct": 40,
  "includeSpecs": false,
  "includePriceHistory": false,
  "priceHistoryPeriod": "3M",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "verbose": true
}
```

# Actor output Schema

## `products` (type: `string`):

All idealo products extracted by this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "iphone 15"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapifier/idealo-price-comparison-universal-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["iphone 15"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapifier/idealo-price-comparison-universal-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "iphone 15"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapifier/idealo-price-comparison-universal-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapifier/idealo-price-comparison-universal-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gUsVHw8MTw9l8m5iu/builds/M70c0QIw8wsEFm8Ei/openapi.json
