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

1

Total users

0

Monthly active users

3 days ago

Last modified

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

FieldExample value
productId / sku / ean123456, 4000000000000
nameSample Repair Shampoo
brandSample Brand
urlhttps://www.rossmann.de/de/sample-product-name/p/4000000000000
price / currency2.29, EUR
originalPrice / discountAmount / discountPercent2.99, 0.70, 23.4
unitPrice / unitPriceCurrency / unitPriceUnit / unitPriceBasisSize9.16, EUR, L, 1
packagingAmount / packagingUnit250, ml
rating / reviewCount4.8, 261
isOnSpecial / promotionLabel / badgestrue, Sample promo, ["Sample badge"]
stockLevelStatus / salesChannelIN_STOCK, BOTH
categoryPath[{"name": "Care & Fragrance", "url": "..."}, {"name": "Hair Care", "url": "..."}]
articleNumber154095
description / ingredients / legalNotesTextfull text fields
images["https://www.rossmann.de/media-neu/.../sample.png"]
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}]

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

ParameterTypeDefaultDescription
modestringsearchsearch (keyword/category/specials with filters) or url (paste links).
searchTermstring-Free-text keyword for search mode.
categorystring-A category code as shown in a category page link. Narrows a keyword search or browses a whole category alone.
specialsCategorystring`` (none)angebote (current deals) or online-only (online-only campaign).
brandsarray[]Only these brands.
minRatinginteger-Only products rated at or above this many stars (1-5).
sortBystringRELEVANCERELEVANCE, PRICE_ASC, PRICE_DESC, NEWEST, RATING.
urlsarraysample URLProduct, search, category, or specials links for URL mode.
fetchDetailsbooleanfalseAdds full breadcrumb path, description, ingredients, legal/warning notes, media gallery, and article number.
fetchReviewsbooleantrueFetches each product's full review history.
maxReviewsPerProductinteger20Cap on reviews per product; 0 = all.
maxPagesintegerunlimitedCap on result pages per search/URL entry.
maxItemsinteger20Cap on total products; 0 = unlimited.
proxyobjectApify defaultConnection configuration.
resumeFromRunIdstring-Continue ONE interrupted run: paste a previous run ID or dataset ID, and already-collected products are skipped (not returned, not charged again).
incrementalModebooleanfalseTurn on for daily/recurring monitoring of the same search. Returns only NEW/UPDATED/REAPPEARED products by default; the actor remembers the previous run itself.
stateKeystring-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.
emitUnchangedbooleanfalseIncremental mode only. Also return (and bill for) products that did not change, marked UNCHANGED.
emitExpiredbooleanfalseIncremental mode only. Also return (and bill for) products no longer found after a complete scan, marked EXPIRED.
mcpConnectorsarray[]Optional MCP connectors to also receive results.
notionParentPageUrlstring-Required only when a Notion connector is selected.
maxNotifyListingsinteger50Cap 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 own stateKey) and classifies every product:

    • NEW -- not seen before.
    • UPDATED -- a real field value changed since last time (changedFields lists which). A field that was simply not observed on one of the two runs (null on one side) is never treated as a change.
    • UNCHANGED -- nothing changed. Suppressed (not returned, not billed) unless emitUnchanged is on.
    • REAPPEARED -- back after previously being marked EXPIRED.
    • 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". Requires emitExpired.

    Every incremental-mode record adds changeType, changedFields, firstSeenAt, and lastSeenAt. 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.