REWE.de Scraper - Prices, Offers & Postal-Code Matching avatar

REWE.de Scraper - Prices, Offers & Postal-Code Matching

Pricing

from $1.00 / 1,000 product results

Go to Apify Store
REWE.de Scraper - Prices, Offers & Postal-Code Matching

REWE.de Scraper - Prices, Offers & Postal-Code Matching

Scrape REWE Germany (rewe.de) grocery products: current price, was-price and discount when genuinely on offer, brand, category, price per unit, images and tags. Prices match a real postal code you choose. Search keywords or paste product/listing links.

Pricing

from $1.00 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

REWE.de Grocery Scraper

Pull grocery product data from REWE Germany (rewe.de). Search by keyword and/or REWE's own category, brand, and dietary/sourcing filters, or paste product and listing links directly. Prices and offers are matched to a real German postal code you choose, the same way the site itself scopes pricing to your local market.

Why This Scraper?

  • Postal-code matched pricing. Give it a German postal code (PLZ) and it resolves your local market before pulling prices, the same step the site itself requires before showing you real numbers.
  • Was-price and discount, gated on the site's own signal, never guessed. When a product genuinely carries a reduced price, the original price plus the discount amount and percentage are captured. A full-price product simply carries originalPrice: null -- nothing is fabricated.
  • Real site filters. Category, brand, and REWE's own dietary/sourcing quick filters (Bio, Vegan, Regional, New, Gekühlt, Tiefgefroren) -- all verified live against the site's own controls, not guessed.
  • Two ways in. Keyword and/or category search, or paste any product or listing link.
  • Optional export to your apps. Send results into Notion, Linear, Airtable, or any Apify MCP connector alongside the dataset.
  • Resume & recurring updates (optional) -- turn on Incremental mode to get only NEW, UPDATED and REAPPEARED products on every scheduled run, or resume one specific interrupted crawl with resumeFromRunId.

Data You Get

FieldExample value
productId1042422
nameSample Fresh Whole Milk 3.7% 1l
brandSample Dairy
category / categoryPathFrischmilch, ["Cheese, Eggs & Dairy", "Milk", "Frischmilch"]
tags["Gekühlt", "Regional"]
urlhttps://www.rewe.de/p/sample-fresh-whole-milk-1042422/1042422
price / currency1.29, EUR
originalPrice / discountAmount / discountPercent1.59, 0.30, 19
isOnSpecialtrue
pricePerUnit / grammage1,29 € / 1l, 1l
availabletrue
image / images["https://img.rewe-static.de/sample/digital-image.png"]
description / ingredients(when Fetch product detail is on)

Sample shape: values above are illustrative placeholders, not from a live product.

How to Use

1. Keyword search, first page (default):

{
"mode": "search",
"searchTerm": "milch",
"zipCode": "50667",
"maxItems": 20
}

2. Category browse, filtered to a brand and dietary tag:

{
"mode": "search",
"categorySlug": "milch",
"brand": "Alpro",
"attribute": "VEGAN",
"zipCode": "50667",
"maxItems": 50,
"maxPages": 5
}

3. Paste product or listing links and set your postal code:

{
"mode": "url",
"urls": ["https://www.rewe.de/p/sample-fresh-whole-milk-1042422/1042422"],
"zipCode": "50667",
"fetchDetails": true
}

Input Parameters

ParameterTypeDescription
modestringsearch or url.
searchTermstringFree-text keyword (search mode only).
categorySlugstringREWE's own category token, e.g. milch (search mode only).
brandstringExact brand name to keep (search mode only).
attributestringORGANIC, VEGAN, REGIONAL, NEW, CHILLED, or FROZEN -- REWE's own dietary/sourcing quick filter (search mode only).
minPrice / maxPricenumberEUR price band to keep (search mode only).
urlsarrayProduct or listing URLs to scrape (url mode only).
fetchDetailsbooleanFetch description and ingredient statement from the product detail page.
maxPagesintegerCap on result pages per search/URL entry; empty = unlimited.
maxItemsintegerCap on total products returned; 0 = unlimited.
zipCodestringGerman postal code REWE uses to match your local market and its prices.
resumeFromRunIdstringContinue one interrupted crawl -- ID of a previous run/dataset; already-collected products are skipped. See Resume & recurring updates below.
incrementalModebooleanRecurring/scheduled monitoring of the same search -- only NEW/UPDATED/REAPPEARED products are returned by default. Default false.
stateKeystringOptional name for an incremental-mode monitoring campaign. Leave empty to derive one automatically from mode/postal code/search/filter settings.
emitUnchangedbooleanIncremental mode only. Also return (and bill) products unchanged since the last run. Default false.
emitExpiredbooleanIncremental mode only. Also return (and bill) products no longer found, once a run fully scans the tracked search. Default false.
proxyobjectApify proxy configuration. A residential connection is required for a reliable run (see below).
mcpConnectorsarrayOptional MCP connectors to export results into (Notion, Linear, Airtable, Apify).
notionParentPageUrlstringNotion connector only: page under which item pages are created.
maxNotifyListingsintegerCap on items exported to each connector per run. Does not affect the dataset.

Resume & recurring updates

Two different things -- pick the one that matches what you're doing:

NeedUse
A crawl stopped and should continueresumeFromRunId
Run the same search every day and receive only changesincrementalMode
Keep separate daily campaigns for similar searchesdistinct stateKey values
Run a normal full snapshotleave both off

Resume (resumeFromRunId) continues one specific interrupted crawl: paste a run ID or dataset ID and this run skips products already collected there, returning only the remaining new products.

Incremental mode (incrementalMode) is for a schedule (e.g. daily): the actor remembers the previous run of the same search by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED and REAPPEARED products by default -- unchanged products are suppressed (and not charged). Turn on emitUnchanged or emitExpired only when you also want those rows returned (and billed for). State is isolated automatically per mode/postal code/search term/category/brand/attribute/price filters/URLs/detail setting -- zipCode is included because it selects a different REWE market (different prices, different assortment); set stateKey to name or deliberately share a monitoring campaign. EXPIRED is only synthesized once a run fully scans the tracked search (not capped by Max products/Max pages, not stopped early by a connection problem, not a Resume run).

When incrementalMode is on, every returned record also carries:

FieldDescription
changeTypeNEW | UPDATED | UNCHANGED | REAPPEARED | EXPIRED
changedFieldsTop-level fields that changed since last seen; non-empty only for UPDATED
firstSeenAtWhen this product was first observed by this monitoring campaign
lastSeenAtWhen this product was last observed

If Fetch product detail is on and a detail-page fetch fails on a later run, the previously-fetched description/ingredients are carried forward from state rather than dropped -- a transient fetch failure never looks like real content disappearing (and never re-bills the detail-enrichment surcharge for it).

Output Example

{
"productId": "1042422",
"name": "Sample Fresh Whole Milk 3.7% 1l",
"brand": "Sample Dairy",
"tags": ["Gekühlt", "Regional"],
"url": "https://www.rewe.de/p/sample-fresh-whole-milk-1042422/1042422",
"hasVariants": false,
"freeShipping": false,
"categoryId": "175",
"category": "Frischmilch",
"categoryPath": ["Cheese, Eggs & Dairy", "Milk", "Frischmilch"],
"image": "https://img.rewe-static.de/sample/digital-image.png",
"images": ["https://img.rewe-static.de/sample/digital-image.png"],
"price": 1.29,
"currency": "EUR",
"originalPrice": 1.59,
"discountAmount": 0.3,
"discountPercent": 19,
"isOnSpecial": true,
"pricePerUnit": "1,29 € / 1l",
"grammage": "1l",
"available": true
}

Sample shape: values above are illustrative placeholders, not from a live product.

Send results into your apps (MCP connectors)

Optionally pipe results into the apps you already use through Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it in the mcpConnectors field. Each connector receives a condensed, human-readable summary per product (name plus key fields), while the complete record always stays in the Apify dataset. For Notion, set notionParentPageUrl to the page the item pages should be created under, and use maxNotifyListings to cap how many items are exported per connector per run. Supported connectors: Notion, Linear, Airtable, and Apify. Leave the field empty to skip; it never changes the dataset output.

A note on plans

rewe.de requires a residential connection for a reliable run -- a datacenter or free-tier connection will very likely fail. The default proxy configuration already selects a residential connection in Germany; no extra setup is needed on any paid plan with residential proxy access.