Allegro API & Scraper
The Allegro API returns listings from Poland's largest online marketplace as clean JSON.
🤖 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.
The primary search endpoint returns offers with id, title, URL, price, delivery text and seller details (login, super-seller flag, positive-feedback percent), and you can browse a category, pull an offer, a seller's offers and suggestions. It is built for price intelligence, marketplace tools and Polish e-commerce analytics that need Allegro data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.
What is in an Allegro offer row, and which rows are not offers
Allegro identifies the same listing two ways and mixes non-offer tiles into the same grid, which is where most integrations go wrong. These fields were measured on a live search for "iphone 15" on 2026-08-26 - 68 rows against a meta.total of 192,928. Prices are always PLN objects, never bare numbers.
| Field | What it holds | Measured example |
|---|---|---|
| id | the numeric offer id - the digits in allegro.pl/oferta/<id> | "18678737081" |
| product_id | a UUID identifying the product, not the offer | "2c471a7b-e083-42cc-b811-faffef64ef77" |
| type | "product" on a real row, "banner" on a promo tile | 67 product rows and 1 banner in one page |
| context | SPONSORED, PROMOTED or REGULAR (null on banner rows) | 12 / 34 / 21 in one page |
| price, price_with_delivery, lowest_shipping | each an {amount, currency:"PLN"} object | 2629.0 / 2639.49 / 10.49 |
| delivery_text | Polish display string, comma as the decimal mark | "2639,49 zł z dostawą" |
| seller.type | the seller class Allegro prints | Firma, Oficjalny sklep, Prywatny sprzedawca |
| seller.positive_feedback_percent | float from 0 to 100, beside a super_seller boolean | 97.4, 98.2 |
| popularity | a Polish sentence, not a number | "326 osób kupiło ostatnio" |
| url | the offer link, except on sponsored rows | sponsored rows return an allegro.pl/events/clicks redirect |
condition is primarily a filter (new = Nowy, used = Używany). It is only PARTLY readable back: measured 2026-08-27, 8 of 63 rows carried a Stan attribute (Używany or Powystawowy) inside the attribute block and the other 55 did not, because the seller never filled it in. So filter for condition rather than parsing for it - but do not assume the row never tells you. A value the filter does not recognise is swallowed silently: an invalid condition returns ok:true and the unfiltered result count.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/allegro/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "iphone 15"
}
}{
"ok": true,
"meta": {
"api": "allegro",
"endpoint": "search",
"mode": "live",
"latency_ms": 6727.7,
"record_count": 69,
"bytes": 0,
"cache_hit": false,
"completeness_pct": 100,
"stop_reason": "limit_reached",
"total": 197954,
"source": "listing",
"partial": false,
"charged_credits": 3,
"version": "0.1.0"
},
"data": {
"query": "iphone 15",
"offers": [
{
"id": "18807684878",
"product_id": "f9f55be0-6b2f-470b-917f-93d2ae2372cc",
"title": "Szkło hartowane z Aplikatorem Polski Banan do Apple iPhone 15, 2 szt.",
"url": "https://allegro.pl/events/clicks?emission_unit_id=4d9a5ebc-a924-4d3e-b6e8-757ad8d99f2c&emission_id=11172e38-f578-40bf-810a-8a5116088b16&type=OFFER&ts=1790199352463&redirect=https%3A%2F%2Fallegro.pl%2Foferta%2F18807684878%3Fbi_s%3Dads%26bi_m%3Dproductlisting%253Adesktop%253Aquery%26bi_c%3DOTBmMzAwYTItNWJmMy00YjJmLWIxNDQtZTg0MzRmNmY2ZWQ0AA%26bi_t%3Dape&placement=productlisting:desktop:query&sig=c66712da4292a12d961c94a6f5397d8f",
"type": "product",
"context": "SPONSORED",
"is_sponsored": true,
"promoted": false,
"price": {
"amount": 62.9,
"currency": "PLN"
},
"price_with_delivery": {
"amount": 69.05,
"currency": "PLN"
},
"delivery_text": "69,05 zł z dostawą",
"lowest_shipping": {
"amount": 6.15,
"currency": "PLN"
},
"free_delivery": false,
"free_return": false,
"rating": 4.95,
"rating_count": 22,
"product_offers_count": 1,
"popularity": "189 osób kupiło ostatnio",
"image_url": "https://a.allegroimg.com/s180/1136e3/7f0d6c7d44bc914b6baeca6f08a0/Szklo-hartowane-z-aplikatorem-9H-BananFit-do-Apple-iPhone-15",
"images": [
"https://a.allegroimg.com/s360/1136e3/7f0d6c7d44bc914b6baeca6f08a0/Szklo-hartowane-z-aplikatorem-9H-BananFit-do-Apple-iPhone-15",
"https://a.allegroimg.com/s360/116d30/a7eee71446c0b249e4037e637588/Szklo-hartowane-z-aplikatorem-9H-BananFit-do-Apple-iPhone-15-Stan-opakowania-oryginalne",
"https://a.allegroimg.com/s360/110367/acfebeb9493784db2f4593511dfb/Szklo-hartowane-z-aplikatorem-9H-BananFit-do-Apple-iPhone-15-Kod-producenta-szkielko-ochronne-szybka-szyba-PB-BA-4604"
],
"parameters": [
{
"name": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"values": "[trimmed-depth]"
}
],
"seller": {
"id": "40729590",
"login": "Oficjalny sklep Polski Banan",
"super_seller": true,
"company": true,
"positive_feedback_percent": 99.2,
"listing_url": "https://allegro.pl/uzytkownik/polski_banan",
"type": "Oficjalny sklep"
},
"category_id": "10532"
},
{
"id": "18149445531",
"product_id": "fd656736-c06d-43e0-bdc8-6b7119946f1b",
"title": "3× Szkło hartowane Apple 2,5D do iPhone 15 0,30 mm",
"url": "https://allegro.pl/events/clicks?emission_unit_id=6814f634-4785-4139-af8b-5281c7f4b170&emission_id=11172e38-f578-40bf-810a-8a5116088b16&type=OFFER&ts=1790199352463&redirect=https%3A%2F%2Fallegro.pl%2Foferta%2F18149445531%3Fbi_s%3Dads%26bi_m%3Dproductlisting%253Adesktop%253Aquery%26bi_c%3DYTgzZDlmYjQtOGNkOS00M2JmLTlhYTgtZDA5MTkwODJmNTk2AA%26bi_t%3Dape&placement=productlisting:desktop:query&sig=8eb53f9d7037c7c2547cb658f420cf66",
"type": "product",
"context": "SPONSORED",
"is_sponsored": true,
"promoted": false,
"price": {
"amount": 14.9,
"currency": "PLN"
},
"price_with_delivery": {
"amount": 24.89,
"currency": "PLN"
},
"delivery_text": "24,89 zł z dostawą",
"lowest_shipping": {
"amount": 9.99,
"currency": "PLN"
},
"free_delivery": false,
"free_return": false,
"rating": 4.7,
"rating_count": 88,
"product_offers_count": 1,
"popularity": "254 osoby kupiły ostatnio",
"image_url": "https://a.allegroimg.com/s180/1168d6/2fe334704cfb946be938d1cfdd02/3x-SZKLO-HARTOWANE-9H-do-iPhone-15-iPhone-15-SZYBKA",
"images": [
"https://a.allegroimg.com/s360/1168d6/2fe334704cfb946be938d1cfdd02/3x-SZKLO-HARTOWANE-9H-do-iPhone-15-iPhone-15-SZYBKA",
"https://a.allegroimg.com/s360/116fbc/da8b5dc6412b8b63a481e7b2f270/3x-SZKLO-HARTOWANE-9H-do-iPhone-15-iPhone-15-SZYBKA-EAN-GTIN-5903396247941",
"https://a.allegroimg.com/s360/117a7a/0680f1b047debd25d88be0fdd430/3x-SZKLO-HARTOWANE-9H-do-iPhone-15-iPhone-15-SZYBKA-Kod-producenta-5903396247941"
],
"parameters": [
{
"name": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"values": "[trimmed-depth]"
}
],
"seller": {
"id": "131532614",
"login": "mobileking_pl",
"super_seller": false,
"company": true,
"positive_feedback_percent": 97.4,
"listing_url": "https://allegro.pl/uzytkownik/mobileking_pl",
"type": "Firma"
},
"category_id": "10532"
},
{
"id": "18851370450",
"product_id": "b7d39356-8090-4bcf-9247-b872c5f6935a",
"title": "Smartfon Apple iPhone 15 6 GB / 256 GB 5G czarny",
"url": "https://allegro.pl/produkt/smartfon-apple-iphone-15-6-gb-256-gb-5g-czarny-b7d39356-8090-4bcf-9247-b872c5f6935a?offerId=18851370450",
"type": "product",
"context": "PROMOTED",
"is_sponsored": false,
"promoted": true,
"price": {
"amount": 3999,
"currency": "PLN"
},
"price_with_delivery": {
"amount": 4009.49,
"currency": "PLN"
},
"delivery_text": "4009,49 zł z dostawą",
"lowest_shipping": {
"amount": 10.49,
"currency": "PLN"
},
"free_delivery": false,
"free_return": false,
"rating": 4.79,
"rating_count": 104,
"product_offers_count": 73,
"popularity": "63 osoby kupiły ostatnio",
"image_url": "https://a.allegroimg.com/s180/11a031/ceaa23ac4e64a6512da1e5db7832/Apple-iPhone-15-256GB-Czarny",
"images": [
"https://a.allegroimg.com/s360/11a031/ceaa23ac4e64a6512da1e5db7832/Apple-iPhone-15-256GB-Czarny",
"https://a.allegroimg.com/s360/116e3b/5b7d143143719827e7ecdb6b6cd9/Apple-iPhone-15-256GB-Czarny-Wersja-systemu-operacyjnego-iOS-inne",
"https://a.allegroimg.com/s360/11c380/ba834b8c4900ac432b40c70c8b33/Apple-iPhone-15-256GB-Czarny-Blokada-simlock-brak-blokady"
],
"parameters": [
{
"name": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"values": "[trimmed-depth]"
}
],
"seller": {
"id": "27342349",
"login": "lantre_pl",
"super_seller": true,
"company": true,
"positive_feedback_percent": 97.5,
"listing_url": "https://allegro.pl/uzytkownik/lantre_pl",
"type": "Firma"
},
"category_id": "322851"
}
],
"count": 69,
"total": 197954,
"last_page": 100,
"pages_fetched": 1,
"partial": false,
"category_path": [
{
"id": "954b95b6-43cf-4104-8354-dea4d9b10ddf",
"name": "Allegro",
"alias": "/"
},
{
"id": "42540aec-367a-4e5e-b411-17c09b08e41f",
"name": "Elektronika",
"alias": "elektronika"
},
{
"id": "4",
"name": "Telefony i Akcesoria",
"alias": "telefony-i-akcesoria"
}
]
}
}What the Allegro API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Allegro by keyword — returns offer cards with title, price (PLN), delivery cost, seller, rating, photos and offer URL. Supports price range, condition, free-delivery, sort and category filters, with page pagination. | Pricing teams call search to search Allegro by keyword. | query, max_pages, sort, min_price, max_price, ... |
| category | Browse an Allegro category without a keyword (the /kategoria/<slug> grid) — discover popular offers in a category. Supports price/condition/free-delivery/sort filters and page pagination. | Marketplace operators call category to get browse an Allegro category without a keyword (the /kategoria/<slug> grid). | category, max_pages, sort, min_price, max_price, ... |
| offer | Single Allegro offer/product detail by id or URL — title, price (PLN), main image and gallery, seller handle, and description. | Catalog enrichment teams call offer to get single Allegro offer/product detail by id or URL. | offer_id, offer_url, url |
| seller_offers | A seller's public active listings, paginated — every offer a seller (shop) has live. Provide the seller login (handle from a seller URL / a search result's seller.login). | Retail analysts call seller_offers to get a seller's public active listings, paginated. | seller, max_pages, sort |
| categories | Find an Allegro category by name, or list the children of one. Returns the id you feed to `category` (and to search's `category` filter), the full path from the top of the tree, and whether it is a leaf. Allegro publishes 25 576 categories; this is how you find the right one without guessing a slug. | Pricing teams call categories to find an Allegro category by name, or list the children of one. | query, parent_id, leaf_only, limit |
| suggested | Related/recommended Allegro offers for a keyword — a quick set of relevant offers (the first result page) useful for 'more like this' / market discovery. | Marketplace operators call suggested to get related/recommended Allegro offers for a keyword. | query |
Call search from your stack
curl -X POST https://api.reefapi.com/allegro/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone 15"}'import requests
r = requests.post(
"https://api.reefapi.com/allegro/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone 15"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/allegro/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "iphone 15"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.allegro.search with {"query":"iphone 15"}.Who uses this API and why
- Pricing teams call search to track competitor prices and delivery offers across Allegro.
- Seller-intelligence tools use seller_offers to audit a competitor's full Allegro inventory.
- Market analysts use category to size supply and price ranges in a Polish product segment.
Questions developers ask before integrating
What is the difference between id and product_id?
id is the offer - one seller's listing, with its own price, stock and delivery - and it is the number in allegro.pl/oferta/<id>. product_id is the catalog product that many sellers list against, and it is a UUID, not a number; it is the trailing segment of an allegro.pl/produkt/<slug>-<uuid> URL. A measured row carried id 18678737081 and product_id 2c471a7b-e083-42cc-b811-faffef64ef77 for the same iPhone 15. Use the offer id for price tracking and the product UUID to group competing sellers.
Why is there a row in offers[] with every field null?
Because Allegro injects promotional tiles into its own results grid, and the engine returns the grid as served rather than quietly deleting rows. That row has type "banner", an id of BEST_PRICE_GUARANTEE_BANNER, a Polish title, and null for url, price, seller, rating and everything else. One appeared per measured page. Filter on type == "product" before you iterate, or your price parser will trip on the first null.
Why is the url an allegro.pl/events/clicks link instead of the offer page?
That is Allegro's ad click-tracker, and it appears on exactly the sponsored rows - in a measured page of 68, all 12 rows with is_sponsored true carried a /events/clicks URL and all 55 organic rows carried a direct link. The tracker does redirect to the offer, but it embeds an emission id and a timestamp, so it is neither stable nor durable. Build the canonical link from the id instead: https://allegro.pl/oferta/<id>.
What do context, is_sponsored and promoted distinguish?
context is Allegro's own placement label, with three measured values: SPONSORED (a paid ad slot, 12 rows), PROMOTED (a seller-boosted listing that still ranks organically, 34 rows) and REGULAR (21 rows). is_sponsored tracks SPONSORED only, and promoted tracks PROMOTED. If you are measuring genuine organic position, drop SPONSORED - keeping it inflates how prominent a brand looks.
Does Allegro still have auctions, and can I see bids?
Not in this response shape. Every measured row was a fixed-price listing carrying a single price object; there is no bid count, no current bid, no time remaining and no auction-versus-buy-now flag anywhere in the payload, and the only condition-related control is the new/used filter. Treat this engine as buy-now price intelligence. If a listing happens to be an auction on the site, you still get its displayed price, but you cannot tell it apart here.
How many offers do I get per page, and how far can I go?
A page is roughly 60 rows - a measured search returned 68, banner included - and max_pages runs to 10, so about 600 offers per query is the ceiling against a meta.total that read 192,928. meta.pages_fetched reports what was actually retrieved. For deeper coverage, split the query into min_price / max_price bands or add a category slug, or switch to seller_offers, which walks one seller's catalog the same way (61 rows on the first page of a measured storefront).
Why does the offer action return less than the search row for the same listing?
They read different pages. A search row carries rating, rating_count, delivery prices, seller feedback percent, parameters and category_id; the offer action reads the product page and returns id, url, title, price plus price_string ("2629,00 zł"), the full-resolution image gallery and a thin seller object of login and listing_url - with description null on the listing measured. If you need the commercial fields, keep the search row instead of re-fetching detail.
What does product_offers_count count?
The offers grouped under that product in the view you are looking at, not a global total. The same offer id returned product_offers_count 156 when it arrived through a keyword search - the sellers competing on that product page - and 1 when the same offer came back through seller_offers, where the surrounding view is a single storefront. Read it as a per-response figure and do not compare it across actions.
What is the Allegro API?
Allegro API is a ReefAPI endpoint group for allegro It returns live JSON through POST requests under /allegro/v1.
Is the Allegro API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Allegro calls use the same shared credit balance as every other ReefAPI engine.
Do I need an Allegro login or account?
No login to Allegro 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 Allegro 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 Allegro API use?
Allegro 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 Allegro from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call allegro actions with the same key, credit pool and JSON envelope used by normal REST requests.