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

Empik API & Scraper

The Empik API returns Poland's largest books and media retailer as clean JSON, in six actions: search, product/detail, product/offers, products/batch, product/reviews and product/variants.

6 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.

product/offers is why the engine exists - one call returns every seller Empik lists for one product, each row carrying the shop name, its Empik seller id, its shop page, its star rating and how many ratings it rests on, the super-seller flag, the price in PLN, the list price where one exists, the item condition and the declared dispatch window. Empik is both a retailer and a marketplace, so its own first-party offer comes back in the same list as the independent shops, marked is_empik. Verification on 2026-09-23 covered 12 products across 6 Empik categories and 408 offers: a named seller was present on 408 of 408, and the search-row price matched the product page's own price on 12 of 12. Offer depth ranged from 2 to 83 sellers on one product. Books additionally return author, publisher, series, page count, cover type and ISBN-13. Prices are PLN. No Empik account and no browser - one ReefAPI key and the standard envelope.

Reference

Two prices, two meanings - and second-hand sits in the same list

An Empik offer can carry a list price and a selling price, and they are different numbers. On the 12 products measured on 2026-09-23 the two differed on 5, by up to 45%. They are returned as two named fields rather than reconciled into one, and the same list mixes new and used stock, so condition is on every row.

What you readWhat it meansMeasured
price_plnwhat a shopper actually pays for that offer todayMatched the price on Empik's own product page on 12 of 12 measured products
list_price_plnthe higher pre-discount figure, and null when there is no discountPresent on 5 of 12. On one Sapkowski title it was 74.90 PLN against a 40.99 PLN selling price
discount_pctcomputed here from those two numbers, because Empik's own percentage field is emptyEmpik returned no percentage of its own on any of the 408 offers measured
membership_pricetrue when that particular discount needs an Empik membership rather than being open to everyoneFalse on all 408 offers measured - the flag exists so a membership price can never be mistaken for an open one
conditionNEW, or one of Empik's used and refurbished grades, or damaged packaging20 of the 408 offers were second-hand. On one iPhone the cheapest offer was a used unit at 2485 PLN against 3459 PLN new
seller.is_empikwhether the row is Empik's own stock or an independent shopEmpik pins its own offer first in its list regardless of price, so the cheapest seller is named separately
Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/empik/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "wiedźmin"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "empik",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1756.9,
    "record_count": 60,
    "bytes": 782873,
    "cache_hit": false,
    "pagination": {
      "page": 1,
      "page_size": 60,
      "has_more": true,
      "total": 1804,
      "last_page": 31
    },
    "promoted_count": 0,
    "charged_credits": 3,
    "version": "0.1.0"
  },
  "data": {
    "results": [
      {
        "product_id": "p1102239921",
        "title": "Ostatnie życzenie. Wiedźmin. Tom 1",
        "url": "https://www.empik.com/ostatnie-zyczenie-wiedzmin-tom-1-sapkowski-andrzej,p1102239921,ksiazka-p",
        "image": "https://ecsmedia.pl/c/ostatnie-zyczenie-wiedzmin-tom-1-p-iext231426489.jpg",
        "brand": null,
        "price_pln": 40.99,
        "list_price_pln": null,
        "discount_pct": null,
        "currency": "PLN",
        "seller": {
          "id": "0",
          "name": "Empik",
          "is_empik": true
        },
        "category": "Książki/Fantastyka, horror/Fantasy",
        "category_path": [
          "Książki",
          "Fantastyka, horror",
          "Fantasy"
        ],
        "delivery": "Przewidywana wysyłka w 1 dzień rob.",
        "rating": 4.9,
        "promoted": false
      },
      {
        "product_id": "p1102239806",
        "title": "Miecz przeznaczenia. Wiedźmin. Tom 2",
        "url": "https://www.empik.com/miecz-przeznaczenia-wiedzmin-tom-2-sapkowski-andrzej,p1102239806,ksiazka-p",
        "image": "https://ecsmedia.pl/c/miecz-przeznaczenia-wiedzmin-tom-2-p-iext231379373.jpg",
        "brand": null,
        "price_pln": 40.99,
        "list_price_pln": null,
        "discount_pct": null,
        "currency": "PLN",
        "seller": {
          "id": "0",
          "name": "Empik",
          "is_empik": true
        },
        "category": "Książki/Fantastyka, horror/Fantasy",
        "category_path": [
          "Książki",
          "Fantastyka, horror",
          "Fantasy"
        ],
        "delivery": "Przewidywana wysyłka w 1 dzień rob.",
        "rating": 4.9,
        "promoted": false
      },
      {
        "product_id": "p1103074330",
        "title": "Czas pogardy. Wiedźmin. Tom 4",
        "url": "https://www.empik.com/czas-pogardy-wiedzmin-tom-4-sapkowski-andrzej,p1103074330,ksiazka-p",
        "image": "https://ecsmedia.pl/c/czas-pogardy-wiedzmin-tom-4-p-iext202438809.jpg",
        "brand": null,
        "price_pln": 40.99,
        "list_price_pln": null,
        "discount_pct": null,
        "currency": "PLN",
        "seller": {
          "id": "0",
          "name": "Empik",
          "is_empik": true
        },
        "category": "Książki/Fantastyka, horror/Fantasy",
        "category_path": [
          "Książki",
          "Fantastyka, horror",
          "Fantasy"
        ],
        "delivery": "Przewidywana wysyłka w 1 dzień rob.",
        "rating": 4.9,
        "promoted": false
      }
    ],
    "count": 60,
    "promoted_count": 0,
    "total_results": 1804,
    "page": 1,
    "sort": "relevance",
    "query": "wiedźmin"
  }
}
Actions

What the Empik API does

ActionDescriptionConcrete use caseKey params
searchSearch empik.com by keyword and get the matching products: Empik product id, title, brand, image, the price actually charged, the list price and discount, the marketplace seller holding the buybox, category path, rating and delivery line. Filter by brand, seller, price band, condition, free delivery or (for books) author. Use the returned `product_id` with `product/offers` to get every seller's price for that product.Pricing teams call search to search empik.com by keyword and get the matching products.query, page, sort, brand, seller_id, ...
product/detailThe full Empik product record by `product_id` (or product URL): title, category breadcrumb, description, image gallery, rating, format/variant, the complete attribute table exactly as Empik groups it, and the creator block — author and publisher for books, performer and label for music, brand and producer for goods. For books it also returns ISBN-13 and EAN.Marketplace operators call product/detail to get the full Empik product record by `product_id` (or product URL).product_id, max_rotations
product/offersEvery seller offer for one product — the price comparison itself. One row per merchant: seller name, Empik shop id, shop page, super-seller flag, seller rating and how many ratings it rests on, the price actually charged and the list price, whether the discount needs an Empik membership, the item condition (new, used as-new/good/acceptable, damaged packaging), declared dispatch window and the delivery line. Rows keep Empik's own ordering; `cheapest` is computed separately because that ordering is NOT purely by price.Catalog enrichment teams call product/offers to get every seller offer for one product.product_id, max_rotations
products/batchUp to 30 products in ONE request — id, title, url, category, rating, cover, creators and the current buybox offer (price, list price, seller) for each. This is the cheap way to refresh a watchlist: 30 products for the price of one call instead of 30 separate `product/detail` calls.Retail analysts call products/batch to get up to 30 products in ONE request.product_ids, max_rotations
product/reviewsCustomer reviews for one product, 30 per page: author name, date, the 1-5 score, title and body, how many readers found it useful, whether Empik marks the purchase as verified. Also returns the full star histogram (how many votes at each score) and Empik's own AI summary of the reviews with its keyword list.Pricing teams call product/reviews to get customer reviews for one product, 30 per page.product_id, page, sort, max_rotations
product/variantsThe other editions of the same title — for a book: paperback, hardcover, ebook EPUB/MOBI, audiobook, foreign-language printing; for music: the other formats. Each variant returns its own resolvable Empik product id and URL, so you can feed it straight back into `product/offers`.Marketplace operators call product/variants to get the other editions of the same title.product_id, max_rotations
Code samples

Call search from your stack

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

Who uses this API and why

  • Price-intelligence teams call product/offers to watch every Polish seller's price on one product, new and second-hand, in a single request.
  • Book and media retailers use product/detail to pull author, publisher and ISBN-13 for catalogue matching against Poland's largest bookseller.
  • Repricing tools use products/batch to refresh up to 30 watched products in one call instead of 30 separate lookups.
  • Marketplace sellers use the seller_id filter on search to see a competitor's full Empik range and how it is priced.
  • Review and product teams use product/reviews for the full star histogram and Empik's own AI summary of what buyers say.
FAQ

Questions developers ask before integrating

How many sellers does one Empik product actually return?

Between 2 and 83 across the 12 products measured on 2026-09-23, totalling 408 offers. A Sapkowski paperback returned 21 sellers, an iPhone 16 returned 17, and a LEGO set returned 83. Every one of the 408 carried a seller name and a seller id - there are no anonymous rows to filter out.

Does this cover second-hand stock, or only new?

Both, in the same call. Empik's marketplace carries a real used tier and it comes back on the same offer list with a condition field: new, used as-new, used good, used acceptable, refurbished grades, or damaged packaging. 20 of the 408 measured offers were not new. You can also filter a search down to used stock - a search for iphone narrowed from 212,021 products to 265 on used-good.

Do I get ISBN and author for books?

Yes for books, and the engine is honest that it is books only. product/detail returns author, publisher, series, page count, cover type, language, edition year and an ISBN-13 derived from Empik's own EAN. Across six categories tested, that barcode was published on books and on none of the other five - so for a toy, a perfume or a vinyl record the ISBN and EAN fields come back null rather than guessed. Every category does return Empik's own internal index code.

Is the seller information included, or stripped out?

Included in full. Each offer carries the shop's display name, its numeric Empik seller id, its Empik shop page, its logo, its star rating and rating count, a super-seller flag and a foreign-seller flag. The seller id is the same value you can pass back into search to pull every product one shop lists - a search for iphone filtered to seller 3531 returned 40 products, all from that one shop.

How deep can I page through Empik search results?

60 products per page, up to page 80 - 4,800 products - however large the reported match count is. Past that Empik re-serves its first page, so this endpoint refuses the call and names the real last page instead of handing back duplicates you would not notice. meta.pagination.last_page tells you where your query actually stops, and narrowing with brand, a price band or condition reaches the rest of the catalogue.

Why does a search for a phone return hundreds of thousands of products?

Because Empik matches loosely and its marketplace is full of accessories. A search for iphone reports 212,021 matches, of which 163,200 are under 50 PLN - cases, cables and screen protectors. That is the source's own count, reported as-is rather than trimmed. Use price_min, brand or condition to get to the actual phones: the same query with a 2000-5000 PLN band leaves 293.

Are sponsored listings mixed into the results?

Empik injects sponsored tiles into its own result grid, so they are returned rather than silently dropped - but every row carries a promoted flag and each response reports promoted_count. This matters if you are averaging prices: the same sponsored ids reappear on every page of a deep crawl, so filtering on promoted is how you avoid counting them repeatedly.

What does Empik not publish?

Per-offer stock counts were empty on all 408 offers measured, so stock_level is null rather than a made-up zero. There is no price history, no barcode outside books, and no link into the seller's own website - only their Empik shop page. Delivery comes back as Empik's own wording rather than a parsed number. Search rows also carry no list price: the grid prints only a rounded discount percentage, and that percentage was missing on 8 of 18 products whose product page showed a genuine discount, so product/detail is the authority on pricing.

What is the Empik API?

Empik API is a ReefAPI endpoint group for poland's biggest books and media retailer, plus every marketplace seller's price. It returns live JSON through POST requests under /empik/v1.

Is the Empik API free to try?

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

Do I need an Empik login or account?

No login to Empik 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 Empik 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 Empik API use?

Empik actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

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

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

docs / empik

Empik

Poland's biggest books and media retailer, plus every marketplace seller's price.

base /empik/v16 endpoints
post/empik/v1/product/detail1 credit

The full Empik product record by `product_id` (or product URL): title, category breadcrumb, description, image gallery, rating, format/variant, the complete attribute table exactly as Empik groups it, and the creator block — author and publisher for books, performer and label for music, brand and producer for goods. For books it also returns ISBN-13 and EAN.

ParameterAllowed / rangeDescription
product_idrequiredEmpik product id — the code in the product URL (…/ostatnie-zyczenie…,p1102239921,ksiazka-p → p1102239921). A full product URL is also accepted. Empik uses three id shapes and all work: 'p1102239921', 'prod58904739' and a bare legacy number like '7291'. Every `search` row returns `product_id`.
max_rotations = 4optional1–8Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).
Try in playground →
post/empik/v1/product/offers1 credit

Every seller offer for one product — the price comparison itself. One row per merchant: seller name, Empik shop id, shop page, super-seller flag, seller rating and how many ratings it rests on, the price actually charged and the list price, whether the discount needs an Empik membership, the item condition (new, used as-new/good/acceptable, damaged packaging), declared dispatch window and the delivery line. Rows keep Empik's own ordering; `cheapest` is computed separately because that ordering is NOT purely by price.

ParameterAllowed / rangeDescription
product_idrequiredEmpik product id — the code in the product URL (…/ostatnie-zyczenie…,p1102239921,ksiazka-p → p1102239921). A full product URL is also accepted. Empik uses three id shapes and all work: 'p1102239921', 'prod58904739' and a bare legacy number like '7291'. Every `search` row returns `product_id`.
max_rotations = 4optional1–8Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).
Try in playground →
post/empik/v1/products/batch2 credits

Up to 30 products in ONE request — id, title, url, category, rating, cover, creators and the current buybox offer (price, list price, seller) for each. This is the cheap way to refresh a watchlist: 30 products for the price of one call instead of 30 separate `product/detail` calls.

ParameterAllowed / rangeDescription
product_idsrequiredUp to 30 Empik product ids in one call. Above 30 the source returns only the first 30, so this endpoint rejects a longer list instead of silently dropping the rest.
max_rotations = 4optional1–8Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).
Try in playground →
post/empik/v1/product/reviews1 credit

Customer reviews for one product, 30 per page: author name, date, the 1-5 score, title and body, how many readers found it useful, whether Empik marks the purchase as verified. Also returns the full star histogram (how many votes at each score) and Empik's own AI summary of the reviews with its keyword list.

ParameterAllowed / rangeDescription
product_idrequiredEmpik product id — the code in the product URL (…/ostatnie-zyczenie…,p1102239921,ksiazka-p → p1102239921). A full product URL is also accepted. Empik uses three id shapes and all work: 'p1102239921', 'prod58904739' and a bare legacy number like '7291'. Every `search` row returns `product_id`.
page = 1optional1–500Review page, 1-BASED, 30 reviews per page. `total_reviews` and `pages` tell you how far you can go.
sort = defaultoptionaldefault · popular · highest_rate · lowest_rate · newest · oldestReview ordering. These are the six orderings empik.com itself publishes for its review list.
max_rotations = 4optional1–8Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).
Try in playground →
post/empik/v1/product/variants1 credit

The other editions of the same title — for a book: paperback, hardcover, ebook EPUB/MOBI, audiobook, foreign-language printing; for music: the other formats. Each variant returns its own resolvable Empik product id and URL, so you can feed it straight back into `product/offers`.

ParameterAllowed / rangeDescription
product_idrequiredEmpik product id — the code in the product URL (…/ostatnie-zyczenie…,p1102239921,ksiazka-p → p1102239921). A full product URL is also accepted. Empik uses three id shapes and all work: 'p1102239921', 'prod58904739' and a bare legacy number like '7291'. Every `search` row returns `product_id`.
max_rotations = 4optional1–8Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).
Try in playground →