kaufda.de Circulars & Offers Scraper | Germany Prospekte
Pricing
from $2.18 / 1,000 offer / brochures
kaufda.de Circulars & Offers Scraper | Germany Prospekte
Collect circulars and offers from kaufda.de pages. Get offer and brochure records with prices, retailers, validity, and images. Run with kaufda.de URLs; no kaufda login or API key. Pricing: $0.00225 per result plus $0.00005 per Actor Start on Free.
Pricing
from $2.18 / 1,000 offer / brochures
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
1
Bookmarked
47
Total users
8
Monthly active users
a day ago
Last modified
Categories
Features
Share
kaufda.de Circulars & Offers Scraper — Germany Prospekte
Extract German retail circulars (Prospekte) and the offers inside them from public kaufda.de pages, with flat offer and brochure records for price monitoring, retail research and deal aggregation. Free-plan pricing is $0.00225 per returned offer or brochure plus $0.00005 per Actor Start; a Free-plan run returns at most 25 results.
- Scrape product titles, brands, normalized EUR prices, categories, retailers, validity windows and images for price-monitoring workflows.
- Track flyer-level publisher, page-count, schedule, cover-image and logo data for retail research.
- Feed deal-aggregation work with offer and circular rows tagged by
recordType. - Choose whether to return brochures and set a result cap; no kaufda login or API key is required.
What you get
The Actor reads kaufda.de’s server-rendered __NEXT_DATA__ data layer and returns flat offer and brochure records. Offers and brochures are de-duplicated by their IDs before they are pushed to the dataset. Fields are null when the source does not provide the value.
| Record | Fields | Type | What it contains |
|---|---|---|---|
| Identity | recordType, id, contentId | string | Identifies an offer or brochure; contentId is used for brochure records and can be null when the source does not provide it. |
| Offer product | title, brand, description | string | Product headline, brand and offer description. brand and description can be null when the source does not provide them. |
| Offer pricing | mainPrice, priceFormatted, secondaryPriceFormatted, currency | number; string | Numeric price, displayed German price, optional secondary price and EUR currency. Optional price values can be null when the source does not provide a usable value. |
| Offer categories | category, categories | string; array of strings | kaufda category labels for the offer. Both fields are null when no category strings are available. |
| Retailer | publisherName, publisherId | string | Retailer running the circular. Either value can be null when the source does not provide it. |
| Offer validity | validFrom, validUntil | ISO 8601 string | Offer validity window; either value can be null when the source does not provide it. |
| Offer placement | brochureId, brochureLegacyId, brochurePage | string; string; integer | Circular identifiers and the page containing the offer. Values can be null when the source does not provide them. |
| Offer media | imageUrl | string | Offer image URL, which can be null when the source does not provide it. |
| Brochure details | title, publisherName, publisherId, publisherType, pageCount | string; string; string; string; integer | Circular title, publisher information and page count. Optional values can be null when the source does not provide them. |
| Brochure schedule | publishedFrom, publishedUntil, validFrom, validUntil | ISO 8601 string | Publication and validity windows for the circular; values can be null when the source does not provide them. |
| Brochure media | coverImage, publisherLogo | string | Flyer cover and publisher logo URLs, which can be null when the source does not provide them. |
| Run provenance | query, scrapedAt | string; ISO 8601 string | URL used for the extraction and scrape timestamp. |
| Quality | parse_confidence | number | Machine-readable confidence score based on required fields. |
Sample output
The sample is shortened to the main fields of one real offer record; the values shown are unchanged.
{"recordType": "offer","id": "a60bf357-bd6c-4b8e-bc08-d2d967f365c2","title": "Monte Maxi","brand": "Zott","description": "4 x 100-g-Becher","mainPrice": 1.49,"priceFormatted": "1,49 €","currency": "EUR","category": "Monte Maxi","categories": ["Monte Maxi"],"imageUrl": "https://content-media.bonial.biz/a60bf357-bd6c-4b8e-bc08-d2d967f365c2/ff291e93-1dd9-40d4-911b-d3941ea04bd2.jpg","publisherName": "REWE","publisherId": "DE-1062","validFrom": "2026-10-04T22:00:00.000+0000","validUntil": "2026-10-10T21:00:00.000+0000","brochureId": "1ce7e722-7f09-414a-af84-f01f047c7c66","brochurePage": 12,"parse_confidence": 1}
Pricing
You pay per event. Each returned offer or brochure is one result event.
| Charge event | Unit | Free-plan price | Condition |
|---|---|---|---|
| Actor Start | Per start | $0.00005 per start | Charged when the Actor starts running. |
| Offer / brochure | Per result | $0.00225 per result | One offer or brochure returned, with all fields. |
apify-actor-start is charged once per GB of run memory, minimum one event.
Rate-based estimates at Free-plan prices with one start event (these show the rate, not a capped Free-plan run):
| Results | Calculation |
|---|---|
| 1,000 | 1,000 x $0.00225 + $0.00005 = $2.25005 on the Free plan |
| 10,000 | 10,000 x $0.00225 + $0.00005 = $22.50005 on the Free plan |
At Free-plan prices, the $5 credit corresponds to 2,222 priced results after one start event.
You pay only for the events listed above. This Actor does not use the Pay per event + usage option, so the platform usage of your runs (compute, proxy traffic and storage) is not billed to you separately. The Apify Free plan includes $5 of monthly platform usage credit.
How to use
- Enter one or more
kaufda.deURLs, such as the homepage, a retailer page, a city page or a category page. - Choose whether to include brochure rows with
includeBrochures. Leave it enabled to also get circular records, or set it tofalsefor product offers only. Offers are added before brochures on each page, so with a smallmaxItems(or the Free-plan cap) brochure rows can be missing; see Limits. - Set
maxItemsto choose the maximum number of records; use0for no explicit cap. - Keep the default proxy configuration for the recommended German residential egress. You only need your Apify account; no kaufda API key, login or proxy credentials are required.
- Run the Actor and inspect the records as they stream into the dataset. Each row is tagged as an
offerorbrochure. - Schedule repeat runs through Apify Schedules; daily is a reasonable starting point for price-monitoring jobs.
{"startUrls": ["https://www.kaufda.de/"],"includeBrochures": true,"maxItems": 200,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "DE"}}
Export the dataset as JSON or CSV, or read it through the Apify dataset API.
Input parameters
| Parameter | What it does | Default |
|---|---|---|
startUrls | Array of kaufda.de URLs to read. Supported page types include the homepage, retailer pages, city pages and category pages. If no URLs are supplied, the Actor uses https://www.kaufda.de/. | https://www.kaufda.de/ |
includeBrochures | Also returns one brochure record per circular alongside product offers. | true |
maxItems | Maximum number of records returned. 0 means no explicit cap. | 200 |
proxyConfiguration | Proxy configuration used to reach the public kaufda.de pages. The recommended default uses Apify’s RESIDENTIAL group in Germany. | useApifyProxy: true, apifyProxyGroups: ["RESIDENTIAL"], apifyProxyCountry: "DE" |
disableUsageStats | Set to true to turn off the run summary described in Usage statistics. | false |
Limits and edge cases
| Condition | What happens | What to do |
|---|---|---|
maxItems is reached | The Actor stops adding records at the requested total across the input URLs. | Increase maxItems or use 0 for no explicit cap. |
maxItems is small and includeBrochures is true | Offers from a page are added before its brochures, so a page with enough offers can fill the cap and return zero brochure rows. Brochure rows are only returned if room is left under the cap. | Raise maxItems, or use a cap above the offer count of the page. |
| Each URL is read once | Each URL is fetched as one page; the Actor does not follow links to other pages. The sample above covers only the homepage, so other page types are not demonstrated. | Add each retailer, city or category page as its own URL and check the output. |
includeBrochures is false | Brochure records are not returned; only offer records can be added. | Set it to true when circular-level metadata is needed. |
| The same offer or brochure appears through multiple URLs | Duplicate offers are removed by offer ID, and duplicate brochures are removed by content ID or brochure ID. | Use multiple URLs for coverage without expecting repeated rows. |
| An extracted offer has no ID or title, or a brochure has no ID | That incomplete row is skipped rather than pushed to the dataset. | Check the target page and run it again if required data is missing. |
| The run is on the Free plan | Each run returns at most 25 results, even if maxItems is higher or 0. | Use a paid plan for larger runs. |
| A fetch raises an error, times out, or kaufda returns a detected block response | The Actor makes up to 4 attempts per URL, rotating the proxy session, then skips the URL and continues with the next one. Records already pushed remain in the dataset. | Verify the URL, keep the recommended German residential proxy configuration and rerun. |
| A run is aborted, times out, or fails after records have been pushed | Records already pushed remain in the dataset; records not yet pushed are not available. | Run the Actor again for the remaining records. |
| A page contains no extractable offer or brochure records | The run can finish with no records for that URL. | Confirm that the URL is a supported public kaufda.de page and try again. |
FAQ
How much does it cost to scrape kaufda.de circulars and offers?
An Actor Start event costs $0.00005 on the Free plan, and each returned offer or brochure result costs $0.00225 on the Free plan. With one start event, 1,000 results at Free-plan rates cost 1,000 x $0.00225 + $0.00005 = $2.25005.
What if the dataset is empty?
The Actor extracts records from kaufda.de’s embedded __NEXT_DATA__ data. Check that the URL is a public kaufda.de homepage, retailer page, city page or category page, and confirm that brochure inclusion is enabled when circular rows are expected.
What if a kaufda.de page is not working?
When a URL cannot be fetched or is blocked, the URL is skipped and the run continues with later URLs. Verify the URL, keep the recommended German residential proxy configuration, and run it again.
Is scraping public kaufda.de data legal or allowed?
The Actor reads public kaufda.de pages. Whether a particular extraction, storage or downstream use is legal or allowed depends on your use case, the source terms and applicable law.
Rate this Actor
If kaufda.de Circulars & Offers Scraper saved you time, please rate it on the Apify Store. A rating takes a few seconds and helps other people find a working scraper. If something did not work, open an issue on the Actor page.
Usage statistics
This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.
A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.
To opt out, set disableUsageStats to true in the input. Nothing is sent then.