Pricing
Pay per usage
ICA Scraper β Swedish Supermarket Prices
Scrape products, prices, unit prices, brands, EANs and promotions from ICA.se β Sweden's largest supermarket. Search by keyword. No login or cookies required.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
ICA Scraper β Swedish Supermarket Products & Prices
Scrape products, prices, unit prices, brands, SKUs, and promotions from ICA.se, Sweden's largest supermarket chain. Search by keyword and get clean, structured product data back as JSON, CSV, or Excel.
No login. No cookies. No browser automation on your side β you give the actor a search term, it returns the matching products with prices for a real ICA store.
What this actor does
ICA runs Sweden's biggest grocery network (ICA Maxi, ICA Kvantum, ICA Supermarket, ICA NΓ€ra). Its online shop exposes a per-store product catalog with live prices. This actor queries that catalog and returns one row per product.
For each product you get:
- name β the product name in Swedish
- brand β manufacturer / brand (e.g. Arla, ICA, Oatly)
- sku β ICA's retailer product id (stable per article)
- price β current shelf price for the selected store
- currency β always
SEK - unit β pack / size description (e.g.
1.5L,500 g) - unitPrice β comparison price (e.g. price per litre / kilo)
- promotion β the offer text when a product is on offer (e.g.
4 fΓΆr 50 kr) - promotionPrice β single-unit discounted price when one applies
- category β product category
- countryOfOrigin β country of origin, when published
- url β direct link to the product page
- imageUrl β product image
- inStock β whether the product is currently available
- scrapedAt β ISO timestamp of the scrape
How to scrape ICA data
- Set Search Query to a Swedish keyword β for example
mjΓΆlk(milk),kaffe(coffee),brΓΆd(bread),pasta, orost(cheese). Leave it empty and the actor falls back to a sensible default so you still get results. - Set Max Results to how many products you want back (default 20).
- Leave Store ID on the default unless you need a specific store's prices.
Prices and assortment differ between ICA stores. The default store is
1004599(ICA Kvantum Kungsholmen, Stockholm). - Leave Proxy Configuration on the default Apify proxy. The product API has no geo lock, so you do not need Swedish IPs. Proxy is used only for IP rotation and rate-limit resilience.
- Click Start and collect the dataset when the run finishes.
How the data is fetched
The online shop (handlaprivatkund.ica.se) is a single-page app keyed by a
store account id. The actor calls one public JSON endpoint:
GET /stores/{storeId}/api/webproductpagews/v6/product-pages/search?q={term}&tag=web&maxPageSize=60-> { productGroups: [{ decoratedProducts: [ { name, brand, price,unitPrice, promotions, packSizeDescription, categoryPath, image } ] }],metadata: { nextPageToken } }
The search returns fully decorated products (name, price, brand, image and
more) in one call β no second lookup needed. The actor paginates with
nextPageToken until it reaches your maxResults. Everything is store-scoped,
so the prices match what a shopper in that store would see online.
Input
| Field | Type | Description |
|---|---|---|
searchQuery | string | Swedish keyword to search for. Defaults to mjΓΆlk. |
maxResults | integer | Max number of products to return (1β5000). |
storeId | string | ICA online store account id. Default 1004599. |
proxyConfiguration | object | Proxy settings. Default Apify proxy is fine. |
Example input
{"searchQuery":"kaffe","maxResults":50,"storeId":"1004599","proxyConfiguration":{"useApifyProxy":true}}
Output
Each dataset item looks like this:
{"name":"MellanmjΓΆlk 1,5% Ekologisk 1,5l KRAV ICA I love eco","brand":"ICA I love eco","sku":"2052770","price":23.5,"currency":"SEK","unit":"1.5L","unitPrice":"15.67/l","promotion":null,"promotionPrice":null,"category":"MellanmjΓΆlk","countryOfOrigin":"Sverige","url":"https://handlaprivatkund.ica.se/stores/1004599/products/2052770/details","imageUrl":"https://handlaprivatkund.ica.se/images-v3/.../300x300.jpg","inStock":true,"scrapedAt":"2026-06-24T18:00:00.000Z"}
You can export the dataset as JSON, CSV, Excel, or XML, or pull it through the Apify API.
Common use cases
- Price monitoring β track ICA shelf prices for a basket of products over time and compare against other Swedish grocers.
- Promotion tracking β spot when products go on offer (
promotion). - Assortment research β see which brands and sizes ICA stocks for a category.
- Market analysis β feed structured Swedish grocery data into pricing models.
Choosing a store
Prices and stock are per store. To use a different ICA store, find its account
id and pass it as storeId. You can list stores near any Swedish postcode with
ICA's public store endpoint, e.g.
https://handla.ica.se/api/store/v1?zip=11122&customerType=B2C β the accountId
field of each store is what this actor expects.
Notes and limits
- Prices reflect the selected store and the moment of the scrape.
- ICA promotions are often multibuy offers (e.g.
4 fΓΆr 50 kr), so thepromotionfield carries the offer text.promotionPriceis filled only when a single-unit discounted price applies. - The actor fails fast with a clear error if it gets zero products, so a successful run always means real data.
FAQ
Do I need an ICA account or cookies?
No. The actor reads the public store catalog. No login, no cookies.
Do I need Swedish proxies?
No. The product API is reachable from any IP. The default Apify proxy is used for IP rotation only. Note: do not country-lock a datacenter proxy to Sweden β Apify has no Swedish datacenter pool. If you want a Swedish exit, pick RESIDENTIAL and choose Sweden in the proxy editor.
Can I scrape a whole category?
Yes β search for a broad term and raise maxResults. The actor paginates
through the search results until it reaches your limit.
