Skip to content

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:

ProductTypeProduct codeWhat it does
Allegro Listing APIScraper API (synchronous)allegro_listingSearch the marketplace and get back normalized offer cards.
Allegro Offer APIScraper API (synchronous)allegro_offerGive 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 caseWhat you pull
Price monitoringBuy-now price, price with delivery and discount state per offer, per day.
Barcode → offer lookupSearch an EAN/GTIN and get every offer Allegro resolves it to.
Seller intelligenceSeller login, Super Seller status, yearly rating split, company and tax id.
Assortment researchCategory sweeps with condition, format and delivery filters.
Delivery cost analysisEvery 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_KEY

A 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 ​

ParameterTypeExampleDescription
phrasestringmakita ddf484What to search for, e.g. makita ddf484. An EAN/GTIN barcode also works.
category_idstring85166Allegro category id to browse, e.g. 85166.
urlstringhttps://allegro.pl/kategoria/sluchawki-bezprzewodowe-85166?marka=GuessAn allegro.pl listing URL whose filters are reused verbatim.
product_idstring6f05b1ef-a2b3-4075-938a-263472745cccproduct_id of a product card. Lists every seller's offer of that product.
page_tokenstringMTAwfHwwfDB8MTJ8MHwwfDF8MHwwfDB8MHw3MgCursor of the next page: pass next_page_token from the previous response. Omit it for the first page.
limitnumber100Maximum offers to return, 1..100. Defaults to 100.
sortenumprice_low_highrelevance, price_low_high, price_high_low, price_with_delivery_low_high, price_with_delivery_high_low, popularity, newest, ending_soon.
min_pricenumber200Lowest price to include, in PLN.
max_pricenumber500Highest price to include, in PLN.
include_detailbooleantrueAlso fetch each offer card. Billed as one extra unit per fetched offer.

Advanced filters ​

ParameterTypeExampleDescription
conditionsmulti-selectnew,refurbishednew, used, refurbished, damaged, incomplete.
formatsmulti-selectbuy_nowbuy_now, auction, advertisement.
free_deliverybooleantrueOnly offers with free delivery.
smart_deliverybooleantrueOnly offers in the Allegro Smart! programme.
vat_invoicebooleantrueOnly offers whose seller issues a VAT invoice.
shipping_from_polandbooleantrueOnly offers dispatched from Poland.
super_sellerbooleantrueOnly offers from Allegro Super Sellers.
personal_pickupbooleantrueOnly offers that can be collected in person.
seller_loginslist2karma,bombazlavaplRestrict the search to these seller logins.
excluded_category_idslist66887Category 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_KEY

Give either an offer_id or an allegro.pl offer url — the id is read out of the link for you.

ParameterTypeExampleDescription
offer_idstring17838076590Allegro offer id, e.g. 17838076590.
urlstringhttps://allegro.pl/oferta/sluchawki-bezprzewodowe-douszne-guess-3666339051433-17065525430Absolute allegro.pl offer URL.
include_seller_companybooleantrueAlso return the seller company name, tax id and registered address.
include_descriptionbooleantrueAlso 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:

ParameterTypeExampleDescription
max_pagesnumber10Maximum listing pages to sweep, 1..20. Defaults to 5.
output_formatmulti-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_detail adds 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 ​

StatusMeaning
400The search had no phrase/category_id/url, the offer had no offer_id/url, or a URL was not an allegro.pl URL.
403Not enough credits for the request (INSUFFICIENT_CREDITS).
404Allegro has no offer with this offer_id/url (NOT_FOUND) - removed or mistyped; retrying will not help.
429The plan's concurrency limit is already in use.
502Allegro refused the request on every attempt; retry later.
502Allegro 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.

ScrapeIt Web Scraping API documentation. Managed web scraping services: www.scrapeit.io.