HOFER (Austria) API & Scraper
HOFER is ALDI SÜD's supermarket chain in Austria.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
This API reads hofer.at live and returns its prices as JSON. `search` takes a keyword, a category, an offer date or nothing (the whole online assortment, 1,157 products on 2026-10-18) and returns each product with its euro price, the unit price and what it is per (1 kg, 100 g, 500 ml, pro Stück), the struck-through "statt" price on offers, pack size, brand and badges. Weighed goods such as fresh meat come with the price of the estimated piece, its weight and the price per kilo. `offers` lists HOFER PREIS,-WOCHEN and HOFER Preis - Dauerhaft Günstiger. `promotions` gives the dated Angebote to pass to search. `product/detail` adds ingredients, nutrition and storage. `stores` finds HOFER stores by town, postcode or coordinates.
What a HOFER field actually contains
Fields that read differently from how they look, measured on live responses on 2026-10-18.
| Field | What it holds |
|---|---|
| price, price_display | The shelf price in euros as hofer.at prints it ("€ 4,50"). It matched the product page on 14 of 14 products checked. |
| price_is_estimate, estimated_weight | Weighed goods: price is for the estimated piece (Schweinefilet € 4,50 for 0.5 kg) and HOFER bills the exact weight at the till. The per-kilo price is the unit_price (8.99 per 1 kg). |
| unit_price, unit_price_basis | The Grundpreis and what it is per, never rescaled: 1.33 per "100 g", 0.74 per "500 ml" for a 330 ml bottle at 0.49. Compare products only on the same basis. Null when hofer.at prints none. |
| was_price, discount_percent | On offers, the "statt" price and the discount computed from the two prices. hofer.at prints no percentage of its own. |
| on_sale_date | The day a dated offer starts in store. Future dates are announced offers, not stock. |
| id | HOFER's 18-digit product id; keep the leading zeros. hofer.at publishes no EAN barcode. |
Prices were identical in Wien, Graz and Innsbruck stores; store_id narrows a listing to one store's range.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/hofer/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "milch",
"limit": 12
}
}{
"ok": true,
"meta": {
"api": "hofer",
"endpoint": "search",
"mode": "live",
"latency_ms": 431.8,
"record_count": 12,
"bytes": 22459,
"cache_hit": false,
"warnings": [
"Unknown parameters ignored: include_pii"
],
"upstream_requests": 1,
"charged_credits": 2,
"version": "1.0.0",
"request_id": "e0bf35f453a94230",
"queue_ms": 1,
"fetched_at": "2026-10-18T17:44:59.455Z"
},
"data": {
"products": [
{
"id": "000000000643505002",
"title": "Milch Maus Schneebälle, Milchcreme",
"brand": "CHOCEUR",
"url": "https://www.hofer.at/produkt/choceur-milch-maus-schneebaelle-milchcreme-000000000643505002",
"price": 2.49,
"price_display": "€ 2,49",
"currency": "EUR",
"price_mismatch": false,
"price_is_estimate": false,
"estimated_weight": null,
"was_price": null,
"was_price_display": null,
"discount_percent": null,
"savings_display": null,
"unit_price": 1.92,
"unit_price_display": "€ 1,92/100 g",
"unit_price_basis": "100 g",
"pack_size": "130 g",
"deposit": null,
"deposit_display": null,
"deposit_type": null,
"badges": [],
"on_sale_date": "2026-10-23",
"on_sale_date_display": "Verfügbar ab 23.10.2026",
"categories": [],
"images": [
"https://dm.emea.cms.aldi.cx/is/image/aldiprodeu/product/jpg/scaleWidth/1500/a6801ce2-efe3-4048-86ce-545fc2b91779/Milch%20Maus%20Schneeb%C3%A4lle%2C%20Milchcreme"
],
"age_restriction": null,
"alcohol": null,
"weight_type": "0",
"online_purchasable": false
},
{
"id": "000000000643505001",
"title": "Milch Maus Schneebälle, Milch Haselnuss",
"brand": "CHOCEUR",
"url": "https://www.hofer.at/produkt/choceur-milch-maus-schneebaelle-milch-haselnuss-000000000643505001",
"price": 2.49,
"price_display": "€ 2,49",
"currency": "EUR",
"price_mismatch": false,
"price_is_estimate": false,
"estimated_weight": null,
"was_price": null,
"was_price_display": null,
"discount_percent": null,
"savings_display": null,
"unit_price": 1.92,
"unit_price_display": "€ 1,92/100 g",
"unit_price_basis": "100 g",
"pack_size": "130 g",
"deposit": null,
"deposit_display": null,
"deposit_type": null,
"badges": [],
"on_sale_date": "2026-10-23",
"on_sale_date_display": "Verfügbar ab 23.10.2026",
"categories": [],
"images": [
"https://dm.emea.cms.aldi.cx/is/image/aldiprodeu/product/jpg/scaleWidth/1500/3f326ebe-dbb7-487e-84c8-ece71963201a/Milch%20Maus%20Schneeb%C3%A4lle%2C%20Milch%20Haselnuss"
],
"age_restriction": null,
"alcohol": null,
"weight_type": "0",
"online_purchasable": false
},
{
"id": "000000000000632339",
"title": "Schokomilch",
"brand": "MILSANI",
"url": "https://www.hofer.at/produkt/milsani-schokomilch-000000000000632339",
"price": 0.39,
"price_display": "€ 0,39",
"currency": "EUR",
"price_mismatch": false,
"price_is_estimate": false,
"estimated_weight": null,
"was_price": 0.55,
"was_price_display": "€ 0,55",
"discount_percent": 29.1,
"savings_display": null,
"unit_price": 1.95,
"unit_price_display": "€ 1,95/1 l",
"unit_price_basis": "1 l",
"pack_size": "200 ml",
"deposit": null,
"deposit_display": null,
"deposit_type": null,
"badges": [],
"on_sale_date": null,
"on_sale_date_display": null,
"categories": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"images": [
"https://dm.emea.cms.aldi.cx/is/image/aldiprodeu/product/jpg/scaleWidth/1500/12ae8e76-6948-41da-b5c8-2c1ad09db928/Schokomilch"
],
"age_restriction": null,
"alcohol": null,
"weight_type": "0",
"online_purchasable": false
}
],
"total": 31,
"offset": 0,
"limit": 12,
"page": 1,
"last_page": 3,
"has_more": true,
"page_short": false,
"facets": [
{
"name": "brand-name",
"label": "Marken",
"parameter": "brandName",
"values": [
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
},
{
"name": "country-origin",
"label": "Herkunftsland",
"parameter": "countryOrigin",
"values": []
},
{
"name": "category-tree",
"label": "Kategorie",
"parameter": "categoryTree",
"values": [
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"count": "[trimmed-depth]",
"children": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"count": "[trimmed-depth]",
"children": "[trimmed-depth]"
}
]
}
],
"spelling_suggestion": null,
"keyword_redirect": null,
"assortment_scope": "national",
"store_id": null,
"store_defaulted": false
}
}What the HOFER (Austria) API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search products, browse a category, read a dated offer (Angebote) or page the whole online assortment; optionally one store's range. | Pricing teams call search to search products, browse a category, read a dated offer (Angebote) or page the whole online as…. | query, categoryKey, promotionKey, url, brandName, ... |
| offers | List a current offer range HOFER PREIS,-WOCHEN / HOFER Preis - Dauerhaft Günstiger. | Marketplace operators call offers to list a current offer range HOFER PREIS,-WOCHEN / HOFER Preis - Dauerhaft Günstiger.. | type, brandName, categoryTree, theme, store_id, ... |
| promotions | List current and upcoming offer dates (Angebote ab...) and their themes. | Catalog enrichment teams call promotions to list current and upcoming offer dates (Angebote ab...) and their themes.. | none |
| product/detail | Read one product: prices, description and label. | Retail analysts call product/detail to read one product. | id |
| categories | Get the live category tree with the offer ranges marked. | Pricing teams call categories to get the live category tree with the offer ranges marked.. | none |
| stores | Find HOFER stores by town, postcode or coordinates (store ids for search). | Marketplace operators call stores to find HOFER stores by town, postcode or coordinates (store ids for search).. | query, latitude, longitude, page, limit |
Call search from your stack
curl -X POST https://api.reefapi.com/hofer/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"milch","limit":12}'import requests
r = requests.post(
"https://api.reefapi.com/hofer/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "milch",
"limit": 12
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/hofer/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "milch",
"limit": 12
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.hofer.search with {"query":"milch","limit":12}.Who uses this API and why
- Follow HOFER PREIS,-WOCHEN and the weekly Angebote for an Austrian deals app.
- Compare Austrian supermarket prices per kilo or litre with the published Grundpreis.
- Track price changes across HOFER's online assortment with a daily sweep.
- Combine HOFER with our aldi-de API to compare ALDI SÜD prices in Austria and Germany.
- Point users to the nearest HOFER store with the store finder.
Questions developers ask before integrating
Is HOFER the same as ALDI?
HOFER is the name ALDI SÜD trades under in Austria. Our aldi-de API covers ALDI SÜD in Germany with the same fields.
Does HOFER have a public API?
No public one. This API reads what hofer.at shows a logged-out visitor and returns it as JSON. No account is needed.
How do I get the HOFER PREIS,-WOCHEN products?
Call offers with type weekly (9 products on 2026-10-18); type permanent_low gives HOFER Preis - Dauerhaft Günstiger (51). For the dated Angebote, call promotions and pass a date to search as promotionKey.
Why is a meat price marked as an estimate?
Because HOFER sells it by weight: the shelf shows a price for an estimated piece and the till charges the exact weight. price_is_estimate and estimated_weight say so, and unit_price is the price per kilo.
Are prices different between stores?
Not in our measurements: three stores in Wien, Graz and Innsbruck priced every common product identically.
Can I get EAN barcodes or store stock?
No. hofer.at publishes neither; products carry HOFER's own 18-digit id.
How fresh is the data?
Every call reads hofer.at live; nothing is cached.
What is the HOFER (Austria) API?
HOFER (Austria) API is a ReefAPI endpoint group for hofer austria prices as json: preis,-wochen and dated angebote, unit prices, weighed goods, labels and the store finder. It returns live JSON through POST requests under /hofer/v1.
Is the HOFER (Austria) API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. HOFER (Austria) calls use the same shared credit balance as every other ReefAPI engine.
Do I need a HOFER (Austria) login or account?
No login to HOFER (Austria) is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the HOFER (Austria) data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the HOFER (Austria) API use?
HOFER (Austria) actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call HOFER (Austria) from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call hofer actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the HOFER (Austria) API a HOFER (Austria) scraper?
It is the managed alternative to a DIY HOFER (Austria) scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same hofer austria prices as json: preis,-wochen and dated angebote, unit prices, weighed goods, labels and the store finder back as clean JSON.