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 products, including electronics, home appliances, computers, TVs and gaming. Search by keyword or URL. Extract prices, brands, stock availability, EANs, descriptions, full image galleries and customer reviews. Supports automatic pagination.
Pricing
from $1.20 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
5
Total users
4
Monthly active users
14 days ago
Last modified
Categories
Features
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." |
imageUrl | "https://media.currys.biz/i/currysprod/00000000?$g-small$" |
searchUrl | "https://www.currys.co.uk/search?q=tv" |
images | ["https://media.currys.biz/i/currysprod/00000000?$l-large$"] |
specs | [{"group": "AUDIO", "name": "Audio power", "value": "20 W"}] |
priceValidUntil | "2026-12-31" |
imageUrl is the main product image and is present on every row, including search and category rows. searchUrl is the search or category link the product came from (the product link itself when you paste a product URL). images (the full gallery) and specs (the technical specification table, one entry per row with its group, name and value) need "Visit each product's detail page"; they are also filled when you paste a product link directly, and are empty lists on search and category rows otherwise. Specifications come from the same page, so they add no extra charge.
When "Fetch customer reviews" is on, each product also carries a reviews array (one entry per review: rating, review, author, authorLocation, date, helpfulVotes, verified). Reviews on Currys carry no title or seller reply, so those fields are not returned.
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.
URL mode link shapes. Paste any of these, one or many:
- keyword search, including multi-word, sorted, price-filtered and facet-filtered links (every filter in the link is kept on every page)
- search refinement pages such as a brand or category under a search
- category and sub-category listings, with their own sort, price and page parameters
- department pages (a few of their category links are followed, bounded by Max total products)
- single product pages, as a slug or a numeric id: each becomes one product row
- the bare
currys.co.ukhost (treated aswww)
If you leave the URLs field untouched, URL mode now scrapes one example of each of these shapes instead of nothing; Max total products (default 20) still bounds the run. This changes what an untouched URL mode does: earlier versions had no default list. To scrape only your own links, replace the list. Links that are not currys.co.uk searches, categories, departments or products are skipped with a warning.
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 or are added display fields (rating,reviewCount,reviews,priceValidUntil,scrapedAt,searchUrl,imageUrl,specs) are excluded from change detection by default, so a product isn't flaggedUPDATEDjust because one more review came in. A main-image change (imageUrl) does not mark a productUPDATEDeither; track theimageslist instead if you need that.
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, PriceDesc, or Newest. Sort and the price range are applied by the site across the whole result set. |
urls | Array | one example of each link shape | currys.co.uk links (URL mode): searches, search refinements, categories, department pages, product pages. |
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), added to the defaults listed above. |
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","searchUrl": "https://www.currys.co.uk/search?q=tv","imageUrl": "https://media.currys.biz/i/currysprod/00000000?$g-small$","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$"],"specs": [{ "group": "AUDIO", "name": "Audio power", "value": "20 W" }],"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","helpfulVotes": 0,"verified": true}]}
Plan Requirement
A paid Apify plan is needed for reliable results. Currys blocks plain connections, and the default connection is the Apify proxy, an access tier that Apify free plans do not include. On a free plan, or when that connection is refused for your account, the actor tries a backup connection where some pages may still be unavailable, and if no page loads the run fails with a message pointing to https://apify.com/pricing instead of returning an empty dataset. You can also supply your own proxy URLs in the proxy field. If every link you pass does not exist on the site (not found), the run finishes with a message saying the pages were not found rather than reporting an empty search; if any link was blocked or unreadable and no page loaded, the run fails with the connection message instead.
FAQ
How much does it cost?
Every charge is applied per delivered unit as the run goes, so a run that stops early is billed only for what was already delivered:
- Actor start: one event each time a run starts (the number of start units follows the memory the run uses).
- Dataset item: one event per product row pushed to the dataset.
- Detail enrichment: one event per delivered product that carries fetched detail-page data (only when Fetch details is on).
- Review enrichment: one event per delivered review (only when Fetch reviews is on), capped by Max reviews per product.
Rows suppressed as unchanged in incremental mode, failed fetches and reviews that were not delivered are never billed for detail or review enrichment. Check the Pricing tab on this actor's Store page for the current rates, and use Max total products and Max reviews per product to bound 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:
| ๐ Darty Scraper Scrape Darty (darty.com) products: current price plus strike-through reference price and... | ๐ Dienmayxanh Scraper Scrape dienmayxanh.com home appliances and electronics with full specifications, current... |
| ๐ OTTO.de Scraper Scrape OTTO.de products by search or URL. Extract prices, discounts, variants... | ๐ท๏ธ Mudah.my Cars, Property, Jobs & Marketplace Scraper Scrape Mudah.my listings across every category: cars, motorcycles, property, mobiles... |
| ๐ Bic Camera Scraper Scrape Bic Camera (biccamera.com) products: JPY price, list price and discount, Bic Point... | ๐ Yodobashi Scraper Scrape yodobashi.com electronics and appliances: JPY price, list price and discount... |
๐ Browse all abotapi scrapers
๐ฌ Support
- ๐ 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.
- โญ Enjoying it? A quick review on the actor page helps other users find it.