ROSSMANN.de Scraper - Prices, Reviews & Specials
Pricing
from $1.00 / 1,000 product results
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
ROSSMANN Product Scraper
Pull rich product data from ROSSMANN (rossmann.de), the German drugstore retailer. Search by keyword, category, or the site's own current deals and online-only campaign listings, or paste product, search, category, or specials links directly. Every record includes current price, the manufacturer's original price with computed discount when a product is marked down, per-unit pricing (per litre, per kilogram, per piece) alongside the pack size, and a complete customer review history with a full rating breakdown.
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. Every product returns its per-litre, per-kilogram, or per-piece price alongside the pack size, exactly as the site shows it -- with the unit clearly separated from the package size so the two are never confused.
- Full review history. Overall rating, review count, a full 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/specials link and continue pagination automatically.
- Optional export to your apps. Send results into Notion, Linear, Airtable, or any Apify MCP connector alongside the dataset.
Data You Get
| Field | Example value |
|---|---|
| productId / sku / ean | 123456, 4000000000000 |
| name | Sample Repair Shampoo |
| brand | Sample Brand |
| url | https://www.rossmann.de/de/sample-product-name/p/4000000000000 |
| price / currency | 2.29, EUR |
| originalPrice / discountAmount / discountPercent | 2.99, 0.70, 23.4 |
| unitPrice / unitPriceCurrency / unitPriceUnit / unitPriceBasisSize | 9.16, EUR, L, 1 |
| packagingAmount / packagingUnit | 250, ml |
| rating / reviewCount | 4.8, 261 |
| isOnSpecial / promotionLabel / badges | true, Sample promo, ["Sample badge"] |
| stockLevelStatus / salesChannel | IN_STOCK, BOTH |
| categoryPath | [{"name": "Care & Fragrance", "url": "..."}, {"name": "Hair Care", "url": "..."}] |
| articleNumber | 154095 |
| description / ingredients / legalNotesText | full text fields |
| images | ["https://www.rossmann.de/media-neu/.../sample.png"] |
| reviews.averageRating / reviews.totalReviewCount | 4.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}] |
Sample shape: values above are illustrative placeholders, not from a live product.
How to Use
Basic keyword search
{"mode": "search","searchTerm": "shampoo","maxItems": 20}
Search narrowed by category, brand and rating
{"mode": "search","searchTerm": "shampoo","category": "olcat3_4133099","brands": ["Nivea"],"minRating": 4,"sortBy": "PRICE_ASC","maxItems": 30}
Current deals, with full detail and 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/4000000000000","https://www.rossmann.de/de/search?text=shampoo","https://www.rossmann.de/de/angebote/m/angebote"],"maxItems": 40}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword/category/specials with filters) or url (paste links). |
searchTerm | string | - | Free-text keyword for search mode. |
category | string | - | A category code as shown in a category page link. Narrows a keyword search or browses a whole category alone. |
specialsCategory | string | `` (none) | angebote (current deals) or online-only (online-only campaign). |
brands | array | [] | Only these brands. |
minRating | integer | - | Only products rated at or above this many stars (1-5). |
sortBy | string | RELEVANCE | RELEVANCE, PRICE_ASC, PRICE_DESC, NEWEST, RATING. |
urls | array | sample URL | Product, search, category, or specials links for URL mode. |
fetchDetails | boolean | false | Adds full breadcrumb path, description, ingredients, legal/warning notes, media gallery, and article number. |
fetchReviews | boolean | true | Fetches each product's full review history. |
maxReviewsPerProduct | integer | 20 | Cap on reviews per product; 0 = all. |
maxPages | integer | unlimited | Cap on result pages per search/URL entry. |
maxItems | integer | 20 | Cap on total products; 0 = unlimited. |
proxy | object | Apify default | Connection configuration. |
resumeFromRunId | string | - | Continue ONE interrupted run: paste a previous run ID or dataset ID, and already-collected products are skipped (not returned, not charged again). |
incrementalMode | boolean | false | Turn on for daily/recurring monitoring of the same search. Returns only NEW/UPDATED/REAPPEARED products by default; the actor remembers the previous run itself. |
stateKey | string | - | Incremental mode only. Name a monitoring campaign to keep its state stable; leave empty to derive one automatically from the search/category/specials/URL and detail/review settings. |
emitUnchanged | boolean | false | Incremental mode only. Also return (and bill for) products that did not change, marked UNCHANGED. |
emitExpired | boolean | false | Incremental mode only. Also return (and bill for) products no longer found after a complete scan, marked EXPIRED. |
mcpConnectors | array | [] | Optional MCP connectors to also receive results. |
notionParentPageUrl | string | - | Required only when a Notion connector is selected. |
maxNotifyListings | integer | 50 | Cap on items sent to each connector. |
Resume & recurring updates
Two distinct features, both off by default so an ordinary run's output is unchanged:
-
Resume (
resumeFromRunId) continues ONE specific interrupted crawl. 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 (e.g. daily). The actor remembers what it saw last time (keyed on the search/category/specials/ URL and detail/review settings, or your ownstateKey) and classifies every product:NEW-- not seen before.UPDATED-- a real field value changed since last time (changedFieldslists which). A field that was simply not observed on one of the two runs (nullon one side) is never treated as a change.UNCHANGED-- nothing changed. Suppressed (not returned, not billed) unlessemitUnchangedis on.REAPPEARED-- back after previously being markedEXPIRED.EXPIRED-- was tracked but is no longer found. Only produced once a run has scanned the FULL tracked search with no item cap hit and no Resume in effect; otherwise the previous state for those products is simply kept, since a partial scan can't tell "gone" apart from "not reached yet". RequiresemitExpired.
Every incremental-mode record adds
changeType,changedFields,firstSeenAt, andlastSeenAt. These fields are absent in a normal (non-incremental) run.
Output Example
{"productId": "154095","sku": "4000000000000","ean": "4000000000000","name": "Sample Repair Shampoo","brand": "Sample Brand","url": "https://www.rossmann.de/de/sample-product-name/p/4000000000000","price": 2.29,"currency": "EUR","originalPrice": null,"discountAmount": null,"discountPercent": null,"unitPrice": 9.16,"unitPriceCurrency": "EUR","unitPriceUnit": "L","unitPriceBasisSize": 1,"packagingAmount": 250,"packagingUnit": "ml","rating": 4.8,"reviewCount": 261,"isOnSpecial": false,"badges": [],"stockLevelStatus": "IN_STOCK","categoryPath": [{ "name": "Care & Fragrance", "url": "https://www.rossmann.de/pflege-und-duft/c/olcat1_2325036" },{ "name": "Hair Care", "url": "https://www.rossmann.de/pflege-und-duft/haarpflege/c/olcat2_4133009" }],"images": ["https://www.rossmann.de/media-neu/sample/sample.png"],"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}]}}
Send results into your apps (MCP connectors)
Optionally pipe results into an app you already use through a Model Context Protocol connector. Authorize a connector once under your account's Integrations settings, then select it in the input; for Notion, also set the parent page. Each connector receives a condensed, human-readable summary per item (a title plus key fields), not the full JSON record; the complete data always stays in the dataset.
A Note on Access
Running this actor requires an active account with default proxy access, which is included on every plan. No further configuration is needed for typical use.