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

Scrape Allegro search results for price monitoring and seller comps. Each row includes current and original price, seller, Smart!, condition, and listing parameters. Export JSON from Python, Node.js, or MCP.

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

## Pricing

from $1.99 / 1,000 product listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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?

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

**Allegro Scraper** pulls search cards from Allegro into JSON. It is not affiliated with Allegro.

Use it for price monitoring and seller comps on Poland, Czechia, and Slovakia. Each row is one offer from the search page: current price, original price, seller, Smart! badge, condition, and the parameters shown on the card. Run it from Python, Node.js, cURL, or an AI assistant over MCP.

Allegro Scraper ◄── you are here

| Actor | What it collects |
| :--- | :--- |
| Allegro Scraper ◄── you are here | Allegro search cards: price, seller, Smart! |
| [Trendyol Scraper](https://apify.com/crawloop/trendyol-scraper) | Turkey retail search: price, brand, seller |
| [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper) | Germany classifieds |
| [Marktplaats Scraper](https://apify.com/crawloop/marktplaats-scraper) | Netherlands classifieds |
| [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) | France classifieds |
| [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) | Completed eBay sales for comps |
| [eBay Active Listings Scraper](https://apify.com/crawloop/ebay-active-listings-scraper) | Live eBay listings |
| [Vinted Monitor](https://apify.com/crawloop/vinted-monitor) | New Vinted listings |

### When to use this Actor

- Track a keyword’s prices, discounts, and Smart! badges.
- Compare sellers on the same search without opening every offer.
- Export a search URL you already filtered in the browser.
- Feed a sheet, warehouse, or MCP agent with one JSON row per offer.

### When not to use this Actor

- You need the full offer description, stock count, warranty, or review text. This Actor reads the search page only.
- You need a seller’s phone or email.
- You need every seller of one catalog SKU from a product page.

### Key features

- **One search page.** Keywords and `/listing` URLs. The next page is the same document.
- **Search-card fields.** Price, original price, seller login, Smart!, promoted flag, condition, images, and parameters.
- **Poland, Czechia, Slovakia.** Keywords use the marketplace you pick. A search URL’s host overrides it.
- **HTTP.** No browser. Residential proxy in the marketplace country.
- **Empty searches stay empty.** A blocked or zero-result page finishes with no rows.

### Input

| Field | Type | Default | What it does |
| :--- | :--- | :--- | :--- |
| `searchQueries` | string\[] | `iphone 15` | Keywords. Each one opens a search page. |
| `startUrls` | URL\[] | — | Allegro search URLs (`/listing?string=`). Other URL types are skipped. |
| `marketplace` | select | `pl` | `pl`, `cz`, or `sk` for keywords. |
| `sortBy` | select | `relevance` | Relevance, price, newest, or popularity. |
| `minPrice` / `maxPrice` | number | — | Price filter in PLN, CZK, or EUR. |
| `condition` | select | `all` | All, new, or used. |
| `includePromoted` | boolean | `true` | Keep promoted and sponsored cards, flagged on the row. |
| `maxItems` | integer | `50` | Cap across all keywords and URLs. |
| `maxPagesPerQuery` | integer | `1` | Search pages per keyword or URL. |
| `proxyConfiguration` | object | Residential PL | Residential proxy. Match the country to the storefront. |

```json
{
  "searchQueries": ["iphone 15"],
  "marketplace": "pl",
  "maxItems": 30,
  "maxPagesPerQuery": 1,
  "sortBy": "price-asc",
  "condition": "new",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "PL"
  }
}
```

A pasted search URL:

```json
{
  "startUrls": [{ "url": "https://allegro.pl/listing?string=lego%20technic" }],
  "maxItems": 20,
  "maxPagesPerQuery": 1
}
```

### Output

One dataset row per offer.

| Field | Meaning |
| :--- | :--- |
| `offerId` | Allegro offer id |
| `title` | Card title |
| `price` | Current amount |
| `originalPrice` | Struck-through price when the card shows one |
| `currency` | PLN, CZK, or EUR |
| `sellerLogin` | Public seller login |
| `seller` | Login, Super Seller, and feedback shown on the card |
| `smart` | Smart! badge |
| `promoted` / `sponsored` | Paid placement flags |
| `condition` | New or used when the card shows it |
| `parameters` / `specs` | Name/value pairs from the card |
| `productOffersCount` | Other sellers of the same catalog product, when shown |
| `popularity` | Recent-buyer label from the card |
| `url` | Offer URL |
| `image` | Main image |
| `page` / `position` | Where the card sat on the search page |
| `searchQuery` | Keyword that produced the row |

```json
{
  "offerId": "18529923195",
  "title": "Smartfon Motorola",
  "price": 424.0,
  "originalPrice": 499.0,
  "currency": "PLN",
  "sellerLogin": "Elektromaniak_",
  "smart": true,
  "promoted": false,
  "condition": "Nowy",
  "url": "https://allegro.pl/oferta/18529923195",
  "searchQuery": "motorola",
  "page": 1,
  "position": 3
}
```

### Use cases

| Job | What you run | What you keep |
| :--- | :--- | :--- |
| **Price watch** | One keyword, price sort, a few pages | `price`, `originalPrice`, `sellerLogin`, `scrapedAt` |
| **Seller comps** | The same keyword, promoted cards on | Who is paying for the top of search |
| **Assortment check** | A filtered search URL | Only the slice you already narrowed |
| **Cross-market** | Same keyword on `pl`, then `cz` or `sk` | Currency and price side by side |

### 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: 30,
  maxPagesPerQuery: 1
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token)
run = client.actor("crawloop/allegro-scraper").call(
    run_input={
        "searchQueries": ["iphone 15"],
        "marketplace": "pl",
        "maxItems": 30,
        "maxPagesPerQuery": 1,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("offerId"), item.get("title"), item.get("price"), item.get("sellerLogin"))
```

#### cURL

```bash
curl "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":30,"maxPagesPerQuery":1}'
```

### 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 Store ID `crawloop/allegro-scraper`.

Example prompts:

- "Run Allegro Scraper for iphone 15 on the Poland marketplace, one page, and return title, price, currency, and sellerLogin."
- "Scrape Allegro search for lego technic, new items only, sorted by price, and list the cheapest 20 offers."
- "After Allegro prices, run eBay Sold Listings Scraper on the same product name and compare the ranges."

### Next step

For Germany classifieds, run [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper). For the Netherlands, run [Marktplaats Scraper](https://apify.com/crawloop/marktplaats-scraper). For France, run [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper). For completed-sale comps outside Allegro, run [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper). For live eBay asks, use [eBay Active Listings Scraper](https://apify.com/crawloop/ebay-active-listings-scraper).

### FAQ

**What do I need to start?**\
A keyword in `searchQueries`, or an Allegro search URL in `startUrls`.

**Which countries work?**\
`pl` (PLN), `cz` (CZK), and `sk` (EUR). Use a residential proxy in that country.

**Does a zero-result search fail the run?**\
No. The run finishes and the dataset stays empty.

**Can I paste an offer or seller URL?**\
Those URLs are skipped. Use a search URL (`/listing?string=`).

**How many cards are on a page?**\
About 60. `maxItems` stops early. `maxPagesPerQuery` caps how many search pages open.

### Related Actors

- [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper) — Germany classifieds
- [Marktplaats Scraper](https://apify.com/crawloop/marktplaats-scraper) — Netherlands classifieds
- [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) — France classifieds
- [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper)
- [eBay Active Listings Scraper](https://apify.com/crawloop/ebay-active-listings-scraper)
- [Vinted Monitor](https://apify.com/crawloop/vinted-monitor)

# Actor input Schema

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

Keywords to search on Allegro. Each keyword loads the search page and saves listing cards.

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

Allegro search URLs (/listing?string=) on allegro.pl, allegro.cz, or allegro.sk. Offer, seller, and category URLs are skipped.

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

Storefront used for keywords. A search URL's host overrides this.

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

Sort order on the search page.

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

Minimum price in the marketplace currency (PLN, CZK, or EUR).

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

Maximum price in the marketplace currency.

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

Filter the search page by item condition.

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

Keep promoted and sponsored cards. They stay flagged on the row.

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

Maximum offer rows across all keywords and search URLs.

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

How many search-result pages to open per keyword or URL. Each page is the same search document.

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

Pause before a retry or the next search page.

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

Residential proxy in the marketplace country. Datacenter IPs are blocked.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone 15"
  ],
  "startUrls": [],
  "marketplace": "pl",
  "sortBy": "relevance",
  "condition": "all",
  "includePromoted": true,
  "maxItems": 50,
  "maxPagesPerQuery": 1,
  "requestDelayMs": 0,
  "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/sazPTW9hj9g7zi1gC/openapi.json
