# Planeo.sk Scraper (Slovakia): Prices, Discount Codes & EAN (`tsutseisoftware/planeo-sk-scraper`) Actor

Scrape Planeo.sk (Slovak electronics & appliances chain) by category, search, product code, EAN or URL: EUR prices, discount codes, cashback, stock per store, EAN, parameters. Website filters, monitoring. Unofficial.

- **URL**: https://apify.com/tsutseisoftware/planeo-sk-scraper.md
- **Developed by:** [Tomáš Buchta](https://apify.com/tsutseisoftware) (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.85 / 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

## Planeo.sk Scraper (Slovakia): Prices, Discount Codes & EAN

Scrape products and prices from **Planeo.sk**, the Slovak electronics and home appliances chain with about 70 PLANEO stores (TVs, washing machines, fridges, small appliances, phones, laptops, garden, toys and more). Planeo.sk runs on the same shop platform as Planeo.cz; for the Czech shop use the [Planeo.cz Scraper](https://apify.com/tsutseisoftware/planeo-scraper), both give the same output format.

Start from a **category**, the website's **search** (search terms or search URLs), **product URLs**, or your own list of **Planeo product codes or EANs**. For each product you get the name, brand, product code, category, the current **price in EUR with cents** and **without VAT**, the **crossed-out price**, **savings and discount in percent**, the **discount code and the price with it** ("Kúpiť s kupónom"), the **price with the manufacturer cashback**, the **campaign** of the price tag ("Jesenný výpredaj"), **availability** ("Ihneď k odoslaniu", "Skladom viac ako 5 ks"), the **number of PLANEO stores** with the product and the earliest **pickup date**, the **energy class**, rating and number of ratings, labels ("Novinka", "Výpredaj"), the key parameters line and the image.

Optionally you also get the **product page details** (**EAN**, **all technical parameters**, the description and the cashback amount) and the **stock in each PLANEO store** (pieces, address, region, pickup time).

Built for **price monitoring** (sledovanie cien): schedule it daily in monitoring mode and you get, and pay for, only products whose price, crossed-out price, discount-code price or availability changed, plus (optionally) the products that **disappeared** and the ones that **came back**.

### Why use this Planeo.sk scraper?

- 🇸🇰 **The only Planeo.sk scraper** in Apify Store, with the same output format as our [Planeo.cz Scraper](https://apify.com/tsutseisoftware/planeo-scraper) (`id`, `price`, `couponPrice`, `availability`, `ean`…). Most product codes are the same in both shops, so Slovak and Czech prices of the same product can be compared directly.
- 💶 **Prices you can trust:** EUR with cents, with and without VAT, the crossed-out price (also on campaign price tags), the **discount code with its price** and the **price with cashback**, all as separate fields and checked against the website on real products.
- 🎛️ **The website's own filters and sorting:** brand, **any parameter of the category filter** (screen type, resolution, energy class…), **ready for shipment / in a store**, **in stock in a given store or town**, and sorting by price, best sellers or rating, applied by Planeo.sk itself. Or just paste a URL with filters set on the website.
- 🔎 **Search and your own product list:** search terms with the website's own search (sorted by relevance or price), **product codes** and **EANs** (the product page confirms each EAN).
- 🏬 **Stock in each PLANEO store** (Bratislava, Košice, Žilina, Nitra…): pieces, address, region and pickup time.
- 📉 **Monitoring mode and price drop alerts:** only new or changed products, with `previousPrice`, `priceChange` and `priceChangePercent`; removed and reappeared products on request.
- ⚡ **Light and cheap:** no browser and no proxy; further pages come from the website's filter endpoint (24 products per request). Optional **fast mode** about 4× faster for a tiny extra charge.

### What data can you get?

Share of products with a value, measured on live runs from 2026-10-19 (263 products: TVs, filtered TVs, 200 washing machines, a kettle search, lookups). Fields marked *optional* need the input in brackets.

| Field | Example | Filled |
|---|---|---|
| Name, product code, brand, category path | LG OLED55C64LA, 35063613, LG, Televízory › OLED televízory | 100 % |
| Price incl. and without VAT (EUR, with cents) | 1 599.00 / 1 300.00 | 100 % |
| Crossed-out price, savings, discount (%) | 1 798.90, 199.90, 11 % | discounted products (TVs 30 %, washing machines 7 % in October) |
| Discount code, price with code | Kupon25%, 1 199.25 | TVs 95 %, washing machines 46 %, kettles 30 % |
| Campaign, price with cashback | Jesenný výpredaj, 1 119.25 | products in a campaign (~50 %) / with cashback (~14 %) |
| Availability, availability text | `in_stock`, "Ihneď k odoslaniu, Skladom viac ako 5 ks." | 100 % |
| Stock, pickup date | "viac ako 5 ks", 2026-10-20 | products that ship now (~85 %) |
| Stores with stock, store pickup | 65, "K vyzdvihnutiu do 15 minút" | products sold in stores (TVs 90 %, washing machines 46 %) |
| Energy class | F | 100 % of products with an energy label (TVs, appliances) |
| Rating, ratings | 4.9, 10 | ~80 % (only the numbers, never names or texts) |
| Labels, key parameters line, image | `["Výpredaj"]`, "OLED SMART televízia, uhlopriečka 55"…" | ~10–30 % / 100 % / 100 % |
| EAN, parameters, description, cashback amount *(Add product page details)* | 8806096685815, ~45 parameters, the full text, 80.00 | 100 % of product pages (cashback where offered) |
| Stock per store *(Add stock per store)* | PLANEO Bratislava Avion: 2 ks, pickup in 15 min | every product sold in stores |

See the **Output** tab for all fields.

### How to scrape Planeo.sk

1. Open Planeo.sk, go to a category, e.g. `https://www.planeo.sk/televizory`, and paste the URL into **Category, search or product URLs**. Search URLs (`https://www.planeo.sk/vyhladavanie?q=sencor`) and product URLs (`https://www.planeo.sk/lg-oled55c64la`) work too. Or type **Search terms**, or paste **Product codes** or **EANs**.
2. Optionally choose **Sort by**, the **Site filters** and **Filters**, and set **Max products**. Turn on **Add product page details** or **Add stock per store** if you need them.
3. Click **Start** and download the results as JSON, CSV or Excel, or use the API.

**Tip:** set filters and sorting on the website and paste the URL, e.g. `https://www.planeo.sk/televizory?sort=PRICE_ASC`. The actor keeps them.

### Use cases

Copy an input into the **JSON** tab of the input and adjust it.

**Cheapest Samsung and LG OLED TVs that ship now, between 800 and 2 000 EUR:**

```json
{
  "startUrls": [{ "url": "https://www.planeo.sk/televizory" }],
  "brands": ["Samsung", "LG"],
  "parameterFilters": { "Typ obrazovky": ["OLED"] },
  "siteAvailability": ["in_stock_online"],
  "minPrice": 800,
  "maxPrice": 2000,
  "sortBy": "cheapest",
  "maxItems": 100
}
```

**Daily price tracker of a category with price drop alerts (schedule it):**

```json
{
  "startUrls": [{ "url": "https://www.planeo.sk/pracky" }],
  "maxItems": 0,
  "onlyNewOrChanged": true,
  "monitoringKey": "planeo-sk-washers",
  "minPriceDropPercent": 5
}
```

**Your products by EAN or product code, with stock per store:**

```json
{
  "eans": ["8806096685815"],
  "productCodes": ["35063826"],
  "includeStoreAvailability": true
}
```

**What is in stock in the stores of a town today:**

```json
{
  "startUrls": [{ "url": "https://www.planeo.sk/televizory" }],
  "stores": ["Žilina"],
  "includeStoreAvailability": true,
  "maxItems": 50
}
```

**Discount codes and cashback deals in a search:**

```json
{
  "searchQueries": ["sencor rýchlovarná kanvica"],
  "onlyWithCoupon": true,
  "sortBy": "cheapest",
  "maxSearchPages": 2
}
```

**Compare with Planeo.cz:** run the [Planeo.cz Scraper](https://apify.com/tsutseisoftware/planeo-scraper) on the same category and join both datasets on `productId` or `ean` (EUR vs. CZK).

### Input

#### Site filters (applied by the shop)

**Sort by**, **Brands**, **Available** (ready for shipment, in a store), **Available in store** and **Parameter filters** are taken from the filter of each category, so Planeo.sk sends only matching products. Names that a category doesn't have are reported in the log together with the options it has. The actor checks the products again. Searches sort by relevance or price; brands, availability and stores are checked by the actor there (for stores it reads the stock per store), and parameter filters work in categories only.

#### Filters (you don't pay for filtered-out products)

**Only products in stock**, **Availability**, **Only discounted products**, **Min discount (%)**, **Only products with a discount code**, **Only products with cashback**, **Min price (EUR)**, **Max price (EUR)**, **Exclude brands**, **Name must contain**, **Name must not contain**, **Only with labels**, **Energy classes**, **Min number of stores**, **Min rating**, **Min number of reviews** and **Only products with EAN** (turns on the product page details). Places freed by filtered-out products are filled with the next products, so **Max products** is met.

#### Search terms, codes and EANs

**Search terms** use the website's own search (at most 10 per run, **Max pages per search**, 24 products per page). **Product codes** (the "ID" on the product page) must match exactly. **EANs** are confirmed on the product page, so each EAN costs one product page read and the row always has the details.

#### Fast mode (small extra charge)

Normal speed: at most 30 requests per minute, 2 at a time (change it with **Max requests per minute (normal speed)**, up to 60). **Fast mode**: at most 120 per minute, 4 at a time; it switches back to the normal speed for the rest of the run as soon as the website answers "too many requests", "service unavailable", "forbidden", shows a challenge or slows down.

#### Other inputs

**Description length** limits the description (with details), **Max pages per category** and **Max pages per search** limit the listings, **Max products per URL** limits each start URL or search term, and **Proxy configuration** can stay off (Planeo.sk works without a proxy).

#### Monitoring mode explained

With **Monitoring: only new or changed products** each run compares products with the previous run that used the same **Monitoring: key**. A product is returned as `changeType: "new"` or `"updated"` only if it is new or its **price, crossed-out price, discount-code price or availability** changed. `previousPrice`, `priceChange` and `priceChangePercent` are filled when the price changed. Ratings, labels, store counts and pickup dates are not compared.

- **Monitoring: only price changes** narrows it to price changes, **Monitoring: min price drop (%)** to price drops.
- **Monitoring: include removed products** also returns products of the previous run that are no longer listed as `changeType: "removed"` with `removedAt` and the last known name, price and URL; when such a product comes back, it is `"reappeared"`. It is checked only after a run that read everything it was asked for (not when **Max products**, **Max products per URL**, a page limit or unread pages cut it short; the status message then says why). Use one **Monitoring: key** per input.

### How much does it cost to scrape Planeo.sk?

You pay per saved product. Platform usage is included and no proxy is needed. Filtered-out and unchanged products (in monitoring mode) are free.

| Plan | Price per 1 000 products | + Fast mode (only products saved in fast mode) |
|---|---|---|
| FREE | **$0.95** | +$0.01 |
| BRONZE | **$0.93** | +$0.01 |
| SILVER | **$0.90** | +$0.01 |
| GOLD and higher | **$0.85** | +$0.01 |

Product pages, stock per store and removed-product rows don't change the price per product. There is also a tiny start fee of $0.00005 per run.

Typical runs (measured locally on 2026-10-19; one page = 24 products):

| Scenario | Requests | Time (normal / fast mode) | Price (FREE plan) |
|---|---|---|---|
| 20 products from a category (the prefilled input) | 1 | ~5 s | $0.02 |
| 1 000 products from a category | 42 | ~1.5 min / ~25 s | $0.95 |
| 1 000 products with product page details | ~1 042 | ~35 min / ~9 min | $0.95 |
| 10 products with details and stock per store | 20 | ~45 s | $0.01 |
| 1 search term, 30 results sorted by price | 2 | ~5 s | $0.03 |
| 100 EANs | ~200 | ~7 min / ~2 min | $0.10 |

### Input example

```json
{
  "startUrls": [{ "url": "https://www.planeo.sk/televizory" }],
  "maxItems": 100,
  "sortBy": "cheapest",
  "includeDetails": true
}
```

### Output example

```json
{
  "id": "planeo-sk:35063613",
  "source": "planeo.sk",
  "url": "https://www.planeo.sk/lg-oled55c64la",
  "productId": "35063613",
  "ean": "8806096685815",
  "name": "LG OLED55C64LA + CASHBACK 80€",
  "brand": "LG",
  "category": "OLED televízory",
  "categoryPath": ["Televízory a projektory", "Televízory", "OLED televízory"],
  "price": 1599.0,
  "priceWithoutVat": 1300.0,
  "currency": "EUR",
  "priceBeforeDiscount": 1798.9,
  "savings": 199.9,
  "discountPercent": 11.0,
  "isDiscounted": true,
  "couponCode": "Kupon25%",
  "couponPrice": 1199.25,
  "availability": "in_stock",
  "availabilityCode": "CENTRAL_WAREHOUSE_AND_STORE",
  "availabilityText": "Ihneď k odoslaniu, Skladom viac ako 5 ks. K vyzdvihnutiu už 20.10.",
  "stockText": "viac ako 5 ks",
  "storeCount": 65,
  "storePickupText": "K vyzdvihnutiu do 15 minút",
  "pickupDate": "2026-10-20",
  "rating": 4.9,
  "reviewCount": 10,
  "labels": [],
  "shortDescription": "OLED SMART televízia, uhlopriečka 55\"/139 cm, operačný systém webOS …",
  "imageUrl": "https://mc-static.fast.eu/pics/35/35063613/35063613-onesixty.webp",
  "position": 5,
  "specifications": { "Typ obrazovky": "OLED", "Frekvencia": "120 Hz", "Energetická trieda": "F" },
  "description": "OLED SMART televízia, uhlopriečka 55\"/139 cm …",
  "detailScraped": true,
  "sourceUrl": "https://www.planeo.sk/televizory",
  "scrapedAt": "2026-10-19T10:00:00Z",
  "promoLabel": "Jesenný výpredaj",
  "cashbackPrice": 1119.25,
  "cashbackAmount": 80.0,
  "energyClass": "F",
  "storeAvailability": [{ "store": "PLANEO Bratislava Avion", "address": "Ivanská cesta 12", "region": "Bratislavský", "inStock": true, "quantity": 2, "quantityMore": false, "stockText": "Skladom 2 ks", "pickupText": "K vyzdvihnutiu do 15 min", "storeId": "2170" }],
  "storesInStock": ["PLANEO Bratislava Avion"],
  "searchQuery": null,
  "matchedBy": null,
  "changeType": null,
  "firstSeenAt": null,
  "previousPrice": null,
  "priceChange": null,
  "priceChangePercent": null,
  "removedAt": null
}
```

### Limitations

- **Discounts** are against the crossed-out price the shop shows. `couponPrice` is the price with the code the website applies automatically at checkout; `cashbackPrice` needs the customer to claim the cashback from the manufacturer.
- **EAN** is only on the product page: turn on details, or look products up by **EANs**. An EAN lookup counts as found only when the website's search returns a single product and its page has the same EAN.
- **Search pages** also list loosely matching products further down: keep **Max pages per search** low. Brand pages (`/znacky/…`) load their products with JavaScript and are not supported; use a category with **Brands** instead.
- **Stock per store** is what the website's "Dostupnosť v predajniach" window says at the moment of the run; products sold only online have an empty list.
- **Ratings and reviews:** only the average and the number of ratings, never reviewer names or texts. No login, no PLANEO Plus member prices.
- **Photos and texts** are returned as URLs and plain text; they are copyrighted, so check the rights before you republish them.
- **Large listings:** **Max pages per category** defaults to 50 pages (1 200 products), up to 500.
- If the site rejects a request, it is asked once more after 30 seconds from the same IP address and session (never from another IP). If it rejects a few requests in a row even so, the run stops and says so. When only the stock per store is rejected, it is turned off for the rest of the run and the run goes on. Products whose page couldn't be read are returned with the listing data (`detailScraped: false`).

### For AI agents and API users

- **Minimal input:** `{"startUrls": [{"url": "https://www.planeo.sk/televizory"}], "maxItems": 20}`, or `{"searchQueries": ["lg oled"], "maxItems": 10}`, or `{"eans": ["8806096685815"]}`.
- One row = one product = one charge (+ the fast-mode event when fast mode is on). Details and stock per store don't change the price per product.
- 24 products per page. `maxItems` counts saved products, `maxItemsPerStartUrl` limits each URL or search term.
- Prices are in EUR incl. VAT with cents (`priceWithoutVat` without VAT). `availability` is `in_stock`, `in_store_only`, `on_order`, `preorder`, `out_of_stock` or `unknown`.
- The output has the same fields as the Planeo.cz Scraper (plus the Slovak ones: `promoLabel`, `cashbackPrice`, `cashbackAmount`, `energyClass`, `pickupDate`, stock per store, lookups), so both datasets can be merged.
- Monitoring state is kept per `monitoringKey` between runs of the same user.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("tsutseisoftware/planeo-sk-scraper").call(run_input={
    "startUrls": [{"url": "https://www.planeo.sk/televizory"}],
    "sortBy": "cheapest",
    "maxItems": 100,
})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(product["name"], product["price"], product["couponPrice"], product["availability"])
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('tsutseisoftware/planeo-sk-scraper').call({
    searchQueries: ['lg oled'], maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((p) => `${p.name}: ${p.price} EUR`));
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/tsutseisoftware~planeo-sk-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"eans": ["8806096685815"], "productCodes": ["35063826"], "includeStoreAvailability": true}'
```

You can also connect the actor to Make, Zapier, n8n, Google Sheets, Slack or webhooks and schedule it in Apify Console.

### Troubleshooting

| Status message | What to do |
|---|---|
| `Skipping unsupported URL` | Use a Planeo.sk category, search or product URL (cart, account, store and article pages have no product list). |
| `unknown brand …` / `unknown … (available: …)` (log) | Use one of the options listed in the log for that category. |
| `… skipped because the site filters match nothing there` | No product of that category has the requested brand, store or parameter value. |
| `no products: …` | The category or search is empty (with these filters). |
| `not found: …` | The website's search found no product with exactly this code, or the EAN didn't match. |
| `… lookups found a product already saved in this run` | Two of your codes or EANs belong to the same product; it is saved once. |
| `… could not be loaded` | The page doesn't exist (anymore); open the URL in your browser. |
| `stopped at the page limit …` | Raise **Max pages per category** or **Max pages per search**. |
| `stock per store turned off (…)` | The site rejected the stock-per-store window; the products are saved without it. Run again later. |
| `fast mode: N products, then the normal speed because …` | The website asked to slow down; the rest of the run used the normal speed (no fast-mode charge). |
| `removed products were not checked because …` | The run didn't read everything (e.g. **Max products** reached); removed products are checked in a complete run. |
| `Planeo.sk is rejecting requests` | Try again later. |
| `… listing pages could not be read, so the results may be incomplete` | The site didn't answer some pages; run it again later for complete results. |
| `Saved 0 products (new or changed since last run)` | Nothing changed since the previous monitoring run; that's expected. |

### More Czech & Slovak e-shop scrapers

Compare prices across Czech and Slovak shops with the same output format (EAN for matching, monitoring mode):

- [Datart.cz Scraper](https://apify.com/tsutseisoftware/datart-scraper): electronics: prices, 30-day low, EAN, store availability
- [TSBOHEMIA.CZ Scraper](https://apify.com/tsutseisoftware/tsbohemia-scraper): IT & electronics: prices, discount codes, EAN, site filters
- [Planeo.cz Scraper](https://apify.com/tsutseisoftware/planeo-scraper): electronics & appliances: prices, discount codes, store pickup, EAN
- [Smarty.cz Scraper](https://apify.com/tsutseisoftware/smarty-scraper): electronics: prices, coupons, cashback, EAN, price history, store stock
- [BAUHAUS.cz Scraper](https://apify.com/tsutseisoftware/bauhaus-cz-scraper): DIY & garden: prices, unit prices, stock in 9 stores, variants, EAN
- [Mironet.cz Scraper](https://apify.com/tsutseisoftware/mironet-scraper): electronics: prices, store stock, delivery date, MPN, warranty, price history
- [Alza Scraper (CZ, SK, HU, AT, DE)](https://apify.com/tsutseisoftware/alza-scraper): electronics: prices, coupons, ratings, reviews, pickup points, MPN
- [NAY.sk Scraper (Slovakia)](https://apify.com/tsutseisoftware/nay-sk-scraper): electronics: prices in EUR, discount codes, stock in 54 stores, EAN
- [BAUHAUS.sk Scraper (Slovakia)](https://apify.com/tsutseisoftware/bauhaus-sk-scraper): DIY & garden: EUR prices, Bratislava store stock, variants, EAN
- [TSBOHEMIA.SK Scraper (Slovakia)](https://apify.com/tsutseisoftware/tsbohemia-sk-scraper): IT & electronics: EUR prices, discount codes, EAN, lookups
- [Smarty.sk Scraper (Slovakia)](https://apify.com/tsutseisoftware/smarty-sk-scraper): electronics: EUR prices, coupons, cashback, stock in Slovak stores, EAN

### FAQ

#### Is it legal to scrape Planeo.sk?

The actor collects publicly available product data (prices, discount codes, availability, stock per store, parameters) that anyone sees on the website without logging in. It reads the same pages and page parts a browser loads on Planeo.sk (the category page, the product list the website's filter and search load, the product page and the "availability in stores" window), does not log in, makes at most 30 requests per minute by default (120 in fast mode, with automatic slow-down) and never solves captchas or other challenges. It returns no personal data: only the average rating and the number of ratings, never reviewer names or texts. How you use the data is your responsibility. Use it for price monitoring and analysis, and don't republish the catalogue, texts or photos. If unsure, consult a lawyer. Objections and data protection requests: the **Issues** tab of this actor.

#### Is Planeo.sk the same as Planeo.cz?

Both shops belong to the FAST group and run on the same platform with mostly the same product codes, but they are separate shops with their own prices (EUR vs. CZK), stores and campaigns. This actor reads planeo.sk; the [Planeo.cz Scraper](https://apify.com/tsutseisoftware/planeo-scraper) reads planeo.cz with the same output fields.

#### Do I need a proxy?

No. Planeo.sk answers Apify's servers without a proxy (checked from Apify, also through Apify datacenter and residential proxies), so the default is no proxy.

#### What does fast mode cost and when should I use it?

$0.01 per 1 000 products on top of the normal price, only for products saved at the fast speed. Use it for large categories, product page details, stock per store and long EAN lists, when the time matters.

#### Why is the EAN empty?

The EAN is only on the product page. Turn on **Add product page details**, or look products up by **EANs**.

#### Can I use it through the API?

Yes. See the Python, JavaScript and cURL examples above, or the **API** tab.

#### Something doesn't work

Open an issue in the **Issues** tab and include the input you used.

Unofficial, not affiliated with or endorsed by FAST PLUS, a.s. (Bratislava), the operator of Planeo.sk. This tool is also known as a Planeo.sk API, Planeo price tracker or "sledovanie cien Planeo".

# Actor input Schema

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

Planeo.sk category URLs (e.g. https://www.planeo.sk/televizory), search URLs (https://www.planeo.sk/vyhladavanie?q=sencor) or product URLs (e.g. https://www.planeo.sk/samsung-qe55s83h). Tip: set filters and sorting on the website and paste the URL (e.g. …/televizory?znacka=samsung\&sort=PRICE_ASC); the actor keeps them.

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

Searched with the website's own search, in its order (e.g. "lg oled", "iphone 17"). Up to 10 terms per run; "Max pages per search" limits each. Sorting by price works for searches too.

## `productCodes` (type: `array`):

Planeo product codes (the number after "ID:" on the product page, the end of the id field, e.g. 35063826; mostly the same as on Planeo.cz). Each is looked up with the website's search; only an exact code match is returned.

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

EAN barcodes (check digit verified). The website's search finds the product and the product page confirms the EAN (one product page per EAN, so details are included). Up to 500 codes and EANs per run.

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

Maximum number of products saved. You pay per saved product. 0 = no limit.

## `maxItemsPerStartUrl` (type: `integer`):

Limit for each start URL or search term separately, so one large category doesn't use up the whole Max products. 0 = no limit.

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

Open each product page to add the EAN (barcode), all technical parameters, the description, the cashback amount and the exact rating. One extra request per product.

## `descriptionMaxLength` (type: `integer`):

Maximum characters of the description (with product page details). 0 = the whole text.

## `includeStoreAvailability` (type: `boolean`):

Stock in each of the ~70 PLANEO stores as the website's "availability in stores" window shows it: store, address, region, pieces, pickup time. One extra request per product (none for products sold online only).

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

Order of products, as on the website. Sorting is done by the shop, so it's free and fast. Searches sort by relevance or price.

## `brands` (type: `array`):

Only these brands, e.g. 'Samsung', 'LG'. Case doesn't matter.

## `siteAvailability` (type: `array`):

Only products that ship now from the e-shop and/or are available in a store, as in the website's filter.

## `stores` (type: `array`):

Only products in stock in these stores, e.g. 'Bratislava', 'PLANEO Žilina'. A town selects all its stores. Several values = any of them. With searches or lookups the actor reads the stock per store to check it.

## `parameterFilters` (type: `object`):

Filter by the category's parameters, as in the website's filter (category URLs only). Keys are parameter names, values are a value or a list of values (any of them). Example for TVs: {"Typ obrazovky": \["OLED", "QLED"], "Operačný systém": "Google TV", "Vysoké rozlíšenie": "4K"}. Available names and values are listed in the log when a name isn't found.

## `onlyInStock` (type: `boolean`):

Keep only products in stock for shipping (in the central warehouse). Store-only products are skipped.

## `availability` (type: `array`):

Keep only products with these availability states.

## `onlyDiscounted` (type: `boolean`):

Keep only products shown with a crossed-out price.

## `minDiscountPercent` (type: `integer`):

Keep only products discounted by at least this many percent (against the crossed-out price).

## `onlyWithCoupon` (type: `boolean`):

Keep only products with a cheaper price with a discount code ('Kúpiť s kupónom'). The code is in couponCode.

## `onlyWithCashback` (type: `boolean`):

Keep only products with a manufacturer cashback ('Cena s Cashbackom').

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

Keep only products with price (incl. VAT) at least this.

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

Keep only products with price (incl. VAT) at most this. Tip: combine with Sort by: Cheapest first.

## `excludeBrands` (type: `array`):

Skip products of these brands, e.g. 'Sencor'. Case and diacritics don't matter.

## `nameKeywords` (type: `array`):

Keep only products whose name contains at least one of these words (case and diacritics don't matter), e.g. 'OLED'.

## `excludeNameKeywords` (type: `array`):

Skip products whose name contains any of these words, e.g. 'držiak'.

## `labels` (type: `array`):

Keep only products with one of these website labels or promotions, e.g. 'Novinka', 'Výpredaj', 'Jesenný výpredaj'.

## `energyClasses` (type: `array`):

Only these energy classes (from the energy label in the listing, or the parameters with details).

## `minStoreCount` (type: `integer`):

Keep only products available in at least this many PLANEO stores.

## `minRating` (type: `number`):

Keep only products rated at least this (0–5 stars). Products without ratings are skipped when set.

## `minReviewCount` (type: `integer`):

Keep only products with at least this many ratings.

## `onlyWithEan` (type: `boolean`):

Skip products without an EAN (barcode). Reads the product pages (like "Add product page details").

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

Return only products that are new or whose price, availability, price before discount or discount-code price changed since the previous run with the same Monitoring key. Unchanged products are free.

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

Name of the saved state. Use a different key for each tracked set of products (e.g. 'tv-daily').

## `onlyPriceChanges` (type: `boolean`):

With monitoring: return new products and products whose price changed, not availability-only changes.

## `minPriceDropPercent` (type: `number`):

With monitoring: return only products whose price dropped by at least this many percent (price drop alerts).

## `includeRemovedProducts` (type: `boolean`):

Adds rows with changeType "removed" for products that disappeared since the previous run (only after a run that read everything) and "reappeared" when they are back.

## `fastMode` (type: `boolean`):

Reads Planeo.sk about 4x faster: at most 120 requests per minute and 4 at a time instead of 30 per minute and 2 at a time. It stays polite: the moment the website answers "too many requests", "service unavailable", "forbidden", shows a challenge or slows down, the run switches back to the normal speed for the rest of the run; it waits when the website asks it to wait and never changes IP address to get around a limit. Extra charge "Fast mode" ($0.01 per 1 000 products, see the Pricing tab) only for products saved while the fast speed was on.

## `maxRequestsPerMinute` (type: `integer`):

All requests together (pages, product pages, stock per store). At most 60.

## `maxPagesPerCategory` (type: `integer`):

Safety limit for each category (24 products per page). 0 = no limit (at most 500).

## `maxSearchPages` (type: `integer`):

Result pages (24 products each) read per search term. The website's search also lists loosely matching products further down.

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

Not needed: Planeo.sk works without a proxy, also from Apify's servers. You can use Apify Proxy or your own proxies if you prefer.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.planeo.sk/televizory"
    }
  ],
  "maxItems": 20,
  "maxItemsPerStartUrl": 0,
  "includeDetails": false,
  "descriptionMaxLength": 1000,
  "includeStoreAvailability": false,
  "sortBy": "recommended",
  "parameterFilters": {},
  "onlyInStock": false,
  "onlyDiscounted": false,
  "onlyWithCoupon": false,
  "onlyWithCashback": false,
  "onlyWithEan": false,
  "onlyNewOrChanged": false,
  "monitoringKey": "default",
  "onlyPriceChanges": false,
  "includeRemovedProducts": false,
  "fastMode": false,
  "maxRequestsPerMinute": 30,
  "maxPagesPerCategory": 50,
  "maxSearchPages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `products` (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 = {
    "startUrls": [
        {
            "url": "https://www.planeo.sk/televizory"
        }
    ],
    "maxItems": 20,
    "parameterFilters": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("tsutseisoftware/planeo-sk-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 = {
    "startUrls": [{ "url": "https://www.planeo.sk/televizory" }],
    "maxItems": 20,
    "parameterFilters": {},
}

# Run the Actor and wait for it to finish
run = client.actor("tsutseisoftware/planeo-sk-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 '{
  "startUrls": [
    {
      "url": "https://www.planeo.sk/televizory"
    }
  ],
  "maxItems": 20,
  "parameterFilters": {}
}' |
apify call tsutseisoftware/planeo-sk-scraper --silent --output-dataset

```

## MCP server setup

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