Douglas Germany Scraper - Beauty Products, Prices & Reviews avatar

Douglas Germany Scraper - Beauty Products, Prices & Reviews

Pricing

from $1.50 / 1,000 product results

Go to Apify Store
Douglas Germany Scraper - Beauty Products, Prices & Reviews

Douglas Germany Scraper - Beauty Products, Prices & Reviews

Scrape Douglas.de beauty and fragrance products by keyword, category, brand, or URL. Extract brands, current and original prices, discounts, unit prices, size variants, stock, images, ratings, reviews, ingredients, and specifications.

Pricing

from $1.50 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

3

Monthly active users

13 days ago

Last modified

Share

Douglas DE Beauty & Perfumery Scraper

Scrape products from douglas.de, Douglas, Europe's leading beauty, perfumery and cosmetics retailer (German flagship, EUR pricing). The actor returns rich per-product records: identity, full price with the original/was price and discount, unit price, size variants, availability, image gallery, ratings, reviews, and product detail (ingredients, how-to-use, spec table).

What you get (per product)

FieldExample
titleTOM FORD Soleil Neige Eau de Parfum
brandTOM FORD
id / sku / ean5011956034 / 1269078 / 0888066177962
urlhttps://www.douglas.de/de/p/5011956034?variant=1269078
price{current: 76.99, original: 115.0, currency: "EUR", discountPercent: 33.0}
unitPrice{amount: 769.9, unit: "per 1 l"}
isOnSpecial / wasPrice / savingsAmounttrue / 115.0 / 38.01
availability{code: "AVAILABLE", inStock: true}
variants[{sku, label: "30 ml", price, unitPrice}, ...]
images[{url, alt}, ...]
rating / reviewCount4.8 / 86
ratingBreakdown[{rating: 5, count: 77}, {rating: 4, count: 6}, ...]
reviews[{id, author, date, rating, title, body}, ...]
ingredientsALCOHOL, PARFUM / FRAGRANCE, AQUA / WATER / EAU, ...
howToUseAnwendungshinweise (how to use)
specifications{Duftrichtung: "frisch, blumig", Kopfnote: "Jasmin", ...}
breadcrumbs[{name: "Parfum", url}, ...]

Full-price (non-discounted) products return isOnSpecial: false, wasPrice: null so they are an explicit negative, never a missing key. The same applies to brand: some Douglas listings (marketplace items in particular) carry no brand at all, and those records return brand: null rather than an invented one.

Input modes

Search mode (default)

Keyword search and/or category and brand browse.

{
"mode": "search",
"queries": ["vitamin c serum"],
"category": "01",
"brand": "b0690",
"gender": "FEMALE",
"sortBy": "rating"
}
  • queries: free-text keywords, e.g. "parfum", "dior lipstift".
  • category: a Douglas category code (01 Parfum, 03 Make-up, 1205 Gesichtspflege) or a full category URL like https://www.douglas.de/de/c/parfum/01.
  • brand: a brand display name (Dior) or a brand URL like https://www.douglas.de/de/b/dior/b0690 for an exact filter. A bare brand code (b0690) cannot be resolved to a name and is skipped with a warning rather than risk matching the wrong brand — pass the name or URL instead.
  • gender: any / women / men / unisex. Search mode only, it is sent as a store facet.
  • sortBy: best match, price ascending, price descending, newest first, top rated. Search mode only, a pasted URL is walked in the store's own default order.
  • promoFlags: extra store promotion facets. Search mode only.

URL mode

Paste one or more Douglas URLs. Product URLs return a single rich record; category, brand and search URLs return products up to the configured item and page limits.

Any other Douglas page (a content page, a store page, the home page) is looked up against the store's own category index. If it turns out to be a category after all, that category is scraped and the run log names it. If it matches no category, the URL is named in the log and skipped: it is never quietly replaced with a different department's products, and a run where none of the pasted URLs matched anything fails with that reason instead of returning products nobody asked for.

{
"mode": "url",
"urls": ["https://www.douglas.de/de/c/parfum/01"],
"priceMax": 80,
"specialsOnly": true,
"fetchDetails": true,
"fetchReviews": true
}

Filters (both modes)

priceMin, priceMax and specialsOnly are not search-mode-only. They are applied to every product the scraper collects, so a pasted category, brand or search URL is filtered exactly like a keyword search.

  • priceMin / priceMax: EUR price band. In search mode the band is also sent to the store as a price facet; in URL mode it narrows the products found behind the pasted URL.
  • specialsOnly: keep only products that are currently reduced (see Specials below), in either mode.

The one exception is a pasted product URL: a single product you asked for by URL is always returned, whatever its price and whether or not it is reduced.

Specials and the was/original price

Douglas does not run a dedicated sale or outlet category. A product is on special when its recommended retail price (UVP, "Empfohlener Verkaufspreis") is crossed out and a lower current price is shown. The actor captures both prices on every product:

  • price.original (the crossed-out UVP) and price.discountPercent come straight from the listing data.
  • isOnSpecial, wasPrice, savingsAmount, savingsPercent are derived from those two prices.
  • Turn on specialsOnly to keep only the reduced products. A real discounted product looks like: price.current: 76.99, price.original: 115.0, isOnSpecial: true, wasPrice: 115.0, savingsAmount: 38.01, savingsPercent: 33.0.

Reviews

Turn on fetchReviews to pull the overall rating, the star-rating histogram, the EAN/GTIN, and per-review text (author, date, rating, title, body) for each product. maxReviewsPerProduct caps how many reviews come back (default 20). Reviews come from the retailer's own first-party ratings endpoint, so no third-party host appears in the output. Products with no reviews return an empty reviews list while the rating summary fields stay null.

Product detail

Turn on fetchDetails to open each product page and pull the ingredient list (INCI), the how-to-use text and the full spec table (scent notes, product type, article number, etc.), flattened into specifications. Listing-only runs skip this and are faster and cheaper. Detail and review enrichment open the individual product page, which is a separate, harder route than listing data — on a given run it may return the base product without enrichment; the listing fields themselves (price, variants, gallery, rating) are unaffected.

Limits and cost

  • maxItems: hard cap on the total number of products returned (default 100).
  • maxPages: max pages to walk per query/category/URL (default 0, unlimited). One page holds 48 products.
  • A listing-only run returns fully-attributed products (price, variants, gallery, rating, description). Detail and review enrichment are optional, opt-in toggles.

Proxy

A Germany exit is required, and the default is already set up for it. Changing the preset can make a run return no results.

Send results into your apps (MCP connectors)

Optionally send a condensed summary of each result to Notion, Linear, Airtable or Apify via MCP connectors. Authorize a connector under Apify Settings, Integrations, then select it in mcpConnectors. The full record always stays in the dataset.

MCP connector options

  • mcpConnectors: array of MCP connectors to pipe results to. Select one or more authorized connectors from Notion, Linear, Airtable or Apify. Leave empty to skip exporting results.
  • notionParentPageUrl: URL or ID of the Notion page under which item pages are created. Required if you selected the Notion connector; ignored by other connectors.
  • maxNotifyListings: cap on items written to each connector per run (default 50, max 1000). Does not affect the dataset: all scraped items stay in the dataset regardless of this limit.