# Heureka Reivews Scraper (`stealth_mode/heureka-reivews-scraper`) Actor

Scrape verified customer reviews from Heureka.cz and Heureka.sk — including ratings, pros/cons, author info, shop data, and images. Perfect for price comparison analysts, brand monitors, and e-commerce researchers needing structured review data.

- **URL**: https://apify.com/stealth\_mode/heureka-reivews-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Heureka.cz Reviews Scraper: Extract Product Reviews at Scale

---

### What Is Heureka.cz?

Heureka.cz (and its Slovak counterpart Heureka.sk) is one of Central Europe's largest price comparison and product review platforms, covering electronics, appliances, fashion, and more. Millions of verified buyers leave structured reviews across thousands of product categories. Collecting this data manually is impractical — the **Heureka Reviews Scraper** automates extraction, delivering clean, structured records ready for analysis.

---

### Overview

The **Heureka.cz Reviews Scraper** collects customer review data from any Heureka product review page, including both Czech (`.cz`) and Slovak (`.sk`) domains. It is suited for:

- **Brand managers** monitoring product sentiment and reputation
- **E-commerce analysts** benchmarking competitor product perception
- **Data scientists** building sentiment analysis or NLP training datasets
- **Retailers** tracking customer feedback across categories

The scraper supports pagination (via `?page=N` in the URL), bulk URL input, and configurable item limits per URL.

---

### Input Format

```json
{
  "urls": [
    "https://mobilni-telefony.heureka.cz/samsung-galaxy-s25-ultra-12gb-256gb-s938b-titanium-black/#recenze/?page=3"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Field | Type | Description |
|---|---|---|
| `urls` | `array` | URLs of Heureka review list pages to scrape. Add one per line or use bulk edit. Must point to a `#recenze/` review section. Supports `?page=N` for pagination. |
| `max_items_per_url` | `integer` | Maximum number of reviews to collect per URL. Default: `20`. Set higher (e.g., `200`) for comprehensive collection. |
| `ignore_url_failures` | `boolean` | If `true`, the scraper continues running when a URL fails instead of stopping the entire run. Recommended for bulk jobs. Default: `true`. |

> **Tip:** To scrape all reviews for a product, start from `?page=1` or omit the page parameter. For large products, increase `max_items_per_url` accordingly.

***

### Output Format

#### Sample Output Record

```json
{
  "id": "c42c61c2-4d0f-5b1b-9669-34407eb33be8",
  "legacy_id": "22441859",
  "shop": {
    "id": "df85bcfa-b0f4-5413-8d24-9a859d64a924",
    "legacy_id": "74825",
    "name": "Samsung.cz",
    "url": "https://obchody.heureka.cz/samsung-com-cz/recenze/",
    "owner_id": "07469ce8-d236-5d56-81dd-a5bd07ff318c"
  },
  "product": {
    "name": "Samsung Galaxy S25 Ultra 12GB/512GB S938B Titanium Gray",
    "main_image_url": "https://img-cdn.heureka.group/v1/89794ee4-a071-4eae-b56b-84f0eb460e30.jpg"
  },
  "author": {
    "name": "Jelapeno",
    "avatar_url": null
  },
  "filled_at": "2026-05-29T13:20:06",
  "recommends_type": "RECOMMENDS",
  "rating": 10,
  "pros": [
    "Hezký telefon",
    "Kvalitní spracovani",
    "Krásné fotky"
  ],
  "cons": [],
  "summary": "Nic",
  "verified": true,
  "type": "REGULAR",
  "response": null,
  "images": [],
  "from_url": "https://mobilni-telefony.heureka.cz/samsung-galaxy-s25-ultra-12gb-256gb-s938b-titanium-black/#recenze/?page=2"
}
```

Each scraped review returns the following fields:

#### Core Identifiers

| Field | Meaning |
|---|---|
| `ID` | Unique Heureka identifier for the review |
| `Legacy ID` | Older internal ID, may be present for migrated reviews |

#### Review Content

| Field | Meaning |
|---|---|
| `Summary` | Main review text written by the customer |
| `Pros` | Positive aspects highlighted by the reviewer |
| `Cons` | Negative aspects or drawbacks mentioned |
| `Rating` | Numeric score given by the reviewer (typically 1–5) |
| `Recommends Type` | Whether the reviewer recommends the product (e.g., `yes`, `no`, `neutral`) |

#### Author & Metadata

| Field | Meaning |
|---|---|
| `Author` | Display name or anonymized identifier of the reviewer |
| `Filled At` | Timestamp of when the review was submitted |
| `Verified` | Boolean flag indicating whether the purchase was verified |
| `Type` | Review type (e.g., product review, shop review) |

#### Context & Relations

| Field | Meaning |
|---|---|
| `Shop` | Name of the shop the purchase was made through, if applicable |
| `Product` | Product name or reference the review is associated with |
| `Response` | Seller or platform response to the review, if any |
| `Images` | URLs of images attached to the review by the customer |

***

### How to Use

1. **Find the review URL** — Navigate to a product page on Heureka.cz, click the *Recenze* (Reviews) tab, and copy the URL (e.g., `...#recenze/?page=1`).
2. **Configure input** — Paste URLs into the `urls` array. Adjust `max_items_per_url` for the volume needed.
3. **Run the scraper** — Start the actor and monitor progress in the run log.
4. **Export** — Download results as JSON, CSV, or Excel.

**Common issues:**

- Ensure the URL contains `#recenze/` — product listing URLs without this section will not return reviews.
- For paginated scraping, either input multiple page URLs or set a high `max_items_per_url` to let the scraper paginate automatically.

***

### Use Cases & Business Value

- **Sentiment analysis:** Feed pros/cons and summaries into NLP pipelines
- **Competitive intelligence:** Compare review scores across similar products from different brands
- **Verified review filtering:** Use the `Verified` flag to isolate trustworthy feedback
- **Seller monitoring:** Track `Response` data to measure merchant engagement
- **Image collection:** Gather user-submitted product photos via the `Images` field

***

### Conclusion

The **Heureka.cz Reviews Scraper** turns one of Central Europe's most trusted review platforms into a structured data source. With 15 output fields covering sentiment, verification, shop context, and media, it delivers everything needed for product research, brand monitoring, or ML training — without any manual effort.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the reivews list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## `proxy` (type: `object`):

Proxy settings for the scraper.

## Actor input object example

```json
{
  "urls": [
    "https://mobilni-telefony.heureka.cz/samsung-galaxy-s25-ultra-12gb-256gb-s938b-titanium-black/#recenze/?page=3"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}
```

# 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 = {
    "urls": [
        "https://mobilni-telefony.heureka.cz/samsung-galaxy-s25-ultra-12gb-256gb-s938b-titanium-black/#recenze/?page=3"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CZ"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/heureka-reivews-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 = {
    "urls": ["https://mobilni-telefony.heureka.cz/samsung-galaxy-s25-ultra-12gb-256gb-s938b-titanium-black/#recenze/?page=3"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CZ",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/heureka-reivews-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://mobilni-telefony.heureka.cz/samsung-galaxy-s25-ultra-12gb-256gb-s938b-titanium-black/#recenze/?page=3"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}' |
apify call stealth_mode/heureka-reivews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/heureka-reivews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Heureka Reivews Scraper",
        "description": "Scrape verified customer reviews from Heureka.cz and Heureka.sk — including ratings, pros/cons, author info, shop data, and images. Perfect for price comparison analysts, brand monitors, and e-commerce researchers needing structured review data.",
        "version": "0.0",
        "x-build-id": "3XHtsJdJGShU0dyMi"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~heureka-reivews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-heureka-reivews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~heureka-reivews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-heureka-reivews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~heureka-reivews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-heureka-reivews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the reivews list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the reivews list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    },
                    "proxy": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Proxy settings for the scraper."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
