Kaufland Scraper — Austrian Marketplace Products & Prices avatar

Kaufland Scraper — Austrian Marketplace Products & Prices

Pricing

from $1.20 / 1,000 result scrapeds

Go to Apify Store
Kaufland Scraper — Austrian Marketplace Products & Prices

Kaufland Scraper — Austrian Marketplace Products & Prices

Scrape products from the Kaufland.at marketplace: names, prices (EUR), sellers, brands, EAN codes, ratings, images and categories. Search by keyword, category or product URLs. No login, no cookies.

Pricing

from $1.20 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Studio Amba

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Categories

Share

Kaufland.at Scraper

Scrape product data from the Kaufland.at marketplace, the Austrian storefront of the Schwarz Group online marketplace (formerly real.de) with products from Kaufland direct sales and thousands of third-party sellers.

Search by keyword, pull a whole category, or hand it a list of product URLs. Get back clean, structured records with prices in EUR, sellers, brands, EAN codes, ratings, images and categories. Turn on two optional flags to also get every competing offer on a product and the contact details each seller publishes in its imprint (legal name, address, email, phone, VAT id). No login, no cookies.

Why use this actor?

Kaufland runs one marketplace platform across eight European countries (Germany, Austria, Czechia, Slovakia, Poland, Italy, France and the Netherlands) and its Austrian catalogue changes constantly across thousands of independent sellers. This actor turns any keyword or category into a structured product feed you can drop into a spreadsheet, a pricing tool, or a database.

Typical users: brands tracking how their products are priced and sold across marketplace sellers, retailers doing competitive price monitoring, resellers sourcing products, analysts building assortment or market-share reports, and sales teams building lists of marketplace sellers with their published contact details.

What you get

  • Real marketplace prices in EUR as numbers (not strings), plus price per unit (e.g. 20.98 EUR/1kg) and strike-through / RRP where a product is on sale.
  • Seller name and seller id for every item, or Kaufland for direct sales.
  • Brand, EAN, category, ratings and review counts with high field coverage, because the data comes straight from Kaufland's own product API, not scraped HTML.
  • All product images in full resolution.
  • Every competing offer on a product (fetchOffers): price, shipping cost, delivery window, fulfilment type and the seller behind each offer.
  • Seller contact details (fetchSellerDetails): the legal name, legal form, address, email, phone, fax, VAT id, register court and register number from the imprint each seller publishes on Kaufland, plus the seller's country.
  • No login and no cookies. Nothing to configure beyond a keyword.

How to scrape Kaufland.at data

  1. Add the actor to your Apify account.
  2. Enter a Search Query (a German keyword like 'kaffee', 'laptop', 'kopfhörer'), or a Category ID, or paste Product URLs.
  3. Set Max Results to how many products you want.
  4. Optional: turn on Fetch all competing offers and/or Fetch seller contact details. Both are off by default; see the sections below.
  5. Run it. Download the results as JSON, CSV, Excel or feed them to an API.

Kaufland.at sits behind Cloudflare and DataDome, so the actor routes its requests through the Bright Data Web Unlocker, which solves the bot challenge and returns the data. You do not need your own Bright Data account. We supply the key and the actor runs without it. The brightDataApiKey input exists only if you would rather bill Bright Data usage to your own account.

Input

FieldTypeRequiredDescription
searchQueryStringNoKeyword to search the marketplace (default: kaffee). Products are discovered by keyword and enriched with full data.
categoryIdIntegerNoA numeric Kaufland category id to pull instead of a keyword. Category ids appear in the category data of any scraped product.
productUrlsArrayNoOne or more https://www.kaufland.at/product/<id>/ URLs to scrape directly (max 1000).
maxResultsIntegerNoMaximum number of products to return (default: 100).
fetchOffersBooleanNoOff by default. When off, a product row carries only the buy-box price and seller, not the other sellers' offers. On: adds offers[] with every competing offer.
fetchSellerDetailsBooleanNoOff by default. When off, seller is only a display name. On: adds sellerDetails with the seller's published contact record (and one per offer seller when fetchOffers is also on).
oneRowPerOfferBooleanNoOff by default. On: one row per offer instead of one row per product (implies fetchOffers).
maxOffersPerProductIntegerNoCap on competing offers per product (default 100, max 1000).
brightDataApiKeyStringNoOptional. Your own Bright Data Web Unlocker key, if you want the usage billed to your account. Leave empty to use ours.
proxyConfigurationObjectNoApify proxy settings for auxiliary requests.

Leave everything empty and the actor runs a default kaffee search, so an empty input {} still returns data.

Output

Each product row contains:

FieldTypeExample
nameString"Open Food Kaffeeweißer - Sucofin - 400g, 544 kcal, 63,5 g, 32,1 g, 32,5 g, 0,06 g, 1,8 g"
brandString"Open Food"
priceNumber3.2
currencyString"EUR"
originalPriceNumberStrike-through price (null if not on sale)
pricePerUnitString"8.00 EUR/1kg"
discountString"-15%" (null if not on sale)
eanString"4021155117005"
skuStringKaufland offer id of the buy-box offer
productIdString"501611203"
sellerString"Euroshare"
sellerIdString"48187946"
sellerCompanyNameStringRegistered company name of the buy-box seller
inStockBooleantrue, false, or null when Kaufland does not say
ratingNumber4.86
reviewCountInteger7
urlString"https://www.kaufland.at/product/501611203/"
imageUrlStringPrimary product image URL
imageUrlsArrayAll product image URLs
categoryString"Instant Kaffees"
scrapedAtStringISO 8601 timestamp

Competing offers (fetchOffers)

With fetchOffers on, each row also carries offerCount and offers[]. One offer looks like this:

FieldTypeExample
offerIdString"388274035566"
priceNumber13.59
currencyString"EUR"
shippingNumber3.99 (0 = free shipping)
totalPriceNumber17.58 (price + shipping)
pricePerUnitString"135.90 EUR/1l"
conditionString"new" or "used"
deliveryTimeStringDelivery window as shown on the site
deliveryFrom / deliveryToStringDelivery window as ISO timestamps
fulfillmentTypeString"seller" (shipped by the seller) or Kaufland fulfilment
sellerId / sellerNameStringThe seller behind the offer
sellerShopUrlStringThe seller's shop page on Kaufland
isDirectSellerBooleantrue when the offer is sold by Kaufland itself
returnPeriodStringISO 8601 duration, e.g. "P30D"
sellerDetailsObjectThe seller's contact record (only with fetchSellerDetails)

With oneRowPerOffer on, the actor emits one row per offer instead: the product fields plus a single offer object, and sellerDetails for that offer's seller.

Seller contact details (fetchSellerDetails)

With fetchSellerDetails on, each row carries sellerDetails for the buy-box seller (and every offer carries its own sellerDetails when fetchOffers is also on). The record is parsed from the imprint each seller publishes on Kaufland:

FieldTypeExample
sellerIdString"76996843"
sellerNameString"Smartpanther"
legalNameString"Smartpanther GmbH"
legalFormString"GmbH"
representativesStringManaging directors / authorised representatives
addressString"Rose-Ausländer-Str. 2, 74523 Schwäbisch Hall"
emailString"info@smartpanther.de"
phoneString"+49 97816372"
faxStringFax number when published
vatIdString"DE301628081" (validated country prefix + digits; null when the seller publishes no valid VAT id)
registerCourtStringCommercial register / court
registerNumberString"HRB 87821"
sellerCountryStringISO code of the seller's country, e.g. "DE", "PL", "CZ"
sellerCountryNameStringCountry name as Kaufland shows it
sellerSinceStringSeller since, when Kaufland publishes it
shopUrlStringThe seller's shop page on Kaufland
imprintTextStringThe full imprint as plain text, for anything the fields above do not cover

Every field is nullable. A seller with a thin imprint gives a thin record. On the runs behind this listing, email and phone were filled on most sellers and the VAT id on most sellers with a valid EU number; expect fill rates below 100% and check imprintText for anything the parser left null.

Note that sellers are often foreign to the storefront: a Polish or Czech seller listing on Kaufland.at publishes a Polish or Czech address. Use sellerCountry to filter.

Example output

A real row from a live run with fetchOffers and fetchSellerDetails on (offers trimmed to two):

{
"name": "Open Food Kaffeeweißer - Sucofin - 400g, 544 kcal, 63,5 g, 32,1 g, 32,5 g, 0,06 g, 1,8 g",
"brand": "Open Food",
"price": 3.2,
"currency": "EUR",
"pricePerUnit": "8.00 EUR/1kg",
"ean": "4021155117005",
"sku": "388416535520",
"productId": "501611203",
"seller": "Euroshare",
"sellerId": "48187946",
"sellerCompanyName": "Euroshare GmbH",
"inStock": true,
"rating": 5,
"reviewCount": 2,
"url": "https://www.kaufland.at/product/501611203/",
"imageUrl": "https://media.cdn.kaufland.de/product-images/original/1087c453c0ad2e5f42408c2ad9807c4c.jpg",
"category": "Instant Kaffees",
"offerCount": 1,
"offers": [
{
"offerId": "388416535520",
"price": 3.2,
"currency": "EUR",
"shipping": 7.99,
"totalPrice": 11.19,
"pricePerUnit": "8.00 EUR/1kg",
"condition": "new",
"deliveryTime": "Mi. 23. - Mo. 28. September",
"deliveryFrom": "2026-09-23T00:00:01+02:00",
"deliveryTo": "2026-09-28T23:59:59+02:00",
"fulfillmentType": "seller",
"sellerId": "48187946",
"sellerName": "Euroshare",
"sellerShopUrl": "https://www.kaufland.at/shops/Euroshare/",
"isDirectSeller": false,
"returnPeriod": "P14D",
"sellerDetails": {
"sellerId": "48187946",
"sellerName": "Euroshare",
"legalName": "Euroshare",
"legalForm": null,
"address": "Euroshare GmbH, Lennéstraße 5, 10785 Berlin",
"email": "kaufland@euroshare.online",
"phone": "+49 1621323590",
"vatId": "DE192240242",
"registerCourt": "Amtsgericht Charlottenburg",
"registerNumber": "HRB 219102 B",
"sellerCountry": "DE"
}
}
],
"sellerDetails": {
"sellerId": "48187946",
"sellerName": "Euroshare",
"legalName": "Euroshare",
"legalForm": null,
"address": "Euroshare GmbH, Lennéstraße 5, 10785 Berlin",
"email": "kaufland@euroshare.online",
"phone": "+49 1621323590",
"vatId": "DE192240242",
"registerCourt": "Amtsgericht Charlottenburg",
"registerNumber": "HRB 219102 B",
"sellerCountry": "DE"
},
"scrapedAt": "2026-09-21T18:07:10.376Z"
}

How it works

Kaufland's own keyword search endpoints are blocked to automated access, so the actor works from Kaufland's public product API:

  1. Enumeration. A keyword search finds matching product ids across the marketplace; a category id or a list of product URLs skips straight to known products.
  2. Data. Product ids are sent in batches of 50 to Kaufland's product-tiles API, which returns clean JSON (prices, sellers, brands, EAN codes, ratings and images) with very high field coverage.
  3. Offers (optional). One request per product returns every competing offer with its seller.
  4. Seller details (optional). One request per distinct seller returns the published imprint, which is parsed per label into the contact fields. Kaufland obfuscates the published email addresses; the actor decodes them.

Long runs are migration-safe: products already written are not fetched again after a restart, and seller records are cached within the run.

Cost estimate

Per result cost (actor start fee plus per-result fee) depends on your plan and is shown on this page. Bright Data usage on our key is included. Requests per product, measured on live runs:

  • Product rows only (default): about 0.05 requests per product (one search request per ~20 products plus one product-tiles request per 50). A run of 1,000 products is roughly 70 requests.
  • fetchOffers: +1 request per product (+1 per additional 100 offers).
  • fetchSellerDetails: +1 request per distinct seller. With both flags on, a product with 3 competing offers costs about 4 requests. Runs with both flags on 100 products take 10-20 minutes.
  • oneRowPerOffer: the number of result rows equals the number of offers, so a product with 20 offers is 20 billable results.

A run's usage cost only settles after the run reports SUCCEEDED; a cost read mid-run from a partial dataset is far too low. Size your runs with maxResults and maxOffersPerProduct.

Limitations

  • Kaufland.at is behind Cloudflare and DataDome; the actor reaches it through the Bright Data Web Unlocker (our key by default).
  • Keyword search relevance and coverage depend on what is indexed publicly, so a keyword run returns the most relevant products rather than a guaranteed exhaustive list. Use categoryId for category-scoped pulls.
  • originalPrice and discount are only present when a product is actually on sale.
  • Seller contact fields come from what each seller publishes. The parser reads the imprint labels in the storefront language; a seller who fills the imprint unusually gets null fields (the raw text is always in imprintText). Kaufland obfuscates published email addresses and may change how; the decoding is tested but is the part most likely to need maintenance.
  • Seller imprint data is published by the sellers under EU platform rules. You are responsible for using it lawfully (GDPR applies to sole traders' data).
  • Data is scraped from the public marketplace and may change without notice. Respect the website's terms of service and use responsibly.

The same actor exists for every Kaufland marketplace country:

Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API, maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple sources into one feed.

See studioamba.dev/services or email hello@studioamba.dev for a free data sample. We maintain 300+ European web scrapers and answer within one business day.