Trolley.co.uk Scraper — UK Grocery Price Comparison
Pricing
from $1.20 / 1,000 result scrapeds
Trolley.co.uk Scraper — UK Grocery Price Comparison
Scrape trolley.co.uk cross-retailer grocery price comparisons: one product, prices at Asda, Tesco, Sainsbury's, Morrisons, Waitrose, Iceland and more, side by side. No login, no cookies.
Pricing
from $1.20 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Scrape trolley.co.uk product pages and get one row per product with every UK retailer's current price for that exact item side by side — Asda, Tesco, Sainsbury's, Morrisons, Waitrose, Iceland and more, whichever retailers Trolley has matched to that product. No login, no cookies.
Why use this actor?
Trolley.co.uk already does the hard part: matching the same grocery product across UK supermarkets. This actor turns that matching into structured data — one product, N retailer prices, ready to load into a spreadsheet or pricing dashboard. Useful for CPG pricing teams checking shelf price consistency, price-comparison sites that want a ready-made retailer match instead of building their own, and anyone tracking how a basket of grocery items moves in price across the big UK chains.
How to scrape Trolley.co.uk data
- Enter a Category slug from
trolley.co.uk/explore/{category}, for examplemilks,cheeses,yoghurts,eggsorbries. The actor browses that category's listing pages and follows each product link. - Alternatively, paste specific Product URLs (advanced input) to scrape an exact list of products instead of browsing a category. This overrides Category when set.
- Set Max Results to cap how many products the run returns. Category
pages return 20 products per page, so the actor pages through
/explore/{category}until it has enough or the category runs out. - Run the actor. Each product page contributes one dataset row: the
product's own fields (name, brand, pack size, SKU, rating) plus a
retailersarray with one entry per supermarket that carries it. - Read
lowestPricefor the cheapest price found across all retailers on that product, or sort withinretailersper row to see which chain is cheapest for that specific SKU. - Use
retailerCountto filter out weakly-matched products (a Trolley product page with only one retailer listed is a thinner comparison than one with six).
Input
| Field | Type | Required | Description |
|---|---|---|---|
category | String | No | Trolley.co.uk category slug to browse, e.g. milks, cheeses, yoghurts, eggs, bries. Defaults to milks. Trolley's own /search/ endpoint is robots-disallowed, so discovery goes through category browsing. |
productUrls | Array | No | Direct trolley.co.uk product page URLs to scrape instead of browsing a category, e.g. https://www.trolley.co.uk/product/{slug}/{SKU}. Overrides category when set. |
maxResults | Integer | No | Maximum number of products to return (1–500, default 20). |
proxyConfiguration | Object | No | Proxy settings. Trolley.co.uk has no anti-bot protection at any tier, so a proxy isn't required for the actor to work, but the free Apify automatic pool is used by default for reliability at scale. |
Example input
{"category": "milks","maxResults": 20,"proxyConfiguration": { "useApifyProxy": true }}
Output
Each result is one product with a nested array of per-retailer prices — the core value of a comparison site: many prices for the same item on one row.
| Field | Type | Example |
|---|---|---|
productName | String | "Cravendale Pure Filtered Fresh Semi Skimmed Milk Fresher for Longer (1 Litre)" |
brand | String | "Cravendale" |
packSize | String | "1 Litre" |
sku | String | "MNJ299" |
url | String | Full Trolley product page URL |
scrapedAt | String | ISO 8601 timestamp |
lowestPrice | Number | 1.40 |
currency | String | "GBP" |
rating | Number | 4.7 |
reviewCount | Number | 720 |
imageUrl | String | Product image URL |
category | String | "milks" |
retailerCount | Number | 6 |
retailers | Array | One entry per retailer, see below |
Each entry in retailers:
| Field | Type | Description |
|---|---|---|
name | String | Retailer name, e.g. "Asda", "Tesco", "Waitrose" |
price | Number | Current price at this retailer, in GBP |
originalPrice | Number | Struck-through "was" price, when the retailer shows a discount |
pricePerUnit | String | Unit price, e.g. "£0.14 per 100ml" |
promoText | String | Promotion text, e.g. "£1.40 CLUBCARD" |
outboundUrl | String | Outbound redirect link to the retailer's own product page |
Example output
{"productName": "Cravendale Pure Filtered Fresh Semi Skimmed Milk Fresher for Longer (1 Litre)","brand": "Cravendale","packSize": "1 Litre","sku": "MNJ299","url": "https://www.trolley.co.uk/product/cravendale-filtered-fresh-semi-skimmed-milk-fresher-for-longer/MNJ299","scrapedAt": "2026-08-10T19:49:01.798Z","lowestPrice": 1.40,"currency": "GBP","rating": 4.7,"reviewCount": 720,"imageUrl": "https://www.trolley.co.uk/img/product/MNJ299","category": "milks","retailerCount": 6,"retailers": [{"name": "Waitrose","price": 1.40,"originalPrice": 2.10,"pricePerUnit": "£0.14 per 100ml","promoText": null,"outboundUrl": "https://redirect.trolley.co.uk/open_store.php?i=35606712&p=MNJ299&sp=11"},{"name": "Tesco","price": 1.75,"originalPrice": null,"pricePerUnit": "£0.18 per 100ml","promoText": "£1.40 CLUBCARD","outboundUrl": "https://redirect.trolley.co.uk/open_store.php?i=34250363&p=MNJ299&sp=2"}]}
FAQ
Does this actor scrape the retailer sites (Tesco, Asda, etc.) directly? No. It scrapes trolley.co.uk, which has already matched the same product across retailers and published each one's current price on one page. That matching is Trolley's own work — this actor just turns it into structured data.
Why does one product only show one retailer?
Trolley's own retailer coverage varies per product — not every item is
tracked at every chain. retailerCount tells you how many retailers were
matched for that specific product, so you can filter out thin comparisons.
How is discovery done, since /search/ is disallowed by robots.txt?
The actor browses trolley.co.uk/explore/{category} listing pages instead,
which are not disallowed, and follows each product link found there.
Can I scrape a fixed list of products instead of browsing a category?
Yes, use productUrls with direct Trolley product page links. This
overrides category.
Cost estimate
This actor uses roughly 1-2 requests per returned product (one category listing page shared across ~20 products, plus one product-detail page per result). At standard Apify STANDARD tier pricing, that works out to a fraction of a cent per product for typical runs.
Limitations
- Only products Trolley.co.uk has itself matched across retailers are covered — this actor does not independently discover products at each supermarket.
retailerCountand which retailers appear varies per product and can change as Trolley updates its own matching.- Prices reflect Trolley's most recently indexed price per retailer, which may lag the live price on the retailer's own site by up to a few hours.
- Data is scraped from the public website and may change without notice.
- Trolley.co.uk's Terms of Service state a general restriction on automated
access; this actor only requests publicly served, non-authenticated pages
and does not access the disallowed
/search/endpoint.
Related actors
- Tesco Scraper
- Sainsbury's Scraper
- Asda Scraper
- UK Grocery Price Matrix — barcode-matched price comparison built from our own retailer scrapers directly
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 sources into one feed.
See 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.