# Idealo Price API — Shop Offers by Product (`unfenced-group/idealo-price-api`) Actor

Every shop offer for a product on idealo, cheapest first, with price, delivery time and shop rating, plus lowest, median and highest price. One product id works on idealo Germany, Austria, France, Italy, Spain and the UK. HTTP API or batch.

- **URL**: https://apify.com/unfenced-group/idealo-price-api.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 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 Price API — Shop Offers by Product

![Idealo Price API](https://api.apify.com/v2/key-value-stores/3rNxl3q0ZmzaqlZ46/records/banner.png)

Get every shop offer for a product on idealo, Europe's largest price comparison site, in one call: shop, price, delivery time and shop rating, plus the lowest, median and highest price. Price the same product on idealo Germany, Austria, France, Italy, Spain and the UK at once. No API key required.

***

### Why this API?

#### 🛒 The whole offer list

Every shop idealo lists for the product, cheapest first, with price, delivery time, shop rating and the number of shop reviews.

#### 🌍 Six countries, one product id

Idealo uses one product id across its country sites. Pass it once and get a result per country: compare the German, French and UK prices for the same product side by side.

#### 📊 Price statistics included

Lowest, median and highest price and the number of offers, ready for repricing rules, MAP monitoring and price alerts.

#### 🏷️ Product identity

Title, brand, EAN and image with every result, so you can join idealo prices to your own catalogue.

#### ⚡ Built for apps and agents

One product in, one JSON answer back in seconds, or up to 50 products per run.

***

### Call this actor over HTTP

Besides normal runs, this actor exposes a REST API that answers each request in seconds with JSON. There is no run to start and no dataset to fetch afterwards, which suits apps, automations and AI agents that need one answer at a time. The full interactive reference is on the **Endpoints** tab.

| Endpoint | Returns | Billed as |
|---|---|---|
| `GET /offers?product=…&countries=…` | Shop offers and price statistics per country | Per country found |

Authenticate with your Apify API token in the `Authorization` header:

```bash
curl -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  "https://unfenced-group--idealo-price-api.apify.actor/offers?product=205015765&countries=de,fr"
```

Every response has the shape `{ "count": N, "items": [...] }`, with the same fields as the dataset records below, billed at the same price as a normal run. Errors and products not listed in a country return no data for that country and are never billed. POST with a JSON body works the same as GET.

***

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `productIds` | array | (required) | Idealo product ids (`205015765`) or product URLs (`https://www.idealo.de/preisvergleich/OffersOfProduct/205015765_…`). Up to 50 per run. |
| `countries` | array | `["de"]` | Idealo country sites: `de`, `at`, `fr`, `it`, `es`, `uk`. |
| `maxOffers` | integer | `20` | Offers to return per product and country, cheapest first (1 to 100). |

Over HTTP, pass one `product`, `countries` as a comma-separated list and optionally `maxOffers`.

***

### Output schema

One record per product per country. Fields idealo does not publish are `null`, never omitted.

| Field | Type | Description |
|---|---|---|
| `productId` | string | Idealo product id. |
| `country` | string | Country of the idealo site (`DE`, `AT`, `FR`, `IT`, `ES`, `GB`). |
| `marketplace` | string | Idealo site, e.g. `www.idealo.de`. |
| `url` | string | Idealo offer page of the product. |
| `title` | string | Product name on that site. |
| `brand` | string | Brand. |
| `ean` | string | EAN / GTIN of the product. |
| `mpn` | string | Manufacturer part number (null if not shown). |
| `category` | string | Idealo category (null if not shown). |
| `currency` | string | `EUR` or `GBP`. |
| `priceMin` | number | Lowest offer price. |
| `priceMedian` | number | Median offer price. |
| `priceMax` | number | Highest offer price. |
| `offerCount` | integer | Number of offers on the product page. |
| `bestOffer` | object | Cheapest offer: `merchantName`, `totalPrice`, `currency`, `deliveryTime`. |
| `offers[]` | array | Offers, cheapest first: `merchantName`, `price`, `shippingCost`, `totalPrice`, `currency`, `deliveryTime`, `condition`, `merchantRating`, `merchantRatingCount`, `isSponsored`, `offerUrl`. |
| `imageUrl` | string | Product image. |
| `rating` | number | Average product rating on idealo (null if none). |
| `ratingCount` | integer | Number of product ratings. |
| `source` | string | Idealo site the data came from. |
| `scrapedAt` | string | Time of the lookup (ISO 8601). |

`shippingCost` is filled when idealo shows shipping separately and is `null` otherwise. `offerUrl` is idealo's own redirect link to the shop.

#### Example record

```json
{
  "productId": "201447343",
  "country": "DE",
  "marketplace": "www.idealo.de",
  "url": "https://www.idealo.de/preisvergleich/OffersOfProduct/201447343",
  "title": "Nintendo Switch (OLED-Modell)",
  "brand": "Nintendo",
  "ean": "0045496453435",
  "mpn": null,
  "category": null,
  "currency": "EUR",
  "priceMin": 307.99,
  "priceMax": 348.83,
  "priceMedian": 329,
  "offerCount": 20,
  "bestOffer": { "merchantName": "onbuy.com/de - Shop aus Dublin 1", "totalPrice": 307.99, "currency": "EUR", "deliveryTime": "bis Mi. 21.10." },
  "offers": [
    { "merchantName": "onbuy.com/de - Shop aus Dublin 1", "price": 307.99, "shippingCost": null, "totalPrice": 307.99, "currency": "EUR", "deliveryTime": "bis Mi. 21.10.", "condition": null, "merchantRating": 2.2, "merchantRatingCount": 10, "isSponsored": false, "offerUrl": "https://www.idealo.de/relocator/relocate?categoryId=3189&offerKey=6d1bd83cd3b08d94b0cbf48b79bd9e77&pos=1&price=307.99&productid=201447343&sid=336628&type=offer" },
    { "merchantName": "cosse.de - Shop aus Geeste-Dalum", "price": 319, "shippingCost": null, "totalPrice": 319, "currency": "EUR", "deliveryTime": "bis Sa. 17.10.", "condition": null, "merchantRating": 4.6, "merchantRatingCount": 708, "isSponsored": false, "offerUrl": "https://www.idealo.de/relocator/relocate?categoryId=3189&offerKey=cfc775f333be2bd213003d29ccaac3a1&pos=3&price=319.00&productid=201447343&sid=281901&type=offer" }
  ],
  "imageUrl": "https://cdn.idealo.com/folder/Product/201447/3/201447343/s1_produktbild_gross/nintendo-switch-oled-modell-weiss.jpg",
  "rating": 4.5,
  "ratingCount": 12,
  "source": "www.idealo.de",
  "scrapedAt": "2026-10-14T07:30:50.433Z"
}
```

***

### Examples

**One product in Germany:**

```json
{ "productIds": ["201447343"], "countries": ["de"] }
```

**Compare one product across all six countries:**

```json
{ "productIds": ["205015765"], "countries": ["de", "at", "fr", "it", "es", "uk"], "maxOffers": 5 }
```

**From idealo product URLs, cheapest three offers only:**

```json
{ "productIds": ["https://www.idealo.de/preisvergleich/OffersOfProduct/201447343_-switch-oled-modell-weiss-nintendo.html"], "maxOffers": 3 }
```

**Daily price monitor for a product list (schedule this run every day):**

```json
{ "productIds": ["201447343", "205015765"], "countries": ["de", "at"], "maxOffers": 10 }
```

***

### 💰 Pricing

**$0.005 per product per country** — you only pay for product-country results returned. Errors and lookups that find nothing are never charged. Countries where idealo does not list the product are not charged.

| Usage | Cost |
|---|---|
| one product, one country | ~$0.01 |
| one product, six countries | ~$0.03 |
| 100 results | ~$0.50 |
| 1,000 results | ~$5.00 |

Subscription tiers lower the rate further, down to $0.004 per product per country at the highest tier. A run start costs $0.00005 and each dataset item $0.00001; HTTP requests are billed per product per country only.

***

### Performance

| Request | Typical time |
|---|---|
| One product, one country over HTTP | 3–10 seconds |
| One product, six countries over HTTP | 5–20 seconds |
| 50 products, one country as a run | about 3–6 minutes |

***

### Known limitations

- Products are looked up by idealo product id or URL. Lookup by EAN alone is not offered.
- A product that idealo does not list in a country returns nothing for that country and is not charged.
- The offer list is the one on idealo's product page. Very large offer lists can hold more shops than the page shows.
- `deliveryTime` is idealo's text in the site's own language.

***

### Technical details

- **Source:** idealo.de, idealo.at, idealo.fr, idealo.it, idealo.es, idealo.co.uk product offer pages
- **Coverage:** every product with an idealo offer page
- **Retry:** automatic retry on network errors with exponential backoff

***

### Rate this actor

If this scraper does its job, a short review on the **Reviews** tab helps other users find it. Something not working? Open an issue on the **Issues** tab instead — issues get fixed.

***

### Need a custom scraper?

**[Unfenced Group](https://www.unfencedgroup.nl)** builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

**Get in touch:** [www.unfencedgroup.nl](https://www.unfencedgroup.nl)

# Actor input Schema

## `productIds` (type: `array`):

Idealo product ids (205015765) or product URLs (https://www.idealo.de/preisvergleich/OffersOfProduct/205015765\_...). The same id works on every idealo country site. Up to 50 per run.

## `countries` (type: `array`):

Idealo country sites to price each product on. Each product found in each country is one result. Example: de, fr.

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

How many shop offers to return per product and country, cheapest first (1 to 100). Price statistics always use every offer on the page.

## Actor input object example

```json
{
  "productIds": [
    "205015765"
  ],
  "countries": [
    "de",
    "fr"
  ],
  "maxOffers": 20
}
```

# Actor output Schema

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

No description

# 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 = {
    "productIds": [
        "205015765"
    ],
    "countries": [
        "de",
        "fr"
    ],
    "maxOffers": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/idealo-price-api").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 = {
    "productIds": ["205015765"],
    "countries": [
        "de",
        "fr",
    ],
    "maxOffers": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/idealo-price-api").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 '{
  "productIds": [
    "205015765"
  ],
  "countries": [
    "de",
    "fr"
  ],
  "maxOffers": 20
}' |
apify call unfenced-group/idealo-price-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unfenced-group/idealo-price-api"
        }
    }
}
```

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/x7KYmzCLfE6eJ0guW/builds/BEoWXefsAL6sYayBF/openapi.json
