# Ceneo Scraper — Polish Prices, Shop Offers & Specs (`unfenced-group/ceneo-scraper`) Actor

Scrape Ceneo.pl products by keyword, category or ID: lowest price in PLN, every shop offer with delivery and shop rating, full specs, manufacturer code, units bought, ratings, AI review summary and reviews. Price-change tracking. Pay per result.

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

## Pricing

from $0.49 / 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.
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

## Ceneo Scraper

![Ceneo Scraper](https://api.apify.com/v2/key-value-stores/cMkorhIK5yQUt7eR1/records/banner.png)

Scrape products, prices and shop offers from Ceneo.pl, Poland's largest price comparison site. Search by keyword, crawl any category or filtered listing, or monitor a fixed list of products. Each product can include every shop offer with delivery terms, the full specification table, Ceneo's AI review summary and customer reviews. No API key or login required.

***

### Why this scraper?

#### 🏪 Shop-level offers, not only the lowest price

With product details on, every offer Ceneo lists for a product comes back as its own record: shop, price, delivery cost, shipping time, shop rating and review count, promo text and whether the placement is sponsored.

#### 📋 Full specification table

All specification rows Ceneo publishes, grouped as on the site, plus the manufacturer code (MPN), the full category path, the complete description and every product image.

#### 🔥 Demand signals

Units bought through Ceneo in the last 90 days, number of offers, number of shops with free delivery, variant count and Ceneo badges such as Bestseller. Useful for spotting what actually sells in Poland.

#### ⭐ Reviews and AI summary

Average rating, review count, Ceneo's AI summary with the pros and cons users mention most, and individual reviews with rating, recommendation, verified-purchase flag, pros, cons, helpful votes and the shop where the product was bought. Reviewer names are never collected.

#### 📈 Built for price monitoring

Every record carries `changeStatus` (NEW, UNCHANGED, PRICE\_DROP, PRICE\_INCREASE), the previous price and the difference. Turn on **Only new or changed products** for lean scheduled runs.

#### 🧭 Past Ceneo's 50-page limit

Ceneo shows at most 50 pages per listing. When you ask for more, the scraper splits the listing into price bands so large categories can be collected in full.

***

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array of strings | `["iphone 17"]` (prefill) | Keywords to search on Ceneo.pl. Each query is followed to the category result pages Ceneo sends it to. |
| `startUrls` | array of URLs | (empty) | Ceneo category, category search, filtered listing or product URLs. |
| `productIds` | array of strings | (empty) | Ceneo product IDs, e.g. `157207959` from `https://www.ceneo.pl/157207959`. Product IDs and product URLs always return the full record and are billed as a product with details. |
| `maxItems` | integer | `100` | Maximum products across all inputs. `0` means no limit. |
| `sortBy` | string | `"recommended"` | `recommended`, `popularity`, `priceAsc`, `priceDesc` or `rating`. |
| `minPrice` | integer | (empty) | Minimum lowest price in PLN, applied through Ceneo's own price filter. |
| `maxPrice` | integer | (empty) | Maximum lowest price in PLN, applied through Ceneo's own price filter. |
| `skipSponsored` | boolean | `false` | Leave out paid listing positions. When off, they are kept and flagged with `isSponsored`. |
| `fetchDetails` | boolean | `false` | Open each product page for offers, specifications, description, images, AI summary and reviews. |
| `includeAllOffers` | boolean | `true` | With details: load the complete offer list, not only the first 15 offers on the product page. |
| `maxOffersPerProduct` | integer | `0` | With details: keep at most this many offers per product. `0` keeps all. |
| `maxReviewsPerProduct` | integer | `10` | With details: reviews to include per product, in Ceneo's default order (most helpful first). `0` skips reviews. |
| `splitLargeListings` | boolean | `true` | Split listings above Ceneo's 50-page limit into price bands. |
| `onlyChanges` | boolean | `false` | Return only products that are new or whose price changed since the previous run. |

***

### Output schema

Every field below is present on every record. Values Ceneo does not publish for a product are returned as `null`.

#### Always present

| Field | Type | Description |
|---|---|---|
| `productId` | string | Ceneo product ID |
| `name` | string | Product name |
| `url` | string | Ceneo product page URL |
| `brand` | string | Brand (null if not listed) |
| `price` | number | Lowest offer price in PLN |
| `currency` | string | Always `PLN` |
| `offerCount` | integer | Number of shop offers on Ceneo |
| `freeDeliveryOfferCount` | integer | Offers with free delivery (listing pages only, null otherwise) |
| `rating` | number | Average rating from 0 to 5 (null when the product has no reviews) |
| `reviewCount` | integer | Number of reviews |
| `recentlyPurchased` | integer | Units bought through Ceneo in the last 90 days |
| `recentlyPurchasedLabel` | string | Ceneo's rounded label for the same figure, e.g. `500+` |
| `variantCount` | integer | Number of variants (colours, capacities) of the product |
| `keySpecs` | array | Key specifications shown on the listing: `name`, `value` |
| `badges` | array | Ceneo badges such as `Bestseller`, `Nowość` |
| `isNew` | boolean | Marked as a new product |
| `isSponsored` | boolean | Paid listing position |
| `hasFreeDelivery` | boolean | At least one offer ships free |
| `hasCeneoFree` | boolean | Eligible for Ceneo Free delivery |
| `categoryId` | string | Ceneo category ID |
| `categoryName` | string | Category name |
| `imageUrl` | string | Main product image URL |
| `listingType` | string | `row`, `box`, `grid`, `promoted-offer` or `product-page` |
| `sponsoredShop` | string | Shop behind a promoted-offer row (null otherwise) |
| `sponsoredShopId` | string | Ceneo shop ID behind a promoted-offer row |
| `sponsoredOfferId` | string | Offer ID of a promoted-offer row |
| `position` | integer | Organic position in the listing (null for sponsored rows and product inputs) |
| `page` | integer | Listing page the product was found on |
| `detailFetched` | boolean | `true` when the product page was read |
| `sourceMode` | string | `search`, `category` or `product` |
| `searchQuery` | string | Query that found the product (null for URLs and IDs) |
| `sourceUrl` | string | Input URL or search URL |
| `firstSeenAt` | string | First time this scraper saw the product |
| `previousPrice` | number | Price at the previous sighting (null on first sighting) |
| `priceChange` | number | Difference from the previous price in PLN |
| `changeStatus` | string | `NEW`, `UNCHANGED`, `PRICE_DROP` or `PRICE_INCREASE` |
| `contentHash` | string | Stable hash of product ID and name |
| `source` | string | Always `ceneo.pl` |
| `scrapedAt` | string | ISO timestamp of collection |

#### With `fetchDetails: true`

These fields are `null` when details are off, except for product IDs and product URLs, which always include them.

| Field | Type | Description |
|---|---|---|
| `priceMax` | number | Highest offer price in PLN |
| `availability` | string | Availability, e.g. `InStock` |
| `condition` | string | Condition, e.g. `NewCondition` |
| `categoryPath` | array | Category breadcrumb (the most specific levels Ceneo shows on the product page) |
| `categoryUrl` | string | Category page URL |
| `manufacturerCode` | string | Manufacturer part code (null when not published) |
| `description` | string | Product description as shown on the product page |
| `images` | array | All product image URLs |
| `specifications` | array | Full specification table |
| `specifications.group` | string | Specification group, e.g. `Dane podstawowe` |
| `specifications.name` | string | Attribute name |
| `specifications.value` | string | Attribute value |
| `offers` | array | Shop offers in Ceneo's display order |
| `offers.offerId` | string | Ceneo offer ID |
| `offers.position` | integer | Position on the product page |
| `offers.shopName` | string | Shop name as shown on Ceneo |
| `offers.shopDomain` | string | Shop domain, e.g. `mediaexpert.pl` (null for sellers that only sell through Ceneo's Kup Teraz) |
| `offers.shopId` | string | Ceneo shop ID |
| `offers.price` | number | Offer price in PLN |
| `offers.currency` | string | Always `PLN` |
| `offers.offerTitle` | string | Offer title as the shop lists it |
| `offers.isSponsored` | boolean | Paid placement in the offer list |
| `offers.isBuyNow` | boolean | Can be bought directly on Ceneo (Kup Teraz) |
| `offers.offerType` | string | Ceneo offer type code |
| `offers.shopRating` | number | Shop rating from 0 to 5 (null for shops new to Ceneo) |
| `offers.shopReviewCount` | integer | Number of shop reviews |
| `offers.deliveryInfo` | string | Delivery text, e.g. `Darmowa wysyłka` |
| `offers.deliveryCostFrom` | number | Lowest delivery cost in PLN (`0` for free delivery) |
| `offers.hasFreeDelivery` | boolean | Ships free |
| `offers.shippingTime` | string | Declared shipping time, e.g. `Wysyłka w 1 dzień` |
| `offers.promoText` | string | Shop promo text |
| `offers.hasTrustedReviews` | boolean | Shop carries Ceneo's trusted-reviews mark |
| `offers.isReliableSeller` | boolean | Shop carries Ceneo's reliable-seller mark |
| `offers.shopOfferCount` | integer | Offers from this shop for the product |
| `offers.isNewShop` | boolean | Shop marked as new on Ceneo |
| `offers.variants` | array | The shop's other listings for the same product, such as sizes or bundles: `offerId`, `price`, `title` |
| `offersReturned` | integer | Number of offers in this record |
| `cheapestShop` | string | Domain (or name) of the cheapest shop |
| `cheapestShopPrice` | number | Price at the cheapest shop |
| `aiReviewSummary` | object | Ceneo's AI review summary (null when Ceneo has none) |
| `aiReviewSummary.summary` | string | Summary text |
| `aiReviewSummary.pros` | array | Pros most users mention |
| `aiReviewSummary.cons` | array | Cons some users mention |
| `aiReviewSummary.basedOnReviews` | integer | Number of reviews the summary is based on |
| `reviews` | array | Customer reviews in Ceneo's default order (most helpful first) |
| `reviews.reviewId` | string | Ceneo review ID |
| `reviews.rating` | number | Rating from 0 to 5 |
| `reviews.recommended` | boolean | Reviewer recommends the product |
| `reviews.isVerifiedPurchase` | boolean | Review confirmed by a purchase |
| `reviews.publishedAt` | string | Publication date and time |
| `reviews.purchasedAt` | string | Purchase date and time (null if not shown) |
| `reviews.text` | string | Review text |
| `reviews.pros` | array | Pros listed by the reviewer |
| `reviews.cons` | array | Cons listed by the reviewer |
| `reviews.helpfulYes` | integer | Helpful votes |
| `reviews.helpfulNo` | integer | Not-helpful votes |
| `reviews.boughtAtShop` | string | Shop where the reviewer bought the product |
| `reviews.boughtPrice` | number | Price at that shop in PLN |

#### Example record

```json
{
  "productId": "157207959",
  "name": "Apple iPhone 17 256GB Czarny",
  "url": "https://www.ceneo.pl/157207959",
  "brand": "Apple",
  "price": 4157,
  "currency": "PLN",
  "offerCount": 26,
  "freeDeliveryOfferCount": 23,
  "rating": 4.84,
  "reviewCount": 499,
  "recentlyPurchased": 609,
  "recentlyPurchasedLabel": "500+",
  "variantCount": 43,
  "keySpecs": [
    {
      "name": "Przekątna ekranu",
      "value": "6,3 cala"
    },
    {
      "name": "Pamięć RAM",
      "value": "8 GB"
    },
    {
      "name": "Pamięć wewnętrzna",
      "value": "256 GB"
    },
    {
      "name": "Wbudowany aparat cyfrowy",
      "value": "48 Mpix"
    },
    {
      "name": "System operacyjny",
      "value": "iOS"
    }
  ],
  "badges": [
    "Bestseller"
  ],
  "isNew": false,
  "isSponsored": false,
  "hasFreeDelivery": true,
  "hasCeneoFree": true,
  "categoryId": "471",
  "categoryName": "Smartfony",
  "imageUrl": "https://image.ceneostatic.pl/data/products/157207959/i-apple-iphone-17-256gb-czarny.jpg",
  "listingType": "row",
  "sponsoredShop": null,
  "sponsoredShopId": null,
  "sponsoredOfferId": null,
  "position": 1,
  "page": 1,
  "priceMax": 5144,
  "availability": "InStock",
  "condition": "NewCondition",
  "categoryPath": [
    "Telefony i akcesoria",
    "Smartfony"
  ],
  "categoryUrl": "https://www.ceneo.pl/Smartfony",
  "manufacturerCode": "MG6J4HXA",
  "description": "Apple iPhone 17 Konstrukcja. Jeszcze bardziej cieszy. Jeszcze więcej wytrzyma. Oto nowy iPhone 17. Zaprojektowaliśmy go tak, żeby był niezmiernie i niezmiennie…",
  "images": [
    "https://image.ceneostatic.pl/data/products/157207959/i-apple-iphone-17-256gb-czarny.jpg",
    "https://image.ceneostatic.pl/data/products/157207959/c64d5a08-6c58-43d2-9a70-b017b5082d80_i-apple-iphone-17-256gb-czarny.jpg"
  ],
  "specifications": [
    {
      "group": "Dane podstawowe",
      "name": "Marka",
      "value": "Apple"
    },
    {
      "group": "Dane podstawowe",
      "name": "Model",
      "value": "Apple iPhone 17"
    },
    {
      "group": "Dane podstawowe",
      "name": "Kolor",
      "value": "Czarne"
    },
    {
      "group": "Dane podstawowe",
      "name": "Pamięć RAM",
      "value": "8 GB"
    }
  ],
  "offers": [
    {
      "offerId": "602179976",
      "position": 1,
      "shopName": "avans.pl",
      "shopDomain": "avans.pl",
      "shopId": "18601",
      "price": 4499,
      "currency": "PLN",
      "offerTitle": "Smartfon APPLE iPhone 17 5G 256GB 6.3\" 120Hz Czarny | Głośniki lub słuchawki nawet 300 zł taniej",
      "isSponsored": true,
      "isBuyNow": true,
      "offerType": "CPC_Bid_Basket",
      "shopRating": 4.6,
      "shopReviewCount": 5987,
      "isNewShop": false,
      "deliveryInfo": "Darmowa wysyłka",
      "deliveryCostFrom": 0,
      "hasFreeDelivery": true,
      "shippingTime": "Wysyłka w 1 dzień",
      "promoText": "SZYBKA DOSTAWA! PROSTE RATY!",
      "hasTrustedReviews": false,
      "isReliableSeller": false,
      "shopOfferCount": 1,
      "variants": []
    },
    {
      "offerId": "625705241",
      "position": 2,
      "shopName": "mediaexpert.pl",
      "shopDomain": "mediaexpert.pl",
      "shopId": "10772",
      "price": 4499,
      "currency": "PLN",
      "offerTitle": "Smartfon APPLE iPhone 17 5G 256GB 6.3\" 120Hz Czarny | Nawet 1400 zł bonusu na nowy smartfon | Głośniki lub słuchawki nawet 300 zł taniej |Antywirus ta",
      "isSponsored": true,
      "isBuyNow": false,
      "offerType": "CPC_Bid",
      "shopRating": 4.7,
      "shopReviewCount": 3214,
      "isNewShop": false,
      "deliveryInfo": "Darmowa wysyłka",
      "deliveryCostFrom": 0,
      "hasFreeDelivery": true,
      "shippingTime": "Wysyłka w 1 dzień",
      "promoText": "nawet 10 rat 0%! RRSO 0%",
      "hasTrustedReviews": false,
      "isReliableSeller": false,
      "shopOfferCount": 1,
      "variants": []
    }
  ],
  "offersReturned": 28,
  "cheapestShop": "empik.com",
  "cheapestShopPrice": 4157,
  "aiReviewSummary": {
    "summary": "Użytkownicy są bardzo zadowoleni z Apple iPhone 17 256GB, podkreślając jego wysoką jakość wykonania i intuicyjność działania. Chociaż niektórzy skrytykowali system iOS oraz użyteczność, ogólne wrażenia są bardziej pozytywne, a telefon uważany jest za niezawodny i długoterminowy. Wiele osób doceniło także wsparcie techniczne Apple.",
    "pros": [
      "Jakość Wykonania",
      "Intuicyjność Działania",
      "Długi Czas Wsparcia",
      "Sukcesja Zadowolenia Użytkowników"
    ],
    "cons": [
      "Brak Personalizacji",
      "Problemy z Bateriami",
      "Nieintuicyjne Menu"
    ],
    "basedOnReviews": 30
  },
  "reviews": [
    {
      "reviewId": "20303480",
      "rating": 4.5,
      "recommended": true,
      "isVerifiedPurchase": true,
      "publishedAt": "2026-02-17T13:41:04",
      "purchasedAt": "2026-02-11T14:14:57",
      "text": "To jest mój pierwszy iPhone po wielu latach korzystania z Androida. Jestem bardzo zadowolony z działania, jakości wykonania i tego że po wyjęciu z pudełka wszystko po prostu działa. Niestety nie ma rzeczy idealnych i trochę doskwiera mi brak dopasowania systemu pod siebie. Android jest w tej kwestii lata do przodu względem iOS. Podsumowujac: warto rozważyć przesiadkę z Androida pod warunkiem że ograniczenia w iOS wam nie przeszkadzają.",
      "pros": [
        "czas pracy na baterii",
        "łatwość obsługi"
      ],
      "cons": [],
      "helpfulYes": 2,
      "helpfulNo": 0,
      "boughtAtShop": "mediaexpert.pl",
      "boughtPrice": 4499
    }
  ],
  "detailFetched": true,
  "sourceMode": "category",
  "searchQuery": null,
  "sourceUrl": "https://www.ceneo.pl/Smartfony",
  "contentHash": "f8778a2375756011ccd69a74c0d5f047",
  "source": "ceneo.pl",
  "scrapedAt": "2026-09-20T12:25:00.898Z",
  "firstSeenAt": "2026-09-20T12:25:00.898Z",
  "previousPrice": null,
  "priceChange": null,
  "changeStatus": "NEW"
}
```

Arrays are shortened in this example. A real record carries every offer, specification row and requested review.

***

### Examples

**Search two keywords, cheapest first:**

```json
{
  "searchQueries": ["ekspres do kawy", "odkurzacz bezprzewodowy"],
  "sortBy": "priceAsc",
  "maxItems": 200
}
```

**Smartphones between 1,000 and 2,000 zł with all shop offers:**

```json
{
  "startUrls": [{ "url": "https://www.ceneo.pl/Smartfony" }],
  "minPrice": 1000,
  "maxPrice": 2000,
  "fetchDetails": true,
  "maxReviewsPerProduct": 0,
  "maxItems": 100
}
```

**Filtered listing from the site (brand filter) plus a single product:**

```json
{
  "startUrls": [
    { "url": "https://www.ceneo.pl/Smartfony/p:Apple.htm" },
    { "url": "https://www.ceneo.pl/157207959" }
  ],
  "maxItems": 300
}
```

**Daily price monitor for a fixed product list:**

```json
{
  "productIds": ["157207959", "180619941", "193589952"],
  "fetchDetails": true,
  "maxReviewsPerProduct": 0,
  "onlyChanges": true
}
```

***

### 💰 Pricing

You only pay for products saved to your dataset. Failed retries are never charged.

| Record type | Price per 1,000 |
|---|---|
| Product (listing data) | **$0.49** |
| Product with details (`fetchDetails: true`, and every product ID or product URL) | **$2.49** |

| Products | Listing data | With details |
|---|---|---|
| 100 | ~$0.05 | ~$0.25 |
| 1,000 | ~$0.49 | ~$2.49 |
| 10,000 | ~$4.90 | ~$24.90 |
| 100,000 | ~$49.00 | ~$249.00 |

> Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Use **Maximum products** in the input to control your spend exactly.

***

### Performance

| Run size | Listing data | With details |
|---|---|---|
| 100 products | under 1 minute | 3–5 minutes |
| 1,000 products | 5–8 minutes | 40–60 minutes |
| 10,000 products | 50–80 minutes | several hours; split across runs |

***

### Known limitations

- Ceneo shows at most 50 pages per listing. Price-band splitting covers large listings, but a single price point with more than 1,500 products cannot be split further.
- `offers` can hold fewer entries than `offerCount`. Ceneo counts a shop's size or bundle listings separately (they are in `offers.variants`), and some marketplace offers are only served through pages its robots.txt closes to crawlers.
- Ceneo's price history is only shown to logged-in users and is not included.
- A keyword search follows Ceneo's own routing. When Ceneo sends a query to one category, results come from that category only.

***

### Technical details

- **Source:** ceneo.pl — Polish price comparison site, all categories
- **Coverage:** keyword search, categories, category searches, filtered listings and product pages
- **Change tracking:** key-value store `ceneo-scraper-history`, 180-day retention
- **Retry:** automatic retry with a fresh session on network errors, captchas and challenge pages
- **Compliance:** robots.txt is read at the start of every run. A keyword search makes one request to Ceneo's search page to find the matching categories; every other page follows robots.txt

***

### Rate this actor

If this scraper does its job, a short review on the **Reviews** tab helps other users find it. Something not working? Open an issue on the **Issues** tab instead — issues get fixed.

***

### Need a custom scraper?

**[Unfenced Group](https://www.unfencedgroup.nl)** builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

**Get in touch:** [www.unfencedgroup.nl](https://www.unfencedgroup.nl)

# Actor input Schema

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

Keywords to search on Ceneo.pl, in Polish or English (for example "iphone 17", "ekspres do kawy", "lego"). Each query is followed to the category result pages Ceneo sends it to.

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

Ceneo.pl pages to scrape: a category (https://www.ceneo.pl/Smartfony), a category search (https://www.ceneo.pl/Klocki\_LEGO;szukaj-lego), a filtered listing (brand, price or feature filters) or a product page (https://www.ceneo.pl/157207959).

## `productIds` (type: `array`):

Ceneo product IDs, the number in a product URL (157207959 in https://www.ceneo.pl/157207959). Useful for monitoring a fixed list of products. Product IDs and product URLs always return the full product record, billed as a product with details.

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

Stop after this many products across all queries, URLs and IDs. 0 means no limit.

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

Order of category and search listings. Does not apply to product IDs or product URLs.

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

Only products whose lowest price is at least this many PLN. Applied through Ceneo's own price filter.

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

Only products whose lowest price is at most this many PLN. Applied through Ceneo's own price filter.

## `skipSponsored` (type: `boolean`):

Leave out listing positions that shops or brands paid for. Sponsored rows are kept and flagged with isSponsored when this is off.

## `fetchDetails` (type: `boolean`):

Open each product page to add every shop offer (shop, price, delivery, shipping time, shop rating), the full specification table, category path, manufacturer code, description, all images, Ceneo's AI review summary and reviews. Billed as a product with details.

## `includeAllOffers` (type: `boolean`):

With details on: load the complete offer list, not only the first 15 offers Ceneo shows on the product page. Costs one extra page load per product with many offers.

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

With details on: keep at most this many shop offers per product, in Ceneo's display order. 0 keeps all.

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

With details on: number of customer reviews to include per product, in Ceneo's default order (most helpful first). The product page carries 10; more are loaded 10 per page. 0 skips reviews.

## `splitLargeListings` (type: `boolean`):

Ceneo shows at most 50 pages (about 1,500 products) per listing. When you ask for more, the listing is split into price bands so every product can be reached.

## `onlyChanges` (type: `boolean`):

Return only products that are new or whose lowest price changed since this actor last saw them. Use with scheduled runs for price monitoring.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone 17",
    "ekspres do kawy"
  ],
  "startUrls": [
    {
      "url": "https://www.ceneo.pl/Smartfony"
    },
    {
      "url": "https://www.ceneo.pl/157207959"
    }
  ],
  "productIds": [
    "157207959",
    "180619941"
  ],
  "maxItems": 100,
  "sortBy": "priceAsc",
  "minPrice": 500,
  "maxPrice": 2000,
  "skipSponsored": false,
  "fetchDetails": true,
  "includeAllOffers": true,
  "maxOffersPerProduct": 10,
  "maxReviewsPerProduct": 10,
  "splitLargeListings": true,
  "onlyChanges": false
}
```

# 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": [
        "iphone 17"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/ceneo-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 17"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/ceneo-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 17"
  ],
  "maxItems": 20
}' |
apify call unfenced-group/ceneo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unfenced-group/ceneo-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/8eVEiGDgfWhgNmASk/builds/GH7dLM1PBAALkQun5/openapi.json
