Currys UK Scraper - Products, Prices, Stock & Reviews
Pricing
from $1.20 / 1,000 product results
Currys UK Scraper - Products, Prices, Stock & Reviews
Scrape Currys UK electronics by keyword or URL. Extract prices, brands, stock status, EANs, descriptions, full image galleries and customer reviews. Supports automatic forward pagination for efficient catalogue scraping.
Pricing
from $1.20 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Currys UK Scraper: products, prices, and reviews
Scrape currys.co.uk electronics listings with price, brand, stock state, EAN, full photo gallery, description, and customer reviews. Search by keyword or paste category and search URLs, with automatic forward pagination.
Why This Scraper?
- Two ways in. Keyword search, or paste search and category URLs directly.
- Rich product data. Brand, current price, stock state, EAN/GTIN, category path, and the full high-resolution photo gallery.
- Customer reviews included. Pull each product's own customer reviews, rating, text, author, and date, as a separate toggle.
- Client-side filters. Narrow by price range and in-stock status without extra requests.
- Multi-category coverage. TVs, laptops, mobiles, appliances, and every other category the site carries, all through one actor.
- Predictable output caps. One clear limit on total products per run, with pagination following automatically.
Use Cases
- Price monitoring: track current and historical prices across electronics categories for competitive analysis.
- Market research: compare brand and category coverage across a major UK electronics retailer.
- Review analysis: collect customer ratings and review text to gauge product sentiment.
- Stock tracking: monitor which products are in stock versus out of stock over time.
- Catalog enrichment: pull structured product data (EAN, brand, category) to enrich an existing product database.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
id | "10000001" |
sku | "000001" |
url | "https://www.currys.co.uk/products/sample-product-0000000-10000001.html" |
title | "Sample Brand 40\" Smart Full HD HDR LED TV" |
brand | "SAMPLE BRAND" |
price | 199.99 |
currency | "GBP" |
availabilityStatus | "InStock" |
categories | ["TV & Audio", "Televisions", "TVs"] |
ean | "0000000000000" |
rating | 4.6 |
reviewCount | 29 |
description | "Sample product description text appears here when details are fetched." |
images | ["https://media.currys.biz/i/currysprod/00000000?$l-large$"] |
priceValidUntil | "2026-12-31" |
When "Fetch customer reviews" is on, each product also carries a reviews array (one entry per review: rating, review, author, authorLocation, date).
How to Use
- Pick a mode: Search to type keywords, or URL to paste currys.co.uk search/category links.
- Fill in the matching fields (keywords, or URLs).
- Set Max total products to control run size and cost; adjust Max pages if needed.
- Run the actor, then view or export results from the Dataset tab.
Search by keyword:
{"mode": "search","queries": ["tv", "laptop"],"maxListings": 40,"fetchDetails": true}
Search with price and stock filters:
{"mode": "search","queries": ["washing machine"],"minPrice": 200,"maxPrice": 600,"inStockOnly": true,"maxListings": 20}
URL mode with reviews:
{"mode": "url","urls": ["https://www.currys.co.uk/search?q=headphones"],"fetchDetails": true,"fetchReviews": true,"maxReviewsPerProduct": 10,"maxListings": 10}
Run it from your code
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("abotapi/currys-co-uk").call(run_input={"mode": "search","queries": ["tv"],"maxListings": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('abotapi/currys-co-uk').call({mode: 'search',queries: ['tv'],maxListings: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
You can also trigger runs and pipe results into Make, Zapier, n8n, Google Sheets, or a webhook from the actor's Integrations tab.
Tips:
- Max total products is the one cap that matters; Max pages defaults wide open so it never silently cuts you off before the cap is reached.
- Reviews are fetched per product only when "Fetch customer reviews" is on, since each product costs an extra request.
- For a daily or weekly schedule, turn on Incremental changes for scheduled runs instead of re-paying for the same products every time.
Resume and recurring updates
Two different features for two different needs:
- Resume from a previous run: paste a run ID or dataset ID to continue a large, interrupted walk across separate runs. Products already saved there are skipped, so you only pay for the new ones.
- Incremental changes for scheduled runs: turn this on when you run the same search on a schedule (daily, weekly). The first run returns everything as
NEW. Every later run returns onlyNEW,UPDATED, andREAPPEAREDproducts by default, each tagged with achangeTypeand (forUPDATED) achangedFieldslist. Turn on "Emit unchanged products" or "Emit expired products" if you also want those rows (both are billed, since they're still rows you receive). Minor fields that change on their own (review count, rating, the rolling price-valid-until date, the review list itself) are excluded from change detection by default, so a product isn't flaggedUPDATEDjust because one more review came in.
Send results into your apps (MCP connectors)
Optionally pipe results straight into Notion, Linear, Airtable, or another MCP-compatible app as the run finishes. Authorize a connector once under Apify, Settings, Integrations, then select it in the "Export to your apps" section of the input. For Notion, also set the parent page. The connector receives a condensed, human-readable summary per item (title, price, availability, a few key fields), not the full JSON; the complete record always stays in the dataset. Leave this empty to skip it entirely; it never changes the dataset output either way.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | String | search | search to use keywords, url to paste links. |
queries | Array | ["tv"] | Keywords to search for (Search mode). |
minPrice | Integer | - | Only keep products at or above this price. |
maxPrice | Integer | - | Only keep products at or below this price. |
inStockOnly | Boolean | false | Only keep in-stock products. |
sortBy | String | Relevance | Relevance, PriceAsc, or PriceDesc. |
urls | Array | - | currys.co.uk search/category URLs (URL mode). |
fetchDetails | Boolean | true | Visit each product's detail page for description, EAN, and full photo gallery. |
fetchReviews | Boolean | false | Fetch each product's customer reviews. |
maxReviewsPerProduct | Integer | 20 | Cap on reviews fetched per product. |
maxPages | Integer | 500 | Max result pages to walk per search/URL. |
maxListings | Integer | 20 | Hard cap on total products for the run. 0 = unlimited. |
resumeFromRunId | String | - | A previous run ID or dataset ID to continue a large walk across separate runs. |
incrementalMode | Boolean | false | Turn on for recurring runs of the same search; only returns what changed. |
stateKey | String | - | Optional name for the incremental-mode monitoring campaign. |
emitUnchanged | Boolean | false | Also return unchanged products (incremental mode). |
emitExpired | Boolean | false | Also return products no longer found (incremental mode). |
ignoreFieldsForChanges | Array | - | Extra field names to exclude from change detection (incremental mode). |
proxy | Object | Residential, GB | Connection settings; the actor manages its own connection tiers internally. |
mcpConnectors | Array | - | MCP connector IDs to export results to (optional). |
notionParentPageUrl | String | - | Notion parent page for the Notion connector. |
maxNotifyListings | Integer | 50 | Cap on items exported per connector. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"id": "10000001","sku": "000001","url": "https://www.currys.co.uk/products/sample-product-0000000-10000001.html","title": "Sample Brand 40\" Smart Full HD HDR LED TV","brand": "SAMPLE BRAND","price": 199.99,"currency": "GBP","availabilityStatus": "InStock","categories": ["TV & Audio", "Televisions", "TVs"],"ean": "0000000000000","rating": 4.6,"reviewCount": 29,"description": "Sample product description text appears here when details are fetched.","images": ["https://media.currys.biz/i/currysprod/00000000?$l-large$"],"priceValidUntil": "2026-12-31","reviews": [{"rating": 5,"review": "Sample review text goes here.","author": "Sample Author","authorLocation": "GBR","date": "2026-01-01T00:00:00.000Z"}]}
Plan Requirement
This actor runs on any Apify plan. Results and run time scale with how many products you request.
FAQ
How much does it cost?
You pay per result; check the Pricing tab on this actor's Store page for the current rate. Use Max total products to control run size and cost.
Is it legal to scrape currys.co.uk?
This actor collects publicly available data. You are responsible for using the output in line with currys.co.uk's terms, applicable privacy law (such as GDPR or CCPA), and any other regulations that apply to your use case. Avoid collecting personal data unless you have a lawful basis to do so.
Why did a run return fewer results than I expected?
Some searches return fewer than Max total products if the search itself has fewer matching products, or if your price/stock filters removed some results after fetching. Try widening the filters or raising Max pages.
Can I get only new or changed products on a schedule?
Yes. Turn on Incremental changes for scheduled runs and schedule the actor (e.g. daily). The first run returns everything as NEW; every later run returns only NEW, UPDATED, and REAPPEARED products by default, so you're not billed again for products that haven't changed.
Why did my run fail instead of returning an empty dataset?
A failed run usually means the upstream site rejected the connection for that attempt. Run again shortly; most failures are transient.
Can I use it with AI agents or MCP?
Yes. You can call this actor from any MCP-compatible client or agent framework via the Apify API, as shown in "Run it from your code" above.
๐ Want more electronics data?
Pair this actor with these related scrapers from the same team:
| ๐ Appliances Online Scraper Scrape appliancesonline.com.au by category, keyword, or URL. Extract title, brand, AUD... | ๐ท๏ธ Avito.ru Scraper From $1/1K. Scrape structured listings from Avito.ru by region, category, filters, or... |
| ๐ Bic Camera Scraper Scrape Bic Camera (biccamera.com) products: JPY price, list price and discount, Bic Point... | ๐ Boulanger.com Scrape Boulanger (boulanger.com) electronics and home-appliance products: current price... |
| ๐ Casas Bahia Brazil Electronics & Home Goods Scraper Scrape products from Casas Bahia Brazil by keyword, department, or URL. Filter by brand... | ๐ Darty Scraper Scrape Darty (darty.com) products: current price plus strike-through reference price and... |
๐ Browse all abotapi scrapers
๐ฌ Support & custom scrapers
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- โญ Enjoying it? A quick review on the actor page helps other users find it.