# Allegro Scraper — Offers, Prices & Sellers (Poland) (`tortuga/allegro-scraper`) Actor

Scrape Allegro.pl offers from search, category and offer URLs: price, delivery, Smart!, sold count, condition, seller and rating, with optional specs and reviews.

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

## Pricing

from $2.00 / 1,000 offer scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Allegro Scraper — Offers, Prices & Sellers (Poland)

Scrape **Allegro.pl**, Poland's largest marketplace (and **allegro.cz** / **allegro.sk**): offers from keyword searches, category pages, seller pages and single offer URLs. For every offer you get the price in PLN, the price before discount ("cena z 30 dni") and discount %, delivery price and price with delivery, the **Allegro Smart!** free-delivery flag, Buy Now vs **auction** with time left, how many people bought the product recently ("127 osób kupiło ostatnio"), condition, the seller's login, company flag, **Super Seller** badge and positive-feedback %, the product's star rating and rating count, images, parameters and the Allegro product (catalogue) link.

Turn on **offer details** for stock left, the offer's own sold count, **number of bidders, minimum next bid and auction end time**, full specifications, description, EAN, brand, all images, delivery options with prices, return policy and seller details (company name, city, ratings in the last 12 months). Turn on **reviews** to add up to 15 product reviews per offer.

No login, no cookies, no browser. Export to JSON, CSV or Excel, or pull the data through the API into Google Sheets, your BI tool or an LLM pipeline.

### What data does Allegro Scraper extract?

| Field | Example | Notes |
|---|---|---|
| `offerId`, `url` | `18977991041`, `https://allegro.pl/produkt/…?offerId=18977991041` | offer id and link |
| `title` | `Telewizor LED Manta MATV002LHN32 32" HD Ready` | as shown in the results (catalogue name for catalogued offers) |
| `price`, `currency` | `399.99`, `PLN` | current bid for auctions; CZK on allegro.cz, EUR on allegro.sk |
| `originalPrice`, `discountPercent` | `479.0`, `10` | lowest price of the last 30 days before the discount, as Allegro shows it |
| `buyNowPrice` | `1036.02` | auctions that also have a Buy Now price |
| `deliveryPrice`, `priceWithDelivery`, `freeDelivery` | `14.99`, `414.98`, `false` | cheapest delivery |
| `smart` | `true` | Allegro Smart! (free delivery for Smart! members) |
| `deliveryTime` | `dostawa we wtorek` | delivery estimate shown on the card |
| `offerType`, `timeLeft` | `AUCTION`, `14 godzin` | `BUY_NOW` or `AUCTION` |
| `productSoldRecently`, `popularityLabel` | `127`, `127 osób kupiło ostatnio` | buyers of this product in the last 30 days (all sellers) |
| `condition` | `Nowy`, `Używany`, `Po zwrocie` | |
| `sellerLogin`, `sellerId`, `sellerUrl` | `aniaagd1`, `19816138`, `https://allegro.pl/uzytkownik/aniaagd1` | |
| `sellerType`, `sellerIsCompany`, `superSeller`, `sellerPositiveFeedbackPercent` | `Oficjalny sklep`, `true`, `false`, `98.7` | |
| `rating`, `ratingCount` | `4.88`, `2360` | product rating (1-5 stars) |
| `productId`, `productName`, `productUrl` | `a271c88a-…`, `Telewizor LED Manta…` | Allegro catalogue product |
| `productOffersCount`, `productOffersUrl` | `8`, `https://allegro.pl/oferty-produktu/…` | other sellers' offers of the same product |
| `image`, `images` | full-size image URLs | |
| `parameters` | `{"Smart TV": "nie", "Liczba złączy HDMI": "2"}` | key parameters shown on the card |
| `categoryId`, `sponsored`, `promoted`, `bestPriceGuarantee`, `badges` | `257732`, `false`, `true`, `true`, `["PROMOCJA"]` | |
| `position`, `page`, `searchQuery`, `sourceUrl`, `site`, `scrapedAt` | `4`, `1`, `telewizor`, …, `allegro.pl`, ISO time | rank in the results |

**With "Include offer details" on (or for offer URLs):** `offerTitle` (the seller's own title), `availableQuantity` (stock), `offerSoldRecently` ("58 osób kupiło tę ofertę"), `bidders`, `minNextBid`, `auctionEndsAt`, `specifications` (all parameters), `description` (plain text), `brand`, `ean`, `reviewCount`, `categoryPath`, `deliveryEstimate`, `shippingOptions` (`[{"name": "Kurier, DPD", "price": 14.99}]`), `returnPolicy`, `sellerCompanyName`, `sellerCity`, `sellerCountry`, `sellerPositiveRatingsLastYear`, `sellerNegativeRatingsLastYear`, `detailsScraped: true`.

**With "Include product reviews" on:** `reviews` = up to 15 reviews shown on the offer page: `rating`, `text`, `pros`, `cons`, `date`, `reviewer` (the masked nick Allegro shows, e.g. `m...5`), `helpfulVotes`, `seller`.

### How to scrape Allegro offers

1. Enter keywords in **Search keywords** (for example `telewizor`, `iphone 15`, `lego technic`) and/or paste Allegro URLs into **Allegro URLs**: search results, categories (`https://allegro.pl/kategoria/laptopy-491`), seller pages (`https://allegro.pl/uzytkownik/<login>`), "all offers of a product" pages or single offers (`https://allegro.pl/oferta/18977991041`). Filters you set on Allegro are kept: copy the URL from your browser.
2. Optionally pick **Sort by**, **Offer type** (Buy Now / auctions), **Condition**, a price range or **Allegro Smart! only**.
3. Set **Max offers** (and **Max offers per search** when you run several searches).
4. Turn on **Include offer details** / **Include product reviews** if you need them, and click **Start**.

#### Input example

```json
{
  "searchQueries": ["telewizor"],
  "offerType": "auction",
  "sort": "ending_soon",
  "maxItems": 100,
  "includeDetails": true
}
```

#### Output example (auction with details)

```json
{
  "offerId": "18988260347",
  "title": "Telewizor QLED Metz 32MQF7000Z 32\" HD Ready czarny",
  "url": "https://allegro.pl/produkt/telewizor-qled-metz-32mqf7000z-32-hd-ready-czarny-8e07f09e-2fe3-4a57-8e5c-5a1049346cd2?offerId=18988260347",
  "price": 220,
  "currency": "PLN",
  "deliveryPrice": 14.99,
  "priceWithDelivery": 234.99,
  "smart": true,
  "deliveryTime": "dostawa w środę",
  "offerType": "AUCTION",
  "timeLeft": "2 dni do końca licytacji",
  "auctionEndsAt": "2026-10-12T18:53:00Z",
  "bidders": 14,
  "minNextBid": 225,
  "availableQuantity": 1,
  "condition": "Powystawowy",
  "sellerLogin": "outlet_2010",
  "sellerType": "Firma",
  "superSeller": false,
  "sellerPositiveFeedbackPercent": 95.1,
  "sellerPositiveRatingsLastYear": 1008,
  "sellerCity": "Olkusz",
  "rating": 4.77,
  "ratingCount": 22,
  "productId": "8e07f09e-2fe3-4a57-8e5c-5a1049346cd2",
  "productOffersCount": 8,
  "brand": "Metz",
  "ean": "4057313024946",
  "specifications": { "Stan": "Powystawowy", "Marka": "Metz", "Model": "32MQF7000Z", "Typ telewizora": "QLED" },
  "categoryPath": ["Elektronika", "RTV i AGD", "TV i Video", "Telewizory"],
  "returnPolicy": "Zwrot za darmo – 14 dni",
  "shippingOptions": [{ "name": "Kurier, DPD (SMART!)", "price": 0, "currency": "PLN" }],
  "position": 4,
  "page": 1,
  "searchQuery": "telewizor",
  "site": "allegro.pl",
  "detailsScraped": true,
  "scrapedAt": "2026-10-10T03:59:42+00:00"
}
```

### How to scrape Allegro reviews

Turn on **Include product reviews**: each offer gets a `reviews` list with the product reviews Allegro shows on the offer page (up to 15, in the order Allegro shows them, with rating, text, pros/cons, date and the masked reviewer nick). The product's overall `rating`, `ratingCount` and `reviewCount` cover all reviews. Reviews need the offer page, so the detail charge applies.

### Monitor changes on a schedule

Turn on **Only new or changed items** and save the input as a task with a daily [Schedule](https://docs.apify.com/platform/schedules). Each run remembers what earlier runs of the same search returned and outputs only offers that are new or whose price, Buy Now price or availability changed; unchanged offers are not output and not charged, and no offer page is opened for them. New offers carry `changeType: "new"`; changed ones carry `changeType: "changed"` and `previousValues` with the old values (for example `{"price": 449.0}`). With monitoring on, **Max offers** is the number of listing offers checked per run (for example the 50 newest). Use **Monitoring key** to keep several watches of the same search apart.

### How much does it cost to scrape Allegro?

Pay per result, no subscription:

- **$0.002 per offer** from search, category or seller pages ($2 per 1,000 offers),
- **+$0.001 per offer** whose offer page is opened (details or reviews on, or offer URLs).

Platform usage is billed to your Apify account at cost. **Proxy note:** Allegro is protected by DataDome, so the actor uses Apify's **UNBLOCKER** proxy by default. Every page request through it costs about **$0.0015** (failed attempts included), and one search page returns ~60 offers: about **$0.05-0.07 of usage per 1,000 offers** for search results. Offer details need one more request per offer (about $1.5-2 of usage per 1,000 detailed offers). Unblocker requests take 20-70 seconds each, so a 1,000-offer search takes a few minutes. The **RESIDENTIAL** proxy (Poland) is faster and costs about the same per page, but Allegro refuses it more often; the actor retries refused pages on new IPs.

### Does it work without an Allegro login?

Yes. Everything comes from public pages that anyone can open without an account. No cookies or login are needed. Seller phone numbers and e-mails are not collected.

### Can I scrape allegro.cz and allegro.sk?

Yes: set **Allegro site for keywords** to allegro.cz or allegro.sk, or paste their URLs (`https://allegro.cz/vyhledavani?string=lego`). Prices are in CZK / EUR there; the fields are the same.

### How many offers can I get per search?

Allegro shows at most 100 pages (about 6,000 offers) for one search or category. Split bigger jobs by price range, condition or subcategory. For catalogued products Allegro shows one card per product (the best offer); to get every seller's offer of a product, paste its `productOffersUrl` (an `allegro.pl/oferty-produktu/…` page) as a URL. Sponsored offers are left out by default (they repeat organic ones); turn on **Include sponsored offers** to keep them.

### Integrations and API

Use the run in Zapier, Make, n8n or Google Sheets, or call it from Python/Node with the Apify client. See the **API** tab for ready-made snippets.

### Is it legal to scrape Allegro?

The actor collects only data that Allegro shows publicly: offers, prices, public seller information that Allegro displays for businesses, and reviews with the masked nick shown on the page. Nothing behind a login is collected. You are responsible for how you use the data and for complying with Allegro's terms and applicable law (including GDPR when you process data about people).

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab; it is usually answered within a day.

# Actor input Schema

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

Keywords to search on Allegro, one per line, e.g. 'iphone 15' or 'telewizor 55'. Each keyword is one search; the filters below apply to it.

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

Allegro pages to scrape: search results (https://allegro.pl/listing?string=lego), categories (https://allegro.pl/kategoria/laptopy-491), seller pages, 'all offers of a product' pages, or single offers (https://allegro.pl/oferta/18977991041). allegro.cz and allegro.sk URLs work too. Filters already in the URL are kept.

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

Stop after this many offers in total (you pay per offer). With 'Only new or changed items' on, this is the number of listing offers checked per run.

## `maxItemsPerSearch` (type: `integer`):

Optional cap per keyword / listing URL, so several searches share 'Max offers' fairly. Leave empty for no per-search cap.

## `site` (type: `string`):

Which Allegro site the keywords are searched on. Prices come in PLN (allegro.pl), CZK (allegro.cz) or EUR (allegro.sk).

## `sort` (type: `string`):

Order of the results, as on Allegro.

## `offerType` (type: `string`):

Only Buy Now offers, only auctions, or both.

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

New or used items only (allegro.pl).

## `minPrice` (type: `integer`):

Lowest price in the site's currency (PLN on allegro.pl).

## `maxPrice` (type: `integer`):

Highest price in the site's currency (PLN on allegro.pl).

## `smartOnly` (type: `boolean`):

Only offers with free Allegro Smart! delivery.

## `includeSponsored` (type: `boolean`):

Also save the ~12 sponsored offers Allegro mixes into each page (marked sponsored: true). Off: only the organic results.

## `includeDetails` (type: `boolean`):

Open each offer page for stock left, offer sold count, bidders, auction end time, full specifications, description, EAN, brand, all images, delivery options, return policy and seller details. One extra page request per offer (slower, extra 'detail' charge).

## `includeReviews` (type: `boolean`):

Add the product reviews shown on the offer page (up to 15: rating, text, pros/cons, date, reviewer nick as shown). Turns on offer details.

## `maxReviewsPerOffer` (type: `integer`):

How many of the reviews shown on the offer page to keep (1-15).

## `onlyNewOrChanged` (type: `boolean`):

Remember what earlier runs of this search returned and output only new items or items whose price/status changed. Use with a Schedule; unchanged items are not charged.

## `monitoringKey` (type: `string`):

Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input.

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

Allegro is protected by DataDome. The default Apify UNBLOCKER group is the reliable option: each page request costs about $0.0015 of proxy usage (one listing page = ~60 offers; with details, one more request per offer). RESIDENTIAL (Poland) is cheaper per request but is refused more often, so runs take longer.

## Actor input object example

```json
{
  "searchQueries": [
    "telewizor"
  ],
  "maxItems": 100,
  "site": "allegro.pl",
  "sort": "relevance",
  "offerType": "all",
  "condition": "any",
  "smartOnly": false,
  "includeSponsored": false,
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerOffer": 15,
  "onlyNewOrChanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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": [
        "telewizor"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/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": ["telewizor"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tortuga/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": [
    "telewizor"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call tortuga/allegro-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tortuga/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/omiwjE5aBgwlNMYxK/builds/TkRR74N6TGfoozAc8/openapi.json
