Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Notino API page →
E-commerce & Marketplaces

Notino API & Scraper

The Notino API turns notino.*, Europe's largest online perfume and cosmetics retailer, into clean JSON in four actions: search, product/detail, product/reviews and suggest.

4 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

One codebase serves 27 storefronts on the same platform (Germany, Austria, Switzerland, Czechia, Slovakia, Poland, Hungary, Romania, Bulgaria, Croatia, Slovenia, Greece, Italy, Spain, Portugal, France, Belgium, Netherlands, United Kingdom, Ireland, Denmark, Sweden, Finland, Lithuania, Latvia, Estonia and Ukraine); a validated country parameter picks the store and the currency follows it (EUR, CZK, PLN, HUF, RON, GBP, DKK, SEK, CHF, UAH). search takes a keyword or a category/brand page, offers the store's own sorts (relevance, bestseller, price, top rated, newest), a price range and facet filters, and returns 24 rows a page. Each row carries the product id, the catalog id, brand, name and annotation, the price with price_basis (whether it is this variant's price or the cheapest shade of a grouped product), the price per litre or 100 ml, the voucher and conditional-voucher prices, the rating and count, the stock bucket, the size or shade labels, the category and the image. product/detail returns every size and shade with its own price, was-price and its type, EU 30-day lowest price, unit price, voucher prices, EAN, order code and stock, plus the description, ingredients, warnings, characteristics, fragrance notes, breadcrumb, delivery options with dates and prices, and free gifts. product/reviews returns the store's own reviews with stars, date, verified flag, pros and cons, photos and the rating histogram. A keyword the store maps to a category or brand is followed and reported, and a keyword with no real match comes back empty instead of a page of unrelated products. In a live check on 2026-09-15 every one of the 27 countries returned a search and a full product in its own currency, and on 7 of 7 products the price, brand, name, availability and rating matched the store's own product page exactly. No Notino account, no browser, one ReefAPI key and the standard { ok, data, meta, error } envelope.

Reference

A Notino price has four neighbours, and a grouped row shows the cheapest shade

A Notino product commonly publishes the price, a struck was-price with a type (supplier recommended price, a recommended price converted from another currency, or the highest price of the last two years), the EU-mandated lowest price of the last 30 days, and one or two voucher prices. The API keeps every one in its own field. On search, a product with many shades is one row whose price is its cheapest shade, so price_basis tells you which kind of price you are reading.

Product (country)pricewas_price (type)lowest_price_30dvoucher / unit
Max Factor Colour Elixir, shade 125 (DE)6.1010.10 (Converted)4.70search row shows 4.70 = cheapest of 20 shades
Dior Sauvage EDP 60 ml (DE)84.50null79.001,408.33 €/l
Dior Sauvage EDP 100 ml (CZ)2,950 Kčnull2,601 Kč2,950 Kč/100 ml
YSL Rouge Pur Couture, shade 321 (DE)51.5060.00 (Recommended)39.00voucher 'promo': 36.05

lowest_price_30d is the EU-Omnibus figure and is separate from was_price. voucher is a code price anyone can use; conditional_voucher applies only when the basket reaches a minimum and lists that minimum. Neither is ever returned as price. The unit basis is the store's own (per litre in Germany, per 100 ml in Czechia). No member (Notino Club) price is published to a logged-out visitor, so member_price is null.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/notino/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "country": "de",
    "query": "dior sauvage"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "notino",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 428.1,
    "record_count": 24,
    "bytes": 46658,
    "cache_hit": false,
    "pagination": {
      "page": 1,
      "page_size": 24,
      "total": 28,
      "has_more": true
    }
  },
  "data": {
    "results": [
      {
        "product_id": "16049655",
        "catalog_master_id": "807569",
        "master_id": "16049655",
        "product_code": "CHDSVGM_DSHG10",
        "master_product_code": "CHDSVGM_DSHG10",
        "title": "DIOR Sauvage Rasiergel für Herren 125 ml",
        "brand": "DIOR",
        "name": "Sauvage",
        "sub_name": null,
        "annotation": "Rasiergel für Herren 125 ml",
        "url": "https://www.notino.de/dior/sauvage-rasiergel-fuer-herren/p-16049655/",
        "price": 53.5,
        "currency": "EUR",
        "price_basis": "this_variant",
        "was_price": null,
        "discount_percent": null,
        "dual_price": null,
        "member_price": null,
        "unit_price": {
          "value": 428,
          "per_amount": 1,
          "per_unit": "l"
        },
        "voucher": null,
        "conditional_voucher": null,
        "discount_reason": null,
        "free_delivery": false,
        "is_new": false,
        "rating": null,
        "rating_count": null,
        "rating_scale": 5,
        "search_index_stock": "Last2",
        "variant_count": 1,
        "variants": [
          {
            "product_id": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "colors": "[trimmed-depth]"
          }
        ],
        "category": {
          "kind": "Fragrances",
          "category": "Perfumes",
          "subcategory": "Perfumed cosmetics",
          "type": "After-shave Care"
        },
        "image": "https://cdn.notinoimg.com/list_2k/dior/3348901512619_01__240224.jpg",
        "is_pharmacy": false,
        "sponsored": false
      },
      {
        "product_id": "15676582",
        "catalog_master_id": "361339",
        "master_id": "15676518",
        "product_code": "CHDSVGM_AEDP20",
        "master_product_code": "CHDSVGM_AEDP10",
        "title": "DIOR Sauvage Eau de Parfum für Herren",
        "brand": "DIOR",
        "name": "Sauvage",
        "sub_name": null,
        "annotation": "Eau de Parfum für Herren",
        "url": "https://www.notino.de/dior/sauvage-eau-de-parfum-fuer-herren/p-15676582/",
        "price": 80.9,
        "currency": "EUR",
        "price_basis": "lowest_variant",
        "was_price": null,
        "discount_percent": null,
        "dual_price": null,
        "member_price": null,
        "unit_price": {
          "value": 890,
          "per_amount": 1,
          "per_unit": "l"
        },
        "voucher": null,
        "conditional_voucher": null,
        "discount_reason": null,
        "free_delivery": false,
        "is_new": false,
        "rating": 4.8,
        "rating_count": 74,
        "rating_scale": 5,
        "search_index_stock": "MoreThan20",
        "variant_count": 4,
        "variants": [
          {
            "product_id": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "colors": "[trimmed-depth]"
          },
          {
            "product_id": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "colors": "[trimmed-depth]"
          },
          {
            "product_id": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "colors": "[trimmed-depth]"
          }
        ],
        "category": {
          "kind": "Fragrances",
          "category": "Perfumes",
          "subcategory": "Men’s perfumes",
          "type": "Eaux de Parfum"
        },
        "image": "https://cdn.notinoimg.com/list_2k/dior/3348901368254_01__260811.jpg",
        "is_pharmacy": false,
        "sponsored": false
      },
      {
        "product_id": "644505",
        "catalog_master_id": "263375",
        "master_id": "644505",
        "product_code": "CHDSVGM_DDST15",
        "master_product_code": "CHDSVGM_DDST15",
        "title": "DIOR Sauvage Deo-Stick ohne Alkohol für Herren 75 g",
        "brand": "DIOR",
        "name": "Sauvage",
        "sub_name": null,
        "annotation": "Deo-Stick ohne Alkohol für Herren 75 g",
        "url": "https://www.notino.de/dior/sauvage-deo-stick-fuer-herren-alkoholfrei/p-644505/",
        "price": 43.9,
        "currency": "EUR",
        "price_basis": "this_variant",
        "was_price": null,
        "discount_percent": null,
        "dual_price": null,
        "member_price": null,
        "unit_price": {
          "value": 585.33,
          "per_amount": 1,
          "per_unit": "kg"
        },
        "voucher": null,
        "conditional_voucher": null,
        "discount_reason": null,
        "free_delivery": false,
        "is_new": false,
        "rating": 5,
        "rating_count": 2,
        "rating_scale": 5,
        "search_index_stock": "MoreThan20",
        "variant_count": 1,
        "variants": [
          {
            "product_id": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "colors": "[trimmed-depth]"
          }
        ],
        "category": {
          "kind": "Fragrances",
          "category": "Perfumes",
          "subcategory": "Perfumed cosmetics",
          "type": "Deodorants and antiperspirants"
        },
        "image": "https://cdn.notinoimg.com/list_2k/dior/3348901292276_01__200828.jpg",
        "is_pharmacy": false,
        "sponsored": false
      }
    ],
    "count": 24,
    "total_results": 28,
    "total_pages": 2,
    "page": 1,
    "page_size": 24,
    "sort": "relevance",
    "query": "dior sauvage",
    "category": null,
    "country": "de",
    "currency": "EUR",
    "page_title": "Suchergebnisse",
    "redirect_to": null,
    "related_categories": [
      {
        "name": "DIOR Sauvage",
        "url": "https://www.notino.de/dior/sauvage2015/"
      },
      {
        "name": "DIOR Eau Sauvage",
        "url": "https://www.notino.de/dior/eau-sauvage/"
      }
    ],
    "price_range": {
      "min": 0,
      "max": 1972
    },
    "sponsored_dropped": 0,
    "fallback_results_dropped": 0,
    "has_more": true
  }
}
Actions

What the Notino API does

ActionDescriptionConcrete use caseKey params
searchSearch a Notino storefront by keyword, or browse a category/brand page, with the site's own sorts, price range and facet filters. Each row: product (variant) id, catalog master id, brand, name, annotation, price (price_basis says whether it is this variant's price or the cheapest shade of a grouped product), unit price per litre/100 ml, voucher / conditional-voucher prices, discount reason, rating + count, stock bucket, variants (size/shade labels), category and image. A keyword the site maps to a category or brand is followed and reported (redirect_to). No-match padding and sponsored rows are dropped and counted.Pricing teams call search to search a Notino storefront by keyword, or browse a category/brand page, with the site's own s….country, query, category, sort, page, ...
product/detailThe full Notino product by product id, catalog master id or URL: title, brand, manufacturer, the requested variant's price, was-price with its type and discount, EU 30-day lowest price, unit price, voucher and conditional-voucher prices, loyalty points, stock state + count, EAN, order code, images, description, ingredients, warnings, usage, characteristics, fragrance notes, rating + counts, breadcrumb, category, delivery options with dates and prices, gifts/samples, and every size/shade variant each with its own price block, EAN and stock.Marketplace operators call product/detail to get the full Notino product by product id, catalog master id or URL.country, product_id, catalog_master_id, url
product/reviewsCustomer reviews of a Notino product (the storefront's own reviews, in its language): text, title, star rating, date, verified flag, likes/dislikes, pros/cons, photos, the reviewed variant, and the rating histogram. Sort newest/oldest/rating/most helpful, filter by stars or photos; 8 per page.Catalog enrichment teams call product/reviews to get customer reviews of a Notino product (the storefront's own reviews, in its language).country, product_id, catalog_master_id, url, sort, ...
suggestNotino autocomplete for a partial query: suggested products (id, title, annotation, product code, url, image) and the brand, collection and category pages it proposes.Retail analysts call suggest to get notino autocomplete for a partial query.query, country
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/notino/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"country":"de","query":"dior sauvage"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.notino.search with {"country":"de","query":"dior sauvage"}.
Use cases

Who uses this API and why

  • Beauty price-monitoring teams track each size's price, the was-price and its type, the EU 30-day lowest price and the price per litre across 27 countries from one API.
  • Brands check where their perfumes and cosmetics are listed, at what price per country, and which voucher or gift runs on them.
  • Catalog and marketplace teams match products by EAN and pull ingredients, characteristics and every shade or size variant.
  • Review analytics tools read the stars, pros and cons and verified flags of the same product in different countries.
FAQ

Questions developers ask before integrating

Which countries does it cover, and what currency comes back?

All 27 Notino storefronts on the shared platform: Germany, Austria, Switzerland, Czechia, Slovakia, Poland, Hungary, Romania, Bulgaria, Croatia, Slovenia, Greece, Italy, Spain, Portugal, France, Belgium, Netherlands, United Kingdom, Ireland, Denmark, Sweden, Finland, Lithuania, Latvia, Estonia and Ukraine. Pass country; the currency follows it (EUR, CZK, PLN, HUF, RON, GBP, DKK, SEK, CHF, UAH) and the text comes in the store's language. Product ids are the same in every store, so one product can be read in several countries. notino.com (the country picker) and notino.ru are not shops and return MARKET_UNAVAILABLE.

What does a search row's price mean?

price_basis says it. 'this_variant' is the price of that exact size or shade. 'lowest_variant' marks a product grouped over many shades or sizes, where the row shows the cheapest one; product/detail returns every variant with its own price. Search rows do not carry the was-price (the store does not publish it on listings), but they do carry the unit price and the voucher prices.

Why does sort=price_desc not look sorted?

Notino orders price_desc by each product's most expensive size or shade, while a grouped row shows its cheapest one, so the visible prices are not strictly falling. The response says so in sort_note. price_asc orders by the cheapest variant and is monotone.

What are was_price_type, lowest_price_30d, voucher and conditional_voucher?

was_price_type says what the struck price is: Recommended (the supplier's recommended price), Converted (a recommended price converted from another currency) or HistoricalMax (the highest price of the last two years). lowest_price_30d is the lowest price of the 30 days before a promotion, as EU rules require. voucher is a code price anyone can use (for example code 'promo': 51.50 becomes 36.05). conditional_voucher applies only above a basket minimum and lists that minimum, the discount and the categories it covers.

What happens on a no-result search or a keyword that is really a brand?

A keyword the store maps to a category or brand page (for example 'nivea' or 'parfum') is followed, its real products are returned, and redirect_to reports where it went. When nothing matches, Notino fills the page with bestsellers or unrelated products; the API returns an empty result and counts what it dropped in fallback_results_dropped (include_fallback_results=true returns them separately).

Are sponsored products mixed into the results?

Category pages contain paid placements inside the product list. They are removed by default and counted in sponsored_dropped, so count is the organic count; include_sponsored=true returns them with sponsored: true.

What do reviews include?

product/reviews returns the store's own reviews in its language: title, text, star rating, date, verified flag, likes and dislikes, pros and cons, customer photos, the reviewed variant, and the rating histogram. Sort by newest, oldest, rating or most helpful, filter by stars or photos; 8 reviews a page. Review counts differ by country because each store collects its own.

What is the Notino API?

Notino API is a ReefAPI endpoint group for europe's largest online perfume and cosmetics shop in 27 countries: every size's price, price per litre, 30-day lowest price, ean and reviews as json. It returns live JSON through POST requests under /notino/v1.

Is the Notino API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Notino calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Notino login or account?

No login to Notino is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Notino data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Notino API use?

Notino actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Notino from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call notino actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Notino API a Notino scraper?

It is the managed alternative to a DIY Notino scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same europe's largest online perfume and cosmetics shop in 27 countries: every size's price, price per litre, 30-day lowest price, ean and reviews as json back as clean JSON.

docs / notino

Notino

Europe's largest online perfume and cosmetics shop in 27 countries: every size's price, price per litre, 30-day lowest price, EAN and reviews as JSON.

base /notino/v14 endpoints
post/notino/v1/product/detail1 credit

The full Notino product by product id, catalog master id or URL: title, brand, manufacturer, the requested variant's price, was-price with its type and discount, EU 30-day lowest price, unit price, voucher and conditional-voucher prices, loyalty points, stock state + count, EAN, order code, images, description, ingredients, warnings, usage, characteristics, fragrance notes, rating + counts, breadcrumb, category, delivery options with dates and prices, gifts/samples, and every size/shade variant each with its own price block, EAN and stock.

ParameterAllowed / rangeDescription
country = deoptionalde · at · ch · cz · sk · pl · hu · ro · bg · hr · si · gr · it · es · pt · fr · be · nl · uk · ie · dk · se · fi · lt · lv · ee · uaNotino storefront. All 27 run on one platform; currency and language follow the country.
product_idoptionalNotino product (variant) id — the number in a product URL (…/p-15676582/). Every search row returns one.
catalog_master_idoptionalInstead of product_id: the catalog master id (search rows return it); saves a lookup.
urloptionalInstead of product_id: a notino product URL (…/p-<id>/).
Try in playground →
post/notino/v1/product/reviews1 credit

Customer reviews of a Notino product (the storefront's own reviews, in its language): text, title, star rating, date, verified flag, likes/dislikes, pros/cons, photos, the reviewed variant, and the rating histogram. Sort newest/oldest/rating/most helpful, filter by stars or photos; 8 per page.

ParameterAllowed / rangeDescription
country = deoptionalde · at · ch · cz · sk · pl · hu · ro · bg · hr · si · gr · it · es · pt · fr · be · nl · uk · ie · dk · se · fi · lt · lv · ee · uaNotino storefront. All 27 run on one platform; currency and language follow the country.
product_idoptionalNotino product (variant) id — the number in a product URL (…/p-15676582/). Every search row returns one.
catalog_master_idoptionalInstead of product_id: the catalog master id (search rows return it); saves a lookup.
urloptionalInstead of product_id: a notino product URL (…/p-<id>/).
sort = newestoptionalnewest · oldest · rating_desc · rating_asc · most_helpfulReview order.
page = 1optional1–5001-based page; 8 reviews per page (the site's size).
ratingoptionalOnly these star ratings, comma-separated 1-5.
with_images = falseoptionalOnly reviews that carry customer photos.
Try in playground →
post/notino/v1/suggest1 credit

Notino autocomplete for a partial query: suggested products (id, title, annotation, product code, url, image) and the brand, collection and category pages it proposes.

ParameterAllowed / rangeDescription
queryoptionalA partial keyword.
country = deoptionalde · at · ch · cz · sk · pl · hu · ro · bg · hr · si · gr · it · es · pt · fr · be · nl · uk · ie · dk · se · fi · lt · lv · ee · uaNotino storefront. All 27 run on one platform; currency and language follow the country.
Try in playground →