# Allegro Price Comparison Scraper (`piotrv1001/allegro-price-comparison-scraper`) Actor

Compare Allegro Poland seller offers by product URL or EAN. Extract prices, delivery costs, seller ratings, condition and Smart! status. Find the cheapest matching buy-now offers, verify product identity and export results to JSON, CSV or Excel.

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

## Pricing

from $2.00 / 1,000 offers

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Price Comparison — Seller Offers & EAN Lookup

Compare seller offers for the same product on **Allegro Poland**. Provide product URLs or EAN/GTIN codes to collect buy-now prices, delivery costs, seller ratings, product condition and Smart! eligibility. Use the results for repricing, sourcing and competitor monitoring.

### Features

- **Product URLs and EAN lookup:** resolve a product and compare its available seller offers.
- **Cheapest matching offers:** collect the product's available offer pages, remove duplicate placements, then filter and sort.
- **New products by default:** exclude damaged, used, returned, display and refurbished items unless you choose all conditions.
- **Buy-now comparison:** keep auction bids separate from immediate-purchase prices.
- **Seller context:** public seller identity, positive-feedback percentage, available positive-feedback count and Super Seller status.
- **Smart! and shipping:** report eligibility separately from ordinary free shipping.
- **Clear coverage:** per-product summaries show the source count, collected count, matching count and saved results.

### How it works

1. Enter consumer `allegro.pl` product, offer or all-offers URLs, or enter EAN codes.
2. Set the overall result limit and optional condition, Smart! and sorting preferences.
3. Run the actor and export offers to JSON, CSV or Excel. Open **Run summary** to see resolution and coverage details.

Default example:

```json
{
  "productUrls": ["https://allegro.pl/oferta/17338232832"],
  "maxItems": 50,
  "condition": "new"
}
```

EAN-only example:

```json
{
  "productUrls": [],
  "eans": ["8715946702728", "0759018838395"],
  "maxItems": 50,
  "maxOffersPerProduct": 20,
  "sortBy": "priceWithDelivery"
}
```

Keep EANs as strings to preserve leading zeros. If both URL and EAN lists are supplied, URLs are processed first. Each target is completed before the next, so the overall limit may be reached before later inputs are processed.

### Input options

| Input                 | Default            | Description                                                      |
| --------------------- | ------------------ | ---------------------------------------------------------------- |
| `productUrls`         | Sample printer URL | Product, offer or all-offers URLs on consumer Allegro Poland     |
| `eans`                | `[]`               | EAN/GTIN strings; 8, 12, 13 or 14 digits with valid check digits |
| `maxItems`            | `50`               | Maximum total saved offers                                       |
| `maxOffersPerProduct` | `100`              | Cheapest matching offers to save for each product                |
| `condition`           | `"new"`            | `"new"` or `"all"`                                               |
| `sortBy`              | `"price"`          | `"price"` or `"priceWithDelivery"`, lowest first                 |
| `smartOnly`           | `false`            | Require the source Smart! badge                                  |

Up to 100 combined URL/EAN inputs are accepted. Filters or page numbers on an all-offers URL are replaced by the actor's settings. Collection begins at page 1. Product/offer URLs with a pinned offer ID must still resolve to that exact offer.

### Sample output

Illustrative record; prices and availability change:

```json
{
  "offerId": "17338232832",
  "productId": "36763ba8-f622-4138-aa30-b273c82dd678",
  "productName": "Drukarka wielofunkcyjna atramentowa (kolor) Epson XP-3200",
  "sellerId": "4867579",
  "sellerLogin": "komtek",
  "title": "Drukarka wielofunkcyjna 3w1 EPSON Skaner KOLOR DRUK DUPLEX USB WiFi TUSZE",
  "url": "https://allegro.pl/oferta/17338232832",
  "offerType": "buyNow",
  "displayedPrice": 339,
  "buyNowPrice": 339,
  "currentBid": null,
  "currency": "PLN",
  "deliveryCost": 10.49,
  "priceWithDelivery": 349.49,
  "smart": true,
  "freeDelivery": false,
  "condition": "Nowy",
  "sellerRating": 98.2,
  "superSeller": true,
  "isSponsored": true,
  "isPromoted": false,
  "placementContexts": ["SPONSORED", "REGULAR"],
  "inputEan": "8715946702728",
  "sourceGtin": "8715946702728",
  "collectedAt": "2026-09-18T16:00:00.000Z"
}
```

Each row is one unique seller **offer**, not one seller. A seller may have multiple offers. Optional fields include `sellerPositiveFeedbackCount`, `reportedQuantity`, `deliveryLabel` and `bestPriceGuarantee`. Quantity reflects the source display, not a warehouse inventory audit. The best-price-guarantee flag does not reveal hidden discounts or seller payouts.

`displayedPrice` may be a current auction bid. `buyNowPrice` is the immediate-purchase price used for comparison. Pure auctions are excluded; hybrid auction/buy-now offers use their buy-now price. Delivered prices combine that price with the available ordinary shipping charge. Offers with an unknown delivered total are excluded when sorting by `priceWithDelivery`.

### Coverage and matching

`RUN-SUMMARY` contains one entry per normalized input, including its resolution status, product identity, `advertisedOffers`, `collectedOffers`, `eligibleOffers` and two statistics groups:

- `allEligibleStats`: buy-now price statistics across all collected offers matching the filters.
- `savedStats`: buy-now price statistics across the offers actually saved, after result and budget limits.

Both include offer count, distinct-seller count, minimum, maximum and average buy-now price. These statistics describe product prices; they are not shipping-inclusive statistics.

`coverageComplete` describes collection of the underlying offer list. A complete collection may still save fewer rows because of filters or limits. `offer_limit_reached`, `max_items_reached` and `budget_reached` are normal stopping reasons. Results are snapshots gathered over several requests, not a transactional live feed.

An EAN may appear on unrelated catalog products. The actor verifies candidate codes and reports **ambiguous** matches with candidate details instead of picking one. Use the desired product URL in a subsequent run to select a candidate. Broad fuzzy search results are reported as **not\_found**. These outcomes do not incur a resolution or offer charge.

Aliases that resolve to a product already charged in the run are marked `duplicate_target`; no second resolution fee is charged. Duplicate advertisement placements never create extra offer rows.

### Pricing

The price consists of **one resolution event plus saved offers**:

| Event code         |                Charge | When charged                                                                           |
| ------------------ | --------------------: | -------------------------------------------------------------------------------------- |
| `product-resolved` | **$0.03 per product** | A URL resolves to a complete comparison with at least one matching offer ready to save |
| `ean-resolved`     |     **$0.05 per EAN** | An EAN resolves to one verified product with matching offers ready to save             |
| `offer`            |  **$0.002 per offer** | Each unique matching offer saved                                                       |

The URL and EAN resolution events are **alternatives**, never both for the same comparison. Available seller and delivery fields are included. There is no custom startup charge from this actor.

| Example                           | Charge |
| --------------------------------- | -----: |
| One product URL + 10 offers       |  $0.05 |
| One EAN + 10 offers               |  $0.07 |
| 100 product URLs + 10 offers each |  $5.00 |
| 100 EANs + 10 offers each         |  $7.00 |

Malformed inputs, no exact matches, ambiguous matches, no offers matching your filters and failed collection are not charged as successful resolutions. The resolution event is charged immediately before saving the first matching offer, after the comparison has been prepared. If a later dataset write or platform interruption fails, that completed resolution charge can remain; resume the same run to continue.

Set a maximum charge in Apify to control spending. The actor checks that the budget can cover a resolution and at least one offer before starting a new comparison. Separate runs are billed separately.

### Limitations

- Consumer Allegro Poland only, with displayed PLN prices. Business/B2B pages and other Allegro countries are unsupported.
- Smart! does not guarantee free shipping. Delivery depends on buyer location, membership, basket and source context; no postcode-specific quotes are promised.
- Catalog-linked offers can differ in accessories, region, bundles or warranty. Review titles and condition before treating offers as interchangeable.
- Product availability can change during collection. If the source count cannot be reconciled, the comparison fails without a successful-resolution charge.
- Very large or ambiguous searches may require a direct product URL. Internal safety limits cap candidate verification, pagination and total requests; incomplete data is not described as all sellers.
- Valid GTIN format does not certify GS1 ownership. Live EAN-13 resolution has been validated; other supported lengths use the same exact-match checks and may have less reliable source search coverage.
- A failed input does not prevent later inputs from being attempted. The run is marked failed when a target cannot be processed; completed products remain in the dataset.

For help, open an issue on this actor's Apify page with the run URL and affected input.

### Related actors

- [Allegro Listings Scraper](https://apify.com/piotrv1001/allegro-listings-scraper): discover products from search and category pages.
- [Allegro Product Scraper](https://apify.com/piotrv1001/allegro-product-scraper): enrich individual offers with descriptions, specifications and product details.

# Actor input Schema

## `productUrls` (type: `array`):

Consumer allegro.pl product, offer or all-offers URLs. Leave empty when providing only EAN codes.

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

Codes as text, preserving leading zeros. Ambiguous and fuzzy matches are reported without choosing a product.

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

Maximum offers saved across all products. URLs are processed first, then EANs.

## `maxOffersPerProduct` (type: `integer`):

Keep the cheapest matching offers for each product after collecting its offer pages.

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

New only excludes used, damaged, returned, display and refurbished offers.

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

Lowest first. Delivery totals use the anonymous source context; offers without a delivery total are excluded when sorting by delivered price.

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

Require the Smart! badge. Eligibility does not imply free delivery for every buyer.

## Actor input object example

```json
{
  "productUrls": [
    "https://allegro.pl/oferta/17338232832"
  ],
  "eans": [],
  "maxItems": 50,
  "maxOffersPerProduct": 100,
  "condition": "new",
  "sortBy": "price",
  "smartOnly": false
}
```

# Actor output Schema

## `offers` (type: `string`):

No description

## `summary` (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 = {
    "productUrls": [
        "https://allegro.pl/oferta/17338232832"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/allegro-price-comparison-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 = { "productUrls": ["https://allegro.pl/oferta/17338232832"] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/allegro-price-comparison-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 '{
  "productUrls": [
    "https://allegro.pl/oferta/17338232832"
  ]
}' |
apify call piotrv1001/allegro-price-comparison-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/allegro-price-comparison-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/iWLny8ZZtD0cxNpnN/builds/NxVsjNylLMYehLpyG/openapi.json
