ROSSMANN.de Scraper - Prices, Reviews & Specials avatar

ROSSMANN.de Scraper - Prices, Reviews & Specials

Pricing

from $1.00 / 1,000 product results

Go to Apify Store
ROSSMANN.de Scraper - Prices, Reviews & Specials

ROSSMANN.de Scraper - Prices, Reviews & Specials

Scrape ROSSMANN (rossmann.de) drugstore products: current + original strike-through price with discount, per-unit pricing (per 100ml/kg/piece), brand, stock and promo badges, plus full reviews with rating breakdown. Search by keyword, category or Angebote/online-only specials, or paste 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

5

Total users

1

Monthly active users

17 days ago

Last modified

Share

ROSSMANN Scraper: Prices, Discounts, Unit Prices & Reviews

ROSSMANN Scraper turns rossmann.de, the German drugstore retailer, into a clean product data feed. Get the current price, the manufacturer's original price with the computed discount when a product is marked down, real per-unit pricing (per litre, per kilogram, or per piece) alongside the pack size, stock and promo badges, and a full review history with a complete rating breakdown. Search by keyword, browse a category, or pull the site's own current deals and online-only campaign listings, or paste product, search, category, or specials links directly, then export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • Was-price and discount, structured, not scraped from a badge. When a product carries a manufacturer's original price alongside ROSSMANN's own price, both are captured plus the computed discount amount and percentage.
  • Real per-unit pricing. Search, category and specials results return a per-litre, per-kilogram, or per-piece price alongside the pack size where the site shows one, with the unit kept separate from the package size so the two are never confused; a pasted product link has no unit price.
  • Full review history. Overall rating, review count, a complete 1 to 5 star rating breakdown, and every individual review with author, date, rating, title, and body text.
  • Two real promotional listings. Current deals ("Angebote") and the online-only campaign, each with thousands of live items, not a single featured product.
  • Three ways in. Keyword search, category browse, or paste any product, search, category, or specials link and pagination continues forward automatically.
  • Built for schedules. Incremental mode returns only new and changed products on repeat runs against the same search, and Resume continues one interrupted run without paying twice.
  • Optional export to your apps. Send results into Notion, Linear, Airtable, or any Apify MCP connector alongside the dataset.

Use Cases

  • Price monitoring and repricing: track ROSSMANN's current price, was-price, and discount for your own catalogue over time.
  • Deal and promotion tracking: pull every item in Angebote or the online-only campaign to catch markdowns as they go live.
  • Review and reputation research: analyze rating distributions and individual review text across a brand or product line.
  • Assortment and category research: browse a whole category or brand for range and pricing analysis.

Data You Get

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

FieldExample
productId654321
ean / sku4000000000001
nameSample Repair Shampoo 250ml
brandSample Brand
urlhttps://www.rossmann.de/de/sample-repair-shampoo/p/4000000000001
price / currency2.29, EUR
originalPrice / discountAmount / discountPercent2.99, 0.7, 23.4
promotionLabel / isOnSpecial"Sample promo", true
unitPrice / unitPriceUnit / unitPriceBasisSize9.16, "L", 1
packagingAmount / packagingUnit250, "ml"
rating / reviewCount4.8, 261
badges["Sample badge"]
stockLevelStatus / salesChannel"IN_STOCK", "BOTH"
categoryPath[{"name": "Care & Fragrance", "url": "..."}] (with Fetch full product detail on)
articleNumber654321 (with Fetch full product detail on)
images["https://www.rossmann.de/media-neu/.../sample.png"] (with Fetch full product detail on)
reviews.averageRating / reviews.totalReviewCount4.8, 261
reviews.ratingDistribution[{"rating": 5, "count": 218}, {"rating": 4, "count": 35}, ...]
reviews.items[][{"rating": 5, "title": null, "body": "Sample review text.", "author": "Sample User", "date": "2026-03-23T12:27:40.000+00:00", "isRecommended": true}]
changeType / changedFields"UPDATED", ["price"] (incremental mode only)
firstSeenAt / lastSeenAt"2026-03-01T00:00:00Z" (incremental mode only)

With Fetch full product detail on, each product record also carries a full text description, an ingredients list, legal/warning notes, and available variant options straight from the product page. Every search, category or specials result additionally carries a thumbnail image and alt text, per-item order limits (minOrderAmount, maxOrderAmount, orderIncrement), an isRateable flag, and the raw disruptors array that badges and the special flag are derived from, plus the raw legalNotes array. A pasted product link's record is narrower: only productId, ean, sku, url, name, plus the product-page fields (brand, categoryPath, badges, articleNumber, description, ingredients, legalNotesText, images, variants, price, currency, availability) and reviews; it has no unit price, discount fields, order limits, disruptors or legalNotes.

How to Use

  1. Pick a mode: search (keyword, category, and/or ROSSMANN's own Angebote/online-only specials) or url (paste links).
  2. For search mode, set a keyword and/or category, and narrow it with brand, rating, and sort filters as needed.
  3. Turn on Fetch full product detail and/or Fetch reviews for the extra fields you need, and set Max products total to control run size and cost.
  4. Click Start, then download the dataset as JSON, CSV, or Excel, or read it through the API.

Basic keyword search:

{
"mode": "search",
"searchTerm": "shampoo",
"maxItems": 20
}

Search narrowed by category, brand, rating, and sort order:

{
"mode": "search",
"searchTerm": "shampoo",
"category": "olcat3_4133099",
"brands": ["Nivea"],
"minRating": 4,
"sortBy": "PRICE_ASC",
"maxItems": 30
}

Current deals, with full detail and unlimited review enrichment:

{
"mode": "search",
"specialsCategory": "angebote",
"fetchDetails": true,
"fetchReviews": true,
"maxReviewsPerProduct": 0,
"maxItems": 50
}

Paste product, search, category, or specials links:

{
"mode": "url",
"urls": [
"https://www.rossmann.de/de/sample-product-name/p/4000000000001",
"https://www.rossmann.de/de/search?text=shampoo",
"https://www.rossmann.de/de/angebote/m/angebote"
],
"maxItems": 40
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/rossmann-de-scraper").call(run_input={"mode": "search", "searchTerm": "shampoo", "maxItems": 20})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["name"], product["price"], product["currency"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/rossmann-de-scraper').call({ mode: 'search', searchTerm: 'shampoo', 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.

Max items and max pages

Max products total (maxItems) caps the number of products actually returned, and billed, across every search/category/specials/URL entry in one run; 0 means unlimited. Max pages per search (maxPages) caps how many result pages are walked per entry before moving to the next one; leave it empty for no page limit, in which case a run simply stops once Max products total is reached. A run that stops before the natural end of its result set, whether from either cap, also disables Incremental mode's EXPIRED detection for that run.

Resume and recurring updates

Two distinct features, both off by default:

  • Resume (resumeFromRunId) continues ONE specific interrupted run. Paste the run ID or dataset ID of a previous run and this run returns only products it did not already collect there, no duplicates, no double charges.

  • Incremental mode (incrementalMode) is for scheduling this actor to run the SAME search again and again (for example daily). The actor remembers what it saw last time (keyed on the search/category/specials/URL and detail/review settings, or your own stateKey) and classifies every product as NEW, UPDATED (with changedFields listing what changed; a field simply not observed on one of the two runs is never treated as a change), UNCHANGED (suppressed, not returned or billed, unless emitUnchanged is on), REAPPEARED, or EXPIRED.

    EXPIRED is only produced once a run has scanned the FULL tracked search with no item cap hit and Resume not in effect; a partial scan cannot tell "gone" apart from "not reached yet", so those products simply keep their previous state instead. This also requires emitExpired. REAPPEARED can only happen to a product that an earlier complete scan already marked EXPIRED this way; a product does not turn up as REAPPEARED just because one run happened to miss it. Every incremental-mode record adds changeType, changedFields, firstSeenAt, and lastSeenAt; these fields are absent from a normal (non-incremental) run.

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 product, 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.

  1. Authorize a connector once under Apify > Settings > Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where product pages should be created.
  4. maxNotifyListings caps how many items are written to each connector per run; it never affects the dataset.

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

ParameterTypeDefaultDescription
modestringsearchsearch (keyword/category/specials with filters) or url (paste links).
searchTermstringno default (prefill: nivea duschgel)Free-text keyword for search mode.
categorystringno defaultA category code as shown in a category page URL (.../c/<code>). Narrows a keyword search, or browses a whole category alone.
specialsCategorystring`` (none)angebote (current deals) or online-only (online-only campaign).
brandsarrayno default (prefill: [])Only return products from these exact brand names.
minRatingintegerno defaultOnly products rated at or above this many stars (1-5).
sortBystringRELEVANCERELEVANCE, PRICE_ASC, PRICE_DESC, NEWEST, or RATING.
urlsarrayno default (prefill: a sample search URL)Product, search, category, or specials links for URL mode. Filter fields above are ignored in this mode.
fetchDetailsbooleanfalseAdds the breadcrumb category path, description, ingredients, legal/warning notes, media gallery, variant options, and article number from the product page for search/category/specials results. A pasted product link in URL mode always fetches the product page and is always billed for it, regardless of this toggle.
fetchReviewsbooleantrueFetches each product's full review history.
maxReviewsPerProductinteger20Cap on reviews per product when Fetch reviews is on; 0 = all available reviews.
maxPagesintegerno default (unlimited when empty)Stop after this many result pages per search/category/specials/URL entry.
maxItemsinteger20Hard cap on total products returned across the whole run; 0 = unlimited.
proxyobjectApify Proxy (auto)Connection configuration.
resumeFromRunIdstringno defaultContinue ONE interrupted run: paste its run or dataset ID and already-collected products are skipped, not returned, not charged again.
incrementalModebooleanfalseTurn on for daily/recurring monitoring of the same search; classifies each product against the previous run's state.
stateKeystringno defaultName or deliberately share an incremental-mode monitoring campaign; auto-derived from the search/detail/review settings when left empty.
emitUnchangedbooleanfalseAlso return (and bill for) products classified UNCHANGED.
emitExpiredbooleanfalseAlso return (and bill for) products classified EXPIRED after a complete scan.
mcpConnectorsarrayno defaultOptional: send a summary of each product to apps you authorized under Integrations.
notionParentPageUrlstringno defaultNotion connector only: page under which product pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run.

Output Example

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

{
"productId": "654321",
"ean": "4000000000001",
"sku": "4000000000001",
"name": "Sample Repair Shampoo 250ml",
"brand": "Sample Brand",
"url": "https://www.rossmann.de/de/sample-repair-shampoo/p/4000000000001",
"price": 2.29,
"currency": "EUR",
"originalPrice": 2.99,
"originalPriceCurrency": "EUR",
"discountAmount": 0.7,
"discountPercent": 23.4,
"promotionLabel": "Sample promo",
"isOnSpecial": true,
"badges": ["Sample badge"],
"unitPrice": 9.16,
"unitPriceCurrency": "EUR",
"unitPriceUnit": "L",
"unitPriceBasisSize": 1,
"packagingAmount": 250,
"packagingUnit": "ml",
"rating": 4.8,
"reviewCount": 261,
"stockLevelStatus": "IN_STOCK",
"salesChannel": "BOTH",
"reviews": {
"averageRating": 4.8,
"totalReviewCount": 261,
"ratingDistribution": [
{ "rating": 5, "count": 218 },
{ "rating": 4, "count": 35 },
{ "rating": 3, "count": 6 },
{ "rating": 2, "count": 2 },
{ "rating": 1, "count": 0 }
],
"items": [
{
"rating": 5,
"title": null,
"body": "Sample review text describing the product experience.",
"author": "Sample User",
"date": "2026-03-23T12:27:40.000+00:00",
"isRecommended": true
}
]
}
}

Plan Requirement

The default connection works out of the box; no extra configuration is needed to start a typical run. For very large or sustained runs, selecting the residential proxy group under Connection can give more headroom against occasional connection refusals. Running this actor bills the pay-per-event charges shown on the actor's Pricing tab: one charge per product returned, plus the detail-enrichment surcharge described below when it applies.

FAQ

How much does it cost?

You pay per product returned, plus a one-time-per-product surcharge whenever full detail and/or the review history was actually fetched for it. fetchReviews defaults to on, so most runs already trigger that surcharge unless you turn it off. The Pricing tab shows the current per-event rates. Use Max products total to cap the cost of any run.

This actor collects only publicly available product data. You are responsible for how you use it: follow ROSSMANN's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Prices and product facts are generally not protected, but product photos and review text may be subject to third-party rights.

Can I get only new or changed products on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated products, and unchanged ones are not billed unless you turn on Emit unchanged.

Why did my run return an empty dataset instead of failing?

If ROSSMANN's own access check can't be cleared on any available connection, the run logs the problem and finishes with an empty (or partial) dataset rather than failing outright; check the run log for a connection-related message and try again in a few minutes. Two specific situations do stop the run with a clear failure instead: pasting a Resume run or dataset ID that can't be read, and turning on Resume together with Incremental mode when that same search already has saved incremental state.

No. A pasted product link in URL mode has no listing card to start from, so the product page is always fetched, and always billed for detail-enrichment, regardless of the Fetch full product detail toggle. That toggle only controls whether search, category, and specials results also get an extra detail-page fetch on top of their listing-card data.

What's the difference between Resume and Incremental mode?

Resume continues ONE specific interrupted run: paste its run or dataset ID and already-collected products are skipped, no duplicates, no double charges. Incremental mode is for running the SAME search again and again on a schedule; the actor remembers state itself and classifies every product as new, changed, unchanged, reappeared, or expired. Turning on Resume together with Incremental mode for a search that already has saved incremental state is rejected; use one or the other for that search.

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 product summaries into Notion, Linear, or Airtable.

πŸ”— Want more e-commerce data?

Pair this actor with these related scrapers from the same team:

πŸ›’ HORNBACH Products, Prices & Reviews Scraper
Scrape HORNBACH (hornbach.de) DIY, building & garden products: current + strike-through...
πŸ›’ dm.de
Scrape dm-drogerie markt (dm.de) products: current + strike-through Ausverkauf price with...
πŸ›’ OBI.de Scraper
Scrape OBI (obi.de) DIY/home-improvement products: current + strike-through original...
πŸ₯¦ Kaufland.de Scraper
Scrape Kaufland.de, Germany's hypermarket and online marketplace: keyword/category/brand...
πŸ›’ Thalia.de Scraper
Scrape Thalia.de books, eBooks, audiobooks, toys and stationery. Search by keyword or...
πŸ›’ Douglas Germany Scraper
Scrape Douglas.de beauty and fragrance products by keyword, category, brand, or URL...

πŸ‘‰ Browse all abotapi scrapers

πŸ’¬ 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.