# Mironet.cz Scraper: Prices, Stock, MPN & Filters (`tsutseisoftware/mironet-scraper`) Actor

Scrape Mironet.cz (Czech electronics shop) by category, brand, sale, search, code, EAN, MPN or product URL: price, discount, stock & delivery, stores, MPN, parameters, price history. Filters, monitoring. Unofficial.

- **URL**: https://apify.com/tsutseisoftware/mironet-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

## Mironet.cz Scraper: Prices, Stock, MPN & Filters

Scrape products and prices from **Mironet.cz**, one of the largest Czech electronics shops (computers, laptops, phones, TVs, components, appliances, toys and more). Start from a **category**, a **category overview**, a **brand page**, a **sale section** (discounts, clearance, unpacked, bazaar, refurbished), **search terms**, **product URLs**, or your own list of **Mironet codes, EANs or MPNs**. For each product you get the full name and the short specification line, brand, Mironet code, current price (with and without VAT), the **crossed-out price and discount**, **availability exactly as the shop shows it** ("Ihned na 6 prodejnách nebo u Vás doma – zítra", "Skladem 5+ kusů", "Není skladem – na dotaz"), pieces in stock, the number of stores with stock and the **delivery date**, the condition (**new, unpacked, bazaar, like new, refurbished**), labels ("Bomba ceny", "Slevy") and the image.

Optionally you also get the **product page details**: the **manufacturer part number (MPN)** for matching with other shops, warranty, **all technical parameters**, energy class, description, category breadcrumb, **variants** with prices and **cheaper unpacked offers**, and the "lowest price of the 30 days before the promotion" note; **stock in each Mironet store**; and the shop's own **180-day price history** with the lowest and highest price.

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

### Why use this Mironet.cz scraper?

- 🎛️ **The website's own filters and sorting:** brand, **any parameter of the filter panel** (processor, display panel, RAM, screen size range…), **product state** (new only, promotions, discounts, unpacked, like new), **in stock**, **in stock in a given store** and the **price range**, applied by Mironet.cz itself, so pages contain only matching products. Or just paste a URL with filters set on the website.
- 📦 **Real availability, not just "in stock":** the text under the price, pieces ("5+"), stores with stock, the delivery date as an ISO date, sold-out and pre-order products. One small request per 24 products.
- 🏬 **Stock in each store** (Praha Chodov, Invalidovna, Nupaky, Brno, Plzeň, Kladno and the partner stores), as the "Kdy zboží dostanu?" window shows it.
- 🏷️ **Prices you can trust:** current price incl. and excl. VAT, crossed-out price (by law the lowest price of the 30 days before the promotion) and discount, each in its own field; checked against the website on real products.
- 📉 **Price history of 180 days** from the shop's "Transparentní historie ceny", with `lowestPrice30Days`, `lowestPrice180Days` and `highestPrice180Days`.
- 🔢 **Your own product list:** Mironet codes, **EANs** or **MPNs**, found with the website's search (an exact match opens the product page). The row of an EAN lookup carries the EAN.
- 🧾 **Data for matching:** MPN without the shop's ".rozbaleno"/".bazar" suffix, EAN where the shop's P/N is an EAN, brand, category breadcrumb.
- ♻️ **Unpacked and bazaar offers** flagged (`condition`, `isUnpacked`, `isBazaar`) and filterable: only new, or only second-hand.
- 📉 **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. Optional **fast mode** about 3× faster for a tiny extra charge.

### What data can you get?

Share of products with a value, measured on 410 products of runs from 2026-10-14 (laptops, phones, Apple brand page, bazaar, computers, search "iphone 17") and on product pages for the details. Fields marked *optional* need the input in brackets.

| Field | Example | Filled |
|---|---|---|
| Name, short name, Mironet code, summary line | Apple MacBook Air 13" M5 2026 CZ stříbrná / Apple M5 / 16GB…, 90636722 | 100 % (summary ~95 %) |
| Brand | Apple, Lenovo, DELL | ~97 % (from the brand filter of the listing; 100 % with details) |
| Price incl. and excl. VAT | 34 756 CZK, 28 724 CZK | ~95 % (pre-orders "Těšíme se" have no price yet) |
| Crossed-out price, discount | 36 051 → 34 756 CZK, 3 % | discounted products (~15 % in October) |
| Availability, text | `in_stock`, "Ihned na 6 prodejnách nebo u Vás doma - zítra" | ~97 % (`coming_soon` for pre-orders) |
| Pieces, stores with stock, delivery date | "Skladem 5+ kusů" → 5, 6, 2026-10-15 | ~91 % (in-stock products) |
| Condition, labels | `unpacked`, `["Slevy", "Garance vrácení", "CZ klávesnice"]` | 100 % (~8 % second-hand) |
| Category, category path | Notebooky; with details MacBook › MacBook Air › MacBook Air 13" M5 | categories 100 %, search and sale only with details |
| MPN *(Add product page details)* | MDH74CZ/A | 100 % of product pages |
| EAN | 8806096768006 | EAN lookups, and P/Ns that are EANs (a few %) |
| Warranty, parameters, description *(details)* | 24 months, 40–50 parameters, the full text | 100 % of product pages |
| Energy class *(details)* | F | products with an energy label (TVs, appliances) |
| Variants, cheaper offers *(details)* | 11 other configurations with prices; "Rozbaleno" for 31 308 CZK | products with variants |
| Stock per store *(Add stock per store)* | Mironet Praha 4 (u metra Chodov): 1 ks – ihned | 100 % |
| Price history, lowest/highest *(Add price history)* | 7 changes in 180 days, low 29 843, high 36 051 | 100 % |

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

### How to scrape Mironet.cz

1. Open Mironet.cz, go to a category, e.g. `https://www.mironet.cz/notebooky+c1504/`, and paste the URL into **Category, brand, sale, search or product URLs**. Brand pages (`https://www.mironet.cz/apple+v27633/`), category overviews (`…+rzn10761/`), sale sections (`https://www.mironet.cz/vyprodej/?v=rozbaleno`), search results and product URLs work too. Or type **Search terms**, pick **Sale sections**, or paste **Mironet codes**, **EANs** or **MPNs**.
2. Optionally choose **Sort by**, the **Website filters** and **Filters**, and set **Max products**. Turn on **Add product page details**, **Add stock per store** or **Add price history** 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.mironet.cz/notebooky+fc1504/?pn4293[]=Lenovo&sort=1`. The actor keeps them (and tells you in the log about URL parameters it doesn't use).

### Use cases

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

**Cheapest Lenovo and HP laptops in stock between 15 000 and 25 000 CZK, new only:**

```json
{
  "startUrls": [{ "url": "https://www.mironet.cz/notebooky+c1504/" }],
  "brands": ["Lenovo", "HP"],
  "onlyInStock": true,
  "minPrice": 15000,
  "maxPrice": 25000,
  "excludeUnpackedAndUsed": true,
  "sortBy": "cheapest",
  "maxItems": 100
}
```

**OLED laptops with a 14–16" screen, with all parameters and the MPN:**

```json
{
  "startUrls": [{ "url": "https://www.mironet.cz/notebooky+c1504/" }],
  "parameterFilters": { "Typ panelu displeje": ["OLED"], "Úhlopříčka displeje (\")": { "min": 14, "max": 16 } },
  "includeDetails": true,
  "maxItems": 50
}
```

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

```json
{
  "startUrls": [{ "url": "https://www.mironet.cz/telefony/mobilni-telefony+c10737/" }],
  "maxItems": 0,
  "onlyNewOrChanged": true,
  "minPriceDropPercent": 5,
  "monitoringKey": "phones"
}
```

**Your assortment by EAN or MPN, with stock per store:**

```json
{
  "eans": ["8806096768006", "5901292526047"],
  "mpns": ["MDH74CZ/A"],
  "includeStoreAvailability": true
}
```

**Unpacked and bazaar bargains with at least 20 % off:**

```json
{
  "saleSections": ["rozbaleno", "bazar"],
  "minDiscountPercent": 20,
  "sortBy": "biggestDiscount",
  "maxItems": 200
}
```

**Laptops in stock in the Brno store:**

```json
{
  "startUrls": [{ "url": "https://www.mironet.cz/notebooky+c1504/" }],
  "availableInStores": ["Brno"],
  "maxItems": 100
}
```

**Price history of selected products (lowest price of 30 and 180 days):**

```json
{
  "productCodes": ["90636722", "90635005"],
  "includePriceHistory": true
}
```

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

**Sort by**, **Min/Max price**, **Brands**, **Exclude brands**, **Product state**, **Only in stock**, **In stock in these stores** and **Parameter filters** are the filter panel of Mironet.cz. The actor reads the first page, finds the options in its filter panel and loads the filtered list, so a page limit never cuts the matching products. Names and values are matched without regard to case and diacritics; unknown ones are listed in the log together with the options of that listing. **Parameter filters** take the parameter name as the filter panel shows it, with a list of values or, for sliders, `{"min": …, "max": …}`. On brand pages (no brand filter) and for codes, EANs and MPNs the actor checks brands itself.

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

**Only discounted**, **Min discount**, **Name must (not) contain**, **Labels**, **Only new** / **Only unpacked, bazaar or refurbished**, **Only with MPN**, **Min warranty** and **Energy classes** are checked by the actor. The last three need the product page and turn on **Add product page details** by themselves.

#### Search terms, codes, EANs and MPNs

Search terms use the website's search, in its order (up to 10 terms, **Max pages per search** of 24 results each; after the best matches the website lists loosely related products, use **Name must contain** to narrow it). Codes, EANs and MPNs (up to 1 000 per run) are looked up with the same search: when it opens a product page, that product is returned with its product page data; otherwise the code is reported as not found.

#### Fast mode (optional, small extra charge)

Normally the actor makes at most 2 requests at a time and **20 per minute** (all requests together). **Fast mode** allows 3 at a time and 60 per minute and falls back to the normal speed for the rest of the run as soon as the website answers "too many requests", "service unavailable" or "forbidden", shows a challenge or slows down. It costs $0.01 per 1 000 products, only for products saved while the fast speed was on.

#### Other inputs

- **Add availability** (on by default) reads the stock box of each listing page; turn it off only when you need prices alone. **Description length** limits the description of **Add product page details** (0 = the whole text). **Add price history (180 days)** adds one request per product.
- **Min price (CZK)** and **Max price (CZK)** go to the website's price filter and are checked again by the actor; **Min discount (%)**, **Name must not contain**, **Only new (no unpacked, bazaar or refurbished)** and **Min warranty (months)** are checked by the actor.
- **MPNs (manufacturer part numbers)** are looked up like EANs.
- **Fast mode (small extra charge)** and **Max requests per minute (normal speed)** set the speed. **Proxy configuration** is empty by default: Mironet.cz needs no 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 or availability** changed. `previousPrice`, `priceChange` and `priceChangePercent` are filled when the price changed. Labels, piece counts and delivery 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 Mironet.cz?

You pay per saved product. Platform usage is included. 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, availability, stock per store, price history and removed-product rows don't change the price per product (a removed-product row is a row like any other). There is also a tiny start fee of $0.00005 per run.

Typical runs (measured locally and offline on 2026-10-14; one listing page = 24 products plus one stock request):

| Scenario | Requests | Time (normal / fast mode) | Price (FREE plan) |
|---|---|---|---|
| 20 products from a category (the prefilled input) | 2 | ~5 s | $0.02 |
| 240 products from a category | 20 | ~1 min / 22 s | $0.23 |
| 1 000 products from a category | ~84 | ~4.5 min / ~1.5 min | $0.95 |
| 1 000 products with product page details | ~1 084 | ~55 min / ~18 min | $0.95 |
| 100 products with details, stock per store and price history | ~310 | ~16 min / ~5 min | $0.10 |
| 100 codes, EANs or MPNs | ~200 | ~10 min / ~3.5 min | $0.10 |
| 1 search term, 120 results | ~10 | ~30 s | $0.11 |

### Input example

```json
{
  "startUrls": [{ "url": "https://www.mironet.cz/notebooky+c1504/" }],
  "maxItems": 100,
  "sortBy": "cheapest",
  "onlyInStock": true
}
```

### Output example

A laptop from the category listing with product page details, stock per store and price history (lists shortened):

```json
{
  "id": "mironet:90636722",
  "source": "mironet.cz",
  "url": "https://www.mironet.cz/apple-macbook-air-13-m5-2026-cz-stribrna-apple-m5-16gb-512gb-ssd-apple-8jadrova-igpu-macos+dp812263/",
  "productCode": "90636722",
  "productId": "812263",
  "name": "Apple MacBook Air 13\" M5 2026 CZ stříbrná / Apple M5 / 16GB / 512GB SSD / Apple 8-jádrová iGPU / macOS",
  "shortName": "Apple MacBook Air 13\" M5 2026 CZ stříbrná",
  "brand": "Apple",
  "mpn": "MDH74CZ/A",
  "ean": null,
  "category": "MacBook Air 13\" M5",
  "categoryPath": ["Počítače a notebooky", "Notebooky", "MacBook", "MacBook Air", "MacBook Air M5", "MacBook Air 13\" M5"],
  "summary": "Displej 13.6\" / 2560 x 1664 (Retina) / IPS / Nedotykový / 10jádrový procesor Apple - Apple M5 / 16GB RAM / 512 GB (SSD) / …",
  "price": 34756,
  "currency": "CZK",
  "priceWithoutVat": 28724,
  "priceBeforeDiscount": 36051,
  "discountPercent": 3,
  "isDiscounted": true,
  "discountNote": "původní cena je nejnižší cena 30 dní před začátkem akce 22. 9. 2026",
  "discountStartDate": "2026-09-22",
  "lowestPrice30Days": 34756,
  "lowestPrice180Days": 29843,
  "highestPrice180Days": 36051,
  "priceHistory": [{ "date": "2026-04-17", "price": 29990 }, { "date": "2026-05-12", "price": 29843 }, { "date": "2026-10-08", "price": 34756 }],
  "availability": "in_stock",
  "availabilityText": "Ihned na 1 prodejně nebo u Vás doma - zítra",
  "stockText": "Skladem 5+ kusů",
  "stockQuantity": 5,
  "storesWithStock": 1,
  "deliveryText": "zítra",
  "deliveryDate": "2026-10-15",
  "isSoldOut": false,
  "storeAvailability": [{ "store": "Mironet Praha Nupaky (centrální sklad)", "inStock": true, "quantity": 5, "availabilityText": "5+ ks - ihned" }],
  "storesInStock": ["Mironet Praha Nupaky (centrální sklad)"],
  "condition": "new",
  "isUnpacked": false,
  "isBazaar": false,
  "labels": ["Slevy", "Garance vrácení", "CZ klávesnice"],
  "hasBombPrice": false,
  "warrantyMonths": 24,
  "warrantyText": "24 měsíců",
  "energyClass": null,
  "specifications": { "Model procesoru": "Apple M5", "Velikost operační paměťi (GB)": "16", "Typ panelu": "IPS", "…": "…" },
  "description": "13palcový MacBook Air\nVýkon povznáší.\nNejlehčí a nejpřenosnější Mac je teď se supervýkonným čipem M5. …",
  "variantCount": 11,
  "variants": [{ "productId": "812264", "url": "https://www.mironet.cz/apple-macbook-air-13-m5-2026-cz-temne-inkoustova-apple-m5-16gb-512gb-ssd-apple-8jadrova-igpu-macos+dp812264/", "name": "Apple MacBook Air 13\" M5 2026 CZ temně inkoustová / Apple M5 / 16GB / 512GB SSD / Apple 8-jádrová iGPU / macOS", "price": 32602 }],
  "cheaperAlternatives": [{ "productId": "901725", "url": "https://www.mironet.cz/rozbaleno-apple-macbook-air-13-m5-2026-cz-temne-inkoustovaapple-m5-16gb-512gb-ssd-apple-8jadrova-igpu-macos-rozbaleno+dp901725/", "name": "Rozbaleno - Apple MacBook Air 13\" M5 2026 CZ temně inkoustová/Apple M5 / 16GB 512GB SSD / Apple 8-jádrová iGPU / macOS / rozbaleno", "price": 31308 }],
  "questionCount": 0,
  "imageUrl": "https://www.mironet.cz/Foto/s4/90636722.webp",
  "imageUrls": ["https://www.mironet.cz/Foto/s4/90636722.webp"],
  "position": 1,
  "searchQuery": null,
  "matchedBy": null,
  "detailScraped": true,
  "changeType": null,
  "firstSeenAt": null,
  "previousPrice": null,
  "priceChange": null,
  "priceChangePercent": null,
  "removedAt": null,
  "sourceUrl": "https://www.mironet.cz/notebooky+c1504/",
  "scrapedAt": "2026-10-14T10:00:00Z"
}
```

### Limitations

- **Default order.** The website's default "Top" order of categories and brand pages changes from one request to the next (the same page 2 asked twice differs in most products), so a list longer than one page would skip and repeat products. Without a sort in the URL or in **Sort by**, the actor therefore reads categories and brand pages **by name A–Z**; search results keep the website's relevance and sale sections its discount order. If you choose **Top**, repeats are skipped but some products can be missing.
- **Price before discount** is the crossed-out price the shop shows; the shop says it is its lowest price of the 30 days before the promotion (`discountNote` with details). The actor doesn't calculate discounts itself.
- **Availability** is what the stock box under the price says. `stockQuantity` is the number shown ("5+" gives 5, at least). The shop sells from its warehouse and partner warehouses, so "Doručíme – 19. 10. / Skladem 5 kusů" is `in_stock` with a later `deliveryDate`. Pre-orders ("Těšíme se") are `coming_soon` with no price.
- **Stock per store** lists Mironet stores and partner stores by their town (the name of a partner's operator is never returned).
- **EAN:** Mironet.cz doesn't show EANs. `ean` is filled for EAN lookups and where the P/N is a valid EAN; match other products by **MPN** (with details).
- **Brand** without details is matched with the brands of the listing's own brand filter; on search and sale pages a brand that starts no product name is null. With details it is the product page's brand.
- **Ratings and reviews:** Mironet.cz shows no product ratings or reviews, so there are none to return. The product Q\&A ("Poradna") is returned only as a count, never names or texts.
- **Documents:** the product pages have no downloadable manuals or data sheets. Photos are returned as URLs; product photos and texts are copyrighted, so check the rights before you republish them.
- **Codes, EANs and MPNs** are found with the website's search: only a search that opens a product page counts as found (a list of loosely matching products doesn't).
- **Large listings:** **Max pages per category** defaults to 50 pages (1 200 products), up to 500; the search returns at most 5 000 results (209 pages).
- 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 optional data (availability, stock per store, price history) are rejected, that data is turned off for the rest of the run and the run goes on; the status message says which. 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.mironet.cz/notebooky+c1504/"}], "maxItems": 20}`, or `{"searchQueries": ["iphone 17"], "maxItems": 10}`, or `{"eans": ["8806096768006"]}`.
- One row = one product = one charge (+ the fast-mode event when fast mode is on). Details, availability, stock per store and price history don't change the price per product.
- 24 products per listing page. `maxItems` counts saved products, `maxItemsPerStartUrl` limits each URL, search term, sale section or the code list.
- Prices are in CZK incl. VAT (`priceWithoutVat` without). `availability` is `in_stock`, `on_order`, `coming_soon`, `out_of_stock`, `unknown` or null. `condition` is `new`, `unpacked`, `used`, `likeNew` or `refurbished`.
- 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/mironet-scraper").call(run_input={
    "startUrls": [{"url": "https://www.mironet.cz/notebooky+c1504/"}],
    "sortBy": "cheapest",
    "maxItems": 100,
})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(product["name"], product["price"], product["availability"], product["stockText"])
```

#### JavaScript

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

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

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/tsutseisoftware~mironet-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"productCodes": ["90636722"], "eans": ["8806096768006"], "includePriceHistory": 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 Mironet.cz category, category overview, brand, sale, search or product URL (cart, account and campaign pages have no product list). |
| `Ignored URL parameters …` (log) | The URL has parameters that are not filters of the website the actor knows; use the website's own filters or the input fields. |
| `unknown parameter …` / `unknown value …` (log) | Use one of the options listed in the log for that listing. |
| `… skipped because the website filters match nothing there` | No product of that listing has the requested brand, state or value. |
| `no products: …` | The listing or search is empty (with these filters). |
| `not found: …` | The website's search found no product with exactly this code, EAN or MPN. |
| `… lookups found a product already saved in this run` | Two of your codes, EANs or MPNs 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**. |
| `availability turned off (…)` (or stock per store, price history) | The site rejected that optional data; 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. |
| `Mironet.cz 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
- [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
- [Planeo.sk Scraper (Slovakia)](https://apify.com/tsutseisoftware/planeo-sk-scraper): electronics & appliances: EUR prices, discount codes, cashback, stock in 69 stores, 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 Mironet.cz?

The actor collects publicly available product data (prices, availability, stock per store, parameters, variants, price history) that anyone sees on the website without logging in. It reads the same pages and page parts a browser loads on Mironet.cz (the product list, the stock box, the "Kdy zboží dostanu?" window and the "Transparentní historie ceny" chart), does not log in, makes at most 20 requests per minute by default (60 in fast mode, with automatic slow-down) and never solves captchas or other challenges. It returns no personal data: no names from the Q\&A, and partner stores only by their town. 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.

#### Why are categories sorted by name and not by "Top"?

Because Mironet.cz shuffles its "Top" order between page loads, reading several pages in that order would miss products. Name A–Z (or any order you choose in **Sort by**) is stable. One page of "Top" is fine: choose **Top** in **Sort by** with **Max products** up to 24.

#### Do I need a proxy?

No. Mironet.cz works without a proxy from Apify's servers, so no proxy is used by default.

#### 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 and long code lists, when the time matters.

#### Why is the EAN empty?

Mironet.cz doesn't show EANs on its pages. Look products up by EAN (**EANs**) and the row has it; otherwise use the **MPN** (with **Add product page details**) to match products with other shops.

#### Is this for the Slovak, Polish or German Mironet too?

No, only for mironet.cz (Czech Republic, prices in CZK).

#### 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 Mironet.cz a.s., the operator of Mironet.cz. This tool is also known as a Mironet.cz API, Mironet price tracker or "hlídač cen Mironet".

# Actor input Schema

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

Mironet.cz URLs: a category (e.g. https://www.mironet.cz/notebooky+c1504/), a category overview (…+rzn10761/, its categories are read), a brand (https://www.mironet.cz/apple+v27633/), a sale section (https://www.mironet.cz/vyprodej/?v=rozbaleno), search results (https://www.mironet.cz/ProductList/showSearch?EXPF=iphone) or a product (…+dp812263/). Tip: set filters and sorting on the website and paste the URL; the actor keeps them.

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

Searched with the website's own search, in its order (e.g. "iphone 17", "RTX 5070"). Up to 10 terms; "Max pages per search" limits each.

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

Mironet product codes ("Kód" on the product page, e.g. 90636722). Each is looked up with the website's search and read from its product page.

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

EAN barcodes (check digit verified). The website's search finds a product by EAN and opens its product page; the row then has the EAN in the "ean" field. A product the search doesn't open directly counts as not found.

## `mpns` (type: `array`):

Manufacturer part numbers (P/N, e.g. MDH74CZ/A). Looked up like EANs: only an exact match that opens a product page is returned.

## `saleSections` (type: `array`):

Mironet.cz sale ("Výprodej") sections to read.

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

Maximum number of products saved (and charged) in total. 0 = no limit.

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

Maximum number of products from each start URL, search term or sale section (and from all codes, EANs or MPNs). 0 = no limit.

## `includeAvailability` (type: `boolean`):

Stock as the website shows it under the price ("Ihned na 6 prodejnách nebo u Vás doma – zítra", "Skladem 5+ kusů", "Není skladem – na dotaz"): availability, pieces, number of stores with stock and delivery date. One small extra request per 24 products; turn off only if you need prices alone.

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

Reads each product page (one request per product): MPN (P/N), brand, warranty, all technical parameters, energy class, description, category breadcrumb, variants and cheaper unpacked offers, the 30-day price note. Turned on automatically by filters that need it.

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

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

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

Stock in each Mironet store and partner store as the "Kdy zboží dostanu?" window shows it ("5+ ks – ihned", "zítra"). One extra request per product.

## `includePriceHistory` (type: `boolean`):

The website's "Transparentní historie ceny": every price change of the last 180 days, plus the lowest price of 30 and 180 days and the highest of 180 days. One extra request per product. For your own analysis.

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

The website's sorting. "Default" keeps the sort of the URL; without one, categories and brand pages are read by name A–Z (the website's "Top" order changes between pages and would skip and repeat products), search results by relevance and sale sections by discount.

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

Lowest price incl. VAT (the website's price filter, checked again by the actor).

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

Highest price incl. VAT (the website's price filter, checked again by the actor).

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

Only these brands (the website's "Značka" filter where the listing has it, e.g. Lenovo, HP, DELL; elsewhere the actor checks the brand).

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

Never these brands (the website's brand filter with all other brands, checked again by the actor).

## `productStates` (type: `array`):

The website's "Stav zboží" filter (any of the chosen).

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

The website's "Skladem" filter; the actor also drops products whose stock box doesn't say "Skladem".

## `availableInStores` (type: `array`):

The website's store filter ("Skladem" options), e.g. "Praha 4-Chodov", "Brno", "Plzeň"; part of the name is enough.

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

The website's parameter filters by name as the filter panel shows them, e.g. {"Typ panelu displeje": \["OLED", "IPS"], "Úhlopříčka displeje (")": {"min": 14, "max": 16}}. Unknown names or values are reported in the log with the options.

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

Only products with a crossed-out price.

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

Only products with at least this discount.

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

Any of these words (case and diacritics ignored).

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

None of these words (case and diacritics ignored).

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

Only products with one of these tile labels, e.g. "Bomba ceny", "Slevy", "CZ klávesnice".

## `excludeUnpackedAndUsed` (type: `boolean`):

Drops "Rozbaleno", "Bazar", "Zánovní" and refurbished offers (by the name the website gives them).

## `onlyUnpackedOrUsed` (type: `boolean`):

Only "Rozbaleno", "Bazar", "Zánovní" and refurbished offers.

## `onlyWithMpn` (type: `boolean`):

Only products with a manufacturer part number (turns on product page details).

## `minWarrantyMonths` (type: `integer`):

Only products with at least this warranty (turns on product page details).

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

Only these energy classes (turns on product page details).

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

Saves (and charges) only products that are new or whose price, crossed-out price or availability changed since the previous run with the same monitoring key. Ideal for scheduled runs.

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

Name of the saved state. Use a different key for each tracked list.

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

Of the changed products, only those whose price changed (new products are still saved).

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

Only products whose price fell by at least this many percent since the previous run.

## `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 Mironet.cz about 3x faster: at most 60 requests per minute and 3 at a time instead of 20 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, stock, product pages). At most 30.

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

Listing pages (24 products each) read per category, brand or sale URL.

## `maxPagesPerSearch` (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`):

Mironet.cz works without a proxy from Apify, so no proxy is used by default.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.mironet.cz/notebooky+c1504/"
    }
  ],
  "searchQueries": [],
  "maxItems": 20,
  "maxItemsPerStartUrl": 0,
  "includeAvailability": true,
  "includeDetails": false,
  "descriptionMaxLength": 1000,
  "includeStoreAvailability": false,
  "includePriceHistory": false,
  "sortBy": "default",
  "onlyInStock": false,
  "parameterFilters": {},
  "onlyDiscounted": false,
  "excludeUnpackedAndUsed": false,
  "onlyUnpackedOrUsed": false,
  "onlyWithMpn": false,
  "onlyNewOrChanged": false,
  "monitoringKey": "default",
  "onlyPriceChanges": false,
  "includeRemovedProducts": false,
  "fastMode": false,
  "maxRequestsPerMinute": 20,
  "maxPagesPerCategory": 50,
  "maxPagesPerSearch": 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.mironet.cz/notebooky+c1504/"
        }
    ],
    "searchQueries": [],
    "maxItems": 20,
    "parameterFilters": {},
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tsutseisoftware/mironet-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.mironet.cz/notebooky+c1504/" }],
    "searchQueries": [],
    "maxItems": 20,
    "parameterFilters": {},
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("tsutseisoftware/mironet-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.mironet.cz/notebooky+c1504/"
    }
  ],
  "searchQueries": [],
  "maxItems": 20,
  "parameterFilters": {},
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call tsutseisoftware/mironet-scraper --silent --output-dataset

```

## MCP server setup

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