marktguru APImarktguru.de ↗
Fetch current weekly supermarket offers, prices, and promotions across German retailers by postal code. Search by product keyword or retailer slug.
What is the marktguru API?
The marktguru.de API exposes 4 endpoints covering current weekly promotional offers from German supermarkets. Use list_supermarkets to discover which retailers have active leaflets for any 5-digit German postal code, then pull per-retailer offer pages with get_retailer_offers, query across all chains at once with get_weekly_promotions, or search by product keyword with search_offers. Each offer includes promotional price in EUR, old price, reference price per unit, brand, and product description.
curl -X GET 'https://api.parse.bot/scraper/8ad337ef-7e61-410e-9d6a-274d4ee45e93/list_supermarkets?zip_code=99084' \ -H 'X-API-Key: $PARSE_API_KEY'
Lists the supermarket retailers that currently have offers for a German postal code. One round trip; returns up to 200 retailers in one call (total_results reports how many the site has). Each row carries retailer_id, retailer_slug (the identifier accepted by get_retailer_offers) and the display name. When zip_code is omitted the site's default location (Berlin Mitte, 10178) is used and echoed in zip_code.
| Param | Type | Description |
|---|---|---|
| zip_code | string | 5-digit German postal code, leading zeros preserved (e.g. 99084). Omitted = the site's default location. |
{
"type": "object",
"fields": {
"zip_code": "postal code the list was resolved for",
"retailers": "array of retailers: retailer_id (integer), retailer_slug (string, use as retailer_slug in get_retailer_offers), retailer_name (display name)",
"total_results": "integer, number of supermarket retailers the site reports for this postal code"
},
"sample": {
"data": {
"zip_code": "99084",
"retailers": [
{
"retailer_id": 126802,
"retailer_name": "REWE",
"retailer_slug": "rewe"
},
{
"retailer_id": 126806,
"retailer_name": "REWE Dortmund",
"retailer_slug": "rewe-dortmund"
}
],
"total_results": 101
},
"status": "success"
}
}About the marktguru API
Retailer Discovery and Offer Pages
Start with list_supermarkets, passing a zip_code (5-digit German postal code, e.g. 99084) to receive an array of retailers currently advertising offers in that area. Each row exposes retailer_id, retailer_slug, and retailer_name. The retailer_slug is the identifier accepted by get_retailer_offers and get_weekly_promotions. total_results tells you how many retailers the source reports — the call returns up to 200 in one response.
get_retailer_offers pages through a specific retailer's active promotional offers. Pass retailer_slug and an optional zip_code. The limit parameter is clamped to 100; use offset together with the has_more boolean and total_results integer to walk through all pages. Each offer in the offers array carries offer_id, product_name, description (pack size and variants), brand, price (EUR), old_price (EUR or null when no prior price is listed), reference_price, reference_unit, and image_url (null when no image is available).
Cross-Retailer Search and Weekly Promotions
search_offers accepts a free-text query (e.g. Kaffee, Butter, or a brand name) and returns matching offers across all retailers for the given zip_code. The response shape is identical to get_retailer_offers — same offer fields, same pagination via limit, offset, has_more, and total_results.
get_weekly_promotions fetches the current weekly promotional offers for several major chains in one call. By default it covers Lidl, ALDI NORD, ALDI SÜD, Kaufland, REWE, Markant Nord, Markant NW, EDEKA, PENNY, and Netto Marken-Discount. You can override this with the retailers parameter, supplying a comma-separated list of retailer_slug values. The response includes a flat offers array across all requested retailers and a per-retailer retailers coverage array reporting retailer_slug and total_results for each.
The marktguru API is a managed, monitored endpoint for marktguru.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when marktguru.de changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official marktguru.de API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track weekly price drops on grocery products across German discounters using old_price vs price fields.
- Build a price comparison tool for a specific postal code by iterating get_retailer_offers across slugs from list_supermarkets.
- Monitor promotional prices for a specific brand or product type with search_offers using keyword queries.
- Aggregate all major discounter leaflets in one request via get_weekly_promotions for a given zip_code.
- Identify which retailers are active in a given German region using list_supermarkets and its total_results count.
- Feed reference_price and reference_unit data into a unit-price comparison for grocery shopping apps.
- Alert users when a product matching their search query drops below a price threshold using offer_id and price fields.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does marktguru.de have an official developer API?+
How do I page through all of a retailer's offers when there are more than 100?+
limit parameter in get_retailer_offers is clamped to a maximum of 100. Use the offset parameter to advance through pages. After each response, check the has_more boolean: if true, increment offset by your limit and make another request. total_results tells you the total offer count for that retailer and postal code so you can calculate how many pages remain.Is offer data available for all of Germany or only certain regions?+
zip_code. list_supermarkets reports total_results for the requested postal code, so querying it first tells you whether a given area has active retailer coverage before fetching offer pages.