Douglas.de Scraper — German Perfumery & Beauty Products avatar

Douglas.de Scraper — German Perfumery & Beauty Products

Pricing

from $1.20 / 1,000 result scrapeds

Go to Apify Store
Douglas.de Scraper — German Perfumery & Beauty Products

Douglas.de Scraper — German Perfumery & Beauty Products

Scrape products, prices, ratings, and availability from douglas.de, Germany's #1 perfumery chain. Perfume, skincare, make-up, and health & beauty data by keyword or category.

Pricing

from $1.20 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Studio Amba

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 days ago

Last modified

Categories

Share

Douglas.de Scraper

Scrape products, prices, ratings, and availability from douglas.de — Germany's #1 perfumery chain, covering perfume, skincare, make-up, and health & beauty.

What is Douglas Scraper?

Douglas is Germany's largest perfumery and beauty retailer, with hundreds of stores and a catalogue spanning fine fragrance, skincare, make-up, hair care, and personal care from both luxury brands (Chanel, Dior, YSL, Armani) and Douglas's own exclusive lines. This scraper reads the retailer's own server-rendered product data — no HTML guesswork, no brittle CSS selectors — for fast, structured extraction.

If you need reliable perfumery and beauty product data at scale — competitive pricing, brand catalogue tracking, or feeding a comparison platform — this actor delivers clean, structured results.

Common use cases:

  • Fragrance market research — Track pricing, discounts, and new launches across Douglas's perfume catalogue
  • Price benchmarking — Compare Douglas against dm, Rossmann, Kruidvat, and other drugstore/beauty retailers in our fleet
  • Brand monitoring — Watch how a specific perfume house or skincare brand is priced and merchandised on Douglas
  • Product catalogue enrichment — Feed Douglas product data (brand, price, rating, images) into your own comparison or affinity tool
  • Beauty & fragrance analytics — Study category trends in the German perfumery market

What data does Douglas Scraper extract?

  • Product name & brand — Including the brand line/collection where Douglas shows one (e.g. "Chanel Coco Mademoiselle")
  • Price & discount — Current price, original price, and discount percentage on promoted items
  • Price per unit — Normalized per-liter/per-kg price, as Douglas is legally required to show
  • Customer ratings — Average rating and total review count
  • Stock status — In stock / out of stock (nullable — never guessed when the source doesn't say)
  • Product identifiers — Variant SKU and base product ID
  • Category — Category or product-type name (e.g. "Eau de Parfum")
  • Product images — Direct image URLs

How to scrape Douglas.de data

The scraper offers two approaches:

Search by keyword

Enter any German search term — "parfum", "creme", "shampoo", "mascara", or a brand name like "Chanel". The actor queries Douglas's own search endpoint, the same one the website's search bar uses.

Browse by category or brand URL

Paste a douglas.de category or brand URL, e.g. https://www.douglas.de/de/b/yves-saint-laurent/parfum/damenduefte/b0611_0101, to scrape everything listed there instead of searching.

Input parameters

FieldTypeDefaultDescription
searchQueryStringparfumSearch keyword (ignored if categoryUrl is set). An EAN, Douglas item number or douglas.de URL returns that one product.
categoryUrlString—douglas.de category or brand URL to browse
maxResultsInteger100Maximum products to return (hard-capped at 5,000)
inStockOnlyBooleanfalseOff by default. When on, only returns products confirmed in stock
requestDelaySecsInteger0Minimum pause between requests; 0 = full speed with automatic adaptive backoff
brightDataApiKeyString—Optional — use your own Bright Data key instead of the actor's default
proxyConfigurationObject—Present for schema compatibility; actual fetches run through Bright Data (see below)

Output

{
"name": "Eau de Parfum - 60 ml",
"brand": "DIOR Sauvage",
"price": 68.99,
"originalPrice": 79.99,
"currency": "EUR",
"discount": "-14%",
"pricePerUnit": "1.149,83 €/l",
"sku": "995604",
"productId": "3001042193",
"inStock": true,
"rating": 4.7,
"reviewCount": 1021,
"category": "Eau de Parfum",
"imageUrl": "https://media.douglas.de/medias/cpPyKK995604-0-dgl-DE.jpg",
"url": "https://www.douglas.de/de/p/3001042193?variant=995604",
"scrapedAt": "2026-08-22T09:20:35.589Z"
}

Why Bright Data, not a plain proxy?

douglas.de runs behind Akamai Bot Manager: a plain HTTP request gets an edge-level "Access Denied" before any challenge page is even served, and a bare headless browser hits the same wall. This actor routes requests through Bright Data's Web Unlocker, which clears the Akamai layer server-side and returns the fully rendered listing HTML. One request returns ~48-56 products, so the cost per result stays low — a few tenths of a cent per product.

How much does it cost?

Each listing page pulls roughly 48-56 products in one Bright Data request. Compute is minimal — no browser rendering happens inside the actor itself. It costs $0.02 per run plus $0.002 per product scraped.

VolumeEstimated Cost
100 products~$0.22
1,000 products~$2.02
10,000 products~$20.02

This actor's own Bright Data usage is covered by the default access included with the run. Usage cost only settles after the run reports SUCCEEDED — a run that fails or is aborted mid-way is not charged for items it never wrote.

Can I integrate?

Export your data as JSON, CSV, Excel, or XML, or pipe it directly into your existing tools:

  • Google Sheets — Automatically push product data to a shared spreadsheet
  • Webhooks — Trigger a custom URL when the scrape completes
  • Zapier / Make / n8n — Connect to thousands of apps without writing code
  • Amazon S3 / Google Cloud — Dump large datasets straight to cloud storage

Can I use it as an API?

Yes. Integrate Douglas product data directly into your applications.

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("studio-amba/douglas-de-scraper").call(run_input={
"searchQuery": "parfum",
"maxResults": 200,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['brand']} — {item['name']}: EUR {item['price']}")

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('studio-amba/douglas-de-scraper').call({
searchQuery: 'parfum',
maxResults: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
console.log(`${item.brand} — ${item.name}: EUR ${item.price}`);
});

FAQ

Does Douglas sell only perfume? No. Perfume is Douglas's signature category, but the catalogue also covers skincare, make-up, hair care, body care, and men's grooming from both name brands and Douglas's own labels.

Why is inStock sometimes null instead of true or false? When Douglas doesn't publish a clear stock status for a listing, the field is left null rather than guessed. Treat null as "unknown", not as "out of stock".

How do I get every variant of a product (different sizes)? Each size/shade variant is returned as its own row, with a shared productId (the base product) and a unique sku (the variant). Group by productId to see all variants of one product.

Can I filter by brand? There's no dedicated brand filter input, but searching for a brand name (e.g. "Chanel", "Rituals") works well since Douglas's search matches brand names directly. You can also use categoryUrl with a brand page like /de/b/chanel/b0007.

How frequently can I run the scraper? As often as you need for price-monitoring use cases. Daily or weekly runs are common.

Tips for effective Douglas data extraction

  1. Use category URLs for a stable, bounded set — a brand or sub-category page (e.g. all Yves Saint Laurent women's fragrances) gives a fixed, predictable product list, unlike a broad keyword search.
  2. Pair with dm-scraper and Rossmann Scraper — Douglas, dm, and Rossmann together cover most of the German drugstore and beauty retail landscape; join on brand and product name for cross-retailer pricing.
  3. Watch the discount field for promo tracking — Douglas runs frequent percentage-off promotions, especially on fragrance.
  4. Use pricePerUnit for fair size comparison — perfume and skincare come in many pack sizes; the per-unit price normalizes that.

Limitations

  • Search result ordering can shift slightly between requests (site-side relevance ranking), so very large maxResults pulls on a broad keyword may return fewer unique products than requested — the actor de-duplicates automatically and stops cleanly rather than returning repeats. Category and brand URLs do not have this issue.
  • No ingredient lists or full product descriptions — this actor extracts commerce fields (name, brand, price, stock, rating), not marketing copy.
  • Germany (douglas.de) only. Douglas's other European storefronts use the same platform family but are out of scope for this actor.
  • No purchase history, loyalty pricing, or store-specific stock data — this reads the public online catalogue only.

Other pharmacy & drugstore scrapers

Need drugstore, pharmacy, or beauty data from more sources? Explore our full collection:

Your feedback

Found a bug? Need a new feature? Want help building a pipeline on top of Douglas data? Open an issue or contact us on Apify. We read every message and ship fixes fast.