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

2

Total users

1

Monthly active users

a day 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)
categoryUrlStringdouglas.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
brightDataApiKeyStringOptional — use your own Bright Data key instead of the actor's default
proxyConfigurationObjectPresent 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.

VolumeEstimated CUEstimated Cost
100 products~0.02 CU~$0.01
1,000 products~0.15 CU~$0.08
10,000 products~1.5 CU~$0.80

These are Apify platform-cost estimates only. Actual cost also depends on your Apify plan; 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.