Notino Scraper [$2.30/1K💰] | 27 Countries | Reviews avatar

Notino Scraper [$2.30/1K💰] | 27 Countries | Reviews

Pricing

from $2.30 / 1,000 results

Go to Apify Store
Notino Scraper [$2.30/1K💰] | 27 Countries | Reviews

Notino Scraper [$2.30/1K💰] | 27 Countries | Reviews

Scrape Notino's beauty catalog from 27 country shops - products, brands, variants, prices, currency, ratings and customer reviews. Paste a search or brand URL and get the full result set. No browser needed. Built for price monitoring and market research.

Pricing

from $2.30 / 1,000 results

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

Notino Scraper — Beauty & Cosmetics Products, Prices and Reviews Across 27 Country Shops

Extract Notino product catalog data — product names, brands, prices, currency, variants, ratings and full customer reviews — from any of Notino's 27 country shops. Paste a Notino search or brand URL and it walks the entire result set, then enriches every product from Notino's own backend API.

No browser is needed, and no proxy is needed for short runs. Built for beauty price monitoring, MAP compliance, brand tracking, competitor analysis and affiliate catalogs.


Main use cases

  • Beauty price monitoring and MAP compliance — daily runs on the same search URL, diffed on variants[].price per market
  • Multi-market pricing comparison — mix notino.de, notino.pl and notino.co.uk URLs in one run and get EUR, PLN and GBP prices for the same product IDs
  • Brand catalog builds — pull a brand page and get every product, variant, size and price
  • Review collection for sentiment and voice-of-customer analysis — review text, star score and author, de-duplicated across pages
  • Competitor assortment tracking — which SKUs a brand lists in one market but not another
  • Affiliate and aggregator catalog feeds — product URLs, brand, description and images ready for a storefront

Input

FieldTypeRequiredDefaultNotes
searchUrlsarrayno["https://www.notino.co.uk/search/?exps=shampoo"]Main input. Notino search / brand / category URLs, exactly as they appear in your browser. Each URL carries its own country shop, so prices and currency follow the market you link to. URLs from different countries can be mixed in one run.
maxPagesPerSearchUrlintegerno5Result pages to walk per search URL. One page holds 24 products, so 5 ≈ 120 products. 0 = every page (max 500).
sortOptionintegernounsetNotino's sort index used while paginating. Leave empty for the default order.
productUrlsarrayno[]Direct product page URLs. Product IDs are read automatically from the /p-{id} segment.
productIdsarrayno[]Bare numeric IDs (e.g. 16316126). Because a bare ID has no country, these resolve in UK prices.
startUrlsarrayno[]Alias of searchUrls, kept for existing runs. Sitemap URLs are not supported — sitemap entries carry SEO slugs without the /p-{id} the API needs.
includeReviewsbooleannotrueFetch customer reviews into the separate reviews dataset. Reviews are billed as their own pay-per-event, so false gives a catalog-only run.
maxReviewsPerProductintegerno20Cap per product, 0 = none, maximum 500. Reviews are de-duplicated by ID while paging.
maxItemsintegerno100Cap on products per run (maximum 100,000).
proxyobjectnouseApifyProxy: falseStandard Apify proxy picker. Not needed for short runs; enable residential proxy for deep listing walks.

There is no country setting. Each URL you paste identifies its own Notino shop and the Actor follows it, so prices, currency, product URLs and reviews all come from the country you linked to.

Supported country shops

Any of Notino's 27 shops, with or without the www. prefix:

notino.co.uk, notino.de, notino.fr, notino.es, notino.it, notino.pl, notino.cz, notino.sk, notino.at, notino.nl, notino.be, notino.ch, notino.pt, notino.ie, notino.gr, notino.hu, notino.ro, notino.bg, notino.hr, notino.si, notino.ua, notino.se, notino.dk, notino.fi, notino.ee, notino.lv, notino.lt

A URL from any other host is skipped with a warning naming the problem. Note that notino.com is a marketing landing page with no search and no product API, so it cannot be scraped — link a specific country shop instead.


Output

Two datasets, selectable in the Output tab.

Products (default dataset)

FieldTypeDescription
productIdstringNotino product ID
productCodestringNotino master product code (used to fetch reviews)
productNamestringDerived name — brand + variant + URL slug
productUrlstringCanonical product page URL
brandstringBrand name
manufacturerstringManufacturer
countryDomainstringShop the product was found on, e.g. www.notino.de
categoriesarrayCategory labels, in the market's own language
descriptionstringProduct description (HTML)
ratingnumberAverage review rating, 0–5
reviewCountnumberNumber of reviews actually collected for this product
reviewsTruncatedbooleantrue when the product had more reviews than maxReviewsPerProduct allowed
variantsarray{variantId, variantName, variantUrl, price, currency, color}

Customer reviews (reviews dataset)

One row per review, repeating the product context so the dataset is self-contained and joins cleanly on productId or productCode.

FieldTypeDescription
reviewIdnumberNotino review ID
productIdstringProduct the review belongs to
productCodestringNotino master product code
productNamestringProduct name, repeated for convenience
productUrlstringCanonical product page URL
brandstringBrand name
countryDomainstringShop the review was collected on
titlestringReview headline, or null
textstringReview body, or null
scorenumberStar score
authorstringReviewer display name

Example input

{
"searchUrls": [
"https://www.notino.co.uk/search/?exps=shampoo"
],
"maxPagesPerSearchUrl": 5,
"maxItems": 100,
"includeReviews": true,
"maxReviewsPerProduct": 50
}

Multi-market price comparison — one search term, three shops, three currencies:

{
"searchUrls": [
"https://www.notino.de/search/?exps=shampoo",
"https://www.notino.pl/search/?exps=shampoo",
"https://www.notino.co.uk/search/?exps=shampoo"
],
"maxPagesPerSearchUrl": 2,
"includeReviews": false
}

Catalog-only price run (cheapest — no review events):

{
"searchUrls": ["https://www.notino.de/"],
"includeReviews": false,
"maxPagesPerSearchUrl": 10,
"maxItems": 240
}

Example output

Product row:

{
"productId": "16316126",
"productCode": "SWRCRSW_KCOL13",
"productName": "Schwarzkopf Creme Supreme Permanent Hair Dye",
"productUrl": "https://www.notino.co.uk/schwarzkopf/creme-supreme-permanent-hair-dye/",
"brand": "Schwarzkopf",
"manufacturer": "Henkel Consumer Brands",
"countryDomain": "www.notino.co.uk",
"categories": ["Permanent hair colour"],
"description": "<p>Deep black with lasting shine…</p>",
"rating": 4.8,
"reviewCount": 3,
"reviewsTruncated": false,
"variants": [
{
"variantId": "16316117",
"variantName": "Creme Supreme",
"variantUrl": "https://www.notino.co.uk/schwarzkopf/creme-supreme-permanent-hair-dye/p-16316117/",
"price": 7.49,
"currency": "GBP",
"color": null
}
]
}

Review row:

{
"reviewId": 3364088,
"productId": "16316126",
"productCode": "SWRCRSW_KCOL13",
"productName": "Schwarzkopf Creme Supreme Permanent Hair Dye",
"productUrl": "https://www.notino.co.uk/schwarzkopf/creme-supreme-permanent-hair-dye/",
"brand": "Schwarzkopf",
"countryDomain": "www.notino.co.uk",
"title": "Gorgeous hair colour",
"text": "This is a beautiful hair colour, rich and glossy and it lasted three weeks.",
"score": 5,
"author": "Sylvia"
}

Monitor beauty prices and build a 27-market catalog on a schedule

Every Apify Actor is callable over HTTP, so the standard pattern is a recurring run over the same inputs:

  • Daily — same search URL; diff variants[].price to catch price changes and MAP violations
  • Weekly — a brand page; diff the variant list to catch assortment changes
  • Monthly — add another country shop to searchUrls to grow market coverage
  • Wire into your stack — Apify webhooks, Zapier, Make, Google Sheets and 100+ integrations fire on run completion; both datasets export as JSON, CSV, Excel, XML, HTML or RSS

Keep catalog runs and review runs on separate schedules: includeReviews: false is dramatically cheaper, and reviews are the second billed event.


  • Douglas Scraper (ahmed_jasarevic/douglas-scraper) — Europe's largest perfumery chain: products, prices, stock and categories for beauty price monitoring
  • Sephora Scraper (ahmed_jasarevic/sephora-scraper) — US beauty retail catalog, prices and reviews
  • Lookfantastic Scraper (ahmed_jasarevic/lookfantastic-scraper) — premium beauty and hair care products across European markets
  • Perfume Scraper (ahmed_jasarevic/perfume-scraper) — fragrance-specific catalog and price data
  • Idealo Scraper (ahmed_jasarevic/idealo-scraper) — German price-comparison data, useful for cross-checking beauty prices against a wider market

FAQ

Why use this Actor instead of Notino's website or an official API?

Notino does not publish a public developer API for its catalog. This Actor reads the same backend that Notino's own frontend uses, plus the server-rendered result pages — so you get the complete product, variant and review data as JSON, instead of scraping HTML fragments by hand. You also get pagination handled for you, which is where most manual Notino scrapers break.

What are the alternatives?

  • Notino's affiliate/partner program — gives you promoted product feeds for a given market, not the full result set for an arbitrary search term, and not the review archive.
  • A Playwright-based scraper — orders of magnitude more compute, and the data still has to be reconstructed from the page.
  • Douglas / Sephora scrapers — different retailers; useful as market context, not a substitute for Notino's own assortment.

Why are reviews in a separate dataset?

So you can export, join and price them independently of the product catalog. It also means a catalog-only run (includeReviews: false) is charged at product rate only, and you never pay for reviews you did not ask for. Each review row repeats its product context, so the dataset is still self-contained.

Does it need a proxy?

Not for short runs. Product and review data come from Notino's backend API, which does not challenge requests, and a handful of listing pages work from a normal IP. For deep listing walks (10+ pages per search URL, many country shops in one run) enable the Apify residential proxy in the run input — no code change needed.

Why does reviewCount differ from the number shown on Notino?

The API does not expose an upstream review total, so reviewCount is what was actually fetched within maxReviewsPerProduct. When the cap truncated the archive, reviewsTruncated is true, so you know the number is a floor rather than the full count.

Why did one of my reviews only return 20?

Notino caps a review page at 20 and sorts by rating with no stable tie-break, so the same review can appear on two pages. The Actor pages with a fixed window of 20, de-duplicates by review ID, and stops on a short or fully-duplicate page — so a product with 60 reviews returns 60. If you still get exactly 20, raise maxReviewsPerProduct.

Are review dates available?

No. The API exposes only review text, score and author — there is no date field. Do not rely on a date column in your output schema.

Can I scrape a brand page instead of a search page?

Yes. A brand URL like https://www.notino.co.uk/dior/ works in searchUrls and is treated as a listing.


For AI Agents & LLM Apps

Callable via the Apify MCP server and the Apify API. Returns Notino beauty products in the default dataset and customer reviews in the reviews dataset.

Minimal valid input — one search URL, default limits:

{ "searchUrls": ["https://www.notino.co.uk/search/?exps=shampoo"] }

Cheapest useful run — catalog and prices only, no review events:

{
"searchUrls": ["https://www.notino.de/search/?exps=shampoo"],
"includeReviews": false,
"maxPagesPerSearchUrl": 10
}

Direct products — skip discovery entirely:

{ "productUrls": ["https://www.notino.co.uk/schwarzkopf/creme-supreme-permanent-hair-dye/p-16316126"] }

Output fields — products: productId, productCode, productName, productUrl, brand, manufacturer, countryDomain, categories, description, rating, reviewCount, reviewsTruncated, variants (each with variantId, variantName, variantUrl, price, currency, color). Reviews: reviewId, productId, productCode, productName, productUrl, brand, countryDomain, title, text, score, author.

Behaviors an agent should know

  • The URL carries the country. There is no separate country field. Prices, currency and countryDomain follow whichever shop each URL points at, and URLs from different countries can be mixed in one run — do not try to set a market explicitly.
  • notino.com cannot be scraped. It is a marketing landing page with no search and no product API. Always use a country shop such as notino.de or notino.co.uk; other hosts are skipped with a warning.
  • productIds without a country resolve in UK prices. Prefer productUrls when the market matters.
  • Use ?exps= for search terms. The older ?search= form no longer returns a result grid; the legacy /search.asp?exps= path is rewritten automatically. A search URL works in either searchUrls or productUrls.
  • Sitemap URLs are not supported — they carry SEO slugs without the /p-{id} segment the API requires.
  • includeReviews defaults to true. Turning it off removes the second billed event and is the right choice for price/catalog runs. maxReviewsPerProduct: 0 also disables reviews.
  • One request per 10 product IDs, and reviews page at 20 per request — size your expectations and your timeout accordingly. A 100-product run with 20 reviews each finishes in well under a minute on 256 MB.
  • reviewCount is what was fetched, not the upstream total. Use reviewsTruncated to know whether the cap was hit.
  • No review dates exist in the output. Do not build a time-series on review recency.

Billing model — pay per event: one result event per product ($0.0023–$0.0025) and, only when includeReviews is true, one review event per review collected ($0.0014–$0.0015). A run that hits the caller's spending limit stops immediately rather than continuing to work for free.


This Actor is an independent third-party tool. It is not affiliated with, endorsed by, sponsored by, or connected with Notino, Ashland Ventures s.r.o., or any Notino group company.

It reads only publicly accessible pages and backend responses on Notino's country shops. It does not log in, does not bypass authentication, does not solve CAPTCHAs, and does not use proxies by default.

Output includes reviewer display names and review text. That is personal data. You are responsible for your own lawful basis for processing it, for complying with Notino's Terms of Service, and for complying with applicable data-protection law including GDPR, UK GDPR and CCPA. Do not use reviewer data for unsolicited commercial outreach.

Product data scraped from a retailer may be subject to contractual or database-rights restrictions even when it is publicly viewable — check Notino's Terms of Service before large-scale collection, redistribution or resale.

This Actor is a data-collection tool; it does not provide legal advice and makes no claim that any particular use is permitted.


SEO Keywords

notino scraper, notino api, notino data, cosmetics product data, beauty product database, perfume price tracker, beauty price monitoring, map compliance monitoring, notino country shops, skincare product data, ecommerce product data, product catalog scraping, brand catalog build, multi country pricing data, cosmetics reviews scraper, product review data, affiliate product feed, beauty market research, notino alternative, cosmetics aggregator data, product variant prices, daily price monitoring, europe ecommerce data