# Geizhals Scraper - Austrian Price Comparison Data (`studio-amba/geizhals-scraper`) Actor

Scrape product prices from Geizhals.at, the DACH region's #1 tech price comparison site. Compare prices across shops, extract specs and ratings. No login required.

- **URL**: https://apify.com/studio-amba/geizhals-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Geizhals Scraper

Extract product prices and comparison data from [Geizhals.at](https://geizhals.at), the leading tech price comparison platform in the DACH region (Austria, Germany, Switzerland). With over 15 million monthly visitors, Geizhals is the go-to destination for comparing prices across hundreds of online retailers.

This scraper collects product names, lowest prices, number of retailer offers, ratings, reviews, specifications, and product images. No login or cookies required.

### Why use the Geizhals Scraper?

- **Price monitoring** -- Track price changes for specific products across all major Austrian and German retailers. Set up scheduled runs to build your own price history database.
- **Competitive intelligence** -- See which retailers offer the lowest prices in the DACH market. Compare your pricing strategy against dozens of competitors on a single platform.
- **Market research** -- Analyze product availability, pricing trends, and retailer coverage across the Austrian and German electronics market.
- **Product catalog enrichment** -- Pull structured product data including specifications, images, and ratings to enrich your own product database.
- **Deal hunting at scale** -- Automatically find the best prices across categories instead of manually browsing thousands of product pages.
- **Procurement optimization** -- For businesses buying tech equipment, compare prices from all retailers in one dataset to find the best bulk deals.
- **Academic research** -- Study price dynamics, market concentration, and retailer competition in one of Europe's largest tech comparison platforms.

### How to scrape Geizhals data

1. **Create an Apify account** -- Sign up at [apify.com](https://apify.com) if you do not have an account yet. New accounts get $5 in free credits.

2. **Open the Geizhals Scraper** -- Navigate to the actor page in the Apify Store and click "Start."

3. **Configure your search** -- Enter a search term in the "Search Query" field (e.g., "laptop", "Grafikkarte", "SSD 1TB"). Alternatively, paste a Geizhals category URL to scrape an entire category.

4. **Set the results limit** -- Adjust "Max Results" to control how many products you want. The default is 100. The scraper paginates automatically.

5. **Run the scraper** -- Click "Start" and wait for the run to complete. Most searches finish in under 2 minutes.

6. **Download your data** -- Once the run finishes, go to the "Dataset" tab. Export your results as JSON, CSV, Excel, or use the API to integrate the data into your workflow.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | string | `"laptop"` | Search term for finding products on Geizhals. Supports German product names and categories. |
| `categoryUrl` | string | | Optional Geizhals category URL to scrape instead of searching. Example: `https://geizhals.at/?cat=nb` for notebooks. |
| `maxResults` | integer | `100` | Maximum number of products to extract. The scraper paginates through results automatically. |
| `proxyConfiguration` | object | Residential AT | Proxy settings. Austrian residential proxies are recommended for best results. |

When both `searchQuery` and `categoryUrl` are provided, the category URL takes priority. If neither is provided, the scraper defaults to searching for "laptop".

### Output example

Each product in the dataset contains the following structure:

```json
{
    "productName": "Apple MacBook Air 13\" M3 8C/10C 16GB/512GB Mitternacht (MRXW3D/A)",
    "brand": "Apple",
    "category": "Notebooks",
    "lowestPrice": 1149.00,
    "currency": "EUR",
    "numberOfOffers": 42,
    "rating": 4.8,
    "reviewCount": 156,
    "imageUrl": "https://gzhls.at/i/93/18/3069318-n0.jpg",
    "url": "https://geizhals.at/apple-macbook-air-13-m3-mrxw3d-a-a3069318.html",
    "specs": "13.6\" IPS, 2560x1664, M3 8C/10C, 16GB RAM, 512GB SSD, Wi-Fi 6E, 1.24kg",
    "scrapedAt": "2026-06-09T14:30:00.000Z"
}
````

### Data fields

| Field | Type | Description |
|-------|------|-------------|
| `productName` | string | Full product name including model number and variant |
| `brand` | string | Manufacturer or brand name (e.g., Apple, Samsung, Lenovo) |
| `category` | string | Product category from Geizhals (e.g., Notebooks, Grafikkarten) |
| `lowestPrice` | number | Lowest available price in EUR across all retailers |
| `currency` | string | Always "EUR" for Geizhals.at |
| `numberOfOffers` | integer | Number of retailers currently offering this product |
| `rating` | number | Average user rating on a 0-5 scale |
| `reviewCount` | integer | Total number of user reviews |
| `imageUrl` | string | URL of the product image |
| `url` | string | Direct link to the Geizhals product comparison page |
| `specs` | string | Key specifications shown in the product listing |
| `scrapedAt` | string | ISO 8601 timestamp of when the data was collected |

### Cost estimate

The Geizhals Scraper uses Playwright to render pages. Typical cost estimates:

- **50 products**: ~$0.10 (single search page)
- **200 products**: ~$0.30 (a few pages of pagination)
- **1,000 products**: ~$1.00 (multiple category pages)

Actual costs depend on page load times, proxy usage, and retry frequency. Residential proxies add approximately $0.01-0.02 per page. Scheduled daily runs for price monitoring typically cost $3-10/month depending on the number of tracked products.

### Tips for best results

- **Use German search terms** for better results. Geizhals is a German-language platform. Search for "Grafikkarte" instead of "graphics card" or "Kopfhoerer" instead of "headphones."
- **Category URLs are more reliable** than search queries for scraping large product sets. Browse Geizhals manually, find the category page you want, and paste the URL.
- **Common category codes**: `?cat=nb` (Notebooks), `?cat=gra16_512` (Graphics Cards), `?cat=sm` (Smartphones), `?cat=monlcd19wide` (Monitors), `?cat=hd` (Hard Drives), `?cat=cpu` (CPUs).
- **Schedule regular runs** for price monitoring. Daily or weekly runs let you track price trends over time.
- **Combine with Apify integrations** to automatically push results to Google Sheets, Slack, or your database via webhooks.

### Frequently asked questions

**Does this scraper work with geizhals.de and geizhals.eu?**
The scraper is optimized for geizhals.at (Austria). You can pass geizhals.de or geizhals.eu category URLs via the `categoryUrl` input, but proxy configuration should match the target domain's country.

**Do I need to log in to Geizhals?**
No. All data is scraped from publicly accessible pages. No login, cookies, or account is required.

**How often does Geizhals update its prices?**
Geizhals updates prices multiple times per day as retailers push new data. For accurate price tracking, daily runs are sufficient for most use cases.

**What if the scraper returns zero results?**
Check that your search term returns results on geizhals.at manually. Ensure you are using residential proxies with Austrian IP addresses. Datacenter IPs may be blocked.

**Can I scrape product detail pages with full specifications?**
The current version extracts summary specs from listing pages. For deep product specifications, use category URLs which typically show more detailed spec summaries.

**Is there a rate limit?**
The scraper runs with a single concurrent browser and includes natural delays between pages. This keeps request rates low and avoids triggering rate limits.

### About Geizhals

[Geizhals](https://geizhals.at) (literally "cheapskate" in German) has been the dominant price comparison platform in Austria since 2000 and is widely used across Germany and the broader DACH region. The platform indexes prices from over 500 online retailers, covering categories including computers, smartphones, TVs, audio equipment, household appliances, and more. With 15+ million monthly visitors, it is the first stop for price-conscious shoppers in the German-speaking market.

Geizhals differentiates itself from competitors like Idealo through its detailed technical specifications, filter options, and active community of tech-savvy users who contribute reviews and product discussions.

# Actor input Schema

## `searchQuery` (type: `string`):

Search term to find products on Geizhals (e.g., 'laptop', 'iPhone 16', 'Grafikkarte', 'SSD 1TB'). If empty, defaults to 'laptop'.

## `categoryUrl` (type: `string`):

Optional: a Geizhals category page URL to scrape instead of searching. Example: https://geizhals.at/?cat=nb

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

Maximum number of products to return. The scraper paginates automatically until this limit is reached.

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

Proxy settings. Residential proxies with Austrian IP are recommended for reliable access to Geizhals.

## Actor input object example

```json
{
  "searchQuery": "laptop",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AT"
  }
}
```

# 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 = {
    "searchQuery": "laptop",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AT"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/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 = {
    "searchQuery": "laptop",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AT",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/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 '{
  "searchQuery": "laptop",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AT"
  }
}' |
apify call studio-amba/geizhals-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Geizhals Scraper - Austrian Price Comparison Data",
        "description": "Scrape product prices from Geizhals.at, the DACH region's #1 tech price comparison site. Compare prices across shops, extract specs and ratings. No login required.",
        "version": "0.1",
        "x-build-id": "Gckokv4kFXCGD8la0"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~geizhals-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-geizhals-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/studio-amba~geizhals-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-geizhals-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/studio-amba~geizhals-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-geizhals-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": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search term to find products on Geizhals (e.g., 'laptop', 'iPhone 16', 'Grafikkarte', 'SSD 1TB'). If empty, defaults to 'laptop'."
                    },
                    "categoryUrl": {
                        "title": "Category URL",
                        "type": "string",
                        "description": "Optional: a Geizhals category page URL to scrape instead of searching. Example: https://geizhals.at/?cat=nb"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of products to return. The scraper paginates automatically until this limit is reached.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Residential proxies with Austrian IP are recommended for reliable access to Geizhals."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
