ikas Store Scraper | Products, Prices & Stock
Pricing
from $1.00 / 1,000 products
ikas Store Scraper | Products, Prices & Stock
Give an ikas store domain and get the catalogue: prices, discounts, stock, variants, SKUs, barcodes and images. Built for Turkish ecommerce price and stock monitoring. Changes-only mode returns new, changed and removed products.
Pricing
from $1.00 / 1,000 products
Rating
0.0
(0)
Developer
Atesen Software
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape any online store built on ikas, the e-commerce platform behind about 20,000 Turkish shops. Give it a domain like lepoleoutfit.com and get the whole catalogue as JSON, CSV or Excel: prices, discounts, stock, variants (size/colour), SKUs, barcodes, categories, ratings and images. For price & stock monitoring, turn on changes only and schedule it to get just the new, changed and removed products.
- Works on every ikas storefront. The scraper finds products through the store's sitemap and reads the product data ikas embeds in each page.
- No browser, no proxy. It is fast and cheap.
- Checks that each site really runs on ikas. Other sites return a free
not_ikasstatus row.
Use cases
- Competitor price monitoring for D2C brands on ikas (schedule it daily or weekly).
- Stock and assortment tracking: new products, sold-out variants, discounts.
- Catalogue export / migration from an ikas store (with SKU and barcode).
- Market research across many Turkish D2C shops.
How do I know a store runs on ikas?
ikas stores load images from cdn.myikas.com, and unbranded ones live on *.ikas.shop. You don't have to check yourself: put any domain in and the scraper tells you.
Input
| Field | Description |
|---|---|
stores | Store domains or URLs (lepoleoutfit.com, https://www.shop.com, shop.ikas.shop) |
productUrls | Individual product URLs, to track specific products |
maxProductsPerStore | Default 100; 0 = whole catalogue |
includeDescription | Add the product description (plain text) |
maxConcurrency | Parallel page loads per store (default 3) |
changesOnly | Off by default. On: save only new, changed and removed products since the previous run; unchanged ones are free (see Price & stock monitoring) |
monitorKey | Optional name of the watch list; empty = derived from the input |
{"stores": ["lepoleoutfit.com", "pastirmacipolat.com"],"maxProductsPerStore": 100}
Output
One row per product. Variants are nested:
{"type": "product","store": "pastirmacipolat.com","productId": "9dd6875b-f8a0-40f8-bad9-c5b5a5e35946","name": "Kayseri Sucuğu","brand": "Pastırmacı Polat","url": "https://pastirmacipolat.com/kayseri-sucugu","price": 675,"originalPrice": null,"discountPercent": null,"currency": "TRY","minPrice": 675,"maxPrice": 6750,"inStock": true,"totalStock": 60,"sku": null,"barcode": null,"categories": ["Kayseri Sucuğu"],"rating": 4.77,"reviewCount": 154,"imageUrl": "https://cdn.myikas.com/images/.../image_1080.webp","variantCount": 6,"variants": [{ "variantId": "3602eb28-...", "sku": null, "barcodes": [], "options": { "Kilogram": "500gr" }, "price": 675, "originalPrice": null, "stock": 10, "inStock": true }]}
price is the current selling price (campaign or discounted price when there is one). originalPrice is the crossed-out list price. Stock numbers are the ones the store publishes on its product pages.
Status rows
The run doesn't fail on bad input. Problems become rows with type: "status" and are never charged:
| status | meaning |
|---|---|
invalid_input | No stores or product URLs given |
invalid_url | Not a valid domain or URL |
unreachable / failed | The site could not be loaded |
not_ikas | The site or page does not run on ikas |
no_products | The store's sitemap lists no live products |
not_found | A product URL returned 404 |
not_a_product | An ikas page that is not a product page |
Removed products that are still listed in a store's sitemap are skipped automatically and not charged. RUN_SUMMARY in the key-value store has counts.
Price & stock monitoring
Turn on Changes only (changesOnly: true) and schedule the Actor. Each run is compared with the previous run of the same input (or the same Monitor name, monitorKey), and only what changed is saved. Unchanged products are not saved and not charged; new and changed products cost the normal per-product price.
changeType | Meaning | Charged |
|---|---|---|
new | first time this product is seen (every product on the first run) | yes, as a normal product |
price_changed | price went up or down, also per variant (previousPrice, priceChange, priceChangePercent) | yes |
unavailable | still listed but sold out — temporarily unavailable | yes |
back_in_stock | sold out last time, buyable again | yes |
stock_changed | stock quantity changed, or a variant sold out / came back | yes |
variants_changed | a variant (size, colour) was added or removed | yes |
removed | product is gone: its page returns 404 (removedReason: not_found), or it was missing from the store's sitemap or a fully crawled store two runs in a row (not_listed) | free |
| unchanged | not saved | free |
Every changed row keeps all the normal product fields and adds changeType, a changes list (e.g. {"field": "price", "from": 1299, "to": 1149}), previousPrice, priceChange, priceChangePercent, previousInStock, previousSeenAt and firstSeenAt. Products are matched by store + the platform's stable product ID (productId; variants by variantId), so a renamed product is not reported as new. A product that could not be loaded in one run (timeout, block) is never reported as removed. The Changes view in the Output tab shows just these columns; the run summary (RUN_SUMMARY) counts new, changed, unchanged and removed products.
Schedule example — every morning, get only the price and stock changes:
{"stores": ["lepoleoutfit.com"],"maxProductsPerStore": 0,"changesOnly": true,"monitorKey": "lepoleoutfit-daily"}
Save the input as a task, then in Apify Console open Schedules → Create new, set cron 0 7 * * * (07:00 every day) and add the task. Connect a webhook, Google Sheets or Slack integration to receive only the changes. Use maxProductsPerStore: 0 (whole store) for complete removal detection; with a limit, the same first products of the sitemap are compared. Keep the input the same between runs: a different input or monitor name starts a new watch list (all products new again).
Pricing
$0.001 per product (pay per event, $1 per 1,000 products). Status rows are free. Set a maximum cost per run and the scraper stops cleanly when it is reached.
Related actors
Notes
Only public product information is collected: no customer data, no login, no checkout. Use the data responsibly and follow each store's terms and applicable law. This actor is not affiliated with ikas.
FAQ
Which stores work? Public ikas storefronts. Paste the domain. A store that is not ikas, or that blocks the request, becomes a free status row.
How do I monitor price and stock? Turn on changesOnly and reuse the same monitorKey.
What does the first run return? The saved example reads two real ikas stores and returns product rows (name, price, stock, SKU, URL). It does not crawl the whole catalogue unless you raise the limit.