# Allegro Product Scraper (`piotrv1001/allegro-product-scraper`) Actor

Extract product details from Allegro URLs: prices, stock, specifications, images, shipping, seller ratings, purchase counts and variant links. Supports Poland, Czechia and Slovakia for price monitoring, catalog enrichment and market research.

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

## Pricing

from $8.00 / 1,000 products

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 Product Scraper

Extract structured product details from Allegro offer and product URLs in **Poland, Czechia and Slovakia**. Use the results for price monitoring, catalog enrichment and seller research.

### Features

- **Product details:** title, price, currency, GTIN, brand, condition, specifications, descriptions and images.
- **Offer monitoring:** seller identity, reported available quantity, shipping costs and seller feedback.
- **Demand and ratings:** offer-specific buyer counts where available, with their original explanation; product-wide ratings and review counts are separate.
- **Variant links:** separate choices from the same seller and across sellers, including selected and enabled flags.
- **Identity checks:** detects when an old offer URL resolves to a different offer instead of silently reporting another seller's price.
- **Export:** download results as JSON, CSV or Excel from your dataset, or access them through the Apify API.

### How it works

1. Add Allegro product or offer URLs.
2. Set the maximum number of products to process (default: 50).
3. Run the actor and download the dataset. Each successful row represents one product offer in one marketplace.

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

Supported domains: `allegro.pl`, `allegro.cz`, `allegro.sk`. Offer URLs and product URLs containing `offerId` pin a seller's offer. Product URLs without `offerId` return the offer selected by Allegro at the time of the request; that seller may change between runs. Allegro Lokalnie and search/category URLs are not supported.

| Input | Meaning |
| --- | --- |
| `productUrls` | List of product or offer URL strings. |
| `maxItems` | Maximum unique input URLs processed, including URLs that produce diagnostic results. Default 50. |

Repeated URLs and offer aliases are deduplicated within each marketplace. The same offer on two marketplaces can have different prices and currencies, so both are retained. If an unpinned product URL resolves to an offer already saved in this run, it is not charged again.

### Sample output

Abbreviated example based on a captured Polish offer; live prices and quantities change:

```json
{
  "status": "ok",
  "marketplace": "allegro.pl",
  "requestedOfferId": "18780113814",
  "offerId": "18780113814",
  "productId": "e3a52896-8bee-4a4a-ac3c-ce1fa6c19ada",
  "title": "Smartfon Apple iPhone 17 Pro 256GB głęboki niebieski Nano SIM oraz eSIM",
  "price": 4939,
  "currency": "PLN",
  "gtin": "195950627510",
  "stockAvailable": 3,
  "seller": {
    "id": "145549923",
    "name": "BSTPhone",
    "positiveFeedbackPercent": 95.6,
    "superSeller": false
  },
  "offerPopularity": {
    "buyers": 128,
    "label": "128 osób kupiło 128 sztuk",
    "explanation": "128 osób kupiło ofertę tego Sprzedającego w ciągu ostatnich 30 dni.",
    "scope": "seller_offer"
  },
  "url": "https://allegro.pl/oferta/smartfon-apple-iphone-17-pro-256gb-gleboki-niebieski-nano-sim-oraz-esim-18780113814"
}
```

Full results also include `parameters`, `descriptionText`, `descriptionHtml`, `images`, `shipping`, `deliveryCost`, `shippingCountry`, `productRating`, `returnPeriod`, `warranty`, and `variants.sameSeller` / `variants.allSellers`, plus input identity and scrape timestamp. Missing optional fields are `null` or empty lists.

### Understanding the data

- **Stock** is Allegro's reported availability, not a guarantee of total warehouse inventory. An active page with zero stock can still yield a complete, billable detail record.
- **Buyer counts** retain their source explanation. They are seller-offer counts, not interchangeable with product-wide purchase totals. Counts were absent on the Czech and Slovak pages in our validation sample.
- **Product ratings** can include purchases from other sellers. Full review texts are not collected.
- **Variants** are links and selection groups, not every possible combination or a per-variant price inventory. Linked pages are not automatically fetched.
- **Shipping** reflects the anonymous marketplace context; delivery to a particular postcode may differ.
- **Canonical URLs** identify products and may omit the seller's offer ID. Use `marketplace` + `offerId` for offer monitoring.

### Pricing

**$8 per 1,000 successfully extracted product details** ($0.008 each).

One `item-detail` event covers one valid result, including the detail fields and variant links available on that page. There is no startup event. Diagnostic rows and duplicates do not trigger a product-detail charge. Runs respect the spending limit configured on Apify.

### Diagnostics and partial runs

Filter the dataset to `status = "ok"` for product details. Other rows are uncharged diagnostics:

| Status | Meaning |
| --- | --- |
| `offer_mismatch` | Allegro returned a different offer. The resolved ID is recorded, without substituting its price. |
| `product_mismatch` | An unpinned product URL resolved to a different catalog product. |
| `not_found` | The requested page returned not-found/gone. |
| `unavailable` | The page explicitly indicated a non-active offer state. |
| `failed` | The page could not be retrieved or its core product data could not be validated. |

Completed results are preserved when other URLs fail. A run containing retrieval or validation failures is marked failed so monitoring can detect incomplete extraction; inspect `RUN-SUMMARY` and retry the failed URLs in a new run. A restarted run retains its already recorded results. Diagnostic states such as an offer redirect do not by themselves make a run fail.

### Typical uses

- Track a seller's price and reported stock for known offers.
- Enrich a product catalog with specifications, images and GTINs.
- Compare localized prices across supported marketplaces.
- Research seller feedback and offer-specific demand.

### Related Allegro actors

- [Allegro Listings Scraper](https://apify.com/piotrv1001/allegro-listings-scraper): discover products from search, category and seller pages.
- [Allegro Price Comparison Scraper](https://apify.com/piotrv1001/allegro-price-comparison-scraper): compare seller offers for the same product on Allegro Poland by product URL or EAN, including prices, delivery costs, condition and Smart! status.

# Actor input Schema

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

Allegro offer or product URLs from Poland, Czechia or Slovakia. Include offerId to monitor a specific seller.

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

Maximum unique input URLs to process, including URLs that return a diagnostic result.

## Actor input object example

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

# Actor output Schema

## `products` (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/18780113814"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/allegro-product-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/18780113814"] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/allegro-product-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/18780113814"
  ]
}' |
apify call piotrv1001/allegro-product-scraper --silent --output-dataset

```

## MCP server setup

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