# Iceland UK Scraper — Groceries Products & Prices (`studio-amba/iceland-uk-scraper`) Actor

Scrape Iceland UK groceries: product names, prices, promotions, price per unit, ratings, stock status, images and categories via the store's own search index. No login, no cookies.

- **URL**: https://apify.com/studio-amba/iceland-uk-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Iceland UK Scraper

Scrape Iceland UK groceries: product names, prices, promotions, price per unit, ratings, review counts, stock status, images and full category paths. No login, no cookies.

### Why use this actor?

Iceland is one of the UK's major grocery chains, known for frozen food and value pricing. This actor gives you a clean, structured feed of Iceland's online catalogue for price monitoring, competitor benchmarking, product matching against other UK grocers (Tesco, Sainsbury's, Asda, Morrisons, Waitrose, Aldi), or general market research. You get the same product names, prices and promotions the Iceland website shows shoppers, without needing an account or a delivery slot.

Iceland's website itself sits behind Akamai Bot Manager, but its product search runs against a public search index that isn't protected the same way. This actor talks to that index directly, so it's fast, reliable and doesn't depend on solving anti-bot challenges run after run.

### How to scrape Iceland data

1. Add this actor to your Apify account.
2. Set `searchQuery` to a keyword, e.g. `milk`, `pizza`, or `chicken`. Leave it empty and the actor defaults to `milk` so a run always returns data.
3. Optionally set `categoryId` if you already know Iceland's internal category code from a previous run's `category` output field (e.g. `CHLMLK` for Milk, Butter & Eggs). Most users should just use `searchQuery`.
4. Set `maxProducts` to cap the run (prefilled 20 for a quick test, max 2000 per query — see Limitations).
5. Run the actor. Results stream to the dataset and can be exported as JSON, CSV, Excel or fed to an API.

The actor queries Iceland's product search directly, requests up to 1,000 results per page (verified live — the search backend honors that page size), and paginates automatically until `maxProducts` is reached or the search backend's own retrieval ceiling is hit. Products are deduplicated by Iceland's internal product ID.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | Search Iceland groceries by keyword (default: `milk`) |
| `categoryId` | String | No | Iceland's internal category code to filter by (advanced — see Limitations) |
| `maxProducts` | Integer | No | Maximum products to return (default 20, max 2000) |
| `proxyConfiguration` | Object | No | Proxy settings (offered for consistency; not required for this actor to work) |

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `name` | String | `"Iceland British Semi-Skimmed Milk 1 Litre"` |
| `brand` | String | `"Iceland"` |
| `price` | Number | `1.20` |
| `currency` | String | `"GBP"` |
| `pricePerUnit` | String | `"£1.20/1l"` |
| `originalPrice` | Number | `14.25` (present only during an active promotion) |
| `discount` | String | `"Was £14.25 Now £12.50"` |
| `ean` | String | Always empty — see Limitations |
| `productId` | String | `"19491"` |
| `inStock` | Boolean | `true` |
| `rating` | Number | `4.4` |
| `reviewCount` | Integer | `89` |
| `imageUrl` | String | Primary product image URL |
| `category` | String | `"Fresh > Milk, Butter & Eggs > Milk"` |
| `url` | String | Full product page URL |
| `scrapedAt` | String | ISO 8601 timestamp |

### Example output

```json
{
    "name": "Iceland British Semi-Skimmed Milk 1 Litre",
    "brand": "Iceland",
    "price": 1.20,
    "currency": "GBP",
    "pricePerUnit": "£1.20/1l",
    "productId": "19491",
    "inStock": true,
    "rating": 4.4,
    "reviewCount": 89,
    "imageUrl": "http://assets.iceland.co.uk/i/iceland/iceland_british_semi-skimmed_milk_1_litre_1l_19491.jpg",
    "category": "Fresh > Milk, Butter & Eggs > Milk",
    "url": "https://www.iceland.co.uk/p/iceland-british-semi-skimmed-milk-1-litre/19491.html",
    "scrapedAt": "2026-07-14T19:30:00.000Z"
}
````

### Prices and promotions

- Prices are in GBP and reflect the standard Iceland online shelf price.
- When a promotion is active, `price` is the promotional price, `originalPrice` is the pre-promotion shelf price, and `discount` carries the promotion text (e.g. a "Was £X Now £Y" markdown, or a multibuy label like "B2G1F").
- `pricePerUnit` gives the comparable unit price (per litre, per kg, etc.) shown on the product page.

### Cost estimate

Each search request returns up to 1,000 products, and the underlying data source is a lightweight JSON API with no anti-bot solving involved, so this actor is cheap and fast to run at any scale up to the 2,000-result-per-query ceiling described below. A typical `maxProducts: 20` test run completes in seconds.

### Limitations

- **No EAN/barcode data.** Iceland's product data — checked across its search index, product-detail data and structured markup — carries no barcode/GTIN field on any surface this actor (or a browser) can reach. This is a genuine gap in Iceland's own data, not a scraping shortfall, so the `ean` field is always empty. Product matching against other retailers should use `name` + `brand` + pack size instead.
- **2,000-result ceiling per query.** A single `searchQuery`/`categoryId` combination can return at most 2,000 products (a limit set by the underlying search backend). To pull more of the catalogue, run multiple narrower queries and combine the results.
- `categoryId` requires Iceland's internal category code, which isn't visible anywhere in the site's own URLs — it's best used opportunistically (copy a `category`-adjacent code you've already seen) rather than as a primary way to browse.
- Data is scraped from Iceland's public search backend and may change without notice. Respect Iceland's terms of service and use responsibly.

### Fits the wider UK grocery picture

This actor pairs well with our other UK grocery scrapers (Tesco, Sainsbury's, Asda, Morrisons, Waitrose, Aldi) for cross-retailer price comparison. Iceland is worth tracking on its own too — its frozen-food and value-pricing focus means its basket often moves independently of the mainstream supermarkets.

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API — maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple UK grocery sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

## `searchQuery` (type: `string`):

Search Iceland groceries by keyword (e.g., 'milk', 'pizza', 'chicken').

## `categoryId` (type: `string`):

Iceland's internal category code to filter by (e.g. 'CHLMLK' for Milk, Butter & Eggs, 'BREAKCLB' for Breakfast Club). These aren't visible in the site's URLs — leave empty and use Search Query instead unless you already know the code from a previous run's 'category' output field.

## `maxProducts` (type: `integer`):

Maximum number of products to return. The underlying search API caps any single query/filter combination at 2000 total results.

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

Proxy settings. This actor's data source (a public search API) is not geo-blocked or anti-bot protected, so a proxy isn't required for it to work, but one is offered for consistency and future-proofing.

## Actor input object example

```json
{
  "searchQuery": "milk",
  "maxProducts": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}
```

# 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 = {
    "searchQuery": "milk",
    "maxProducts": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "GB"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/iceland-uk-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 = {
    "searchQuery": "milk",
    "maxProducts": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "GB",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/iceland-uk-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "milk",
  "maxProducts": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}' |
apify call studio-amba/iceland-uk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=studio-amba/iceland-uk-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Iceland UK Scraper — Groceries Products & Prices",
        "description": "Scrape Iceland UK groceries: product names, prices, promotions, price per unit, ratings, stock status, images and categories via the store's own search index. No login, no cookies.",
        "version": "0.1",
        "x-build-id": "zZdWWG6Sm90EcTeks"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~iceland-uk-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-iceland-uk-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~iceland-uk-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-iceland-uk-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~iceland-uk-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-iceland-uk-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search Iceland groceries by keyword (e.g., 'milk', 'pizza', 'chicken')."
                    },
                    "categoryId": {
                        "title": "Category ID (advanced)",
                        "type": "string",
                        "description": "Iceland's internal category code to filter by (e.g. 'CHLMLK' for Milk, Butter & Eggs, 'BREAKCLB' for Breakfast Club). These aren't visible in the site's URLs — leave empty and use Search Query instead unless you already know the code from a previous run's 'category' output field."
                    },
                    "maxProducts": {
                        "title": "Max Products",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Maximum number of products to return. The underlying search API caps any single query/filter combination at 2000 total results."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. This actor's data source (a public search API) is not geo-blocked or anti-bot protected, so a proxy isn't required for it to work, but one is offered for consistency and future-proofing."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
