
Geizhals feed for Shopify
Geizhals, run by Vienna's Preisvergleich Internet Services AG, is the price comparison behind geizhals.at, geizhals.de and geizhals.eu, and one merchant price list serves all three. Feedflock turns your Shopify catalog into that Preisliste: the CSV of Geizhals' official sample, semicolon-separated with every cell quoted, gross euro prices, one row per variant, hosted on a static URL that Geizhals checks every 10 minutes.

Setup
Live in five steps
From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.
Apply as a Geizhals merchant
Register on Geizhals' merchant page. A member of the sales team gets in touch and the contract sets up the per-click billing. Geizhals may decline an application without giving reasons.
Install Feedflock
Add Feedflock from the Shopify App Store. It reads your products, variants, prices and images directly through the Shopify API.
Pick the Geizhals template
Create a new feed and choose the Geizhals template. All fifteen columns of the official sample are there, and the five required fields (article number, name, manufacturer, gross price, deep link) are mapped from the start, one row per variant.
Enter your shipping rates
Shipping is a column per country and payment method: Versand AT Vorkasse, Versand DE Vorkasse. Feedflock leaves both empty until you type your real rate: 0.00 would declare free shipping, n/a marks a country you don't serve.
Register the feed URL
Hand Geizhals the static hosted URL, or drop the file on its FTP server instead. Geizhals checks the list every 10 minutes; Feedflock regenerates it every hour on the same address.
https://feedflock.appfleece.com/f/demo-geizhals/geizhals.csv
Catch feed issues before Geizhals does.
Before every generation Feedflock checks that every field the channel requires is filled, and, on templates verified against the channel's own spec, that the values fit its rules. Most problems are fixed with one click, without editing products in Shopify.
The feed
What the channel receives
"Artikelnummer";"Produktbezeichnung";"Herstellername";"Preis";"Deeplink";"MPN";"Verfügbarkeit";"Versand AT Vorkasse";"Versand DE Vorkasse";"EAN";"Kategorie";"Bild";"Grundpreis";"Energieeffizienzklasse";"Beschreibung" "SKU-2048";"Linen shirt Sand M";"Nordlin";"49.00";"https://shop.example/products/linen-shirt-sand?variant=9087654322";"";"Lagernd";"";"";"8594000123453";"Men's shirts";"https://cdn.shop.example/img/linen-shirt-sand.jpg";"";"";"A breathable linen shirt in a regular cut."

Nordlin
Linen shirt Sand
49 €
Feed fields
Artikelnummer
SKU-2048
Produktbezeichnung
Linen shirt Sand M
Herstellername
Nordlin
Preis
49.00
Deeplink
https://shop.example/products/linen-shirt-sand?variant=9087654322
Verfügbarkeit
Lagernd
EAN
8594000123453
Kategorie
Men's shirts
Bild
https://cdn.shop.example/img/linen-shirt-sand.jpg
Beschreibung
A breathable linen shirt in a regular cut.
The channel
Three countries, one file
geizhals.at, geizhals.de and geizhals.eu all read the same Preisliste. The country difference is the two shipping columns inside the file, not a second feed to maintain.
Checked every 10 minutes
“We check it every 10 minutes, so changes are picked up quickly.” A price change in your store reaches the comparison minutes after the next feed regeneration.
An editorial catalogue
Geizhals' product catalogue is editorially maintained and matching is partly human. EAN, manufacturer number and category path are the inputs it calls essential for placing your offer on the right product card.
The feed
- All five required columns (Artikelnummer, Produktbezeichnung, Herstellername, Preis and Deeplink) are mapped from the start, the deep link preselecting the right variant with ?variant=
- The sample's exact dialect: UTF-8, semicolons between columns, every cell in double quotes, one article per line
- Prices go out gross (including all taxes) as bare euro numbers with dot decimals and no thousands separator, as the spec demands
- One row per variant with colour and size folded into the name, the arrangement Geizhals explicitly allows
- The Versand columns ship empty on purpose: 0.00 would declare free shipping to a whole country, n/a marks one you don't serve
- Verfügbarkeit derives Lagernd / Nicht auf Lager from Shopify stock, and a Liquid mapping turns it into your real delivery-time phrase
- A static hosted URL, regenerated every hour, with fetch tracking that warns you if Geizhals stops checking the file
Deep dive
One list for three sites
- A single price list serves geizhals.at, geizhals.de and geizhals.eu
- Simple text exports are preferred (
CSVor tab-delimited);XML(e.g. a Google Shopping feed) andXLS/XLSXare also accepted - Geizhals checks the file every 10 minutes; the
URLmust stay static. AnFTPdrop on its server is the alternative - Geizhals asks for no caching, Last-Modified/ETag headers and
HEADsupport; compressed files (zip, gzip, tar.gz, 7z…) are fine
Technical details
Geizhals reads one merchant price list, the Preisliste, for all three of its sites. It prefers simple text exports: one article per line, one field per column, separated by an unambiguous delimiter such as a semicolon. XML (a Google Shopping feed works) and Excel files are also accepted, and an existing Google feed URL is a legitimate alternative to this template.
The mechanics are refresh-friendly: the URL must be static, the file is checked every 10 minutes, and Geizhals asks that your server sends Last-Modified or ETag headers and answers HEAD requests, without caching. Feedflock renders the CSV in the sample's exact dialect (UTF-8, semicolons, every cell in double quotes) and hosts it on a stable URL it regenerates every hour.
The five that must be there
- Required: article number, product name, manufacturer, gross price and deep link, the five fields the spec lists without “(empfohlen)” or “(optional)”
EAN, manufacturer number and category path are formally only recommended, yet “essential” for matching- The catalogue is editorially maintained, so pairing your offer to its product is partly a human process
- The article number must be unique per row; the template uses the variant
SKU, with the variant ID as fallback
Technical details
Geizhals' spec page lists its fields by meaning, and five of them carry no “recommended” or “optional” tag: a unique article number per article, the product name, the manufacturer, the gross price and a deep link to the order page. Everything else is labelled empfohlen or optional.
Recommended is not the same as unimportant. EAN, manufacturer code and the category path are the fields Geizhals says can be essential for assigning your products to the articles on Geizhals, because its catalogue is editorially maintained and matching is partly done by people. Feedflock maps all of them: the barcode field for EAN, a metafield for the MPN, and your own product type as the category path.
Prices, delivery time and shipping
- Prices are gross (“Bruttopreise inklusive aller Steuern und Abgaben”) in euro, without a currency sign or thousands separator
- The official sample writes dot decimals with two places: 15.95, 1499.99
- Shipping is a column per country and payment method (Versand AT Vorkasse, Versand DE Vorkasse); 0.00 means free, n/a a country you don't serve
- Shipping costs, delivery time and base price are partly legally mandated, which is why Geizhals recommends exporting them
Technical details
Every price must be a Bruttopreis, including all taxes and fees, written in euro with no currency sign and no thousands separator. The prose never names a decimal separator, but the official sample uses a dot with two decimals, and so does the template.
Shipping lives in per-country, per-payment-method amount columns: the sample carries Versand AT Vorkasse and Versand DE Vorkasse, with 0.00 for free shipping and n/a where a shop doesn't serve the country. Together with the delivery time and the base price (a free-text label such as „10,63 € / 100 ml“), these are the fields Geizhals points out as partly legally mandated in Austria and Germany. The template leaves the Versand columns empty rather than guessing, because a default 0.00 would advertise free shipping on every offer.
Variants, B-Ware and the fine print
- One row per variant, and the differences (colour, size) must be readable from the name or from additional fields
- B-Ware and margin-taxed (differenzbesteuert) goods must be clearly marked, in the name or another field
- Optional columns include image, description, base price and energy-efficiency class, the latter two read from metafields
- Geizhals publishes no validator, error list or
FAQ: the spec is one short page plus a sample file
Technical details
If your shop has product variants, one row per variant must be submitted, and the differences must be readable from the product name or additional fields. The template does this by default: the name is the product title plus the variant title, so a size-M shirt never collides with the size-L one.
Two marking rules are easy to miss. B-Ware (anything not new and originally packaged) and margin-taxed offers must be clearly flagged in the name or another field (the sample does both at once). And keep expectations calibrated: Geizhals publishes no validator, no error list and no FAQ; the whole public documentation is one short page and a sample CSV. Onboarding runs through the sales team, and Geizhals reserves the right to decline a contract without giving reasons.
The takeaway
One static URL, an hourly refresh and a CSV that already speaks the dialect of Geizhals' own sample file. Your Shopify catalog stays the single source of truth, and Geizhals' 10-minute check always reads its current state.
Claude · ChatGPT
Or set up your Geizhals feed in chat
Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to Geizhals's own tree and tells you what is still missing. You approve every change.
Create a Geizhals feed for my store and map my categories.
I'll create it as a draft and show you each change before I make it.
FAQ
Get on every marketplace that matters this afternoon.
Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.