ICA Scraper — Swedish Supermarket Prices avatar

ICA Scraper — Swedish Supermarket Prices

Pricing

Pay per usage

Go to Apify Store
ICA Scraper — Swedish Supermarket Prices

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

Studio Amba

Studio Amba

Maintained by Community

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

  1. Set Search Query to a Swedish keyword — for example mjölk (milk), kaffe (coffee), bröd (bread), pasta, or ost (cheese). Leave it empty and the actor falls back to a sensible default so you still get results.
  2. Set Max Results to how many products you want back (default 20).
  3. 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).
  4. 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.
  5. 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

FieldTypeDescription
searchQuerystringSwedish keyword to search for. Defaults to mjölk.
maxResultsintegerMax number of products to return (1–5000).
storeIdstringICA online store account id. Default 1004599.
proxyConfigurationobjectProxy 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 the promotion field carries the offer text. promotionPrice is 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.