# Geizhals Scraper (`shahidirfan/geizhals-scraper`) Actor

Extract price comparisons, product specifications, and merchant offers from Geizhals, the leading price comparison platform in the DACH region. This lightweight actor is optimized for speed. For consistent results and to prevent blocking, using residential proxies is highly recommended

- **URL**: https://apify.com/shahidirfan/geizhals-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 34 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Geizhals Price Comparison Scraper

Extract comprehensive product data from Geizhals.eu — Europe's leading price comparison platform. Collect product names, brands, pricing, merchant offers, ratings, specifications, and images across thousands of electronics, home appliances, and consumer goods. Perfect for price monitoring, market research, and competitive intelligence.

### Features

- **Multi-Domain Support** — Scrape from Geizhals.eu (Europe), Geizhals.de (Germany), or Geizhals.at (Austria)
- **Smart Pagination** — Automatically navigates through multiple listing pages to reach your desired result count
- **Price Range Filtering** — Narrow results by minimum and maximum price in EUR
- **Deep Product Details** — Optional extraction of full specifications and all merchant offers per product
- **Structured Output** — Clean, consistent JSON format ready for analysis or integration
- **Proxy Support** — Built-in proxy configuration to ensure reliable, uninterrupted data collection
- **Duplicate Prevention** — Automatic URL deduplication for clean datasets
- **Fast & Scalable** — Collect hundreds of products per run with configurable limits

### Use Cases

#### Price Monitoring

Track product prices across dozens of merchants simultaneously. Set up scheduled runs to capture price changes over time and identify the best deals before your competitors do.

#### Market Research

Analyze product availability, pricing strategies, and competitive positioning across entire Geizhals categories. Understand how brands are priced relative to each other in the European market.

#### Product Catalog Building

Build comprehensive product catalogs enriched with specifications, images, ratings, and multi-merchant pricing data for e-commerce platforms, affiliate sites, or buyer guides.

#### Competitive Intelligence

Monitor competitor product offerings, pricing trends, and merchant partnerships across Geizhals categories to inform your own pricing and sourcing decisions.

#### Price Comparison Tools

Power your own price comparison service or dashboard with fresh, accurate product and pricing data pulled directly from Geizhals.

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | Yes | — | Geizhals URL to scrape. Supports category URLs (`?cat=...`), search URLs (`?fs=...`), and direct product URLs |
| `minPrice` | Number | No | — | Filter products with price ≥ this value (EUR) |
| `maxPrice` | Number | No | — | Filter products with price ≤ this value (EUR) |
| `results_wanted` | Integer | No | `20` | Maximum number of products to collect |
| `max_pages` | Integer | No | `20` | Safety limit on the number of listing pages to visit |
| `proxyConfiguration` | Object | No | `{}` | Proxy settings for reliable data collection |

***

### Output Data

Each item in the dataset contains:

| Field | Type | Description |
|-------|------|-------------|
| `name` | String | Full product name/title |
| `brand` | String | Product brand or manufacturer |
| `description` | String | Product description |
| `price` | Number | Lowest available price |
| `currency` | String | Price currency (typically `EUR`) |
| `rating` | Number | Average user rating (1–5 scale) |
| `review_count` | Number | Total number of user reviews |
| `image` | String | Product image URL |
| `sku` | String | Product SKU or model number |
| `specifications` | Object | Technical specifications (when `collectDetails` is enabled) |
| `offers` | Array | List of merchant offers with individual prices |
| `offers_count` | Number | Total number of available merchant offers |
| `url` | String | Product detail page URL |
| `scraped_from` | String | Source type: `listing` or `detail` |

***

### Usage Examples

#### Basic Category Scrape

Extract products from the ventilators category:

```json
{
    "startUrl": "https://geizhals.eu/?cat=hvent",
    "results_wanted": 50,
    "max_pages": 5
}
```

#### Brand Search with Price Filter

Search for ThinkPad notebooks in Germany within a price range:

```json
{
    "startUrl": "https://geizhals.de/?cat=nb&fs=ThinkPad",
    "minPrice": 500,
    "maxPrice": 1500,
    "results_wanted": 100,
    "max_pages": 10
}
```

#### Direct URL Extraction

Scrape from a specific pre-filtered Geizhals URL:

```json
{
    "startUrl": "https://geizhals.eu/?cat=hvent&xf=9810_Dyson",
    "results_wanted": 30
}
```

#### Large-Scale Collection with Proxy

Collect a large dataset with residential proxy for reliability:

```json
{
    "startUrl": "https://geizhals.eu/?cat=nb",
    "results_wanted": 500,
    "max_pages": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

***

### Sample Output

```json
{
    "name": "Dyson Cool AM07 Tower Fan",
    "brand": "Dyson",
    "description": "Tower fan with Air Multiplier technology, remote control, and sleep timer",
    "price": 275.00,
    "currency": "EUR",
    "rating": 4.5,
    "review_count": 28,
    "image": "https://geizhals.eu/p/123456.jpg",
    "sku": "AM07",
    "specifications": {
        "Type": "Tower Fan",
        "Power": "56W",
        "Height": "100cm",
        "Features": "Remote control, Sleep timer"
    },
    "offers": [
        {
            "merchant": "Amazon.de",
            "price": 275.00,
            "currency": "EUR"
        },
        {
            "merchant": "MediaMarkt",
            "price": 289.99,
            "currency": "EUR"
        }
    ],
    "offers_count": 12,
    "url": "https://geizhals.eu/dyson-cool-am07-tower-fan-a123456.html",
    "scraped_from": "detail"
}
```

***

### Tips for Best Results

#### Find the Right Start URL

- Browse Geizhals.eu and navigate to your desired category or search
- Copy the URL from your browser — the scraper will use it as the starting point
- Use the `?fs=` parameter in the URL to search for specific brands or models (e.g., `?fs=Dyson`)

#### Optimize Your Collection Size

- Start with `results_wanted: 20` for testing before scaling up
- Use `max_pages` as a safety limit to avoid unexpectedly long runs
- Set both `minPrice` and `maxPrice` to narrow your dataset for focused research

#### Use Price Filters Effectively

- Combine `minPrice` and `maxPrice` to target specific market segments
- Leave filters empty to collect the full price spectrum for a category
- Price filters apply to the lowest listed merchant price per product

#### Proxy Configuration

For large-scale or repeated runs, enable residential proxies:

```json
{
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

***

### Integrations

Connect your Geizhals data with:

- **Google Sheets** — Export datasets for collaborative price analysis
- **Airtable** — Build searchable, filterable product databases
- **Slack** — Receive automated notifications when scrapes complete
- **Make (Integromat)** — Create multi-step automated workflows
- **Zapier** — Trigger actions based on price changes or new products
- **Webhooks** — Send data directly to your own endpoints

#### Export Formats

Download your dataset in multiple formats:

- **JSON** — For developers and API integrations
- **CSV** — For spreadsheet analysis in Excel or Google Sheets
- **Excel** — For business reporting and presentations
- **XML** — For structured system integrations

***

### Frequently Asked Questions

#### What URLs does the scraper support?

Any Geizhals URL works — category pages (`?cat=...`), search pages (`?fs=...`), and direct product detail pages. Simply paste the URL you see in your browser.

#### How many products can I collect?

There is no hard limit — set `results_wanted` to any value and the scraper will collect up to that many products. Practical limits depend on how many products exist in the category.

#### How do I scrape a specific brand?

Navigate to the desired category on Geizhals, search for the brand using the site's search, and then copy the resulting URL into `startUrl`. The URL will include your filter automatically.

#### What is the difference between listing and detail data?

Listing data is collected from category/search pages and includes basic fields like name, price, and image. Detail data is collected from individual product pages and adds full merchant offers and technical specifications.

#### Can I scrape multiple categories in one run?

Currently the actor scrapes one start URL per run. To scrape multiple categories, run the actor multiple times with different `startUrl` values or use Apify's scheduling and orchestration features.

#### Does the scraper handle pagination automatically?

Yes. The actor automatically follows pagination links on Geizhals listing pages until it reaches your `results_wanted` count or the `max_pages` limit.

#### What if some product fields are missing?

Some products on Geizhals may have incomplete data. Fields like `rating`, `review_count`, or `description` will be `null` or empty when the source page doesn't provide that information.

#### Do I need proxies?

For small test runs, proxies are optional. For large-scale or repeated data collection, residential proxies are strongly recommended to ensure reliability and avoid rate-limiting.

***

### Support

For issues or feature requests, contact support through the Apify Console.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [API Reference](https://docs.apify.com/api/v2)
- [Scheduling Runs](https://docs.apify.com/schedules)
- [Apify Proxy Guide](https://docs.apify.com/proxy)

***

### Legal Notice

This actor is designed for legitimate data collection purposes including market research, price monitoring, and competitive analysis. Users are responsible for ensuring compliance with Geizhals.eu's Terms of Service, applicable data protection regulations (GDPR), and robots.txt guidelines. Use data responsibly and respect fair-use principles by setting reasonable request rates and result limits.

# Actor input Schema

## `startUrl` (type: `string`):

Geizhals URL to start scraping from. Supported: category URLs (?cat=...), search URLs (?fs=...), and direct product URLs (...-a123456.html). Examples: https://geizhals.eu/?cat=hvent, https://geizhals.eu/?fs=dyson, https://geizhals.de/?cat=nb, https://geizhals.eu/black-decker-bxefd30e-tischventilator-es9440110b-a3199334.html

## `minPrice` (type: `number`):

Filter products with price greater than or equal to this value (in EUR).

## `maxPrice` (type: `number`):

Filter products with price less than or equal to this value (in EUR).

## `results_wanted` (type: `integer`):

Maximum number of products to collect.

## `max_pages` (type: `integer`):

Safety limit on the number of listing pages to visit (Geizhals uses pagination).

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

Proxy settings for API requests. Residential proxies are recommended for Geizhals reliability.

## Actor input object example

```json
{
  "startUrl": "https://geizhals.eu/?cat=hvent",
  "results_wanted": 20,
  "max_pages": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Complete product listings with pricing and merchant information

## `dataset` (type: `string`):

All scraped products in JSON format

# 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 = {
    "startUrl": "https://geizhals.eu/?cat=hvent",
    "results_wanted": 20,
    "max_pages": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/geizhals-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 = {
    "startUrl": "https://geizhals.eu/?cat=hvent",
    "results_wanted": 20,
    "max_pages": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/geizhals-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 '{
  "startUrl": "https://geizhals.eu/?cat=hvent",
  "results_wanted": 20,
  "max_pages": 20
}' |
apify call shahidirfan/geizhals-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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