Mueller.de Scraper — Drugstore Products & Prices
Pricing
from $1.20 / 1,000 result scrapeds
Mueller.de Scraper — Drugstore Products & Prices
Scrape products, prices, brands, EAN codes and availability from mueller.de — a large German drugstore chain (cosmetics, household goods, toys, media). Search by keyword. No login needed.
Pricing
from $1.20 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Scrape products, prices, brands, EAN codes and availability from mueller.de, a large German drugstore chain covering cosmetics, personal care, household goods, toys, media and stationery. Search by keyword and get clean, structured JSON. No login required.
Built for price monitoring, catalog research, and competitive analysis in the German drugstore/retail space — the same category as our rossmann-scraper, dm-scraper and kruidvat-scraper actors.
What it does
Mueller.de is a Next.js storefront that runs a Fastly JavaScript bot-challenge on every dynamic page (search results, product pages) — a plain HTTP request gets a 403 Client Challenge response even when replaying cookies from a prior visit. This actor drives a real headless browser (Playwright) that solves the challenge like a normal visitor, then reads two data sources per product:
- Search-results tiles — name, current price, strike-through (UVP) price, price-per-unit, capacity, delivery/availability badges, and the internal product ID.
- Product detail page — a full
schema.org/ProductJSON-LD block embedded in every product page, which carries the brand, EAN/GTIN barcode, internal SKU, and the full product description that the search tile doesn't expose.
The actor merges both sources into one record per product.
- Keyword search — pass any search term (
shampoo,creme,zahnpasta,duschgel) and get matching products. - Automatic pagination — walks Mueller's search-results pages (fixed at 60 results/page) until it hits your
maxResultsor runs out of matches. - Deduplication — products are deduplicated by internal product ID within a run.
- Migration-safe — because this actor does two requests per product (listing + detail hop), it persists progress via
Actor.useStateso a very large run resumes cleanly instead of restarting from scratch if Apify migrates the run between hosts.
Output
Each product is one record. Real examples from a live test run (query shampoo):
{"name": "Elvital Shampoo Dream Length","brand": "L'ORÉAL PARIS","price": 3.99,"currency": "EUR","url": "https://www.mueller.de/p/elvital-shampoo-dream-length-IPN3074311/","scrapedAt": "2026-07-27T10:03:11.000Z","originalPrice": 4.49,"pricePerUnit": "13,30 € / 1 l","discount": "-11%","ean": "3600524138530","sku": "3074311","productId": "3074311","inStock": true,"deliveryInfo": "Online verfügbar, In die Filiale lieferbar","imageUrl": "https://images.prod.ecom.mueller.de/_next/image?url=https%3A%2F%2Fstatic.prod.ecom.mueller.de%2Fproducts%2F3600524138530%2FMarkant_3600524138530_FrontView_3600524138530_5076445.jpg&w=1200&q=75","productDescription": "Das Elvital Dream Length Super Aufbau Shampoo von L'ORÉAL PARIS ist die ideale Reinigung für langes und geschädigtes Haar...","category": "Haarshampoo","categories": ["Drogerie", "Pflege", "Haarpflege", "Haarwäsche", "Haarshampoo"],"language": "de"}
Another example — a children's product without a discount:
{"name": "Bübchen Shampoo & Duschgel 2in1 Bluey","brand": "BÜBCHEN","price": 2.45,"currency": "EUR","url": "https://www.mueller.de/p/buebchen-shampoo-duschgel-2in1-bluey-PPN3147149/","scrapedAt": "2026-07-27T10:03:12.000Z","pricePerUnit": "9,80 € / 1 l","ean": "4065331005212","sku": "3147149","productId": "3147149","inStock": true,"deliveryInfo": "Online verfügbar, In die Filiale lieferbar","imageUrl": "https://images.prod.ecom.mueller.de/_next/image?url=https%3A%2F%2Fstatic.prod.ecom.mueller.de%2Fproducts%2F4065331005212%2F...","productDescription": "Mit Bluey wird Pflege zum Abenteuer! Das Bübchen Shampoo & Duschgel reinigt sanft und pflegt mild...","category": "Waschen & Baden","categories": ["Drogerie", "Kind & Mama", "Babypflege", "Waschen & Baden"],"language": "de"}
Fields
| Field | Description |
|---|---|
name | Product name |
brand | Brand / manufacturer (from the product-page JSON-LD) |
price | Current selling price as a number |
currency | Currency code (EUR) |
url | Full product page URL |
originalPrice | Strike-through UVP price, when the item is discounted |
pricePerUnit | Base price per standard unit, e.g. "13,30 € / 1 l" |
discount | Computed discount percentage (e.g. -11%) |
ean | EAN/GTIN barcode number |
sku | Mueller's internal item number (matches the IPN/PPN suffix in the URL) |
productId | Mueller's internal numeric product ID |
inStock | Whether the product is currently available (online or in-store) |
deliveryInfo | Human-readable availability text, e.g. "Online verfügbar, In die Filiale lieferbar" |
rating | Average customer rating (0–5 scale), when present |
reviewCount | Number of customer reviews, when present |
imageUrl | Primary product image URL |
productDescription | Full product description text |
category | Deepest breadcrumb category name |
categories | Full breadcrumb category path |
language | Content language (de) |
scrapedAt | ISO 8601 timestamp of the scrape |
Not every product carries a customer rating — Mueller only shows rating/reviewCount when the product has reviews, so treat those two fields as optional.
How to scrape Mueller data
- Open the actor and set a Search Query (for example
shampoo,creme,zahnpasta,parfum). Leave it empty and it defaults toshampoo. - Set Max Results to the number of products you want.
- Keep the default Proxy Configuration (residential, Germany) — mueller.de runs a JS bot-challenge on every dynamic page, so residential proxies aren't optional here, unlike some sibling drugstore actors.
- Click Start. When the run finishes, download the dataset as JSON, CSV or Excel, or pull it from the API.
Input example
{"searchQuery": "creme","maxResults": 100,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "DE"}}
Input example — quick test run
{"searchQuery": "zahnpasta","maxResults": 5}
Cost estimate
This actor runs on the STANDARD pay-per-result pricing tier. Each product costs two requests under the hood (one search-listing hit shared across up to 60 products, plus one product-detail page per item) and a full browser render on both — expect noticeably more compute per result than a plain-HTTP actor like thomann-de-scraper, since every page has to pass a JS bot-challenge. A 100-result run typically completes in a few minutes.
Common use cases
- Price monitoring — track prices across drugstore categories (cosmetics, personal care, household) over time.
- Catalog research — pull structured data on Mueller's assortment for a category or brand.
- Competitive analysis — compare Mueller's pricing against Rossmann, dm, and Kruidvat.
- Availability tracking — monitor online/in-store availability on specific SKUs.
Limitations
- Covers the German mueller.de storefront (EUR pricing) only.
- Customer ratings aren't present on every product — Mueller only publishes
aggregateRatingfor items with reviews. - Search relevance and result order follow Mueller's own Typesense-backed ranking; the actor doesn't re-rank results.
- Every page (listing and detail) requires a real browser pass through mueller.de's bot-challenge, so this actor is slower and more compute-intensive per result than actors targeting sites without that protection.
FAQ
Does this need a login? No. The actor only reads publicly published product data. No account, password or cookies are required.
Does it use a headless browser?
Yes. mueller.de runs a Fastly JavaScript challenge on every dynamic page — a plain HTTP request is blocked (403 Client Challenge) even with valid cookies. The actor uses Playwright to solve it like a real browser would.
Why is originalPrice sometimes missing?
Most products are listed at their normal price with no strike-through comparison. originalPrice and discount only appear when Mueller shows a markdown on that item.
Why does this cost more per result than other drugstore actors? Every product requires a separate detail-page visit (for brand, EAN, and description) on top of the search listing, and both pages require a full browser pass to clear the site's bot-challenge — more compute than a plain-HTTP scraper.
Is this legal? The actor collects publicly available product and pricing information. You are responsible for using the data in line with mueller.de's terms and applicable law.
Related Scrapers
- Rossmann Scraper — Europe's second-largest drugstore chain (Germany, Poland, Hungary, Turkey)
- dm Scraper — Germany's largest drugstore chain
- Kruidvat Scraper — Benelux drugstore chain
Disclaimer
This actor is an independent tool and is not affiliated with, endorsed by, or connected to Müller Handels GmbH & Co. KG or mueller.de. All product data belongs to its respective owners.