Geizhals Scraper
Pricing
from $1.00 / 1,000 results
Geizhals Scraper
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
Pricing
from $1.00 / 1,000 results
Rating
5.0
(4)
Developer
Shahid Irfan
Maintained by CommunityActor stats
1
Bookmarked
52
Total users
3
Monthly active users
8 days ago
Last modified
Categories
Features
Share
What does Geizhals Price Comparison Scraper do?
Geizhals Price Comparison Scraper collects product records from Geizhals, the price comparison site used across Germany, Austria and the wider EU. Give it a category page, a search results page or a single product page, and it returns names, prices, ratings, specifications, merchant details and product links as one structured dataset.
Use it to watch prices across retailers, build a product catalogue, or compare brands inside a category without copying rows by hand.
Why use Geizhals Price Comparison Scraper?
- Repeatable price tracking - run the same category on a schedule and compare today's dataset with last week's.
- Clean records - duplicates are removed by product ID, so a product that appears twice in a listing is saved once.
- Works with filtered pages - price bounds, sorting and facet filters already in your URL are respected.
- Flexible output size - stop after 20 products for a quick check or collect several hundred for analysis.
- Apify platform features - scheduling, webhooks, dataset exports and API access are available without extra setup.
What data can you extract from Geizhals?
| Field | Description |
|---|---|
name | Full product name as listed on Geizhals |
brand | Manufacturer or brand name |
price | Current best price |
lowest_price | Lowest price across the merchant offers in the record |
average_price | Average offer price when Geizhals publishes it |
currency | Currency reported for the storefront, for example EUR or GBP |
rating | Star rating on a 1 to 5 scale |
review_count | Number of user reviews |
offers | Merchant offers with merchant name, price and availability |
offers_count | Total merchant count for the product |
specifications | Technical specifications as key and value pairs |
category_path | Category breadcrumb, for example Drogerie > Haarstyler |
image | Main product image URL |
gtin | GTIN or EAN codes when published |
sku | Manufacturer part number |
url | Product page URL |
How to use Geizhals Price Comparison Scraper
- Open the Actor on Apify Store.
- Paste one Geizhals URL: a category page, a search page or a product page.
- Set the number of products you want and, if needed, a price range.
- Start the run.
- Download the dataset as JSON, CSV or Excel, or pass it to another system.
The first run on a new category is a good moment to check the dataset preview before scheduling a larger job.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | String | No | https://geizhals.eu/?fs=dyson | Category, search or product URL |
keyword | String | No | - | Keyword search that runs instead of the URL on the same storefront |
minPrice | Number | No | - | Keep products at or above this price |
maxPrice | Number | No | - | Keep products at or below this price |
results_wanted | Integer | No | 20 | Maximum products to save |
max_pages | Integer | No | 20 | Page limit per start URL |
include_details | Boolean | No | false | Add specs, GTIN, average price, category, rating breakdown, reviews and price history |
proxyConfiguration | Object | No | Apify residential | Apify Proxy or custom proxy URLs |
startUrl has a default, so a run with no input collects the first Dyson results. Clear the field if you want to use your own URL. The keyword field is an alternative to the URL and takes precedence when filled. Use ?cat= for category codes and ?fs= for keywords; a short code such as hvent is a category, not a keyword.
Output Data
| Field | Type | Description |
|---|---|---|
product_id | String | Geizhals product identifier |
name | String | Product name |
brand | String | Brand or manufacturer |
description | String | Specification summary as one line |
specifications | Object | Specification names and values |
sku | String | Manufacturer part number |
gtin | Array | GTIN or EAN codes |
price | Number | Best price |
lowest_price | Number | Lowest offer price |
average_price | Number | Average offer price |
currency | String | Price currency |
rating | Number | Star rating from 0 to 5 |
rating_percent | Number | Rating as a percentage |
review_count | Number | Review count |
rating_comment_count | Number | Written review count |
image | String | Main image URL |
images | Array | Additional image URLs |
offers | Array | Merchant offers with merchant, price, currency, availability and deeplink |
offers_count | Number | Merchant count |
category_path | String | Category breadcrumb |
listed_since | String | Date the product was listed |
variant_count | Number | Number of variants |
rating_distribution | Object | Review counts per star, for example {"4": 3, "5": 49} |
reviews | Array | Up to 10 recent reviews with rating, title, text, date and source |
top_rated_variants | Array | Best rated variants with product_id, name, rating and url |
all_time_low_price | Number | Lowest price seen in the Geizhals price history |
all_time_high_price | Number | Highest price seen in the Geizhals price history |
first_seen_at | String | Date of the first recorded price |
best_merchant_name | String | Merchant with the best price |
best_merchant_location | String | Merchant country code |
best_availability_code | Number | Availability code from Geizhals |
url | String | Product page URL |
scraped_from | String | category, search or product |
scraped_at | String | Collection timestamp in ISO format |
Some fields stay empty when Geizhals does not publish them for a product. A missing rating means the product has no reviews yet, not that the run failed.
Usage Examples
Collect a category
Save the first 50 products from the ventilators category.
{"startUrl": "https://geizhals.eu/?cat=hvent","results_wanted": 50,"max_pages": 3}
Search with a keyword
Use the keyword field when you only have a search term. It runs on the storefront of the URL you supplied, or geizhals.eu when the URL is left at its default.
{"keyword": "dyson airwrap","results_wanted": 30}
Search with a price range
Collect Dyson products between 200 and 500 euro.
{"startUrl": "https://geizhals.eu/?fs=dyson","minPrice": 200,"maxPrice": 500,"results_wanted": 30}
Track a single product
Collect one product page, including full specifications and the merchant list.
{"startUrl": "https://geizhals.eu/dyson-airwrap-i-d-straight-wavy-ceramic-pink-ros-gold-601848-01-a3559874.html","include_details": true,"results_wanted": 1}
Large run with a proxy
Collect 500 notebooks from Geizhals.de and route the requests through Apify residential proxies.
{"startUrl": "https://geizhals.de/?cat=nb","results_wanted": 500,"max_pages": 20,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Sample Output
{"product_id": "3559874","name": "Dyson Airwrap HS08 i.d. Straight & Wavy ceramic pink/roségold (601848-01)","brand": "Dyson","description": "Typ: Multistyler | Betriebsart: Netzbetrieb (1300W) | Farbe: rosa, rosegold","specifications": {"Typ": "Multistyler","Betriebsart": "Netzbetrieb (1300W)","Farbe": "rosa, rosegold","Temperaturstufen": "3"},"sku": "601848-01","gtin": ["5025155117187", "5025155117200"],"price": 396.9,"lowest_price": 396.9,"average_price": 522.03,"currency": "EUR","rating": 4.7,"rating_percent": 93.9,"review_count": 56,"rating_comment_count": 56,"image": "https://gzhls.at/pix/82/5c/825c5c34135d711c-n.webp","images": ["https://gzhls.at/pix/82/5c/825c5c34135d711c-n.webp"],"offers": [{"merchant": "alza.de","price": 396.9,"currency": "EUR","availability": "Lagernd, Lieferzeit 1-3 Werktage","availability_code": 2}],"offers_count": 73,"category_path": "Drogerie > Haarstyler > Multistyler & Sets","listed_since": "2025-08-11T11:26:28+02:00","variant_count": 11,"rating_distribution": {"1": 3,"3": 1,"4": 3,"5": 49},"reviews": [{"rating": 5,"title": "Good","text": "I can definetly recommend the Dyson air wrap. I was hesitating if it’s easier to use before I bought. You can easily dry and style your hair. If I knew I would have bought it before. The only thing is it’s expensive if you compare with the other brands. It seems like a good quality product. I believe with time it will be even easier to use it. So far so good. The nice color and the design of the product makes it even better. You can feel the quality. There is an option to download the app and define your hair type. That can help the keep the styling longer.","author": null,"date": "2026-08-04T19:48:39+02:00","source": "Media Markt.at"}],"top_rated_variants": [{"product_id": "3409886","name": "Dyson Airwrap HS08 i.d. Straight & Wavy samtrot/gold (596926-01)","rating": 5,"review_count": 3,"url": "https://geizhals.de/dyson-airwrap-i-d-straight-wavy-samtrot-gold-596926-01-a3409886.html"}],"all_time_low_price": 377.33,"all_time_high_price": 2393.64,"first_seen_at": "2025-08-11T00:00:00.000Z","best_merchant_name": "alza.de","best_merchant_location": "de","best_availability_code": 2,"url": "https://geizhals.eu/dyson-airwrap-i-d-straight-wavy-ceramic-pink-ros-gold-601848-01-a3559874.html","scraped_from": "search","scraped_at": "2026-11-02T10:31:02.184Z"}
Tips for Best Results
- Paste the URL exactly as your browser shows it. Filters such as
xfand sorting survive the run. - Fill
keywordonly when you do not need URL filters. It replaces the URL query and keeps just the storefront. - Keep
results_wantedsmall while you test a new category. A category with thousands of products can be expensive to collect in full. - Use
include_detailswhen you need every specification, the review history or the all-time price range. It adds up to three requests per product, so it slows larger runs. - Set
minPriceormaxPricewhen a category contains products in mixed price bands. - For repeated runs, use the same input and compare datasets by
product_id. - On Geizhals.de prices are in euro, on Geizhals.co.uk they are in pounds. Check the
currencyfield before comparing datasets from different storefronts.
Integrations
- Google Sheets - send each run to a spreadsheet and share it with your team.
- Webhooks - notify a service when a run finishes or when a price changes.
- Make or Zapier - connect the dataset to an automation without writing code.
- Apify API - start runs and read datasets from your own application.
Frequently Asked Questions
Which Geizhals URLs are supported?
Category pages with ?cat=, search pages with ?fs=, and product pages ending in -a<ID>.html are supported. You can also skip the URL and fill keyword, which searches the same storefront. A URL with both cat and fs runs as a keyword search, because Geizhals treats those as separate listings.
Does the keyword field replace the URL?
Yes. When keyword is filled, the Actor ignores the URL query and searches that keyword on the storefront from the URL, or geizhals.eu if the URL is left at its default. Price bounds and result limits still apply.
Why did a keyword search return nothing?
Short codes such as hvent are category codes, not keywords. Use ?cat=hvent for a category and ?fs=dyson or the keyword field for a keyword. A search with no matches fails the run with that hint instead of returning an empty dataset.
Can I collect several categories in one run?
One start URL per run is the current design. Run the Actor again for another category, or use an Apify schedule with separate tasks.
How many merchant offers does each product include?
Category and search listings include the cheapest offer for each product. offers_count shows the full merchant count. Enable include_details to add specifications, GTIN, average price, reviews and price history; the full merchant list itself is not published in the listing data.
Why is a rating or review count empty?
Geizhals shows ratings only for products that have reviews. Empty rating fields mean no reviews are published for that product.
Can I export the dataset to CSV or Excel?
Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML and other formats from the run page or the API.
Can I schedule runs?
Yes. Create a schedule in Apify Console and reuse the same input. Daily runs work well for price monitoring on a fixed category.
Do I need a proxy?
A residential proxy is enabled by default because Geizhals filters automated traffic and shared IPs get challenged. You can switch it off in the input, and runs often still work, but a busy network or a large run is more reliable with it on.
What happens when a page fails?
The Actor retries the request with a new session and, if needed, another storefront host. If a page still fails, it logs the error, stops that start URL and keeps the products already saved.
Is the data fresh?
Every run collects live prices at the time of the run. The dataset includes scraped_at so you can tell when a price was captured.
Support
Report problems or request new fields through the Issues tab on the Actor page. Include the input you used and the run ID so the failure can be reproduced.
Legal Notice
This Actor collects publicly available product data for legitimate research, price monitoring and catalogue work. You are responsible for complying with Geizhals terms of use, applicable consumer protection rules and data protection law. Keep request volumes reasonable and avoid republishing data in a way that misrepresents the source.