Empik API

Every Polish seller's price for one product, in one call

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.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Empik endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
E
/empik/v1

6 active endpoints, on 1, 2 and 3 credit tiers.

  • POST/empik/v1/search
  • POST/empik/v1/product/detail
  • POST/empik/v1/product/offers
  • POST/empik/v1/products/batch
  • POST/empik/v1/product/reviews
  • POST/empik/v1/product/variants

What Empik endpoints does ReefAPI ship?

6 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

6 endpoints

search

3 cr

Search empik.com by keyword and get the matching products.

required
query
optional
page, sort, brand, seller_id, price_min, price_max, condition, free_delivery, author, max_rotations

product/detail

1 cr

The full Empik product record by product_id (or product URL).

required
product_id
optional
max_rotations

product/offers

1 cr

Every seller offer for one product.

required
product_id
optional
max_rotations

products/batch

2 cr

Up to 30 products in ONE request.

required
product_ids
optional
max_rotations

product/reviews

1 cr

Customer reviews for one product, 30 per page.

required
product_id
optional
page, sort, max_rotations

product/variants

1 cr

The other editions of the same title.

required
product_id
optional
max_rotations

Every parameter, every allowed value →

Empik API

6 of 6 endpoints, ready to run

View docs ↗

One row per seller Empik lists for the product: shop name, Empik seller id, shop page, star rating and rating count, super-seller flag, the price in PLN, the list price where one exists, the item condition and the declared dispatch window.

1 credit1 required · 0 optional
POST/empik/v1/product/offers
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Empik API works

Empik is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 280 engines.

02
Call
POST /empik/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 or 3 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

From a Polish keyword to every seller's price

An Empik search row shows one price - the seller currently holding the buybox. The competing sellers, the second-hand copies and the list price are on the product, and those are the point.

01search
POST/empik/v1/search
{"query": "wiedźmin", "condition": "new"}

Three credits, 60 rows. Each carries product_id, the price actually charged and the seller holding it, so you can pick targets before spending anything else.

02offers
POST/empik/v1/product/offers
{"product_id": "p1102239921"}

One credit. Every seller Empik lists, each with its rating, its condition and its price - 21 sellers on this title, the cheapest at 33.18 PLN against a 40.99 PLN buybox. The response names the cheapest offer and the cheapest new offer separately.

03batch
POST/empik/v1/products/batch
{"product_ids": ["p1102239921", "p1538551909"]}

Two credits for up to 30 products at once - a 30-id call returned all 30 with a price and a named seller. Refreshing 30 watched products this way costs 2 credits instead of 30.

Six credits for a Polish keyword, the complete seller-by-seller price comparison behind one product, and a 30-product watchlist refresh.

request
curl -X POST https://api.reefapi.com/empik/v1/product/offers \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"product_id":"p1102239921"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "empik",
    "endpoint": "product/offers",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

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

Which country, which id, which currency, and where Empik goes quiet

empik.com only - one country, one currency. Measured on 2026-09-23 across 12 products in 6 Empik categories, 408 offers and 408 search rows, plus the live calls behind this page. Five of these lines go against us.

One market: Poland, and prices in PLN

This engine reads empik.com. Every price, seller rating and delivery line is Polish-scoped and quoted in PLN; there is no country parameter and no second storefront. For Polish price comparison across other shops, Ceneo and Allegro are separate engines.

The id is the code in the product URL, and three shapes all work

An Empik product URL ends ,p1102239921,ksiazka-p and that middle code is the id. Empik has used three id shapes over the years - p1102239921, prod58904739 and bare legacy numbers like 7291 - and all three resolve, so an id from an old database still works. Every search row returns product_id, and every product action also accepts a full URL.

How many sellers one call actually returns

Between 2 and 83 across the 12 measured products, 408 offers in total, and a seller name and id on 408 of 408. A Sapkowski paperback returned 21 sellers including Bookland, wtem.shop and two antiquarian copies; an iPhone 16 returned 17 including Vobis, Morele and three used-grade sellers; a LEGO set returned 83. Empik's own first-party offer appears in the same list, marked is_empik.

🔴 Search rows carry no list price, and the grid's discount under-reports

The result grid prints only a rounded discount percentage, and on 8 of 18 products checked it printed nothing at all while the product page published a genuinely higher list price. Rebuilding a list price from that rounded figure produced 69.76 PLN against a true 69.99, so search deliberately returns list_price_pln as null. Call product/detail for authoritative pricing.

🔴 Paging stops at 4,800 products, whatever the match count says

60 rows a page, up to page 80. A search for iphone reports 212,021 matches but only 4,800 of them are reachable by paging, and past page 80 Empik quietly re-serves page 1. This endpoint refuses instead and names the real last page, because silent duplicates are worse than an error. Narrow with brand, price band or condition to reach the rest.

🔴 ISBN and EAN are books only

Across six categories tested, Empik published a barcode on books and on none of the other five - so for toys, beauty, music and fashion the isbn and ean fields come back null rather than guessed. Every category does carry Empik's own internal index code, returned as empik_index.

🔴 Brand is missing wherever Empik files the creator instead

Measured across 408 search rows: brand was present on 62 of 62 electronics rows and 78 of 78 beauty rows, but only 17 of 60 book rows and 1 of 71 vinyl rows. Those categories are organised by author and performer, not brand, and product/detail returns both under creators. Customer ratings are similarly sparse on long-tail categories - 15 of 71 on vinyl.

🔴 Per-offer stock counts are not published

Empik does not expose a stock quantity per offer on its public product page. It was empty on all 408 offers measured, so stock_level comes back null rather than a zero that would read as out-of-stock. Availability is published instead, as the dispatch window Empik declares for that seller.

The offer list is not sorted by price, so the cheapest is named for you

Empik orders sellers by a mix of price, delivery cost, seller rating and dispatch speed, and pins its own offer first regardless of price. On one iPhone the cheapest offer sat 14th of 17. The engine returns Empik's own published explanation of that ordering verbatim, and computes cheapest and cheapest_new independently so you never have to trust position one.

Sponsored tiles are flagged, not hidden

Empik injects sponsored products into its own result grid. They are returned with a promoted flag and counted in promoted_count rather than dropped, because they are real products - but the same sponsored ids reappear on every page of a deep crawl, so filter on promoted before averaging prices.

What people build with Empik

The jobs this data is most often used for.

6

endpoints

1/2/3

credits per call

01

Price-intelligence teams call product/offers to watch every Polish seller's price on one product, new and second-hand, in a single request.

02

Book and media retailers use product/detail to pull author, publisher and ISBN-13 for catalogue matching against Poland's largest bookseller.

03

Repricing tools use products/batch to refresh up to 30 watched products in one call instead of 30 separate lookups.

04

Marketplace sellers use the seller_id filter on search to see a competitor's full Empik range and how it is priced.

What Empik data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 280 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/empik/v1/product/offers \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"product_id":"p1102239921"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/empik/v1/product/offers",
    headers={"x-api-key": REEF_KEY},
    json={
  "product_id": "p1102239921"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Empik.

Get a free key →
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.

116 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Empik, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 279 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-23.