# Currys UK Scraper & API: Product Prices, Stock and Offers (`scraperseurope/currys-uk`) Actor

Extract Currys UK product prices in GBP, brands, EANs, SKUs, ratings, delivery availability and offers. Search electronics and appliances with pagination; export JSON, CSV or Excel for price and catalogue monitoring.

- **URL**: https://apify.com/scraperseurope/currys-uk.md
- **Developed by:** [Scrapers Europe](https://apify.com/scraperseurope) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 product delivereds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Currys UK Scraper & Product Data API

Optional `minPrice` and `maxPrice`, provided together, use Currys' native GBP price filter, for example `{"term":"laptop","minPrice":100,"maxPrice":1000}`. Searches without these fields are unchanged. The range is retained across pages; products outside it are not delivered or charged.

Collect real Currys.co.uk search results for electronics, computing and home appliances. Export advertised GBP prices, product identifiers, brands, offers and published availability to JSON, CSV or Excel. Useful for price comparison, product matching and catalogue monitoring.

### Inputs and examples

```json
{"term":"laptop","maxItems":50}
```

```json
{"searchTerms":["laptop","washing machine"],"maxRuntimeSecs":600}
```

```json
{"term":"headphones","maxPages":2}
```

`searchTerms` replaces `term`. Omit `maxItems` and `maxPages` to collect without a fixed starting result cap. Collection ends when the source ends, the runtime budget expires or the Apify spending limit is reached. The default runtime budget is 240 seconds, adjustable up to 7200 seconds. The cheap example uses three products for a quick check, not a hidden customer limit.

### Product fields

Each unique product includes `product_id`, `title`, `source_url`, `price`, `currency`, `list_price`, `brand`, `sku`, `ean`, `offers`, `available`, `availability_text`, `image_url`, `rating` and `review_count`, where published. Country, search term, page, rank and collection time make each row auditable. Unpublished values remain null or empty, not guessed.

`price` is the advertised one-off cash price in GBP, checked against the product card. Monthly finance, trade-in values and savings amounts never replace it. `list_price` is the source's higher reference price, not a guaranteed previous transaction price. Coupon, student and bundle conditions remain separate offer text; the actor does not assume eligibility or subtract conditional discounts. Availability is the source's general delivery indication, not guaranteed stock for a customer postcode.

### Pagination and automatic access

The actor uses Currys' storefront search-grid response and embedded product records. It follows the source's 20-product page sequence and checks the search term, offset and next-page navigation. It reuses an HTTP session and automatically tries UK proxy routes if necessary. No customer proxy configuration, login or cookies are required. Browsers are not launched for this route.

Pages are delivered progressively and product IDs are deduplicated across pages and searches. Earlier products remain available if a later page fails. No complete catalogue coverage or fixed result count is promised.

### Results, errors and integration

Products go to the Dataset and can be downloaded or read through the Apify API. `RUN_SUMMARY` reports result/page counts, completion reason and performance. Uncharged `DIAGNOSTICS` distinguishes a confirmed empty search (`no_results`), access verification (`blocked`), invalid responses (`failed`) and retained earlier products (`partial`). A verification page is never called an empty search. Inputs can also be used through customer-created tasks and integrations.

### Pricing and independence

USD 0.004 per unique genuine product delivered, plus Apify platform consumption paid by the customer. Duplicates, errors, summaries and diagnostics have no per-result charge. Proxy/compute costs depend on the access route. A spending limit can end collection before the source is exhausted.

This is an independent Scrapers Europe tool, not affiliated with, endorsed by or operated by Currys. Brand names identify the data source. Use data within applicable rights and source terms.

# Actor input Schema

## `minPrice` (type: `number`):

Provide together with maxPrice to use Currys' own price filter. Without both values, searches remain unrestricted by price.

## `maxPrice` (type: `number`):

Provide together with minPrice. The advertised cash price must fall within this range.

## `term` (type: `string`):

Product, brand or model to search on Currys UK.

## `searchTerms` (type: `array`):

Replaces the individual term. Duplicate products are delivered and charged only once.

## `maxItems` (type: `integer`):

Without a value, no fixed result cap. Applies across all searches.

## `maxPages` (type: `integer`):

Without a value, follow the source until it ends or the time/spending budget is reached.

## `maxRuntimeSecs` (type: `integer`):

Earlier products are retained if a later page fails.

## `requestTimeoutSecs` (type: `integer`):

Maximum waiting time for one source request.

## Actor input object example

```json
{
  "term": "laptop",
  "maxRuntimeSecs": 240,
  "requestTimeoutSecs": 30
}
```

# Actor output Schema

## `products` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `diagnostics` (type: `string`):

No description

# 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 = {
    "term": "laptop"
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraperseurope/currys-uk").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 = { "term": "laptop" }

# Run the Actor and wait for it to finish
run = client.actor("scraperseurope/currys-uk").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "term": "laptop"
}' |
apify call scraperseurope/currys-uk --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraperseurope/currys-uk"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5bPbdSfPzh1UISVna/builds/X0xVUf05c5g5ayTZm/openapi.json
