Kaufland.de Scraper - Marketplace Price, Deals & Reviews
Pricing
from $1.50 / 1,000 product results
Kaufland.de Scraper - Marketplace Price, Deals & Reviews
Scrape Kaufland.de, Germany's hypermarket and online marketplace: keyword/category/brand search or paste links. Current price, UVP was-price and discount on Angebote deals, grocery unit price, brand, breadcrumb path, EAN, marketplace seller, variant matrix, per-category specs, and native reviews.
Pricing
from $1.50 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
14
Total users
2
Monthly active users
16 hours ago
Last modified
Categories
Share
Kaufland.de Scraper: Prices, Deals, Sellers & Reviews
Kaufland.de Scraper turns Kaufland.de, Germany's hypermarket and online marketplace, into structured product data. Search by keyword, category, brand and price with the site's own filters, browse Kaufland's Angebote (deals) facet, or paste product, category and search links directly. Every record carries the current price, the strike-through UVP original price with a computed discount when an item is genuinely reduced, grocery unit price (EUR per kg/l), and, on request, full product detail and native customer reviews, then export to JSON, CSV or Excel, read it through the API, or pipe it into the apps you already use.
Why This Scraper?
- UVP was-price and discount, never fabricated. When a product is reduced against its manufacturer's recommended price (UVP), the current price, the strike-through original price, and the computed discount amount and percentage come back structured. A full-price item simply returns
nullfor these fields. - A dedicated deals mode.
specialsOnlyscrapes Kaufland's own Angebote facet directly, store-wide or scoped to a keyword and/or category. - Grocery unit pricing. EUR per kg, litre or other unit comes back as a structured value, not buried inside a price string.
- Marketplace-aware. Kaufland.de is a multi-seller marketplace: every listing carries the selling partner's name, and full detail adds the seller's id, return period and the number of competing offers on the same listing.
- Rich product identity on demand. Brand and manufacturer, full breadcrumb category path, EAN/GTIN, manufacturer part number, and flattened per-category technical specifications, which vary by product type and are never hardcoded to one vertical.
- Complete native review history. Overall rating, review count, and every individual review with author, date, rating, title and body text, straight from Kaufland's own review system.
- Two ways in. Search by keyword and/or category, or paste any product, category or search link and let pagination continue automatically. Brand, price range, deals and sort filters apply in both modes. Optionally export results into Notion, Linear, Airtable or any Apify MCP connector alongside the dataset.
Use Cases
- Price monitoring and repricing: track current price, UVP discount and unit price across a category or a list of competitors' listings.
- Deal and promotion tracking: watch Kaufland's Angebote facet, store-wide or for a specific department, for new and ending discounts.
- Marketplace research: compare sellers, return periods and the number of competing offers on the same product.
- Catalog and PIM enrichment: pull brand, breadcrumb category path, EAN/GTIN, part number and structured specifications for product matching.
- Reputation and review analysis: aggregate a product's full native review history, ratings and verified-purchase flags.
- Grocery price-per-unit comparisons: collect structured EUR per kg/l unit pricing for basket comparisons.
Data You Get
Sample shape: values below are illustrative placeholders, not from a live product.
| Field | Example |
|---|---|
productId | 500000001 |
title | "Sample Coffee Machine, 1200W, Black" |
url | "https://www.kaufland.de/product/500000001/" |
image | "https://media.cdn.kaufland.de/product-images/400x400/sample.webp" |
price / currency | 54.95 / "EUR" |
originalPrice | 79.90 (UVP was-price, null off deal) |
discountAmount / discountPercent | 24.95 / 31.2 |
isOnSpecial | true |
unitPrice | {"value": 54.95, "unit": "1kg"} |
promoLabel | "Hammer-Preis" (voucher or best-price badge) |
seller | "Sample-Handel" (name only in listing, full object with fetchDetails) |
rating / reviewCount | 4.7 / 331 |
brand (fetchDetails) | "Sample Brand" |
breadcrumb (fetchDetails) | ["Startseite", "Küche & Haushalt", "Haushaltsgeräte", "Kaffeevollautomaten"] |
ean / gtin / mpn (fetchDetails) | "4000000000001" / "4000000000001" / "SC-1200-BK" |
specifications (fetchDetails) | {"Gewicht": "3.5 kg", "Lautstärke": "65 dB", "Fernbedienung": "Ja"} |
variants (fetchDetails) | [{"title": "Schwarz", "url": "https://..."}, {"title": "Weiß", "url": "https://..."}] |
otherOffersInfo (fetchDetails) | {"totalNewOffers": 5, "totalUsedOffers": 3, "lowestPrice": 49.99} |
voucher (fetchDetails) | {"discountAmount": 5, "discountType": "fixed", "endsAt": "2026-10-05"} |
energyLabel (fetchDetails) | {"class": "A", "imageUrl": "https://..."} |
reviews.averageRating / reviews.totalReviewCount (fetchReviews) | 4.7 / 331 |
reviews.items[] (fetchReviews) | [{"reviewId": 7000001, "author": "hm-1234567890", "rating": 5, "date": "23.06.2026", "title": "Sample review title", "body": "Sample review text.", "isVerifiedPurchase": true}] |
Search and category results already carry price, UVP was-price and discount, unit price, promo badge and rating without any toggle. Turning on Fetch full product detail adds brand, breadcrumb, EAN/GTIN, part number, flattened specifications, energy label, media gallery, the per-variant matrix and the full seller object; turning on Fetch reviews adds the native review history. Pasting a single product link always returns the full-detail fields, since there is no search result to fall back on, whether or not fetchDetails is switched on.
How to Use
- Pick a mode:
search(keyword and/or category, with Kaufland's own filters) orurl(paste product, category or search links). - In search mode, set a search keyword and/or category, then narrow with brand, price range, deals and sort. These filters also apply when you paste a category or search link in url mode.
- Turn on Fetch full product detail and/or Fetch reviews if you need the enrichment fields, and set Max products total and Max pages per search to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Basic keyword search:
{"mode": "search","searchTerm": "kaffee","maxItems": 20}
Search narrowed by category, brand and price, with deals:
{"mode": "search","searchTerm": "kaffee","category": "5921","brand": "Melitta","minPrice": 5,"maxPrice": 40,"specialsOnly": true,"sortBy": "price-asc","maxItems": 30}
Category browse with full detail and review enrichment:
{"mode": "search","category": "31851","fetchDetails": true,"fetchReviews": true,"maxReviewsPerProduct": 0,"maxItems": 50}
Paste product, category or search links:
{"mode": "url","urls": ["https://www.kaufland.de/product/496448760/","https://www.kaufland.de/c/klimaanlagen/~31851/","https://www.kaufland.de/s/?search_value=kaffee&all_deals=true"],"maxItems": 40}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/kaufland-de-scraper").call(run_input={"mode": "search", "searchTerm": "kaffee", "maxItems": 20})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["title"], product["price"], product["currency"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/kaufland-de-scraper').call({ mode: 'search', searchTerm: 'kaffee', maxItems: 20 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
How Max pages and Max products total interact
Max products total (maxItems, default 20) is a hard cap on products returned across every search, category or URL entry; 0 means unlimited. Max pages per search (maxPages) has no default cap: leave it empty and the actor walks as many pages as it needs for one search, category or URL entry, still bounded by Max products total. If a storefront ever re-serves the same page of results, the actor detects the repeat and stops that search rather than paging forever, so already-collected items are always kept.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword/category with filters) or url (paste links). |
searchTerm | string | none (prefill: kaffee) | Free-text keyword. Read only in search mode; ignored in url mode. |
category | string | none | A Kaufland category id, e.g. 31851. Read only in search mode; ignored in url mode. |
brand | string | none | Only this brand/manufacturer, matched against Kaufland's own brand filter (exact match preferred, falls back to a partial match; ignored if it has no matches for this search). Applies in both search and url mode. |
specialsOnly | boolean | false | Only Angebote (deals) items. Applies in both modes; for a pasted search-result url it's OR'd with the url's own all_deals=true, and for a pasted category url only this input's value is used. |
minPrice | integer | none | Minimum price in EUR. Applies in both search and url mode. |
maxPrice | integer | none | Maximum price in EUR. Applies in both search and url mode. |
sortBy | string | natural | natural, price-asc, price-desc, customer-reviews, newest-arrivals, or bestsellers. Applies in both modes; a pasted url's own sort is not preserved. |
urls | array | none (prefill: one sample search url) | Product, category or search links for url mode. |
fetchDetails | boolean | false | Adds brand, breadcrumb, EAN/GTIN, part number, specifications, energy label, media gallery, variant matrix and marketplace seller detail. |
fetchReviews | boolean | false | Fetches each product's full native review history. |
maxReviewsPerProduct | integer | 20 | Cap on reviews kept per product; 0 = all available. |
maxPages | integer | none (unlimited) | Cap on result pages per search/category/url entry; empty means as many pages as needed, bounded by Max products total. |
maxItems | integer | 20 | Hard cap on total products returned; 0 = unlimited. |
proxy | object | Residential (Germany), preset | Connection settings. A residential connection is required to reach this site. |
mcpConnectors | array | none | Optional MCP connectors to also receive a summary of results. |
notionParentPageUrl | string | none | Required only when a Notion connector is selected. |
maxNotifyListings | integer | 50 | Cap on items sent to each connector per run. |
Output Example
Sample shape: values below are illustrative placeholders, not from a live product.
{"productId": "500000001","title": "Sample Coffee Machine, 1200W, Black","url": "https://www.kaufland.de/product/500000001/","image": "https://media.cdn.kaufland.de/product-images/400x400/sample.webp","price": 54.95,"currency": "EUR","originalPrice": 79.90,"discountAmount": 24.95,"discountPercent": 31.2,"isOnSpecial": true,"unitPrice": { "value": 54.95, "unit": "1kg" },"brand": "Sample Brand","breadcrumb": ["Startseite", "Küche & Haushalt", "Haushaltsgeräte", "Kaffeevollautomaten"],"ean": "4000000000001","gtin": "4000000000001","specifications": {"Gewicht": "3.5 kg","Lautstärke": "65 dB","Fernbedienung": "Ja"},"seller": {"name": "Sample-Handel","id": "90000001","returnPeriod": "P14D"},"rating": 4.7,"reviewCount": 331,"reviews": {"averageRating": 4.7,"totalReviewCount": 331,"items": [{"reviewId": 7000001,"author": "hm-1234567890","rating": 5,"date": "23.06.2026","title": "Sample review title","body": "Sample review text describing the purchase experience.","isVerifiedPurchase": true}]}}
Plan Requirement
Kaufland.de is reachable only over a residential connection, which this actor selects by default (Germany). A residential connection is a paid Apify feature, so running this actor requires a paid Apify plan; a run without one, or with the connection changed away from residential, cannot reach the site and completes with zero products rather than guessing.
FAQ
How much does it cost?
You pay per product returned, plus a separate surcharge, charged at most once per product, when full detail and/or review history is successfully fetched for it. This surcharge also applies to every pasted single product link, which always fetches full detail. The Pricing tab shows the current rates. Use Max products total and Max pages per search to cap the cost of any run.
Is it legal to scrape Kaufland.de?
This actor collects only publicly available product data. You are responsible for how you use it: follow Kaufland's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product images, brand names and review text may be subject to third-party rights.
Can I get only new or changed products on a schedule?
Not automatically. This actor does not keep state between runs or classify products as new, changed or unchanged. Schedule it from the Schedules tab to re-run the same search or deals scope on a timer, and compare consecutive datasets yourself if you need to detect changes.
Why didn't my price or brand filter apply to a pasted URL?
It did, for a category or search-result link: brand, price range, deals and sort are applied server-side to every rebuilt request in both modes. Only searchTerm and category are different: those two input fields are read solely in search mode, and in url mode the equivalent values come from the pasted link itself, not from the input fields. A pasted single product link ignores all filters, since there is nothing to narrow.
Why did my run return no products instead of failing?
If the connection to the site cannot be established, for example because the connection setting was changed away from residential, the actor logs the reason and finishes the run with zero products rather than guessing. If the connection is lost partway through, the actor stops retrying for the rest of that run and keeps whatever was already collected; check the run log for a note about this. A hard run failure (status Failed) is different and usually means an unexpected error, which you should report on the Issues tab.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of results into Notion, Linear or Airtable.
🔗 Want more grocery data?
Pair this actor with these related scrapers from the same team:
| 🥦 REWE.de Scraper Scrape REWE Germany (rewe.de) grocery products: current price, was-price and discount... | 🥦 Auchan France Scraper Scrape Auchan.fr products: grocery, drinks, household and general merchandise. Real price... |
| 🥦 Coles AU Scraper Scrape Coles.com.au grocery products and customer reviews. Search by keyword, browse... | 🥦 Lidl.es Products, Weekly Offers, Prices & Reviews Scraper Scrape Lidl.es grocery and non-food products across weekly offers, tools, home, garden... |
| 🛒 ROSSMANN.de Scraper Scrape ROSSMANN (rossmann.de) drugstore products: current + original strike-through price... | 🛒 HORNBACH Products, Prices & Reviews Scraper Scrape HORNBACH (hornbach.de) DIY, building & garden products: current + strike-through... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.