druni.es at a glance
druni.es is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes product id, sku, product, brand and category, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 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
- $2.00 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 22 options
Scrape Druni beauty, cosmetics and perfume products. Search by keyword, category, Ofertas Flash deals or paste product and listing URLs. Extract prices, original prices, discounts, images, product details, and format or colour variants with individual prices and availability.
What druni.es can do
- Was-price and discount, structured, not scraped from a badge. Search, category, and Ofertas Flash listings return the current price alongside the strike-through original price, plus the computed discount amount and percentage, whenever a product is marked down.
- Ofertas Flash, first class. A specialsOnly toggle keeps only currently marked-down products, the site's real markdown signal, not a guessed category. With no keyword or category set, this browses Druni's own live Ofertas Flash feed directly; with a keyword or category, it filters that search down to the marked-down items within it.
- Format and colour variants. Perfumes, creams and similar products return every size (for example 20ML/30ML/50ML/100ML) or shade as its own variant, each with its own price and availability, plus a computed unit price normalised to 100 ml/g where the pack size is a single unambiguous value.
- Reviews straight from the product page. Overall rating, review count, and the product's own most recent reviews (author, date, rating, body), not a third-party review vendor.
- Two ways in. Keyword or category search with real site filters (brand, price range, Ofertas Flash, sort), or paste any product or listing link and continue pagination automatically.
- Resume and recurring updates. Continue one interrupted run without paying twice, or turn on Incremental mode to get only new and changed products on a scheduled re-run of the same search.
Choose what to collect
These inputs let you configure druni.es - Prices, Ofertas Flash, Variants & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | 'search' finds products by keyword, by a real druni.es category facet (e.g. 'Fragancias Femeninas'), and/or the site's own Ofertas Flash deals, with real site filters. 'url' scrapes any product, category, or Ofertas Flash listing page URL you paste, walking pagination forward automatically. |
searchTermstring | Free-text keyword, e.g. 'perfume mujer' or 'crema hidratante'. Leave empty and use Category and/or Ofertas Flash only below to browse without a keyword. |
categorystring | A real druni.es catalog category, exactly as the site's own filter shows it, e.g. 'Fragancias Femeninas', 'Cosmética Corporal', 'Maquillaje'. Combines with the keyword above, or browse a whole category by leaving the keyword empty. |
sortBystring | druni.es's own sort order, verified live to reorder the full server-side result set (so it stays correct across pagination, not just within one fetched page). |
urlsarray | Paste one or more druni.es product pages, category listing pages, or the Ofertas Flash page. Pagination continues forward automatically from any ?p= already in the URL. Keyword, Category and Sort order above are ignored in this mode; Ofertas Flash only, Brands and the price limits still narrow the pasted pages. Untouched, URL mode scrapes one example per supported shape (Ofertas Flash, category, sub-category, paginated, sorted, product page, brands index, bare-host form). Native catalogsearch/result/?q= links are mapped to the site's own search. |
specialsOnlyboolean | druni.es's real, queryable discount taxonomy is its 'Ofertas Flash' feed -- verified live. The site's separate 'Promociones' nav entry is an editorial content hub with no product listing behind it, so it is intentionally not exposed here. Turning this on with no keyword/category browses the whole Ofertas Flash feed; combined with a keyword/category, it narrows those results to only the items currently marked down, each carrying the site's own strike-through original price and discount. In URL mode, it narrows a pasted category listing page to only the marked-down items; it is skipped as redundant when the pasted URL is the Ofertas Flash feed itself (already only specials), and it has no effect on a pasted product URL. |
brandsarray | Only return products from these brands, e.g. 'NIVEA', 'OPI', 'DOLCE & GABBANA'. Match the exact brand name as shown on the site. Leave empty for all brands. |
Show 15 more inputs
| Input | What it controls |
|---|---|
minPricenumber | Only return products priced at or above this amount, in euros. |
maxPricenumber | Only return products priced at or below this amount, in euros. |
fetchDetailsboolean | Adds the full breadcrumb category path, complete description, image gallery, and every format/color variant (each with its own price, availability, and a computed unit price per 100 ml/g where the pack size is a single unambiguous value) from the product page. Current price, was-price/discount and card image are already included without this toggle. |
fetchReviewsboolean | Fetch the product's own reviews (not a third-party vendor): overall rating, total review count, and the page's most recent individual reviews (rating, body, author, date) -- druni.es itself only ever surfaces up to its 10 most recent reviews per product; the rating and total count reflect the full history. Products with no reviews simply return an empty list. A page with no readable product data is skipped with a warning and not charged. |
maxReviewsPerProductinteger | Cap on reviews fetched per product when 'Fetch reviews' is on, up to the site's own review page limit (druni.es shows about 10 per product, so a higher cap never returns more than the site exposes). Maximum 1000. |
maxPagesinteger | Stop after this many result pages per search/category/URL entry. 0 or empty = unlimited (walk every page) -- the run then stops at Max products total. |
maxItemsinteger | Hard cap on total products returned across every search/category/URL entry. 0 = unlimited (then only bounded by Max pages per search, when that is set). |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs return only NEW, UPDATED and REAPPEARED products by default. Turn on "Emit unchanged products" or "Emit expired products" only when you also want those products returned (and billed). State is kept separately per search/category/Ofertas Flash/URL setup and per Fetch full product detail/Fetch reviews toggle; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. 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/Ofertas Flash/URL and Fetch full product detail/Fetch reviews settings -- different searches then never mix state with each other. |
emitUnchangedboolean | Off 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. |
emitExpiredboolean | Off 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/URL set -- not when Max products/Max pages capped it, or when Resume from a previous run was used. This returns -- and bills -- extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Output field names that should NOT make a product count as UPDATED, even when they changed. Nothing is ignored by default (two live fetches of the same products were field-identical). Matches a field name at any nesting depth, for example price inside variants. Ignored fields are still returned in the output. |
mcpConnectorsarray | Optionally 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). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
productIdProduct ID (text)skuSKU (text)nameProduct (text)brandBrand (text)categoryCategory (text)pricePrice (number)currencyCurrency (text)originalPriceOriginal price (number)discountPercentDiscount % (number)isOnSpecialOn Ofertas Flash (boolean)ratingRating (number)reviewCountReviews (number)Show 15 more fields
onlineAvailableAvailable (boolean)urlURL (link)imageImage (image)eanEAN / GTIN (text)outOfStockOut of stock (boolean)productUrlProduct URL (link)lowestPriceLowest price (min variant) (number)scrapedAtScraped at (date)imagesImages (array)changeTypeChange type (incremental mode) (text)changedFieldsChanged fields (incremental mode) (array)firstSeenAtFirst seen at (incremental mode) (date)lastSeenAtLast seen at (incremental mode) (date)variantsVariant (object)reviewsReview (rating, body, author, date) (object)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"productId": "845210",
"sku": "845210",
"name": "Sample Hydrating Night Cream",
"brand": "SAMPLE BRAND CARE",
"category": "Cosmética Corporal",
"url": "https://www.druni.es/sample-hydrating-night-cream-sample-brand-care",
"price": 18.75,
"currency": "EUR",
"originalPrice": 24.99,
"discountAmount": 6.24,
"discountPercent": 25,
"isOnSpecial": true,
"onlineAvailable": true,
"image": "https://www.druni.es/media/catalog/product/sample/sample-night-cream.jpg",
"categoryPath": [
"Druni",
"Cosmética",
"Cuidado Facial",
"Cosmética Corporal"
],
"description": "Sample product description as shown on the site.",
"variants": [
{
"sku": "845211",
"name": "Sample Hydrating Night Cream 50G",
"size": "50G",
"price": 18.75,
"currency": "EUR",
"onlineAvailable": true,
"unitPrice": 37.5,
"unitPriceBasis": "100 g"
},
{
"sku": "845212",
"name": "Sample Hydrating Night Cream 100G",
"size": "100G",
"price": 29.9,
"currency": "EUR",
"onlineAvailable": false,
"unitPrice": 29.9,
"unitPriceBasis": "100 g"
}
],
"rating": 4.4,
"reviewCount": 57,
"reviews": {
"averageRating": 4.4,
"totalReviewCount": 57,
"items": [
{
"rating": 4,
"body": "Sample review text.",
"author": "Usuario verificado",
"date": "2026-03-18"
}
]
}
}Ways to use this data
- Price and discount monitoring: track Ofertas Flash markdowns and was-price changes on the products or categories you care about, and get alerted only when something actually changes.
- Catalogue and marketplace enrichment: pull structured brand, category, format, and pricing data to enrich a retailer or marketplace listing.
- Review and reputation research: collect rating and review trends for personal-care products across brands and categories.
- Competitive and market research: compare pricing, discount depth, and pack-size economics (unit price normalised to 100 ml/g) across brands.
- Deal-hunting tools and bots: build a feed of currently discounted products straight from Druni's own Ofertas Flash taxonomy.
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 druni.es return?
The documented output for druni.es includes product id, sku, product, brand, category, price, currency and original price. Availability of each field depends on the source page and the selected mode.
How much does druni.es cost?
It costs $2.00 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 by default, and unchanged ones are not billed. A product only comes back as REAPPEARED once an earlier run, with Emit expired products on, fully scanned that search and recorded the product as gone; without that step first, a product that disappears and returns simply reads as UPDATED or UNCHANGED.
Why did my run fail instead of returning an empty dataset?
If the connection is refused for the whole run, the run stops with a clear message so "no products matched" is never confused with "nothing could be read". Run it again in a few minutes. If only some pages could not be read, you still get what was found.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
