iSTYLE.cz Scraper & API: Apple Prices, EAN & Stock · Apify
iSTYLE.cz Scraper ($1.75/1K): Apple Prices, EAN & Stock avatar

iSTYLE.cz Scraper ($1.75/1K): Apple Prices, EAN & Stock

Pricing

from $1.65 / 1,000 products

Go to Apify Store
iSTYLE.cz Scraper ($1.75/1K): Apple Prices, EAN & Stock

iSTYLE.cz Scraper ($1.75/1K): Apple Prices, EAN & Stock

Scrape iSTYLE.cz (Apple Premium Reseller, Czech Republic) by collection, search, EAN, part number or product URL: price, discount, stock, EAN, Apple part number, open-box and refurbished offers. Filters, monitoring. Unofficial.

Pricing

from $1.65 / 1,000 products

Rating

0.0

(0)

Developer

Tsutsei Software

Tsutsei Software

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Features

Limited permissions

Share

iSTYLE.cz Scraper: Apple Prices, Stock, EAN & Part Numbers

The only iSTYLE.cz scraper in Apify Store. Scrape Apple prices from iSTYLE.cz, an Apple Premium Reseller in the Czech Republic (iPhone, Mac, iPad, Apple Watch, AirPods and about 2 500 accessories from Epico, Spigen, Peak Design, JBL and others), from a collection, the whole catalogue, search terms, product URLs, or your own list of EANs or Apple part numbers (MPNs). Built for price monitoring and price comparison: one row per colour and capacity, part numbers on every Apple product, and a monitoring mode that returns (and charges) only products whose price or availability changed. To compare one product across 9 Czech shops in one run, see the Czech E-shop Price Comparison.

Česky: Scraper a hlídač cen pro iSTYLE.cz (Apple Premium Reseller): cena, sleva, skladem, EAN, partnumber Apple, rozbalené a renovované kusy. Kolekce, celý katalog, vyhledávání, EAN, partnumber, filtry a monitoring změn cen. Výstup do Excelu, CSV nebo JSON. Podporu poskytujeme i česky.

Why use this iSTYLE.cz scraper?

  • 🍏 Apple part numbers on every Apple product (MJRR4SX/A, configure-to-order Z1LA000CD), without the shop's open-box prefixes, so you can match iSTYLE with Alza, Datart, Mironet and other shops. EAN on request or by lookup.
  • 🏷️ Prices as the shop shows them: current price incl. VAT in whole crowns, the crossed-out price and the discount in their own fields, from $1.75 per 1 000 products, residential proxy included.
  • ♻️ Open-box ("otevřený") and refurbished ("renovovaný") offers flagged in condition and isUsedOrOpenBox, with their own filters: only new, or only the cheaper second-hand offers.
  • 🧩 Specifications from the name: storage, memory, chip, CPU and GPU cores, keyboard layout and display size of Macs; storage and colour of iPhones and iPads; case size, band size and connectivity of Apple Watch.
  • 📉 Monitoring and price alerts to Slack, Discord, Telegram or a webhook: only new or changed products, with previousPrice, priceChange and priceChangePercent; removed and reappeared products on request.
  • ⚡ Fast and reliable: the whole catalogue (about 5 500 products) in about 80 seconds, no browser; with the default settings every run in our tests completed.

What data can you get?

Share of products with a value, measured on the whole catalogue (5 499 products) on 2026-11-09.

FieldExampleFilled
Name, brand, SKU, category (product type)Apple iPhone 18 Pro 256 GB burgundská červená, Apple, MJRR4SX/A, iPhone 18 Pro100 %
Price, currency34 990 CZK100 %
Crossed-out price, discount32 990 → 28 990 CZK, 12 %discounted products (~21 % in November)
Availability, textin_stock, "Skladem"100 % (~93 % in stock)
MPN (part number)MJRR4SX/A100 % of Apple products except configure-to-order Macs with the shop's own code (CTO-…); ~40 % of accessories
Conditionnew, open_box, refurbished100 % (~2 % open-box or refurbished)
Colour, capacityburgundská červená, 256 GBiPhones, iPads and Macs ~100 %; colour of ~70 % of all products
Specifications{"storage": "2 TB", "memory": "48 GB", "chip": "M5 Pro", "cpuCores": 18, …}devices (from the name)
Descriptionshort plain text (up to 500 characters); the whole description as text, HTML or Markdown with Description~85 %
Updated2026-11-09T14:27:47+01:00 (when the shop last changed the product)products from lists and searches
Image, tags, published dateimage URL, ["BASE-PRODUCT", "NPI"]~100 %
EAN (Add EAN, lookups, product URLs)195951415680every product read with these options

See the Output tab for all fields.

How to scrape iSTYLE.cz

  1. Paste an iSTYLE.cz collection URL, e.g. https://istyle.cz/collections/apl-ps-iphone-17-pro, into Collection, search or product URLs. https://istyle.cz/collections/all is the whole catalogue, https://istyle.cz/collections/rozbaleny-iphone the open-box iPhones. Product URLs and search URLs work too. Or type Search terms, or paste EANs or MPNs.
  2. Optionally set the Filters and Max products. Turn on Add EAN (barcode) if you need the EAN of listed products.
  3. Retry rejected requests from a new IP address is on by default, so runs finish reliably ($0.003 per new address used, see below). You can turn it off.
  4. Click Start and download the results as JSON, CSV or Excel, or use the API.

Tip: the shop's menu leads to landing pages (/pages/iphone), which are not product lists. Use a collection URL or a search term instead, e.g. Search terms ["iphone 17 pro"].

Use cases

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

Track iPhone 17 Pro prices daily, only changes (schedule it):

{
"startUrls": [{ "url": "https://istyle.cz/collections/apl-ps-iphone-17-pro" }],
"maxItems": 0,
"onlyNewOrChanged": true,
"includeRemovedProducts": true,
"monitoringKey": "iphone-17-pro"
}

Compare prices with other shops by Apple part number:

{
"mpns": ["MJRR4SX/A", "MG8G4ZD/A", "MFHP4ZM/A"],
"excludeUsedOrOpenBox": true
}

Open-box and refurbished bargains with at least 10 % off:

{
"startUrls": [{ "url": "https://istyle.cz/collections/all" }],
"onlyUsedOrOpenBox": true,
"minDiscountPercent": 10,
"onlyInStock": true,
"maxItems": 0
}

Apple discounts of 5 % or more straight to Telegram (schedule it daily):

{
"startUrls": [{ "url": "https://istyle.cz/collections/all" }],
"brands": ["Apple"],
"maxItems": 0,
"onlyNewOrChanged": true,
"minPriceDropPercent": 5,
"monitoringKey": "apple-drops",
"telegramBotToken": "<YOUR_BOT_TOKEN>",
"telegramChatId": "-1001234567890"
}

Your assortment by EAN:

{
"eans": ["195951415680", "195950051216"]
}

MacBook Air 13" M5 under 35 000 CZK, new only:

{
"searchQueries": ["macbook air 13 m5"],
"maxPrice": 35000,
"excludeUsedOrOpenBox": true,
"maxItems": 50
}

The whole catalogue with EANs (slow, about 50 minutes per 1 000 products):

{
"startUrls": [{ "url": "https://istyle.cz/collections/all" }],
"includeDetails": true,
"maxItems": 0
}

The shop's verification page and "Retry from a new IP address"

iSTYLE.cz sometimes answers with a verification page instead of data, even to the Czech residential proxy that is set by default and included in the price. Retry rejected requests from a new IP address handles this:

  • On (default): a rejected request is repeated from a new proxy address, $0.003 per new address used, nothing when the shop answers normally; it never solves the verification and keeps the same pace. With it on, every run in our tests completed. A short run usually costs $0–0.003 extra, the whole catalogue or a search $0.003–0.015; the most we measured was $0.054. Your maximum cost per run is respected: when it does not allow another new address, the run goes on as with the option off, and the status message says so.
  • Off: a few cents cheaper, but the run may stop early (about 1 run in 5 in our tests failed or returned only a part, which also breaks scheduled runs). The log and the status message say so from the start of the run.
  • It needs a proxy (the default one is fine); without Apify Proxy or your own proxies the option switches itself off and the log says so.

Search terms

Search terms search the whole catalogue (name, type, brand or SKU, accents ignored, about a minute for any number of terms); devices come first, then accessories, new products before open-box ones. Use Name must not contain (e.g. kryt) to drop accessories. Max catalogue pages for searches can limit the search to the newest products.

EANs and MPNs

Each EAN or part number returns only an exact match, with the EAN. When a new and an open-box offer share the EAN, the new one is returned (with Only new the open-box offers are never returned). A part number with another region suffix (MJRR4CZ/A) or the model alone (MJRR4) finds the same model.

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

Only in stock, Only discounted, Min discount (%), Min/Max price (CZK), Brands, Exclude brands, Name must (not) contain, Categories (product types) (e.g. "MacBook", "iPhone 17 Pro"), Added in the last N days (the shop's new products), Tags (the shop's tags, e.g. "NPI"), Updated since (a date or "24 hours", "7 days": products the shop changed), Only new (no open-box or refurbished) and Only open-box or refurbished are free: you don't pay for filtered-out products.

Description

Description chooses how the product description is saved: a short plain text (up to 500 characters, the default), the whole description as plain text, as clean HTML, or as Markdown (headings, paragraphs, lists and bold kept; scripts, images and styles dropped). No format costs more or slows the run.

Notifications (price alerts)

Fill in at least one channel and after each run the actor sends the saved products there: name, price, the price change (was 14 990 CZK, -13.3 %), availability and link, at most Notifications: max products per message (10 by default), then "…and N more". With Monitoring: only new or changed products (and Monitoring: min price drop (%), include removed products) that is a ready price-drop, new-product or delisting alert: schedule the run and only the changes arrive; a run that saved nothing sends nothing. The webhook addresses are stored encrypted and never logged.

InputWhat to paste
Notifications: Slack webhook URLan incoming webhook of your channel (https://hooks.slack.com/services/…)
Notifications: Discord webhook URLa channel webhook (https://discord.com/api/webhooks/…)
Notifications: Telegram bot token + Telegram chat IDthe token from @BotFather and the chat, group or channel ID
Notifications: webhook URLany HTTPS URL (Zapier, Make, n8n, your server): a POST with JSON {title, summary, totalSaved, runUrl, datasetUrl, items}

A delivered notification costs $0.001 per run (not per channel). Nothing is charged when no channel is filled in, when the run saved nothing or failed, or when no channel accepted the message; a channel that fails never fails the run.

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.

  • 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 (not when Max products or a page limit cut it short; the status message then says why). Use one Monitoring key per input.

How much does it cost to scrape iSTYLE.cz?

You pay per saved product, plus small flat fees for what the run reads. Platform usage and the residential proxy are included. Filtered-out and unchanged products (in monitoring mode) are free.

PlanPrice per 1 000 products
FREE$1.75
BRONZE$1.73
SILVER$1.70
GOLD and higher$1.65
Flat fee (the same on every plan)PriceWhen
Run start$0.01once per run
List page (list-page)$0.0025each list page of a collection, the catalogue or a search that the shop answered (up to 250 products), so $0.01 per 1 000 products read, whether they are saved, filtered out or unchanged. A search term costs about $0.06 in list pages
Lookup without a saved product (empty-lookup)$0.001an EAN, MPN or product URL that gave no row: not found, filtered out, already saved or unchanged in monitoring mode
Notification (notification)$0.001only with a notification channel filled in: once per run whose notification was delivered
New IP address (new-ip-retry)$0.003with Retry rejected requests from a new IP address (on by default): each new proxy address used for a request the shop rejected; nothing when the shop answers normally

The EAN (Add EAN), found lookups and removed-product rows don't change the price per product. The flat fees cover runs that save little (a narrow filter, a monitoring run without changes, a search without results).

Typical runs (measured on Apify on 2026-11-10):

ScenarioPrice (FREE plan)Typical time
20 products from a collection (the prefilled input)$0.0475~5 s
The whole catalogue, 5 499 products$9.69~80 s
1 000 products with the EAN$1.77~50 min
1 search term, 10 products$0.085~80 s
10 EANs or MPNs, all found$0.0275~1 min
Daily monitoring of the whole catalogue, nothing changed$0.0675~80 s
Daily monitoring of one collection, nothing changed$0.0125~5 s

The prices above are without new IP addresses. With Retry rejected requests from a new IP address (on by default) add $0.003 for each new address used (see above). Turn the option off to never pay it, at the risk of a failed or partial run.

Input example

{
"startUrls": [{ "url": "https://istyle.cz/collections/apl-ps-iphone-17-pro" }],
"maxItems": 100,
"onlyInStock": true
}

Output example

An iPhone found by its EAN:

{
"id": "istyle:58676340850952",
"source": "istyle.cz",
"url": "https://istyle.cz/products/iphone-18-pro-256-gb-burgundska-cervena-mjrr4sx-a",
"productId": "12235545411848",
"variantId": "58676340850952",
"productCode": "MJRR4SX/A",
"name": "Apple iPhone 18 Pro 256 GB burgundská červená",
"brand": "Apple",
"ean": "195951415680",
"mpn": "MJRR4SX/A",
"category": "iPhone 18 Pro",
"categoryPath": ["iPhone 18 Pro"],
"price": 34990,
"currency": "CZK",
"priceBeforeDiscount": null,
"discountPercent": null,
"isDiscounted": false,
"availability": "in_stock",
"availabilityText": "Skladem",
"condition": "new",
"isUsedOrOpenBox": false,
"imageUrl": "https://cdn.shopify.com/s/files/1/0780/2113/2322/files/iPhone_18_Pro_Burgundy_PDP_Image_Position_1_Transparent__sk-SK.png?v=1789038689",
"variantTitle": null,
"color": "burgundská červená",
"capacity": "256 GB",
"specifications": { "storage": "256 GB" },
"description": "iPhone 18 Pro. 6,3palcový displej s ProMotion, 48Mpx hlavní Fusion fotoaparát s variabilní clonou, pořádný skok ve výdrži baterie a čip A20 Pro. …",
"tags": ["BASE-PRODUCT", "NPI"],
"publishedAt": "2026-09-09T22:16:58+02:00",
"detailScraped": true,
"matchedBy": "ean",
"searchQuery": "195951415680",
"position": null,
"sourceUrl": "https://istyle.cz/search?q=195951415680&type=product",
"scrapedAt": "2026-11-09T14:00:00Z",
"changeType": null,
"firstSeenAt": null,
"previousPrice": null,
"priceChange": null,
"priceChangePercent": null,
"removedAt": null
}

Limitations

  • One row per variant. At iSTYLE every colour and capacity is a product of its own with one variant, so a row is one sellable configuration with its own SKU, EAN and price.
  • EAN needs Add EAN (slower: about 50 minutes per 1 000 products) or a lookup by EAN. Lookups and product URLs always include it.
  • Part numbers: Apple products carry the Apple part number as their SKU. Configure-to-order Macs with the shop's own code (CTO-MBP-14-…) and accessories with the shop's code (K-…) have mpn: null; productCode always has the SKU.
  • Availability is what the shop marks for the variant ("Skladem" or "Není skladem"). Stock per store, pieces and delivery dates are not returned.
  • Related products are not returned.
  • Price is in whole crowns, as the page shows it.
  • Category is the shop's product type ("iPhone 17 Pro", "Obaly a kryty pro iPhone"), not a category tree.
  • Not sold separately: insurance, services and spare parts that the shop sells only with another product are left out.
  • Landing pages (/pages/…) are not product lists. Collection URL parameters for sorting and filtering are ignored (use the input filters).
  • Ratings and reviews are not returned. Photos are returned as URLs; product photos and texts are copyrighted, so check the rights before you republish them.
  • Rejected requests: see the verification page. If rejections continue, the run stops with what it has saved and says so. Products whose EAN couldn't be read are returned without it (detailScraped: false).

For AI agents and API users

  • Minimal input: {"startUrls": [{"url": "https://istyle.cz/collections/apl-ps-iphone-17-pro"}], "maxItems": 20}, or {"searchQueries": ["airpods pro 3"], "maxItems": 10}, or {"eans": ["195951415680"]}, or {"mpns": ["MJRR4SX/A"]}.
  • One row = one product variant = one charge. The EAN, found lookups and removed rows don't change the price. Flat events: run start $0.01, list-page $0.0025 per list page answered, empty-lookup $0.001 per EAN, MPN or product URL without a saved row, new-ip-retry $0.003 per new address.
  • descriptionFormat: short (default), text, html or markdown (same price and speed); filters tags, updatedSince ("7 days" or a date), categories, publishedWithinDays; price alerts with slackWebhookUrl / discordWebhookUrl / telegramBotToken + telegramChatId / webhookUrl ($0.001 per delivered run).
  • Reliability: retryFromNewIp is true by default ($0.003 per new proxy address used). With false a run may stop early; the status message then says to turn it on. Keep the default proxyConfiguration (Apify Proxy, RESIDENTIAL, country CZ).
  • maxItems counts saved products, maxItemsPerStartUrl limits each URL, search term or the code list.
  • Prices are in CZK incl. VAT, whole crowns. availability is in_stock, out_of_stock or unknown. condition is new, open_box or refurbished.
  • Monitoring state is kept per monitoringKey between runs of the same user.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("tsutseisoftware/istyle-scraper").call(run_input={
"startUrls": [{"url": "https://istyle.cz/collections/apl-ps-iphone-17-pro"}],
"maxItems": 100,
})
for product in client.dataset(run.default_dataset_id).iterate_items():
print(product["name"], product["price"], product["mpn"], product["availability"])

JavaScript

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

cURL

curl -X POST "https://api.apify.com/v2/acts/tsutseisoftware~istyle-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"eans": ["195951415680"], "mpns": ["MG8G4ZD/A"]}'

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

Troubleshooting

Status messageWhat to do
Skipping unsupported URL (log)Use an iSTYLE.cz collection (/collections/…), search or product URL; landing pages (/pages/…) are not product lists.
Ignored URL parameters … (log)Sorting and filter parameters of collection URLs are not used; use the input filters.
no products: …The collection or search has no products (with these filters).
not found: …The shop has no product with exactly this EAN or part number.
… lookups found a product already saved in this runTwo of your codes belong to the same product; it is saved once.
… could not be loadedThe collection or product doesn't exist (anymore); open the URL in your browser.
… not read: listing data without the EAN returned insteadThe shop didn't answer some product data; run it again later for the EANs.
searched only part of the catalogueRaise Max catalogue pages for searches.
stopped at the page limit …Raise Max pages per collection.
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.
"Retry rejected requests from a new IP address" is off, so this run may fail … (start of the run)You turned the option off (it is on by default), or the run has no proxy. Nothing is wrong yet; turn it back on for reliable results.
iSTYLE.cz is rejecting requests with a verification page, nothing was saved / the site started rejecting requests, so the run stopped earlyKeep Retry rejected requests from a new IP address on (the default, $0.003 per new address) and keep the default proxy. If it was on (… new IP addresses were tried and charged), the shop kept rejecting requests: try again later. your maximum cost per run did not allow another new IP address: raise the maximum cost per run.
… requests were read from a new IP addressExpected with the option on: these requests were rejected first and read from another address.
… lookups without a saved product chargedThese EANs, MPNs or product URLs gave no row (not found, filtered out, already saved, unchanged); each costs $0.001.
iSTYLE.cz is not answering or answers too slowly / the shop answered too slowly, so the run stopped earlyThe shop (or your own proxy) did not answer in time, so the run stopped instead of waiting; what it had read is saved. Try again later with the default proxy.
… pages could not be read, so the results may be incompleteThe 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.

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.

More Czech & Slovak e-shop scrapers

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

FAQ

The actor reads only publicly available product data (names, prices, availability, part numbers, EANs), without logging in, at most 20 requests per minute. It slows down when the website asks and never solves captchas or other challenges; with Retry rejected requests from a new IP address on (the default) it repeats a rejected request from another proxy address at the same pace. It returns no personal data. The website's terms of use may limit automated access, and you are responsible for how you use the data, e.g. that you don't republish copyrighted photos and texts. If in doubt, consult a lawyer.

Do I need a proxy?

Yes, iSTYLE.cz needs a residential proxy. It is set by default (Czech Republic) and its cost is included in the price. Retry rejected requests from a new IP address is on by default too ($0.003 per new address used).

Why did my run fail with "rejecting requests"?

The shop answered with a verification page. If you turned Retry rejected requests from a new IP address off (or removed the proxy), turn it back on: the actor then asks again from another address ($0.003 per new address used) instead of stopping. With the option on this happens only when the shop keeps rejecting new addresses, or when your maximum cost per run does not allow another address; try again later or raise the limit.

Why is the EAN empty?

Listed products come without the EAN by default. Turn on Add EAN (barcode), or look products up by EANs; product URLs include it too.

Why is the MPN empty for some Macs?

Configure-to-order Macs that the shop lists under its own code (CTO-…) have no Apple part number on iSTYLE.cz. Their SKU is in productCode, and the configuration is in specifications.

Is this for iSTYLE.sk too?

No, only for istyle.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 iSTYLE CZ, s.r.o., the operator of iSTYLE.cz, or by Apple. This tool is also known as an iSTYLE.cz API, iSTYLE price tracker or "hlídač cen iSTYLE".