ROSSMANN.de Scraper icon

ROSSMANN.de Scraper

Scrape ROSSMANN (rossmann.de) drugstore products: current + original strike-through price with discount, per-unit pricing (per 100ml/kg/piece), brand,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

ROSSMANN.de Scraper at a glance

ROSSMANN.de Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes article no., ean, product, brand and change type (incremental mode), which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce, Developer Tools, Automation
Region
Europe
Pricing
$1.80 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
29 options

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.

What ROSSMANN.de Scraper can do

  • 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.
  • Review history. Overall rating, review count, a complete 1 to 5 star rating breakdown, and individual reviews (20 per product by default, up to 1000 with Max reviews per product) 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.

Choose what to collect

These inputs let you configure ROSSMANN.de Scraper - Prices, Reviews & Specials. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · required'search' finds products by keyword, category, and/or the site's own Angebote/online-only specials, with real site filters. 'url' scrapes any product, search-result, category, or specials-listing page URL you paste, walking pagination forward automatically.

Choices: search, url

searchTermstringFree-text keyword, e.g. 'shampoo' or 'zahnpasta'. Combine with Category below to narrow a keyword search, or leave empty and set only Category or Specials category to browse a whole listing.
categorystringA ROSSMANN category: the code from a category page URL (olcat...), the category page URL itself, or the category name as shown in the site navigation (e.g. 'Pflege & Duft'). Narrows a keyword search, or browses the whole category when Search keyword is left empty. A name that is not found in the navigation stops the run with a clear error.
specialsCategorystringBrowse the site's own promotional listings instead of a keyword/category search: 'Angebote' (current weekly deals) or the online-only campaign. Leave as 'None' for a regular keyword/category search.

Choices: , angebote, online-only

brandsarrayOnly return products from these brands, e.g. 'Nivea', 'Balea', 'Isana'. Match the exact brand name as shown on the site. Leave empty for all brands.
minRatingintegerOnly return products rated at or above this many stars, 1-5.
sortBystringOrder of the returned results.

Choices: RELEVANCE, PRICE_ASC, PRICE_DESC, NEWEST, RATING

Show 22 more inputs
More input fields
InputWhat it controls
urlsarrayPaste ROSSMANN links: product pages (.../p/), keyword or EAN search pages (/de/search?text=...), category pages (.../c/), or specials listings (/de/angebote/m/). Pagination continues forward from any pageIndex already in the URL. Brand index pages (/de/marken/c/brands) are not supported and are skipped with a warning. Filter fields above are ignored in this mode. If you leave this list untouched, URL mode scrapes the 11 built-in example links (one per URL shape); clear it and add your own links to scrape only those.
fetchDetailsbooleanAdds the full breadcrumb category path, description, ingredients, legal/warning notes, media gallery, sibling variants (colours and similar, when the product has any), and article number from the product detail page. Current price, was-price/discount, unit price and rating are already included without this toggle.
fetchReviewsbooleanFetch each product's reviews, up to Max reviews per product (default 20, at most 1000): overall rating, review count, a full 1-5 rating breakdown, and per-review author/date/rating/title/body. Products with no reviews simply return an empty list.
maxReviewsPerProductintegerCap on reviews fetched per product when 'Fetch reviews' is on. 0 = up to 1000 reviews per product; larger values are also limited to 1000.
maxPagesintegerStop after this many result pages per search/category/specials/URL entry. Leave empty for no page limit -- the run stops at Max products total.
maxItemsintegerHard cap on total products returned across every search/category/specials/URL entry. 0 = unlimited (still bounded by Max pages per search).
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large crawl of products without returning or charging for products already collected there. Use this after an interrupted run, or when continuing a product catalogue pull in another run. For recurring daily/weekly monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. UPDATED means a product's data moved: price, original price, discount, promotion, unit price, stock status, name, brand, images, descriptions, badges or other product fields (Change scope "priceAndStock" narrows this to price and stock only). Ratings, review counts and reviews never make a product UPDATED; they stay in the output. Turn on "Emit unchanged" or "Emit expired" only when you also want those products returned (and billed). State is kept separately for each search/category/specials/URL and detail/review setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search/category/specials/URL and detail/review settings -- different searches then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns -- and bills -- extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search -- not when Max products capped it or when Resume was used. This returns -- and bills -- extra synthetic rows, so leave it off unless you need expiry tracking.
changeScopestringWhich changes make a product UPDATED. "all" (default): any change to price, original price, discount, unit price, stock status, name, brand, images, descriptions, badges and other product data. "priceAndStock": only price, original price, discount, promotion, unit price and stock/availability changes (and variant stock/price); descriptions, images, badges and labels never create an UPDATED row. Ratings and review counts never decide UPDATED in either scope; they stay in the output. Switching scope under an automatic state key starts a fresh baseline; set a State key to keep one.

Choices: all, priceAndStock

compactUpdatesbooleanOff by default. When on, UPDATED and EXPIRED rows contain only identifiers, the current price and stock status and the old/new values of what moved (priceChanges, variantChanges). NEW rows stay full. Reviews and detail data are not repeated on compact rows and are not charged for them.
expireAfterMissedScansintegerWith "Emit expired" on, a product is marked EXPIRED only after it was missing from this many CONSECUTIVE complete scans (default 1). EXPIRED means the product was no longer found in the search results; without opening each product it cannot tell a listing change from a delisting, so use the stock status field for availability.
ignoreFieldsForChangesarrayField names that never make a product UPDATED or appear in changedFields (they stay in the output). Use a dotted path to ignore a key inside a nested list, e.g. variants.label. Ratings, review counts and reviews are already ignored. Leave empty to compare everything.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify -> Settings -> Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.
searchQuerystringAlias of Search term, for users migrating from other ROSSMANN scrapers. Used only when Search term is empty.
categoryUrlstringAlias of Category: a category page link or code. Used only when Category is empty.
maxResultsintegerAlias of Max products total. Used only when that field is not sent.
countrystringOnly 'de' (rossmann.de) is supported; other values stop the run with a clear error.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

productIdArticle No. (text)
eanEAN (text)
nameProduct (text)
brandBrand (text)
changeTypeChange type (incremental mode) (text)
pricePrice (number)
currencyCurrency (text)
originalPriceOriginal price (number)
discountPercentDiscount % (number)
unitPriceUnit price (number)
unitPriceUnitUnit (text)
ratingRating (number)
Show 26 more fields
reviewCountReviews (number)
isOnSpecialOn special (boolean)
stockLevelStatusStock (text)
urlURL (link)
imageImage (image)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
reviewsReviews (rating, count, breakdown, per-review list) (object)
descriptiondescription (text)
ingredientsingredients (text)
legalNotesTextlegalNotesText (text)
categoryPathcategoryPath (array)
articleNumberarticleNumber (text)
imagesimages (array)
variantsvariants (array)
availabilityavailability (text)
salesChannelsalesChannel (text)
packagingAmountpackagingAmount (text)
packagingUnitpackagingUnit (text)
minOrderAmountminOrderAmount (text)
maxOrderAmountmaxOrderAmount (text)
orderIncrementorderIncrement (text)
legalNoteslegalNotes (array)
priceChangesPrice changes (object)
variantChangesVariant changes (object)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "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
      }
    ]
  }
}

Ways to use this data

  • 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.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does ROSSMANN.de Scraper return?

The documented output for ROSSMANN.de Scraper includes article no., ean, product, brand, change type (incremental mode), price, currency and original price. Availability of each field depends on the source page and the selected mode.

How much does ROSSMANN.de Scraper cost?

It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

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?

Only when the pages loaded normally and nothing matched your search, category or filters: that is a genuinely empty result and the run succeeds with an empty dataset. A blocked or unreadable connection never ends as an empty success; it fails with one of the messages above. Two other situations also stop the run: pasting a Resume run or dataset ID that cannot be read, and turning on Resume together with Incremental mode when that same search already has saved incremental state.

Does "Fetch full product detail" apply to a pasted product link?

No. A pasted product link is first looked up by its article number in the site's search to get the listing card (price, stock and so on), at the cost of one extra search request per link, and the product page is then always fetched, whatever the Fetch full product detail toggle says. The detail-enrichment charge applies once to that product when its product page was read or its reviews were fetched. 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.

Ready to collect with ROSSMANN.de Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.