# Allegro Scraper — Prices, Sellers, Specs & Reviews (`crawloop/allegro-scraper`) Actor

Scrape Allegro.pl, .cz and .sk: keyword search, categories, seller catalogs and offer URLs. Prices, Smart!, stock, EAN, specs and reviews. HTTP Allegro API alternative — JSON via Python, Node.js, MCP.

- **URL**: https://apify.com/crawloop/allegro-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 product listings

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Allegro Scraper — Prices, Sellers, Specs & Reviews

> **Disclaimer:** Unofficial tool developed independently. Not affiliated with, sponsored by, or endorsed by Allegro. Allegro and related trademarks belong to their respective owners. Data is read from publicly accessible listing and offer pages. Provided for informational and research use; you must comply with Allegro terms and applicable law.

**Allegro scraper** for Poland’s #1 marketplace and the Czech / Slovak storefronts. Pull keyword search, category pages, seller catalogs, offer URLs, or EAN/GTIN lookups into JSON/CSV via Apify. Each row can include price (current + original), currency, Smart! / promoted flags, seller reputation, delivery, sales velocity, images, full specifications, stock, barcode, and highlighted reviews. Fast HTTP path (TLS impersonation, no heavy browser) with **PL / CZ / SK residential proxy**. Use it as an **Allegro API alternative** from **Python**, **Node.js**, cURL, or **MCP** / AI assistants.

**Best for:** Allegro price monitoring, MAP / EAN matching, competitor seller catalogs, and CEE e-commerce research.

> **Crawloop marketplace suite** — retail and classified scrapers.

| Allegro Scraper ◄── you are here | [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper) | [Marktplaats Scraper](https://apify.com/crawloop/marktplaats-scraper) | [Mercado Libre Scraper](https://apify.com/crawloop/mercado-libre-listings-scraper) | [Etsy Scraper](https://apify.com/crawloop/etsy-scraper) |
| :--- | :--- | :--- | :--- | :--- |
| Allegro.pl / .cz / .sk offers | Germany classifieds | Netherlands classifieds | LATAM marketplace | Etsy listings |

### When to use this Actor

- **Allegro search scraping** — Keywords in Polish, Czech, Slovak, or English (`iphone 15`, `lego technic`, `odkurzacz`)
- **Category inventory** — Paste `/kategoria/…` listing URLs (or Czech/Slovak category paths)
- **Seller catalog** — Full public storefront for a `/uzytkownik/…` login
- **Offer detail enrichment** — Specs table, description, gallery, stock, warranty, return policy, GTIN/EAN
- **EAN / GTIN matching** — Barcode lookup for MAP, dropshipping, and catalog alignment
- **Review sampling** — Highlighted public opinions (author, stars, text, date)
- **CEE coverage** — `allegro.pl` (PLN), `allegro.cz` (CZK), `allegro.sk` (EUR)

### When not to use this Actor

- **Allegro REST / seller API** — No OAuth, orders, or merchant cabinet
- **Private messages or buyer PII** — Public offer pages only
- **Unlimited unscoped crawls** — Set `maxItems` / `maxPagesPerQuery` to control spend

### Key features

- **Keywords + URLs + IDs + EAN** — Mix search terms, category/seller/offer URLs, offer IDs, and barcodes
- **Listing JSON, not CSS** — Parses `__listing_StoreState` and serialize-box JSON Allegro embeds in the page
- **Promoted vs organic** — Keeps ads and flags `promoted` / `sponsored` / `smart` (or drop promoted cards)
- **Sales velocity** — Recent-buyer popularity label when Allegro shows it
- **Optional deep fields** — Toggle details and reviews so listing-only runs stay fast
- **DataDome-aware HTTP** — Chrome TLS impersonation + residential session rotation
- **MCP / AI ready** — Call from Claude, Cursor, and other tools via Apify MCP

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchQueries` | Array | — | Keywords or 8–14 digit EAN/GTIN codes |
| `startUrls` | Array | — | Offer, search, category, or seller URLs |
| `eans` | Array | — | Dedicated barcode list |
| `offerIds` | Array | — | Numeric offer IDs |
| `sellerLogins` | Array | — | Storefront slugs |
| `marketplace` | String | `pl` | `pl` / `cz` / `sk` (URL host wins when present) |
| `sortBy` | String | `relevance` | `relevance`, `price-asc`, `price-desc`, `newest`, `popularity` |
| `minPrice` / `maxPrice` | Number | — | Price filters in the local currency |
| `condition` | String | `all` | `all` / `new` / `used` |
| `scrapeProductDetails` | Boolean | `false` | Offer-page specs, stock, GTIN, warranty |
| `scrapeReviews` | Boolean | `false` | Highlighted public reviews |
| `scrapeAllSellers` | Boolean | `false` | Follow `/produkt/{id}` to collect every seller of a SKU |
| `maxReviewsPerProduct` | Integer | `30` | Review cap per offer |
| `includePromoted` | Boolean | `true` | Keep promoted cards |
| `barcodeQuickLookup` | Boolean | `true` | First EAN match, skip detail unless deep mode is on |
| `maxItems` | Integer | `50` | Maximum offer rows |
| `maxPagesPerQuery` | Integer | `20` | ~60 offers/page; `0` = until empty |
| `requestDelayMs` | Integer | `400` | Delay between HTTP requests |
| `proxyConfiguration` | Object | Residential PL | Apify Proxy — **residential in PL/CZ/SK required** |

#### Input example

```json
{
  "searchQueries": ["iphone 15"],
  "marketplace": "pl",
  "maxItems": 50,
  "scrapeProductDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "PL"
  }
}
```

Category + seller + offer URLs:

```json
{
  "startUrls": [
    { "url": "https://allegro.pl/kategoria/elektronika" },
    { "url": "https://allegro.pl/uzytkownik/Elektromaniak_" },
    { "url": "https://allegro.pl/oferta/18529923195" }
  ],
  "maxItems": 80,
  "includePromoted": true
}
```

EAN / GTIN lookup:

```json
{
  "eans": ["5901234123457"],
  "barcodeQuickLookup": true,
  "maxItems": 20
}
```

### Output

| Field | Description |
| :--- | :--- |
| `offerId`, `productId`, `url` | Offer id and public URL |
| `title`, `brand`, `condition`, `gtin`, `sku`, `buyingFormat` | Identity, barcode, buy-now vs auction |
| `price`, `originalPrice`, `omnibusLowestPrice30d`, `discountPercent` | Current / was / 30-day low |
| `delivery`, `installments`, `priceWithDelivery` | Shipping and raty |
| `seller` | Login, Super Seller, feedback, company / NIP when shown |
| `popularity`, `productOffersCount` | Buyers label + other-seller count |
| `promoted`, `sponsored`, `smart` | Placement and Smart! flags |
| `images`, `thumbnail` | Gallery / card image |
| `parameters`, `specs`, `parameterGroups` | Spec rows + spreadsheet map |
| `description`, `stock`, `warranty`, `returnPolicy` | Deep-mode fields |
| `rating`, `reviewsCount`, `reviews` | Stars and highlighted opinions |
| `marketplace`, `page`, `position`, `scrapedAt` | Crawl context |

#### Output example

```json
{
  "offerId": "18529923195",
  "url": "https://allegro.pl/oferta/18529923195",
  "title": "Smartfon Motorola Moto G15 8 GB / 128 GB 4G (LTE) niebieski",
  "brand": "Motorola",
  "condition": "Nowy",
  "gtin": "5901234123457",
  "price": 424.0,
  "originalPrice": 499.0,
  "currency": "PLN",
  "smart": true,
  "promoted": false,
  "productOffersCount": 14,
  "popularity": { "buyersQuantity": 32, "label": "32 osoby kupiły" },
  "seller": {
    "login": "Elektromaniak_",
    "superSeller": true,
    "positiveFeedbackPercent": 97.6
  },
  "delivery": { "free": true, "label": "dostawa gratis" },
  "marketplace": "pl"
}
```

### Use cases

- **Price monitoring / repricing** — Track Allegro SKUs daily in PLN / CZK / EUR
- **MAP and brand protection** — EAN lookup across sellers, including sponsored placements
- **Seller research** — Crawl a competitor storefront for assortment and prices
- **Catalog research** — Specs, stock, warranty, and multi-seller offer counts
- **Demand signals** — Popularity / recent-buyer labels plus review volume

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/allegro-scraper').call({
  searchQueries: ['iphone 15'],
  marketplace: 'pl',
  maxItems: 50,
  scrapeProductDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("crawloop/allegro-scraper").call(run_input={
    "searchQueries": ["iphone 15"],
    "marketplace": "pl",
    "maxItems": 50,
    "scrapeProductDetails": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"], item["url"])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~allegro-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["iphone 15"],"marketplace":"pl","maxItems":20}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Connect your Apify account, then call this Actor by its Store ID `crawloop/allegro-scraper`.

Example prompts:

- "Run Allegro Scraper for iphone 15 on allegro.pl, enable product details, and return the 20 cheapest rows as JSON"
- "Scrape an Allegro seller storefront and summarize Super Seller share and median PLN price"
- "Chain Allegro Scraper then [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper) to compare the same gadget keyword in Poland vs Germany"

### Suite next step

After Allegro catalog data, run [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper) for German classified comps or [eBay Active Listings Scraper](https://apify.com/crawloop/ebay-active-listings-scraper) for another EU marketplace channel.

### FAQ

**Is this the official Allegro API?** No. The official REST API is OAuth-gated for sellers managing their own inventory. This Actor reads the public listing/offer JSON a logged-out visitor already receives.

**Listing-only vs details?** Listing rows already include price, seller, Smart!, delivery, parameters, images, and popularity. Turn on `scrapeProductDetails` and/or `scrapeReviews` for stock, GTIN, warranty, and opinions.

**Do I need a proxy?** Yes on Apify. Allegro sits behind DataDome. Use **residential PL** (or CZ/SK to match the storefront). Datacenter IPs usually get 403.

**Pagination?** Each listing page returns about 60 offers. The Actor reads `lastAvailablePage` from `searchMeta` and walks `p=2,3,…` until empty, `maxPagesPerQuery`, or `maxItems`.

**Promoted ads?** Kept by default and flagged (`promoted` / `sponsored`). Set `includePromoted` to false for organic-only.

**Personal data?** Only public offer fields. No inboxes, phones, or order IDs.

### Related Actors

- [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper)
- [Marktplaats Scraper](https://apify.com/crawloop/marktplaats-scraper)
- [eBay Active Listings Scraper](https://apify.com/crawloop/ebay-active-listings-scraper)
- [Mercado Libre Scraper](https://apify.com/crawloop/mercado-libre-listings-scraper)
- [Etsy Scraper](https://apify.com/crawloop/etsy-scraper)

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords or EAN/GTIN barcodes to search on Allegro (e.g. iphone 15, lego technic, 5901234123457).

## `startUrls` (type: `array`):

Allegro offer pages (/oferta/), search (/listing?string=), categories (/kategoria/), seller storefronts (/uzytkownik/), plus Czech/Slovak equivalents.

## `eans` (type: `array`):

8–14 digit barcodes. Each code is searched and matched offers are saved (gtin filled automatically).

## `offerIds` (type: `array`):

Numeric Allegro offer IDs from /oferta/…-{id}.

## `sellerLogins` (type: `array`):

Public seller storefront logins (the slug after /uzytkownik/).

## `marketplace` (type: `string`):

Regional Allegro storefront. Start URLs override this when they already include a host.

## `sortBy` (type: `string`):

Search / category sort order.

## `minPrice` (type: `number`):

Minimum price in the marketplace currency (PLN / CZK / EUR). Maps to Allegro price\_from.

## `maxPrice` (type: `number`):

Maximum price in the marketplace currency. Maps to Allegro price\_to.

## `condition` (type: `string`):

Filter by item condition (stan).

## `scrapeProductDetails` (type: `boolean`):

Open each offer page for description, full spec table, stock, GTIN/EAN, warranty, return policy, rating and full-resolution images. One extra request per offer.

## `scrapeReviews` (type: `boolean`):

Collect highlighted public reviews from the offer page (author, stars, text, date).

## `maxReviewsPerProduct` (type: `integer`):

Cap on reviews when Customer reviews is on.

## `includePromoted` (type: `boolean`):

Keep PROMOTED and sponsored listing cards (flagged on the row). Turn off to keep organic order only.

## `scrapeAllSellers` (type: `boolean`):

When a catalog productId is found, also crawl /produkt/{id} (Wszystkie oferty) so every seller of that SKU is saved. Paste /produkt/ URLs to do this directly.

## `barcodeQuickLookup` (type: `boolean`):

For pure EAN/GTIN searches, take the first matching offer and skip the detail page unless Product details is on.

## `maxItems` (type: `integer`):

Maximum offer rows across all queries and URLs.

## `maxPagesPerQuery` (type: `integer`):

Allegro returns ~60 offers per page and caps around 100 pages. 0 = paginate until empty or Max offers.

## `requestDelayMs` (type: `integer`):

Politeness delay between HTTP requests.

## `proxyConfiguration` (type: `object`):

Residential proxy in the marketplace country is required. DataDome blocks most datacenter IPs.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone 15"
  ],
  "startUrls": [],
  "marketplace": "pl",
  "sortBy": "relevance",
  "condition": "all",
  "scrapeProductDetails": false,
  "scrapeReviews": false,
  "maxReviewsPerProduct": 30,
  "includePromoted": true,
  "scrapeAllSellers": false,
  "barcodeQuickLookup": true,
  "maxItems": 50,
  "maxPagesPerQuery": 20,
  "requestDelayMs": 400,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "PL"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items — one Allegro offer per row.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "iphone 15"
    ],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "PL"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/allegro-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["iphone 15"],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "PL",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/allegro-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "iphone 15"
  ],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "PL"
  }
}' |
apify call crawloop/allegro-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/allegro-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hDEDos0YsP3w52l4R/builds/ueE1Xj3POMYFNTCG3/openapi.json
