Geizhals Scraper avatar

Geizhals Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Geizhals Scraper

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

Shahid Irfan

Maintained by Community

Actor stats

1

Bookmarked

52

Total users

3

Monthly active users

8 days ago

Last modified

Features

Limited permissions

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?

FieldDescription
nameFull product name as listed on Geizhals
brandManufacturer or brand name
priceCurrent best price
lowest_priceLowest price across the merchant offers in the record
average_priceAverage offer price when Geizhals publishes it
currencyCurrency reported for the storefront, for example EUR or GBP
ratingStar rating on a 1 to 5 scale
review_countNumber of user reviews
offersMerchant offers with merchant name, price and availability
offers_countTotal merchant count for the product
specificationsTechnical specifications as key and value pairs
category_pathCategory breadcrumb, for example Drogerie > Haarstyler
imageMain product image URL
gtinGTIN or EAN codes when published
skuManufacturer part number
urlProduct page URL

How to use Geizhals Price Comparison Scraper

  1. Open the Actor on Apify Store.
  2. Paste one Geizhals URL: a category page, a search page or a product page.
  3. Set the number of products you want and, if needed, a price range.
  4. Start the run.
  5. 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

ParameterTypeRequiredDefaultDescription
startUrlStringNohttps://geizhals.eu/?fs=dysonCategory, search or product URL
keywordStringNo-Keyword search that runs instead of the URL on the same storefront
minPriceNumberNo-Keep products at or above this price
maxPriceNumberNo-Keep products at or below this price
results_wantedIntegerNo20Maximum products to save
max_pagesIntegerNo20Page limit per start URL
include_detailsBooleanNofalseAdd specs, GTIN, average price, category, rating breakdown, reviews and price history
proxyConfigurationObjectNoApify residentialApify 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

FieldTypeDescription
product_idStringGeizhals product identifier
nameStringProduct name
brandStringBrand or manufacturer
descriptionStringSpecification summary as one line
specificationsObjectSpecification names and values
skuStringManufacturer part number
gtinArrayGTIN or EAN codes
priceNumberBest price
lowest_priceNumberLowest offer price
average_priceNumberAverage offer price
currencyStringPrice currency
ratingNumberStar rating from 0 to 5
rating_percentNumberRating as a percentage
review_countNumberReview count
rating_comment_countNumberWritten review count
imageStringMain image URL
imagesArrayAdditional image URLs
offersArrayMerchant offers with merchant, price, currency, availability and deeplink
offers_countNumberMerchant count
category_pathStringCategory breadcrumb
listed_sinceStringDate the product was listed
variant_countNumberNumber of variants
rating_distributionObjectReview counts per star, for example {"4": 3, "5": 49}
reviewsArrayUp to 10 recent reviews with rating, title, text, date and source
top_rated_variantsArrayBest rated variants with product_id, name, rating and url
all_time_low_priceNumberLowest price seen in the Geizhals price history
all_time_high_priceNumberHighest price seen in the Geizhals price history
first_seen_atStringDate of the first recorded price
best_merchant_nameStringMerchant with the best price
best_merchant_locationStringMerchant country code
best_availability_codeNumberAvailability code from Geizhals
urlStringProduct page URL
scraped_fromStringcategory, search or product
scraped_atStringCollection 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 xf and sorting survive the run.
  • Fill keyword only when you do not need URL filters. It replaces the URL query and keeps just the storefront.
  • Keep results_wanted small while you test a new category. A category with thousands of products can be expensive to collect in full.
  • Use include_details when 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 minPrice or maxPrice when 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 currency field 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.

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.