# idealo Scraper: Prices, Offers, Reviews & Shops (`sourabhbgp/idealo-scraper`) Actor

Scrape idealo.de by EAN, link or keyword: every shop's offer with price, shipping and delivery, used and B-Ware offers, search and category results, product reviews, and shop profiles with contact details and reviews. Export to Excel, CSV or JSON.

- **URL**: https://apify.com/sourabhbgp/idealo-scraper.md
- **Developed by:** [Sourabh Kumar](https://apify.com/sourabhbgp) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 1 total users, 0 monthly users, 73.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### idealo scraper: prices, every shop offer, reviews and shops

Get idealo.de data in four ways: every shop offer for a product, search and category results, product reviews, or a shop's profile and reviews. Paste EANs, links or keywords, press Start, and download a clean spreadsheet.

**From $4.00 per 1,000 results, plus $0.005 per run. No proxy or login needed.**

Works on idealo.de (Germany), prices in euros. *Deutsch: idealo Preise, alle Angebote, Bewertungen und Shops nach Excel exportieren.*

<br>

### Pick a mode

Set **What to scrape** (`mode`), then fill the section with the same name. Other sections are ignored.

| You want | `mode` | Paste into |
|---|---|---|
| Every shop's price for products | `product` | `eans` (barcodes) or `productUrls` (idealo links or IDs) |
| Products for a keyword, category or brand | `search` | `searchQueries` (keywords) or `searchUrls` (idealo links) |
| Customer reviews of a product | `reviews` | `reviewProductUrls` (links, IDs or EANs) |
| A shop's profile, contact and reviews | `shop` | `shopUrls` (shop links or IDs) |

Every mode can be scheduled. Run it daily and you have a price, offer or review tracker.

<br>

### Why this idealo scraper?

- 🔢 **EAN in, every shop's price out.** Barcodes are checked against the product's own EAN list. A product that shows no barcode on idealo is flagged `eanVerified: false`, and one listing a different barcode is reported as not found.
- 🏷️ **Every offer, not just the cheapest:** price, shipping, total, delivery time, payment methods and shop rating, plus used and B-Ware offers with their condition.
- 🏪 **Shop details nobody else gives you:** address, email, phone, idealo partner year, carriers and the rating per month and year.
- ⭐ **Review text from idealo and from other shops** (Amazon, MediaMarkt), with pros, cons and the variant bought.
- 💸 **Pay only for results.** No proxy to set up, no browser to wait for.

<br>

### 1. Product: every offer for EANs, links or IDs

**Paste** EAN barcodes, or idealo product links or IDs, one per line. A list of 100 is fine.

**Get** one row per product: name, brand, price range, rating, test grade, specs, pros and cons, questions, variants, and every offer from cheapest to most expensive.

| Option | Field | Default | What it does |
|---|---|---|---|
| EANs / barcodes | `eans` | | 8, 12, 13 or 14 digits, one per line |
| Product links or IDs | `productUrls` | | One per line |
| Max offers per product | `maxOffers` | 100 | Up to 1,000, cheapest first |
| Add used and B-Ware offers | `includeUsedOffers` | `false` | In their own list, with the condition grade |
| Add shop details | `includeShopDetails` | `false` | Address, contact, partner year, carriers, returns, rating breakdown for each offer's shop |
| Add international prices | `includeInternationalPrices` | `false` | Lowest price on idealo in Austria, Spain, France, Italy and the UK |

**Input**

```json
{
  "mode": "product",
  "eans": [
    "0195949821837"
  ],
  "maxOffers": 5,
  "includeShopDetails": true
}
```

**Output** (one real row, selected fields, first offer shown)

```json
{
  "type": "product",
  "ean": "0195949821837",
  "eanVerified": true,
  "productId": "204771161",
  "title": "Apple iPhone 16 128GB Schwarz",
  "brand": "Apple",
  "category": "5G Handy",
  "lowestPrice": 749.9,
  "highestPrice": 1187.67,
  "offerCount": 51,
  "rating": 4.58,
  "reviewCount": 71,
  "offers": [
    {
      "shopName": "smartport.de",
      "price": 749.9,
      "shippingCost": 0,
      "totalPrice": 749.9,
      "delivery": "6-8 Werktage",
      "paymentMethods": ["PayPal", "Rechnung", "Visa", "Mastercard", "American Express", "Klarna", "Vorkasse"],
      "shopRating": 4.4,
      "shopRatingCount": 1702,
      "shop": {
        "city": "Zug",
        "email": "info@smartport.de",
        "phone": "+49 30 22399 52777",
        "partnerSince": 2026
      }
    }
  ]
}
```

<br>

### 2. Search: products from a keyword or link

**Paste** keywords, or any idealo category, search, brand or list link. Filters already in a link are kept.

**Get** one row per result: name, category, lowest price, offer count, rating, test grade, bargain saving and energy class. Results that are a single shop offer come as `type: offer` with the shop and delivery.

| Option | Field | Default | What it does |
|---|---|---|---|
| Max results per search | `maxResults` | 100 | Up to 5,000 |
| Sort by | `sort` | `RELEVANCE_DESC` | `RELEVANCE_DESC` (idealo's order), `PRICE_ASC`, `PRICE_DESC`, `DISCOUNT_DESC`, `CREATION_DATE_DESC`, `BASE_PRICE_ASC` (unit price, search and brand pages only) |
| Add full product details | `includeDetails` | `false` | Adds what Product mode returns to each product found |
| Max offers per product (with full details) | `detailsMaxOffers` | 20 | Up to 1,000 |

**Search filters** (all optional)

| Filter | Field |
|---|---|
| Min / max price (EUR) | `minPrice`, `maxPrice` |
| Exclude used products | `excludeUsed` |
| Fast delivery only | `fastDeliveryOnly` |
| Bargains only (price below its usual level) | `bargainsOnly` |

For any of idealo's category filters (brand, size, colour), set them on idealo.de and paste the link. Each run also saves a `FILTERS` record with every filter and its hit count.

**Input**

```json
{
  "mode": "search",
  "searchQueries": [
    "kaffeevollautomat"
  ],
  "maxResults": 50
}
```

**Output** (one real row)

```json
{
  "type": "product",
  "input": "kaffeevollautomat",
  "position": 1,
  "productId": "2416409",
  "title": "De'Longhi Magnifica ECAM 22.110",
  "category": "Kaffeevollautomat",
  "lowestPrice": 248,
  "offerCount": 51,
  "ratingRounded": 4.5,
  "reviewCount": 972,
  "testGrade": 2.4,
  "url": "https://www.idealo.de/preisvergleich/OffersOfProduct/2416409.html"
}
```

<br>

### 3. Reviews: customer reviews of any product

**Paste** product links, product IDs or EANs.

**Get** one row per review, newest first: stars, date, reviewer, text, pros and cons, whether idealo verified it, and the variant bought. idealo shows two lists, its own reviews and reviews imported from shops such as Amazon; by default you get both, merged by date.

| Option | Field | Default | What it does |
|---|---|---|---|
| Product links, IDs or EANs | `reviewProductUrls` | | One per line |
| Max reviews per product | `maxReviews` | 100 | Up to 10,000 |
| Review source | `reviewSource` | `all` | `all`, `idealo`, `external` (other shops) |
| Only reviews since | `reviewsSince` | | A date, e.g. `2026-01-01` |

**Input**

```json
{
  "mode": "reviews",
  "reviewProductUrls": [
    "203554857"
  ],
  "reviewSource": "idealo",
  "maxReviews": 3
}
```

**Output** (one real row)

```json
{
  "type": "review",
  "productId": "203554857",
  "productTitle": "Sony PlayStation 5 Slim (PS5 Slim) Digital Edition",
  "reviewSource": "idealo",
  "provider": "Cimenio",
  "author": "Zakaria F.",
  "date": "2025-03-13",
  "rating": 4,
  "text": "Die PS5 überzeugt mit beeindruckender Grafik, schnellem SSD-Speicher und innovativem dual Sense-Controller. Spiele laden blitzschnell und das haptische Feedback, sorgt für ein intensives Erlebnis. Ein Muss für Gamer, auch wenn Verfügbarkeit und Preis Herausforderungen sind.",
  "pros": "Sehr fließend",
  "cons": "Manchmal kommt es zu Störungen",
  "verified": true,
  "variant": "Sony PlayStation 5 Slim (PS5 Slim) Digital Edition"
}
```

<br>

### 4. Shop: a shop's profile, contact and reviews

**Paste** idealo shop links or shop IDs. The shop link is behind the shop's name on any idealo offer.

**Get** one profile row per shop, then its shop reviews. The profile has the address, contact, payment methods, carriers, the shop grade with its star split, ratings per month and year, and the shop's top products.

| Option | Field | Default | What it does |
|---|---|---|---|
| Shop links or IDs | `shopUrls` | | One per line |
| Max shop reviews per shop | `maxShopReviews` | 100 | `0` returns only the profile. Up to 10,000 |
| Shop review order | `shopReviewSort` | `newest` | `newest`, `oldest` |
| Add contact details | `includeShopContact` | `true` | Email, phone, idealo partner year and return policy |

**Input**

```json
{
  "mode": "shop",
  "shopUrls": [
    "281846"
  ],
  "maxShopReviews": 5
}
```

**Output: shop profile** (one real row, selected fields)

```json
{
  "type": "shop",
  "shopId": "281846",
  "shopName": "saturn.de",
  "street": "Media-Saturn-Str. 1",
  "postalCode": "85053",
  "city": "Ingolstadt",
  "country": "DE",
  "email": "Kontakt@saturn.de",
  "partnerSince": 2011,
  "carriers": ["DHL", "Hermes", "UPS", "Click and Collect"],
  "freeReturn": true,
  "paymentMethods": ["Visa", "Mastercard", "PayPal", "Amazon Pay", "Klarna", "American Express", "Diners Club", "Ratenzahlung", "Vorkasse"],
  "rating": 4.04,
  "ratingCount": 24,
  "reviewCount": 15504
}
```

**Output: shop review** (one real row)

```json
{
  "type": "shopReview",
  "shopName": "saturn.de",
  "author": "Lia",
  "date": "2026-10-04T10:20:34.238Z",
  "rating": 5,
  "ratingOrdering": 5,
  "ratingDelivery": 5,
  "ratingCustomerService": 5,
  "title": "Sehr schneller Versand innerhalb von 30 Stunden geliefert. Preis erstklassige Ware.",
  "text": "Sehr schneller Versand innerhalb von 30 Stunden geliefert. Preis erstklassig uns konkurrenzlos, gekauft wurde ein Router Speedport 7.",
  "shopAnswer": null
}
```

Every row has a `type` column (`product`, `offer`, `review`, `shop`, `shopReview`), so you can split one export into tabs.

<br>

### What people use it for

- 🛒 **Online shops:** see every competitor's price, shipping and delivery time for your products, by EAN, every day.
- 🏭 **Brands:** watch who sells your products on idealo, at what price, and how buyers rate them.
- 🤝 **Sales teams:** build lists of German online shops with address, email, phone and rating.
- ⭐ **Customer experience teams:** pull new product and shop reviews into your feedback tools.
- 📊 **Market research:** size a category by price band, rating and test grade.

<br>

### How much does it cost?

One price for every row: a product with all its offers, a search result, a review, a shop profile or a shop review. Used offers, shop details, international prices and full details cost nothing extra.

| Apify plan | Per 1,000 results |
|---|---|
| Free | $5.00 |
| Starter | $4.75 |
| Scale | $4.50 |
| Business | $4.00 |

Each run also costs $0.005 to start.

- **Free plan:** your $5 monthly credit covers about **1,000 results**.
- **Starter plan ($29):** about **6,000 results** a month.

<br>

### Limitations

- idealo shows at most about **5,000 results per search or category**. Split a big search with a price range to get more.
- Very large shops only list their newest **40,000 or so shop reviews**.
- No price history: idealo only shows it in the browser.
- Offer links open idealo's redirect to the shop in a browser.
- German storefront only. Names and reviews stay in German, as on the site.

<br>

### FAQ

#### How do I scrape idealo without coding?

Pick a mode, paste EANs, links or a keyword, and press **Start**. Download the results as Excel, CSV or JSON.

#### Can I track idealo prices every day?

Yes. Save your input as a task and add a schedule. Each run returns the current price of every offer and when the shop last updated it.

#### What if my EAN is not on idealo?

That line comes back as not found and costs nothing. A product is only returned when idealo lists your barcode for it.

#### Do I need a proxy or an idealo account?

No. It works out of the box and handles blocks by itself.

#### Can I use it from code or an AI agent?

Yes. Call it through the Apify API, or connect it to an AI agent through Apify's MCP server.

#### Is scraping idealo legal?

It collects only what idealo shows any visitor, with no login. How you use the data is your responsibility, especially personal data such as reviewer names.

#### Your feedback

Something missing or wrong? [Open an issue](https://console.apify.com/actors/Ss40eVyQkmWoMkjca/issues).

# Actor input Schema

## `mode` (type: `string`):

Pick what to scrape, then fill the section with the same name below. Other sections are ignored.

## `eans` (type: `array`):

One EAN, GTIN or UPC barcode per line (8, 12, 13 or 14 digits), for example 0195949821837. A product is returned when idealo lists that barcode for it (eanVerified true). When idealo opens a product that shows no barcode at all, it is returned with eanVerified false. A product showing a different barcode is reported as not found.

## `productUrls` (type: `array`):

One idealo.de product link or product ID per line, for example https://www.idealo.de/preisvergleich/OffersOfProduct/204771161\_-iphone-16-128gb-schwarz-apple.html or 204771161.

## `maxOffers` (type: `integer`):

Stop after this many new offers for each product, in idealo's own order (cheapest item price first). The same limit applies to used offers when they are on.

## `includeUsedOffers` (type: `boolean`):

Also add idealo's used, refurbished and B-Ware offers in their own list, with the condition grade. A few extra requests per product.

## `includeShopDetails` (type: `boolean`):

Add each shop's address, contact, idealo partner year, payment methods, carriers, return policy and rating breakdown to its offers. One extra request per shop; shops are looked up once per run.

## `includeInternationalPrices` (type: `boolean`):

Add the lowest price of the same product on idealo in Austria, Spain, France, Italy and the UK, in euros. One extra request per product.

## `searchQueries` (type: `array`):

One keyword per line, as you would type it on idealo.de, for example kaffeevollautomat or iphone 16.

## `searchUrls` (type: `array`):

Category, search, brand or list pages from idealo.de (links with ProductCategory, MainSearchProductCategory, Hersteller or Liste), for example https://www.idealo.de/preisvergleich/ProductCategory/19116.html or https://www.idealo.de/preisvergleich/MainSearchProductCategory.html?q=akku. Filters already in the link are kept.

## `maxResults` (type: `integer`):

Stop after this many results for each keyword or link. idealo shows at most about 5,000 results for one search; split bigger ones with a price range.

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

Order of the results. Cheapest unit price is offered on search and brand pages only; elsewhere idealo's own order is used.

## `includeDetails` (type: `boolean`):

Also open each product found and add what Product mode returns: offers (up to the limit below), specs, pros and cons, review summary. A few extra requests per product.

## `detailsMaxOffers` (type: `integer`):

With full product details on: stop after this many offers for each product, cheapest first.

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

Only results at or above this price.

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

Only results at or below this price.

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

Leave out results that idealo lists as used only.

## `fastDeliveryOnly` (type: `boolean`):

Only results idealo marks as quickly deliverable.

## `bargainsOnly` (type: `boolean`):

Only results idealo marks as a bargain (price below its usual level).

## `reviewProductUrls` (type: `array`):

One idealo.de product link, product ID (4 to 10 digits) or EAN barcode (8, 12, 13 or 14 digits; an 8-digit line is tried as a product ID first) per line, for example https://www.idealo.de/preisvergleich/OffersOfProduct/203554857.html, 203554857 or 0195949821837.

## `maxReviews` (type: `integer`):

Stop after this many reviews for each product, newest first.

## `reviewSource` (type: `string`):

idealo shows two lists: reviews written on idealo (verified, often with pros and cons) and reviews imported from other shops such as Amazon or MediaMarkt (usually with a title). All merges both, newest first.

## `reviewsSince` (type: `string`):

Only reviews written on or after this date. Leave empty for all reviews.

## `shopUrls` (type: `array`):

One idealo.de shop page link or shop ID per line, for example https://www.idealo.de/preisvergleich/Shop/26895.html or 26895. The shop link is behind the shop's name on any idealo offer.

## `maxShopReviews` (type: `integer`):

Shop reviews to add after each profile row. Use 0 to get only the profile.

## `shopReviewSort` (type: `string`):

Newest or oldest shop reviews first.

## `includeShopContact` (type: `boolean`):

Add the shop's email, phone, idealo partner year and return policy, read from the shop info box of one of its offers. For shops whose page shows no address it also fills the address. A few extra requests per shop.

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

Usually not needed. The scraper uses Apify Proxy and changes IPs by itself when idealo blocks one.

## Actor input object example

```json
{
  "mode": "product",
  "eans": [
    "0195949821837"
  ],
  "maxOffers": 20,
  "includeUsedOffers": false,
  "includeShopDetails": false,
  "includeInternationalPrices": false,
  "searchQueries": [
    "kaffeevollautomat"
  ],
  "maxResults": 50,
  "sort": "RELEVANCE_DESC",
  "includeDetails": false,
  "detailsMaxOffers": 20,
  "excludeUsed": false,
  "fastDeliveryOnly": false,
  "bargainsOnly": false,
  "reviewProductUrls": [
    "203554857"
  ],
  "maxReviews": 20,
  "reviewSource": "all",
  "shopUrls": [
    "26895"
  ],
  "maxShopReviews": 20,
  "shopReviewSort": "newest",
  "includeShopContact": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Rows from idealo.de: products, search results, reviews or shops.

# 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 = {
    "eans": [
        "0195949821837"
    ],
    "maxOffers": 20,
    "searchQueries": [
        "kaffeevollautomat"
    ],
    "maxResults": 50,
    "reviewProductUrls": [
        "203554857"
    ],
    "maxReviews": 20,
    "shopUrls": [
        "26895"
    ],
    "maxShopReviews": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourabhbgp/idealo-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 = {
    "eans": ["0195949821837"],
    "maxOffers": 20,
    "searchQueries": ["kaffeevollautomat"],
    "maxResults": 50,
    "reviewProductUrls": ["203554857"],
    "maxReviews": 20,
    "shopUrls": ["26895"],
    "maxShopReviews": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("sourabhbgp/idealo-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 '{
  "eans": [
    "0195949821837"
  ],
  "maxOffers": 20,
  "searchQueries": [
    "kaffeevollautomat"
  ],
  "maxResults": 50,
  "reviewProductUrls": [
    "203554857"
  ],
  "maxReviews": 20,
  "shopUrls": [
    "26895"
  ],
  "maxShopReviews": 20
}' |
apify call sourabhbgp/idealo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sourabhbgp/idealo-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/Ss40eVyQkmWoMkjca/builds/vM5IFtpEbWny0RLBT/openapi.json
