Appearance
Allegro.pl Scraper API
Turn allegro.pl — Poland's largest marketplace — into structured commerce data. Send a search phrase, an EAN barcode or a category id and get back normalized offer cards; or point at one offer and get the full record with price, stock, seller and company data, delivery methods, parameters, images and product reviews. No proxy pool, anti-bot handling or parser maintenance on your side.
It ships as two synchronous Scraper APIs sharing one field model:
| Product | Type | Product code | What it does |
|---|---|---|---|
| Allegro Listing API | Scraper API (synchronous) | allegro_listing | Search the marketplace and get back normalized offer cards. |
| Allegro Offer API | Scraper API (synchronous) | allegro_offer | Give one offer id or URL, get the full offer detail. |
Plus one no-code product, Allegro.pl Scraper (allegro_pl), which sweeps several search pages and exports JSON, CSV or XML.
Every field is snake_case, the same convention as the Web Scraping API. Fields are returned in groups (location, pricing, overview, contact, shipping, media, product), with identifiers and primary collections at the top level.
Values stay in the marketplace's own language
Allegro is a Polish marketplace, so free-text values it authors — condition labels, delivery promises, parameter names — are returned exactly as the site renders them (Stan: Nowy, dostawa pt. 14 lis.). Ids, prices, counts and booleans are normalized.
What people build with it
| Use case | What you pull |
|---|---|
| Price monitoring | Buy-now price, price with delivery and discount state per offer, per day. |
| Barcode → offer lookup | Search an EAN/GTIN and get every offer Allegro resolves it to. |
| Seller intelligence | Seller login, Super Seller status, yearly rating split, company and tax id. |
| Assortment research | Category sweeps with condition, format and delivery filters. |
| Delivery cost analysis | Every delivery method with first/next item cost and the promised window. |
Allegro Listing API
GET https://api.scrapeit.io/api/v1/scrape/allegro/listing
x-api-key: YOUR_SCRAPEIT_API_KEYA search needs exactly one origin: phrase, category_id, an existing allegro.pl url whose filters are reused verbatim, or a product_id to list every offer of one catalogue product. Everything else narrows the result set the same way the site's own filters do. One request returns one results page — up to 100 cards.
Basic parameters
| Parameter | Type | Example | Description |
|---|---|---|---|
phrase | string | makita ddf484 | What to search for, e.g. makita ddf484. An EAN/GTIN barcode also works. |
category_id | string | 85166 | Allegro category id to browse, e.g. 85166. |
url | string | https://allegro.pl/kategoria/sluchawki-bezprzewodowe-85166?marka=Guess | An allegro.pl listing URL whose filters are reused verbatim. |
product_id | string | 6f05b1ef-a2b3-4075-938a-263472745ccc | product_id of a product card. Lists every seller's offer of that product. |
page_token | string | MTAwfHwwfDB8MTJ8MHwwfDF8MHwwfDB8MHw3Mg | Cursor of the next page: pass next_page_token from the previous response. Omit it for the first page. |
limit | number | 100 | Maximum offers to return, 1..100. Defaults to 100. |
sort | enum | price_low_high | relevance, price_low_high, price_high_low, price_with_delivery_low_high, price_with_delivery_high_low, popularity, newest, ending_soon. |
min_price | number | 200 | Lowest price to include, in PLN. |
max_price | number | 500 | Highest price to include, in PLN. |
include_detail | boolean | true | Also fetch each offer card. Billed as one extra unit per fetched offer. |
Advanced filters
| Parameter | Type | Example | Description |
|---|---|---|---|
conditions | multi-select | new,refurbished | new, used, refurbished, damaged, incomplete. |
formats | multi-select | buy_now | buy_now, auction, advertisement. |
free_delivery | boolean | true | Only offers with free delivery. |
smart_delivery | boolean | true | Only offers in the Allegro Smart! programme. |
vat_invoice | boolean | true | Only offers whose seller issues a VAT invoice. |
shipping_from_poland | boolean | true | Only offers dispatched from Poland. |
super_seller | boolean | true | Only offers from Allegro Super Sellers. |
personal_pickup | boolean | true | Only offers that can be collected in person. |
seller_logins | list | 2karma,bombazlavapl | Restrict the search to these seller logins. |
excluded_category_ids | list | 66887 | Category ids to keep out of the result set. |
Example
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/allegro/listing' \
-H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
--data-urlencode 'phrase=makita ddf484' \
--data-urlencode 'conditions=new' \
--data-urlencode 'vat_invoice=true' \
--data-urlencode 'sort=price_low_high' \
--data-urlencode 'limit=100'js
const response = await fetch(
'https://api.scrapeit.io/api/v1/scrape/allegro/listing?' +
new URLSearchParams({ phrase: 'makita ddf484', conditions: 'new', limit: '100' }),
{ headers: { 'x-api-key': 'YOUR_SCRAPEIT_API_KEY' } },
);
const { data } = await response.json();
console.log(data.total_count, data.items.length);python
import requests
response = requests.get(
'https://api.scrapeit.io/api/v1/scrape/allegro/listing',
headers={'x-api-key': 'YOUR_SCRAPEIT_API_KEY'},
params={'phrase': 'makita ddf484', 'conditions': 'new', 'limit': 100},
)
data = response.json()['data']
print(data['total_count'], len(data['items']))json
{
"data": {
"phrase": "makita ddf484",
"total_count": 128,
"current_page": 1,
"is_last_page": false,
"next_page_token": "MTAwfHwwfDB8MTJ8MHwwfDF8MHwwfDB8MHw3Mg",
"result_count": 100,
"items": [
{
"offer_id": "17365028772",
"product_id": null,
"url": "https://allegro.pl/oferta/makita-ddf484z-17365028772",
"name": "Makita DDF484Z wiertarko-wkrętarka 18V",
"badges": ["Top oferta", "Smart!"],
"pricing": {
"price": { "amount": "449.00", "value": 449, "currency": "PLN" },
"price_with_delivery": "458,99 zł z dostawą",
"price_with_delivery_amount": 458.99
},
"overview": {
"offer_type": "BUYNOW",
"quantity": 997,
"parameters_label": "Stan: Nowy",
"condition": "Nowy",
"popularity_label": "29 osób kupiło ostatnio",
"recent_buyers_count": 29
},
"contact": {
"seller_login": "2karma",
"seller_rating": "98,2%",
"seller_rating_percentage": 98.2
},
"shipping": { "delivery_label": "dostawa pt. 14 lis.", "is_smart": true },
"media": { "image_url": "https://a.allegroimg.com/original/..." }
}
]
}
}Every rendered label keeps its text, and the numbers in it come as numbers too: price_with_delivery_amount, seller_rating_percentage, recent_buyers_count (from popularity_label) and offer_count (how many offers a product card groups, from offer_count_label). condition is the Stan value of parameters_label, and is_smart marks an offer in the Allegro Smart! programme.
Paging through results
Allegro pages by cursor, not by page number. Every response carries next_page_token; send it back as page_token with the same search parameters to get the next page. It is null on the last page. A cursor belongs to its search — reusing it with different filters returns an unrelated page.
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/allegro/listing' \
-H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
--data-urlencode 'phrase=makita ddf484' \
--data-urlencode 'page_token=MTAwfHwwfDB8MTJ8MHwwfDF8MHwwfDB8MHw3Mg'Products and their offers
For many phrases Allegro answers with catalogue products rather than individual offers — the same cards the Allegro app shows. Such a search fits on one page (is_last_page: true, no next_page_token), while total_count counts the offers inside those products. A product card carries product_id next to offer_id; offer_id is the offer Allegro recommends for it.
To get every seller's offer of a product, search by its product_id:
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/allegro/listing' \
-H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
--data-urlencode 'product_id=6f05b1ef-a2b3-4075-938a-263472745ccc'Each offer then comes with its seller, seller rating, delivery and price with delivery. Allegro applies no filter or ordering to a product's offers, so product_id combines only with limit, page_token and include_detail; any other filter is rejected with 400 instead of being silently ignored.
Allegro Offer API
GET https://api.scrapeit.io/api/v1/scrape/allegro/offer
x-api-key: YOUR_SCRAPEIT_API_KEYGive either an offer_id or an allegro.pl offer url — the id is read out of the link for you.
| Parameter | Type | Example | Description |
|---|---|---|---|
offer_id | string | 17838076590 | Allegro offer id, e.g. 17838076590. |
url | string | https://allegro.pl/oferta/sluchawki-bezprzewodowe-douszne-guess-3666339051433-17065525430 | Absolute allegro.pl offer URL. |
include_seller_company | boolean | true | Also return the seller company name, tax id and registered address. |
include_description | boolean | true | Also return the offer description sections as plain text (large payload). |
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/allegro/offer' \
-H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
--data-urlencode 'offer_id=17838076590' \
--data-urlencode 'include_seller_company=true'js
const response = await fetch(
'https://api.scrapeit.io/api/v1/scrape/allegro/offer?' +
new URLSearchParams({ offer_id: '17838076590', include_seller_company: 'true' }),
{ headers: { 'x-api-key': 'YOUR_SCRAPEIT_API_KEY' } },
);
const { data } = await response.json();
console.log(data.offer_id, data.pricing.price.value);python
import requests
response = requests.get(
'https://api.scrapeit.io/api/v1/scrape/allegro/offer',
headers={'x-api-key': 'YOUR_SCRAPEIT_API_KEY'},
params={'offer_id': '17838076590', 'include_seller_company': 'true'},
)
data = response.json()['data']
print(data['offer_id'], data['pricing']['price']['value'])json
{
"data": {
"offer_id": "17838076590",
"name": "Słuchawki bezprzewodowe douszne Guess",
"parameters": [{ "id": "11323", "name": "Stan", "values": ["Nowy"], "group": null }],
"pricing": {
"price": { "amount": "207.81", "value": 207.81, "currency": "PLN" },
"is_buy_now": true,
"can_be_added_to_cart": true,
"invoice_label": "Wystawiam fakturę VAT"
},
"overview": { "status": "ACTIVE", "available_quantity": 3, "availability_label": "z 3 sztuk" },
"location": { "city": "Zvolen", "country_code": "SK" },
"contact": {
"seller": {
"login": "bombazlavapl",
"positive_rating_percentage": 93.5,
"negative_rating_percentage": 6.5,
"company_name": "Bomba Zľava SK s. r. o.",
"company_tax_id": "SK2121570022",
"company_country_code": "SK"
}
},
"shipping": {
"delivery_methods": [
{
"name": "Dostawa przez sprzedającego pobranie",
"group": "Na adres za pobraniem",
"first_item_price": { "amount": "38.00", "value": 38, "currency": "PLN" }
}
],
"cheapest_delivery_price": { "amount": "28.00", "value": 28, "currency": "PLN" },
"return_period_label": "14 dni",
"implied_warranty_label": "2 lata"
},
"media": { "image_count": 5 },
"product": { "product_rating": 5, "product_rating_count": 7 }
}
}Each delivery method names its group as the offer page lists it, so Na adres za pobraniem (cash on delivery) stays apart from a prepaid delivery by the same carrier. seller.negative_rating_percentage completes the yearly rating split.
No-code bulk export
The Allegro.pl Scraper (allegro_pl) sweeps several search pages in one job and writes the result as files. It takes the same filters as the Listing API, plus:
| Parameter | Type | Example | Description |
|---|---|---|---|
max_pages | number | 10 | Maximum listing pages to sweep, 1..20. Defaults to 5. |
output_format | multi-select | ["json", "csv"] | One or more of json, csv, xml. Defaults to ["json"]; an empty list is rejected. |
In a bulk job limit caps the whole export, not each page: limit: 80 takes the first 80 offers in Allegro's order - from the following pages too when a page returned fewer - and the sweep stops there. An offer Allegro repeats on a later page is written once, and the sweep ends when Allegro hands back a page or cursor it already served.
JSON keeps the grouped shape shown above. CSV and XML are flat, with group-prefixed columns (pricing_price_value, contact_seller_login) so the export drops straight into a spreadsheet.
bash
curl -X POST 'https://api.scrapeit.io/api/v1/scrapers/allegro/jobs' \
-H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
-H 'content-type: application/json' \
-d '{ "phrase": "makita", "max_pages": 5, "output_format": ["json", "csv"] }'A small sweep finishes inline and answers with the result file ids. A large one comes back queued; poll GET /api/v1/scrapers/allegro/jobs/{jobId} until the status is terminal. With an API key, starting a job needs the scrapers:run scope and polling it scrapers:read; the dashboard session works too. A job started with an API key runs under that key, queued or not: its pages count in the key's usage.
Billing
- One listing search = one unit.
include_detailadds one unit per offer card fetched.- A bulk sweep charges per page it fetched, and the job reports what it spent.
- Price per unit: 30 credits, flat - proxy included (request cost).
Errors
| Status | Meaning |
|---|---|
400 | The search had no phrase/category_id/url, the offer had no offer_id/url, or a URL was not an allegro.pl URL. |
403 | Not enough credits for the request (INSUFFICIENT_CREDITS). |
404 | Allegro has no offer with this offer_id/url (NOT_FOUND) - removed or mistyped; retrying will not help. |
429 | The plan's concurrency limit is already in use. |
502 | Allegro refused the request on every attempt; retry later. |
502 | Allegro rejected the search query itself; details.graphql_errors carries its messages. Most often a page_token that is not a cursor Allegro issued for this search - pass next_page_token back unchanged. |
Related pages
- Web Scraping API - the general single-URL scraper.
- Managed Allegro scraping - ScrapeIt builds, runs and monitors the scraper for you and delivers ready-to-use data.