# Smarty.cz Scraper ($0.95/1K): Prices, Stock, EAN & Filters (`tsutseisoftware/smarty-scraper`) Actor

Scrape Smarty.cz (Czech phone, gaming & electronics retailer) by category, search, order code, EAN or product URL: price with and without VAT, discounts, discount codes, cashback, stock per store, dispatch date, EAN, parameters, price history. Site filters, monitoring, fast mode. Unofficial.

- **URL**: https://apify.com/tsutseisoftware/smarty-scraper.md
- **Developed by:** [Tsutsei Software](https://apify.com/tsutseisoftware) (community)
- **Categories:** E-commerce, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 0 monthly users, 94.4% 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

## Smarty.cz Scraper: Prices, Stock, EAN & Filters

Scrape products and prices from **Smarty.cz**, a Czech retailer of phones, tablets, gaming, computers and accessories with stores across the Czech Republic, from a **category URL**, **product URLs**, **search queries**, **order codes** or **EANs**. Built for **price monitoring, competitor pricing and product matching**: schedule it daily in monitoring mode and you get, and pay for, only products whose price or availability changed.

> Smarty.cz here is the Czech electronics retailer (Smarty CZ a.s.), not the US address-verification company Smarty.

> **Česky:** Scraper a hlídač cen pro **Smarty.cz**: cena s DPH i bez, slevy, slevové kódy, cashback, sklad na prodejnách, datum expedice, EAN, parametry a historie ceny. Kategorie s filtry, vyhledávání, objednací kódy a EAN, monitoring. Výstup do Excelu, CSV nebo JSON. Podporu poskytujeme i česky.

**New:** look up up to 100 products by order code or EAN, get removed products back in monitoring, and a fast mode about 5× faster.

### Why use this Smarty.cz scraper?

- 🏷️ **Prices as shown on the website:** price incl. VAT, price without VAT, crossed-out price and discount %, each in its own numeric field, from **$0.95 per 1 000 products**, proxy included.
- 🎟️ **Promotions as data:** discount codes and the price with the code (`couponCode`, `couponPrice`), cashback and the price after cashback (`cashbackCzk`, `priceAfterCashback`) and gift value (`giftValueCzk`), at no extra cost.
- 📦 **Availability and store stock:** `availability` (in stock, store only, at the supplier, in transit, pre-order…), `stockText` ("> 5 ks"), `dispatchDate` and `releaseDate` as ISO dates, and optionally the **stock in each Smarty store**.
- 🎛️ **The website's own filters and sorting:** brand, in stock (total / e-shop / Prague within 120 minutes), **stock in specific stores**, price range, new goods only and **any parameter of the category** (operating system, RAM, 5G, colour…). Or just paste a URL with filters set on the website.
- 🔎 **Search, order codes and EANs:** up to 10 search queries and 100 order code / EAN lookups per run, plus optional **EAN, MPN, warranty, parameters and price history** for matching products with other shops.
- 📉 **Monitoring and price drop alerts:** only new or changed products, with `previousPrice`, `priceChange` and `priceChangePercent`, and optionally `removed` and `reappeared` products. Unchanged products are free. 1 000 products take about 4 minutes, about 1 minute in **fast mode**.

### What data can you get?

| Field | Example |
|---|---|
| Name, brand, order code | Apple iPhone 17 Pro 256GB kosmicky oranžový, Apple, 278120 |
| Price incl. / without VAT | 29 990 CZK, 24 785 CZK |
| Price before discount, discount | 32 990 CZK, 9 % |
| Discount code, price with the code | EXTRA5 (5 %), 20 187 CZK |
| Cashback, price after cashback | 2 000 CZK, 5 990 CZK |
| Availability, stock | in_stock (Skladem celkem > 5 ks) |
| Dispatch, release date | Dnes → 2026-10-13; V prodeji od 23.10.2026 → 2026-10-23 |
| Labels, gift | Akce, Upgrade bonus 1 500 Kč; Dárek k nákupu v hodnotě 499 Kč (499) |
| Energy class, colour variants | A; Béžová, Grafitová (with product URLs) |
| Used / open-box | `isUsedOrOpenBox`, `conditionLabel` ("Použité", "Rozbalené", "Zánovní") |
| Key parameters | Velikost RAM: 12 GB, Velikost úložiště: 256 GB, … |
| Rating | 4.2 |
| EAN, MPN (optional) | 4711085949493, SLEG-860-1000GCS |
| Warranty (optional) | 60 months (businesses 60 months) |
| Parameters, category path (optional) | Kapacita disku: 1000 GB, …; Počítače, komponenty a IT › Komponenty › … |
| Price history (optional) | 2026-09: 5 790 CZK, 2026-10: 3 990 CZK, … |
| Stock in stores (optional) | Brno - Olympia: Skladem celkem > 5 ks, pickup Do 60 min |

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

### How to scrape Smarty.cz

1. Open Smarty.cz, go to a category, e.g. `https://www.smarty.cz/mobily-4c13740`, and paste the URL into **Category or product URLs**. Product URLs (e.g. `https://www.smarty.cz/ADATA-LEGEND-860-M-2-PCIe-4-0-1TB-4p208447`) and search URLs (`https://www.smarty.cz/Vyhledavani?query=powerbanka`) work too. Or type words into **Search queries**, or codes into **Order codes** / **EANs**.
2. Optionally choose **Sort by** (e.g. *Cheapest first*), **Site filters** (brand, availability, stores, parameters, new goods only) and **Filters**, and set **Max products** (and **Max products per URL** for several categories). Turn on **Add EAN, warranty and parameters**, **Add price history** or **Add stock in stores** 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.smarty.cz/mobily-4c13740?s=p#pr=833&st=1` (Apple, in stock, cheapest first). The actor keeps them.

### Use cases (ready-made inputs)

**The 20 cheapest phones in stock:**

```json
{
  "startUrls": [{ "url": "https://www.smarty.cz/mobily-4c13740" }],
  "sortBy": "cheapest",
  "siteAvailability": ["in_stock"],
  "excludeUsedOrOpenBox": true,
  "maxItems": 20
}
```

**Products with cashback** (price after cashback included):

```json
{
  "startUrls": [{ "url": "https://www.smarty.cz/mobily-4c13740" }],
  "onlyWithCashback": true,
  "maxItems": 0
}
```

**Discount codes** across accessories (`couponCode`, `couponDiscount`, `couponPrice`):

```json
{
  "startUrls": [{ "url": "https://www.smarty.cz/prislusenstvi-4c13747" }],
  "onlyWithCoupon": true,
  "maxPagesPerCategory": 10,
  "maxItems": 0
}
```

**Look up your product list by EAN or order code** (e.g. to compare with your own prices; EAN lookups also return warranty and parameters):

```json
{
  "eans": ["195950627398", "4711085949493"],
  "orderCodes": ["278120", "P77778"]
}
```

**Watch prices below your target price** (schedule daily; you get a product when its price drops by 5 % or more and it is at most 15 000 CZK; the first run only records the current prices):

```json
{
  "startUrls": [{ "url": "https://www.smarty.cz/mobily-4c13740#pr=833" }],
  "maxPrice": 15000,
  "onlyNewOrChanged": true,
  "monitoringKey": "apple-under-15000",
  "minPriceDropPercent": 5,
  "maxItems": 0
}
```

**Daily price monitoring of a whole category, with removed products:**

```json
{
  "startUrls": [{ "url": "https://www.smarty.cz/mobily-4c13740" }],
  "maxItems": 0,
  "onlyNewOrChanged": true,
  "includeRemovedProducts": true,
  "monitoringKey": "phones-daily"
}
```

**A large category with EAN and parameters, in fast mode** (about 5× faster, +$0.01 per 1,000 products):

```json
{
  "startUrls": [{ "url": "https://www.smarty.cz/mobily-4c13740" }],
  "includeDetails": true,
  "fastMode": true,
  "maxItems": 500
}
```

**5G Android phones, cheapest first:**

```json
{
  "startUrls": [{ "url": "https://www.smarty.cz/mobily-4c13740" }],
  "sortBy": "cheapest",
  "parameterFilters": { "Operační systém": "Android", "Nejrychlejší datová síť": "5G", "Typ produktu": "Mobilní telefony" },
  "maxItems": 20
}
```

**Search for products:**

```json
{
  "searchQueries": ["usb-c kabel", "powerbanka"],
  "maxSearchPages": 2,
  "brands": ["Apple", "Anker"]
}
```

**Products in stock in Brno stores, with stock per store:** `"stores": ["Brno"], "includeStoreStock": true`.

**Discounts overview with EAN for matching:** `"onlyDiscounted": true, "includeDetails": true`.

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

| Input | What it does |
|---|---|
| **Sort by** | Recommended (TOP), Cheapest first, Most expensive first, Newest first. |
| **Brands** | Only these brands, e.g. `Apple`, `Samsung`. |
| **Available** | In stock in total, in stock in the e-shop, Prague within 120 minutes. |
| **In stock in store** | Specific stores, e.g. `Brno - Olympia`, or `Brno` for all Brno stores. |
| **Parameter filters** | Any filter of the category: `{"Name": "value"}`, `{"Name": ["value 1", "value 2"]}` or ranges `{"Velikost RAM": "8-16"}`. "Typ produktu" (product type) works too. |
| **Exclude used and open-box products** | Leaves out used, open-box and like-new products. |
| **Min / Max price** | Price range incl. VAT. |

Names are matched without case and diacritics; a unique beginning is enough (`operacni` → *Operační systém*). If a name or value doesn't exist in a category, the log lists the available ones, and the category is skipped when nothing in it can match. Less common brands of a category work too, but the run takes longer.

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

| Input | Example |
|---|---|
| **Only products in stock**, **Availability** | in stock / store only / at the supplier / in transit / pre-order / unknown |
| **Only discounted products**, **Min discount (%)** | crossed-out price, at least 15 % off |
| **Min price (CZK)**, **Max price (CZK)** | 5 000 – 15 000 |
| **Exclude brands**, **Name must contain**, **Name must not contain** | `256GB`, not `pouzdro` |
| **Labels** | `Akce`, `Cashback`, `Novinka` |
| **Only products with a discount code**, **Only products with cashback** | `couponCode` / `cashbackCzk` is set |
| **Energy classes** | `A`, `B` |
| **Min rating**, **Min number of ratings**, **Only products with EAN** | 4.5, 5 |

When a filter needs the product page (**Min number of ratings**, **Only products with EAN**), the actor keeps reading the listing until **Max products** is reached.

**Speed and advanced:** **Fast mode** (see below), **Max requests per minute (normal speed)** and **Max pages per category** (24 products per page).

#### Search, order codes and EANs

**Search queries** (or search URLs in **Category or product URLs**) work like the website's search box: at most **10 queries per run**, 2–100 characters each, and **Max pages per search** result pages (default 2, max. 5). When the site redirects a query to a category (e.g. "iphone") or a product list ("powerbanka"), that page is read instead, within the same page limit. Site filters and sorting apply to search results too; on product-type lists the site has no store, stock or parameter filter, so such a search is skipped with a message when you use them.

If Smarty.cz keeps rejecting a search page, the actor stops searching (and looking up codes) for the rest of the run and says so.

**Order codes** ("Objednací kód" on the product page, e.g. `278120`, `P77778`) and **EANs** (with or without leading zeros) are looked up like in the website's search, at most **100 per run** together. Each EAN is confirmed on the product page and comes with EAN, warranty and parameters; new goods are preferred over used ones with the same EAN. Found products have `matchedBy` set to `orderCode` or `ean`; codes that aren't found are listed in the status message. When an order code and an EAN lead to the same product, it is returned once.

#### Optional extras (slower runs)

- **Add EAN, warranty and parameters:** EAN, MPN, warranty, category path, number of ratings and all technical parameters.
- **Add price history:** the monthly prices Smarty.cz shows for the product (`priceHistory`: month, price and, when the chart shows it, the competitors' average price). Smarty.cz compiles this history and says the chart is illustrative and doesn't show every price change, so the actor doesn't derive "lowest price" values from it. Use it for your own analysis, not for republishing.
- **Add stock in stores:** the stock in each store (`storeStock`: store or warehouse name, stock text as shown, `inStock`, pickup time). No addresses or coordinates.

At the normal speed, 100 products with all three extras take about 34 minutes (about 7 minutes in fast mode). **Add EAN, warranty and parameters** adds the product-page charge (see the price table); price history and store stock cost nothing extra.

#### Fast mode (small extra charge)

**Fast mode** reads about 5× faster and drops back to the normal speed for the rest of the run at the first sign of load, or when your maximum cost per run doesn't cover the extra charge. You pay the extra charge only for products saved while the fast speed was on. The normal speed can be raised a little with **Max requests per minute (normal speed)**.

#### 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, availability or price before discount** changed. **Monitoring: only price changes** narrows it to price changes, **Monitoring: min price drop (%)** to price drops. With **Monitoring: include removed products**, products that are no longer listed are returned once as `"removed"` (with their last known name, price and URL, and `removedAt`), and when they come back as `"reappeared"`. Removed products are checked only when the run read the whole listing (no **Max products** or page limit reached, no rejected pages). For monitoring, use category URLs rather than search queries.

### How much does it cost to scrape Smarty.cz?

You pay per saved product. Filtered-out and unchanged products (in monitoring mode) are free, and there are no extra charges for search, price history or store stock. A product saved with its product page (**Add EAN, warranty and parameters**, product URLs, EAN lookups) costs a little more, and a product found by a code or EAN lookup a little more again (see the table). The proxy is included.

| Plan | Per 1 000 products | + with the product page | + found by a code or EAN lookup | + Fast mode |
|---|---|---|---|---|
| FREE | **$0.95** | +$0.85 | +$0.40 | +$0.01 |
| BRONZE | **$0.93** | +$0.85 | +$0.40 | +$0.01 |
| SILVER | **$0.90** | +$0.85 | +$0.40 | +$0.01 |
| GOLD and higher | **$0.85** | +$0.85 | +$0.40 | +$0.01 |

That is $0.00095 per product on the Free plan (+$0.00085 with its product page, +$0.0004 when found by a lookup, the same on every plan), and $0.00001 per product for fast mode. See the **Pricing** tab for the current prices. Typical runs:

| Scenario | Price (FREE plan) | Typical time (normal / fast mode) |
|---|---|---|
| 20 products from a category | ~$0.02 | a few seconds |
| 1 000 products from a category | ~$0.95 | ~4 min / ~1 min |
| 100 products with EAN and parameters | ~$0.18 | ~17 min / ~4 min |
| 100 products with EAN, price history and store stock | ~$0.18 | ~34 min / ~7 min |
| 10 EAN lookups | ~$0.02 | ~4 min / ~40 s |
| 1 search query, 2 pages (48 products) | ~$0.05 | ~15 seconds |

### Input example

```json
{
  "startUrls": [{ "url": "https://www.smarty.cz/mobily-4c13740" }],
  "maxItems": 100,
  "sortBy": "cheapest",
  "brands": ["Samsung", "Xiaomi"],
  "includeDetails": false
}
```

### Output example

```json
{
  "id": "smarty:253146",
  "source": "smarty.cz",
  "url": "https://www.smarty.cz/ADATA-LEGEND-860-M-2-PCIe-4-0-1TB-4p208447",
  "orderCode": "253146",
  "productId": "208447",
  "ean": "4711085949493",
  "mpn": "SLEG-860-1000GCS",
  "name": "ADATA LEGEND 860 M.2 PCIe 4.0 1TB",
  "brand": "ADATA",
  "category": "SSD disky",
  "categoryPath": ["Počítače, komponenty a IT", "Komponenty", "Disky a SSD", "Interní", "SSD", "PCIe 4.0"],
  "price": 3990,
  "priceWithoutVat": 3298,
  "currency": "CZK",
  "priceBeforeDiscount": 7590,
  "discountPercent": 47,
  "isDiscounted": true,
  "cashbackCzk": null,
  "priceAfterCashback": null,
  "couponCode": null,
  "couponDiscount": null,
  "couponPrice": null,
  "isUsedOrOpenBox": false,
  "conditionLabel": null,
  "availability": "in_stock",
  "availabilityText": "Skladem celkem > 5 ks",
  "stockText": "> 5 ks",
  "dispatchText": "Dnes",
  "dispatchDate": "2026-10-13",
  "releaseDate": null,
  "rating": 5.0,
  "reviewCount": 7,
  "labels": [],
  "giftText": null,
  "giftValueCzk": null,
  "energyClass": null,
  "colorVariants": null,
  "keyParameters": null,
  "imageUrl": "https://doc.smarty.cz/pic/QIAB000P01-600-600.webp",
  "position": null,
  "warrantyMonths": 60,
  "warrantyMonthsBusiness": 60,
  "specifications": { "Kapacita disku": "1000 GB", "Rychlost čtení disku": "6000 MB/s", "Formát disku": "M.2 2280" },
  "description": null,
  "priceHistory": [
    { "month": "2026-09", "price": 5790, "competitorAveragePrice": null },
    { "month": "2026-10", "price": 3990, "competitorAveragePrice": null }
  ],
  "storeStock": [
    { "store": "Centrální sklad - Praha Zličín", "stockText": "Skladem celkem > 5 ks", "inStock": true, "pickupText": "Do 60 min" },
    { "store": "Brno - Olympia", "stockText": "Není skladem", "inStock": false, "pickupText": "Zítra po 16:00" }
  ],
  "detailScraped": true,
  "changeType": null,
  "firstSeenAt": null,
  "previousPrice": null,
  "priceChange": null,
  "priceChangePercent": null,
  "matchedBy": null,
  "removedAt": null,
  "sourceUrl": "https://www.smarty.cz/ADATA-LEGEND-860-M-2-PCIe-4-0-1TB-4p208447",
  "scrapedAt": "2026-10-13T10:00:00Z"
}
```

From category and search pages, `ean`, `mpn`, `warrantyMonths`, `specifications`, `categoryPath` and `reviewCount` are `null` unless **Add EAN, warranty and parameters** is on; `priceHistory` and `storeStock` are `null` unless their option is on. `keyParameters`, `giftText`, `colorVariants` and `position` come from listing pages.

### Limitations

- **Challenges are never solved.** A page the website rejects is retried once a little later. A listing page that is still rejected is skipped and the actor goes on with the next page, so the results can be incomplete (with gaps in the sorted order); the status message says how many pages could not be read. If rejections continue, the run stops with what it has saved and says so. A product whose page, price history or store stock was rejected is returned with the data read so far (`detailScraped: false` without the product page), as long as it passes your filters.
- **Search and lookups** are limited to 10 queries (5 pages each) and 100 codes per run; if a search page keeps being rejected, searching stops for the run. A code is found only when the website's search finds it.
- **EAN, MPN, warranty and parameters** are on the product page only: turn on **Add EAN, warranty and parameters** (slower, and it adds the product-page charge). For product URLs and EAN lookups they are always included.
- **Price before discount** is the crossed-out price shown by the shop. The shop doesn't say whether it is a 30-day lowest price or a recommended price, so the actor returns it as is. **Price with the code** is shown by the shop on some products; otherwise it is computed from the label (e.g. 20 % off the price, rounded to whole CZK).
- **Availability `unknown`** also covers products where the shop says "Expedice bude upřesněna" (dispatch to be specified); **`preorder`** covers "V prodeji od …" and the label "Brzy v prodeji".
- **Used goods** in the "Použité" categories often show a "from" price (several pieces in different condition); the actor returns that lowest price.
- **Rating** on listing pages is the average shown by the shop; the number of ratings comes from the product page. Reviews themselves are not collected.
- **Sorting with equal prices:** the shop doesn't order products with the same price consistently between pages, so a product at a page boundary can occasionally be missed in very long sorted runs.
- **Descriptions:** only a ~200-character excerpt (**Add a short description excerpt**). Images are returned as URLs; product photos and texts are copyrighted, so check the rights before you republish them.

### For AI agents and API users

- **Minimal input:** `{"startUrls": [{"url": "https://www.smarty.cz/mobily-4c13740"}], "maxItems": 20}`, `{"searchQueries": ["powerbanka"], "maxItems": 20}` or `{"eans": ["195950627398"]}`.
- One row = one product = one charge, plus the product-page charge when the product page was read (`detailScraped: true`), the lookup charge when found by a code or EAN (`matchedBy`), and the fast-mode charge when saved at the fast speed. Price history and store stock cost nothing extra.
- `maxItems` counts saved products, `maxItemsPerStartUrl` limits each URL, search query or lookup.
- Prices are in CZK. `availability` is one of `in_stock`, `in_store_only`, `at_supplier`, `in_transit`, `preorder`, `out_of_stock`, `unknown`.
- `id` is `smarty:<order code>` and stays the same between runs. Monitoring state is kept per `monitoringKey` between runs of the same user.
- `matchedBy` (`orderCode` / `ean`) is set only for lookups, `removedAt` only for removed and reappeared products in monitoring mode.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("tsutseisoftware/smarty-scraper").call(run_input={
    "startUrls": [{"url": "https://www.smarty.cz/mobily-4c13740"}],
    "sortBy": "cheapest",
    "maxItems": 100,
})
for product in client.dataset(run.default_dataset_id).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/smarty-scraper').call({
    searchQueries: ['powerbanka'], maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((p) => `${p.name}: ${p.price} CZK`));
```

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 … not a category … or product URL` | Use a Smarty.cz category URL (…-4c<number>), product URL (…-4p<number>) or search URL (/Vyhledavani?query=…). |
| `unknown store / parameter / value …` (log) | Use one of the names listed in the log for that category. |
| `… skipped because the site filters match nothing there` | No product in that category or search has the requested value. |
| `… listing pages could not be read, so the results may be incomplete` | Smarty.cz rejected some pages; run it again later for complete results. |
| `searching stopped because Smarty.cz rejected a search page` | Try later, or use the category the search would lead to. |
| `Search is temporarily disabled` | Use category or product URLs. |
| `… could not be loaded` | The category or product doesn't exist anymore; open the URL in your browser. |
| `Smarty.cz is rejecting requests` | Keep the default proxy configuration (Apify Proxy) and try again later. |
| `Saved 0 products (new or changed since last run)` | Nothing changed since the previous monitoring run; that's expected. |
| `not found: …` | Smarty.cz has no product with that order code or EAN (or doesn't show it in its search). |
| `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 the whole listing (e.g. Max products reached); use `"maxItems": 0` for monitoring with removed products. |

### More Czech & Slovak e-shop scrapers

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

- [Czech E-shop Price Comparison](https://apify.com/tsutseisoftware/czech-eshop-aggregator): one product compared across 9 Czech e-shops in one run: lowest price and its shop, price per shop, monitoring
- [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
- [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
- [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
- [OnlineShop.cz Scraper](https://apify.com/tsutseisoftware/onlineshop-scraper): electronics & appliances: prices, 30-day low, discount codes, EAN, stock
- [Mobil Pohotovost Scraper](https://apify.com/tsutseisoftware/mobil-pohotovost-scraper): phones, tablets and watches, new, like new and used: prices, EAN, MPN, condition, stock, monitoring
- [iSTYLE.cz Scraper](https://apify.com/tsutseisoftware/istyle-scraper): Apple products: prices, EAN, Apple part number, open-box and refurbished offers, stock, monitoring

### Custom scrapers and changes

Need a custom version of this actor, another field or filter, or a scraper for a different website? Write to **info@tsutsei-software.com** with the website, the data you need and how often, and we will reply with a fixed quote. We work mainly with clients from the Czech Republic and from outside the EU.

More about us and all our actors: [tsutsei-software.com](https://tsutsei-software.com).

### FAQ

#### Is it legal to scrape Smarty.cz?

The actor reads only publicly available product data, without logging in, and no personal data: no reviews, questions or contacts. It makes at most 12 requests per minute by default (20 at most, 60 in fast mode), slows down when the website asks and never solves captchas or other challenges. The website's terms of use may limit automated access, and how you use the data is your responsibility. Use it for price monitoring and analysis, and don't republish the catalogue, texts, photos or the price history. If unsure, consult a lawyer.

#### Do I need a proxy?

It's already set up. Smarty.cz needs a residential proxy: the default **Proxy configuration** is a Czech residential proxy, included in the price per product. Keep the default unless you have your own Czech proxies.

#### Can I look up products by EAN or order code?

Yes: put them into **EANs** or **Order codes** (up to 100 per run). A product is found when the website's search finds it; EANs are confirmed on the product page and the product comes with EAN, warranty and parameters. Codes that aren't found are listed in the status message and cost nothing.

#### 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, price history or long EAN lists, when the time matters. It switches back to the normal speed (no extra charge) at the first sign of load.

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

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

#### Something doesn't work

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

This is an unofficial tool, not affiliated with or endorsed by Smarty CZ a.s., the operator of Smarty.cz. It is also known as a Smarty API, Smarty price tracker or "hlídač cen Smarty".

# Actor input Schema

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

Smarty.cz category URLs (e.g. https://www.smarty.cz/mobily-4c13740), product URLs (e.g. https://www.smarty.cz/ADATA-LEGEND-860-M-2-PCIe-4-0-1TB-4p208447) or search URLs (https://www.smarty.cz/Vyhledavani?query=powerbanka). Tip: set filters and sorting on the website and paste the URL (e.g. …/mobily-4c13740?s=p#pr=833\&st=1); the actor keeps them.

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

Search Smarty.cz like in the website's search box, e.g. 'powerbanka', 'usb-c kabel'. At most 10 queries per run, 2–100 characters each. When the site redirects a query to a category or product, that page is read instead (within Max pages per search).

## `orderCodes` (type: `array`):

Look up products by Smarty order code ("Objednací kód" on the product page, e.g. 278120 or P77778), like in the website's search. At most 100 order codes and EANs together per run. Each found product is returned with matchedBy: "orderCode".

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

Look up products by EAN (barcode, 8–14 digits with a valid check digit, with or without leading zeros). Each EAN is confirmed on the product page (new goods first); each found product is returned with EAN, warranty and parameters and matchedBy: "ean".

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

How many result pages (24 products each) to read for each search query, at most 5.

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

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

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

Limit for each start URL 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), MPN (manufacturer part number), warranty, technical parameters, category path and number of ratings. Slower, and it adds the product-page charge (see Pricing).

## `includeDescription` (type: `boolean`):

Add the first ~200 characters of the product summary. Reads the product page (like "Add EAN, warranty and parameters"), so it is slower.

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

Add the monthly prices Smarty.cz shows for the product (and the competitors' average price when the chart shows it). Optional and slower. The history is compiled by Smarty.cz; use it for your own analysis, not for republishing.

## `includeStoreStock` (type: `boolean`):

Add the stock in each Smarty store and warehouse as shown on the website (store name, stock text, pickup time). Optional and slower.

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

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

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

Only these brands, e.g. 'Apple', 'Samsung'. Case doesn't matter. Less common brands of a category work too, but the run takes longer.

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

Only products in stock, as in the website's filter: in stock in total (warehouse or stores), in stock in the e-shop warehouse, or deliverable in Prague within 120 minutes.

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

Only products in stock in these stores, e.g. 'Brno - Olympia' or just 'Brno' (all Brno stores). Several values = any of them.

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

Filter by the category's parameters, as in the website's filter panel. Keys are filter names, values are a value or a list of values (any of them); ranges as "min-max". Example for phones: {"Operační systém": "Android", "Nejrychlejší datová síť": "5G", "Velikost RAM": "8-16", "Typ produktu": "Mobilní telefony"}. Available names and values are listed in the log when a name isn't found.

## `excludeUsedOrOpenBox` (type: `boolean`):

Skip used, open-box (rozbalené) and like-new (zánovní) products.

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

Keep only products shown as in stock ('Skladem …'). Store-only, supplier and in-transit 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 (as shown by the shop).

## `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. 'Aligator'. 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. '256GB'.

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

Skip products whose name contains any of these words, e.g. 'pouzdro'.

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

Keep only products with a label containing one of these words, e.g. 'Akce', 'Cashback', 'Novinka', 'Poslední šance'.

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

Keep only products with a discount code label, e.g. "Sleva 20 % s kódem EXTRA20" (see couponCode and couponPrice in the output).

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

Keep only products with a cashback promotion (see cashbackCzk and priceAfterCashback in the output).

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

Keep only products with one of these energy classes (shown on the product tile, e.g. phones and TVs). Products without an energy class are skipped when set.

## `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. Reads the product pages (like "Add EAN, warranty and parameters").

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

Skip products without an EAN (barcode). Reads the product pages (like "Add EAN, warranty and parameters").

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

Return only products that are new or whose price, availability or price before discount 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. 'phones-daily'). Empty = "default". The value is stored encrypted.

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

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

## `minPriceDropPercent` (type: `integer`):

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

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

With monitoring: also return products that disappeared since the previous run (changeType: "removed", with their last known values), and products that are back ("reappeared"). Checked only when the run read everything (no Max products or page limit reached, no rejected pages).

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

About 5× faster, for a small extra charge per product saved at that speed (see Pricing). Drops back to the normal speed (no extra charge) for the rest of the run at the first sign of load.

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

To keep the load on the shop low, the actor makes by default at most 12 requests per minute (max. 20). Fast mode ignores this.

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

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

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

Smarty.cz needs a residential proxy. The default is Apify Proxy with Czech residential IPs, included in the price. You can also use your own Czech proxies.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.smarty.cz/mobily-4c13740"
    }
  ],
  "maxSearchPages": 2,
  "maxItems": 20,
  "maxItemsPerStartUrl": 0,
  "includeDetails": false,
  "includeDescription": false,
  "includePriceHistory": false,
  "includeStoreStock": false,
  "sortBy": "recommended",
  "parameterFilters": {},
  "excludeUsedOrOpenBox": false,
  "onlyInStock": false,
  "onlyDiscounted": false,
  "onlyWithCoupon": false,
  "onlyWithCashback": false,
  "onlyWithEan": false,
  "onlyNewOrChanged": false,
  "onlyPriceChanges": false,
  "includeRemovedProducts": false,
  "fastMode": false,
  "maxRequestsPerMinute": 12,
  "maxPagesPerCategory": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}
```

# 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.smarty.cz/mobily-4c13740"
        }
    ],
    "maxItems": 20,
    "parameterFilters": {},
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CZ"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tsutseisoftware/smarty-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.smarty.cz/mobily-4c13740" }],
    "maxItems": 20,
    "parameterFilters": {},
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CZ",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tsutseisoftware/smarty-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.smarty.cz/mobily-4c13740"
    }
  ],
  "maxItems": 20,
  "parameterFilters": {},
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}' |
apify call tsutseisoftware/smarty-scraper --silent --output-dataset

```

## MCP server setup

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