Compare a category’s products
tesco.category.products.list
Pass a category facet to collect one page of Tesco products. Follow page numbers and keep the same category and sort order.
Compare Tesco shelf prices by pack, then check the product behind each Tesco link or TPNC.
Up to 100 free credits
Choose a category, browse its products or inspect a product you already know.
tesco.category.products.list
Pass a category facet to collect one page of Tesco products. Follow page numbers and keep the same category and sort order.
tesco.product.detail.get
Send a Tesco product link or TPNC to read its price, description and product information where supplied.
tesco.categories.list
Read Tesco’s nested category tree, then reuse the returned facet for the category you want to collect.
This request reads Tesco Pink Lady Apples 5 Pack. Copy it into your script, then replace the product link with one you track.
curl --request POST \
--url https://data.upscrape.com/execute \
--header "Authorization: Bearer $UPSCRAPE_API_KEY" \
--header "Content-Type: application/json" \
--header "Prefer: wait=30" \
--data '{
"capability": "tesco.product.detail.get",
"input": {
"tpnc": "https://www.tesco.com/groceries/en-GB/products/284477542"
}
}'
import json
import os
import requests
payload = json.loads(r'''{
"capability": "tesco.product.detail.get",
"input": {
"tpnc": "https://www.tesco.com/groceries/en-GB/products/284477542"
}
}''')
response = requests.post(
"https://data.upscrape.com/execute",
headers={
"Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}",
"Content-Type": "application/json",
"Prefer": "wait=30",
},
json=payload,
)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`,
"Content-Type": "application/json",
"Prefer": "wait=30",
},
body: JSON.stringify({
"capability": "tesco.product.detail.get",
"input": {
"tpnc": "https://www.tesco.com/groceries/en-GB/products/284477542"
}
}),
});
if (!response.ok) {
throw new Error(`Upscrape request failed: ${response.status}`);
}
console.log(JSON.stringify(await response.json(), null, 2));
The examples show real responses from all three endpoints. Read the table, inspect the JSON or download the data for your report.
{"capability":"tesco.category.products.list","input":{"count":5,"facet":"b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==","page":1,"sort_by":"relevance"}}
5 products from one Fresh Fruit page. Prices are in GBP; retain offer conditions and dates.
| # | Product , Product title as returned by Tesco; keep the pack information when comparing prices. | TPNC , Tesco product number, returned as id in these rows and accepted by the tpnc input. | Pack price (£) , Ordinary pack price in GBP. Keep any promotion separate, with its conditions and dates. | Unit price (£) , GBP per returned unit, such as each or kg. Compare only matching units. | Unit , Unit of measure attached to the unit price. | Offer text , Promotion description where supplied. Check its start and end dates in the JSON before treating it as current. |
|---|---|---|---|---|---|---|
| 1 | Tesco Pink Lady Apples 5 Pack | 284477542 | 2.9 | 0.58 | each | Not returned |
| 2 | Jaffa Easy Peelers 600g | 288135169 | 2.2 | 3.67 | kg | £1.49 Clubcard Price |
| 3 | Parrs Toffee Apples Each | 267479525 | 1.4 | 1.4 | each | £1.00 Clubcard Price |
| 4 | Tesco Blueberries 150G | 287356888 | 2 | 13.33 | kg | Not returned |
| 5 | Tesco Finest Sweet Easy Peelers 600g | 288115395 | 2.5 | 4.17 | kg | Not returned |
{
"items": [
{
"gtin": "00000003249833",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": false,
"reviews": {
"stats": {
"noOfReviews": 193,
"overallRating": 2.9,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "TESCO",
"tpnb": "77091643",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Apples."
],
"id": "284477542",
"baseProductId": "77091643",
"increment": 0,
"maxQuantityAllowed": 99,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"components": [
{
"isLowEverydayPricing": false
}
]
},
"images": {
"display": [
{
"default": {}
}
]
},
"shortDescription": "Apples.",
"averageWeight": 0,
"sellers": {
"results": [
{
"fulfilment": null,
"id": "284477542",
"isForSale": true,
"price": {
"actual": 2.9,
"price": 2.9,
"unitOfMeasure": "each",
"unitPrice": 0.58
},
"promotions": [],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"defaultImage": {
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycyU3Q1BpbmslMjAmJTIwUmVkJTIwQXBwbGVz",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycw==",
"aisleName": "Apples & Pears",
"context": null,
"bulkBuyLimit": 99,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": null,
"title": "Tesco Pink Lady Apples 5 Pack",
"catchWeightList": null,
"tpnc": "284477542",
"shelfName": "Pink & Red Apples",
"superDepartmentName": "Fresh Food"
},
{
"gtin": "00000003260630",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": false,
"reviews": {
"stats": {
"noOfReviews": 401,
"overallRating": 2.4,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "TESCO",
"tpnb": "78922224",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Clementines, Mandarin"
],
"id": "288135169",
"baseProductId": "78922224",
"increment": 0,
"maxQuantityAllowed": 99,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"components": [
{
"isLowEverydayPricing": false
}
]
},
"images": {
"display": [
{
"default": {}
}
]
},
"shortDescription": "Clementines, Mandarin",
"averageWeight": 0,
"sellers": {
"results": [
{
"fulfilment": null,
"id": "288135169",
"isForSale": true,
"price": {
"actual": 2.2,
"price": 2.2,
"unitOfMeasure": "kg",
"unitPrice": 3.67
},
"promotions": [
{
"attributes": [
"CLUBCARD_PRICING"
],
"description": "£1.49 Clubcard Price",
"endDate": "2026-11-03T00:00:00Z",
"id": "102760175",
"price": {
"afterDiscount": 2.2,
"beforeDiscount": null
},
"promotionType": null,
"startDate": "2026-10-05T23:00:00Z",
"unitSellingInfo": "£2.48/kg"
}
],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"defaultImage": {
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0JTdDQ2xlbWVudGluZXMlMjAmJTIwRWFzeSUyMFBlZWxlcnM=",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0",
"aisleName": "Oranges, Lemons & Citrus Fruit",
"context": null,
"bulkBuyLimit": 99,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": null,
"title": "Jaffa Easy Peelers 600g",
"catchWeightList": null,
"tpnc": "288135169",
"shelfName": "Clementines & Easy Peelers",
"superDepartmentName": "Fresh Food"
},
{
"gtin": "05060008092938",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": true,
"reviews": {
"stats": {
"noOfReviews": 39,
"overallRating": 2.9,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "PARRS",
"tpnb": "66759086",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Traditional Toffeee Apple."
],
"id": "267479525",
"baseProductId": "66759086",
"increment": 0,
"maxQuantityAllowed": 6,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"components": [
{
"isLowEverydayPricing": false
}
]
},
"images": {
"display": [
{
"default": {}
}
]
},
"shortDescription": "Traditional Toffeee Apple.",
"averageWeight": 0,
"sellers": {
"results": [
{
"fulfilment": null,
"id": "267479525",
"isForSale": true,
"price": {
"actual": 1.4,
"price": 1.4,
"unitOfMeasure": "each",
"unitPrice": 1.4
},
"promotions": [
{
"attributes": [
"CLUBCARD_PRICING"
],
"description": "£1.00 Clubcard Price",
"endDate": "2026-11-09T00:00:00Z",
"id": "102991341",
"price": {
"afterDiscount": 1.4,
"beforeDiscount": null
},
"promotionType": null,
"startDate": "2026-09-14T23:00:00Z",
"unitSellingInfo": "£1.00/each"
}
],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"defaultImage": {
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycyU3Q1RvZmZlZSUyMEFwcGxlcw==",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycw==",
"aisleName": "Apples & Pears",
"context": null,
"bulkBuyLimit": 6,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": "You have reached the maximum quantity of 6 for this item.",
"title": "Parrs Toffee Apples Each",
"catchWeightList": null,
"tpnc": "267479525",
"shelfName": "Toffee Apples",
"superDepartmentName": "Fresh Food"
},
{
"gtin": "00000003257005",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": false,
"reviews": {
"stats": {
"noOfReviews": 173,
"overallRating": 3.8,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "TESCO",
"tpnb": "78538719",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Blueberries."
],
"id": "287356888",
"baseProductId": "78538719",
"increment": 0,
"maxQuantityAllowed": 16,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"components": [
{
"isLowEverydayPricing": false
}
]
},
"images": {
"display": [
{
"default": {}
}
]
},
"shortDescription": "Blueberries.",
"averageWeight": 0,
"sellers": {
"results": [
{
"fulfilment": null,
"id": "287356888",
"isForSale": true,
"price": {
"actual": 2,
"price": 2,
"unitOfMeasure": "kg",
"unitPrice": 13.33
},
"promotions": [],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"defaultImage": {
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0JlcnJpZXMlMjAmJTIwQ2hlcnJpZXMlN0NCbHVlYmVycmllcw==",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0JlcnJpZXMlMjAmJTIwQ2hlcnJpZXM=",
"aisleName": "Berries & Cherries",
"context": null,
"bulkBuyLimit": 16,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": "You have reached the maximum quantity of 16 for this item.",
"title": "Tesco Blueberries 150G",
"catchWeightList": null,
"tpnc": "287356888",
"shelfName": "Blueberries",
"superDepartmentName": "Fresh Food"
},
{
"gtin": "00000003260531",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": false,
"reviews": {
"stats": {
"noOfReviews": 274,
"overallRating": 2.6,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "TESCO finest",
"tpnb": "78911934",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Clementines, Mandarin."
],
"id": "288115395",
"baseProductId": "78911934",
"increment": 0,
"maxQuantityAllowed": 99,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"components": [
{
"isLowEverydayPricing": false
}
]
},
"images": {
"display": [
{
"default": {}
}
]
},
"shortDescription": "Clementines, Mandarin.",
"averageWeight": 0,
"sellers": {
"results": [
{
"fulfilment": null,
"id": "288115395",
"isForSale": true,
"price": {
"actual": 2.5,
"price": 2.5,
"unitOfMeasure": "kg",
"unitPrice": 4.17
},
"promotions": [],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"defaultImage": {
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0JTdDQ2xlbWVudGluZXMlMjAmJTIwRWFzeSUyMFBlZWxlcnM=",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0",
"aisleName": "Oranges, Lemons & Citrus Fruit",
"context": null,
"bulkBuyLimit": 99,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": null,
"title": "Tesco Finest Sweet Easy Peelers 600g",
"catchWeightList": null,
"tpnc": "288115395",
"shelfName": "Clementines & Easy Peelers",
"superDepartmentName": "Fresh Food"
}
],
"page": {
"count": 5,
"matchType": null,
"offset": 0,
"pageId": null,
"pageNo": 1,
"pageSize": 5,
"query": {
"actualTerm": null,
"queryPhase": "primary",
"searchTerm": null
},
"totalCount": 181
},
"raw": {
"data": {
"category": {
"__typename": "ProductListType",
"facetLists": [
{
"__typename": "ProductListFacetsType",
"category": "Superdepartment",
"categoryId": "superDepartment",
"facets": [
{
"__typename": "FacetType",
"binCount": 280,
"facetId": "Fresh Food",
"facetName": "Fresh Food",
"isSelected": true
}
]
},
{
"__typename": "ProductListFacetsType",
"category": "Department",
"categoryId": "department",
"facets": [
{
"__typename": "FacetType",
"binCount": 280,
"facetId": "Fresh Fruit",
"facetName": "Fresh Fruit",
"isSelected": true
}
]
},
{
"__typename": "ProductListFacetsType",
"category": "Aisle",
"categoryId": "aisle",
"facets": [
{
"__typename": "FacetType",
"binCount": 5,
"facetId": "Bananas",
"facetName": "Bananas",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 47,
"facetId": "Apples & Pears",
"facetName": "Apples & Pears",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 21,
"facetId": "Berries & Cherries",
"facetName": "Berries & Cherries",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 24,
"facetId": "Oranges, Lemons & Citrus Fruit",
"facetName": "Oranges, Lemons & Citrus Fruit",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 19,
"facetId": "Grapes",
"facetName": "Grapes",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 7,
"facetId": "Peaches, Nectarines, Plums & Apricots",
"facetName": "Peaches, Nectarines, Plums & Apricots",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 21,
"facetId": "Melons & Pineapples",
"facetName": "Melons & Pineapples",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 21,
"facetId": "Mango, Kiwi & Exotic Fruit",
"facetName": "Mango, Kiwi & Exotic Fruit",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 1,
"facetId": "Rhubarb",
"facetName": "Rhubarb",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 89,
"facetId": "Fruit Pots, Platters & Packs",
"facetName": "Fruit Pots, Platters & Packs",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 14,
"facetId": "Organic Fruit & Nuts",
"facetName": "Organic Fruit & Nuts",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 11,
"facetId": "Finest Fresh Fruit",
"facetName": "Finest Fresh Fruit",
"isSelected": false
}
]
},
{
"__typename": "ProductListFacetsType",
"category": "Brand",
"categoryId": "brands",
"facets": [
{
"__typename": "FacetType",
"binCount": 121,
"facetId": "TESCO",
"facetName": "TESCO",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 14,
"facetId": "TESCO ORGANIC",
"facetName": "TESCO ORGANIC",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 13,
"facetId": "TESCO finest",
"facetName": "TESCO finest",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 7,
"facetId": "Jaffa",
"facetName": "Jaffa",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 7,
"facetId": "ROSEDENE FARMS",
"facetName": "ROSEDENE FARMS",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 6,
"facetId": "SUNTRAIL FARMS",
"facetName": "SUNTRAIL FARMS",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 5,
"facetId": "PARRS",
"facetName": "PARRS",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 3,
"facetId": "Zespri",
"facetName": "Zespri",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 2,
"facetId": "COTTON CANDY",
"facetName": "COTTON CANDY",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 1,
"facetId": "FARMS RANGE",
"facetName": "FARMS RANGE",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 1,
"facetId": "GROWER'S HARVEST",
"facetName": "GROWER'S HARVEST",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 1,
"facetId": "NERGi",
"facetName": "NERGi",
"isSelected": false
}
]
},
{
"__typename": "ProductListFacetsType",
"category": "Dietary",
"categoryId": "dietaries",
"facets": [
{
"__typename": "FacetType",
"binCount": 170,
"facetId": "Low salt",
"facetName": "Low salt",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 161,
"facetId": "Low fat",
"facetName": "Low fat",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 161,
"facetId": "Low saturated fat",
"facetName": "Low saturated fat",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 161,
"facetId": "Vegetarian",
"facetName": "Vegetarian",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 155,
"facetId": "1 of 5 a day",
"facetName": "1 of 5 a day",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 153,
"facetId": "Vegan",
"facetName": "Vegan",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 152,
"facetId": "No celery",
"facetName": "No celery",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 152,
"facetId": "No crustacea",
"facetName": "No crustacea",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 152,
"facetId": "No fish",
"facetName": "No fish",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 152,
"facetId": "No lupin",
"facetName": "No lupin",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 152,
"facetId": "No mollusc",
"facetName": "No mollusc",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 152,
"facetId": "No mustard",
"facetName": "No mustard",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 151,
"facetId": "No sulphites",
"facetName": "No sulphites",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 149,
"facetId": "Halal",
"facetName": "Halal",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 148,
"facetId": "No egg",
"facetName": "No egg",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 146,
"facetId": "No gluten",
"facetName": "No gluten",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 146,
"facetId": "No soya",
"facetName": "No soya",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 145,
"facetId": "No artificial colours and flavours",
"facetName": "No artificial colours and flavours",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 144,
"facetId": "No additives",
"facetName": "No additives",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 144,
"facetId": "No artificial preservatives",
"facetName": "No artificial preservatives",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 144,
"facetId": "No lactose",
"facetName": "No lactose",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 144,
"facetId": "No milk",
"facetName": "No milk",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 144,
"facetId": "No nuts and peanuts",
"facetName": "No nuts and peanuts",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 144,
"facetId": "No sesame",
"facetName": "No sesame",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 136,
"facetId": "Source of fibre",
"facetName": "Source of fibre",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 75,
"facetId": "High fibre",
"facetName": "High fibre",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 51,
"facetId": "Low calorie",
"facetName": "Low calorie",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 20,
"facetId": "Low sugar",
"facetName": "Low sugar",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 18,
"facetId": "Source of protein",
"facetName": "Source of protein",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 15,
"facetId": "Organic",
"facetName": "Organic",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 7,
"facetId": "High protein",
"facetName": "High protein",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 1,
"facetId": "No added sugars",
"facetName": "No added sugars",
"isSelected": false
}
]
},
{
"__typename": "ProductListFacetsType",
"category": "Product Source",
"categoryId": "productSource",
"facets": [
{
"__typename": "FacetType",
"binCount": 181,
"facetId": "Ghs",
"facetName": "Ghs",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 0,
"facetId": "MarketplaceOnly",
"facetName": "MarketplaceOnly",
"isSelected": false
},
{
"__typename": "FacetType",
"binCount": 181,
"facetId": "GhsAndMarketplace",
"facetName": "GhsAndMarketplace",
"isSelected": true
}
]
},
{
"__typename": "ProductListFacetsType",
"category": "Promotion",
"categoryId": "offers",
"facets": [
{
"__typename": "FacetType",
"binCount": 40,
"facetId": "offers",
"facetName": "Special Offers",
"isSelected": false
}
]
},
{
"__typename": "ProductListFacetsType",
"category": "New",
"categoryId": "new",
"facets": [
{
"__typename": "FacetType",
"binCount": 20,
"facetId": "new",
"facetName": "New",
"isSelected": false
}
]
}
],
"facets": null,
"options": {
"__typename": "ListOptionsType",
"sortBy": [
"relevance",
"price-ascending",
"price-descending"
]
},
"pageInformation": {
"__typename": "ListInfoType",
"count": 5,
"matchType": null,
"offset": 0,
"pageId": null,
"pageNo": 1,
"pageSize": 5,
"query": {
"__typename": "QueryType",
"actualTerm": null,
"queryPhase": "primary",
"searchTerm": null
},
"totalCount": 181
},
"results": [
{
"__typename": "CompositeResultType",
"node": {
"gtin": "00000003249833",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": false,
"reviews": {
"__typename": "ReviewsType",
"stats": {
"__typename": "ReviewStatsType",
"noOfReviews": 193,
"overallRating": 2.9,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "TESCO",
"tpnb": "77091643",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Apples."
],
"id": "284477542",
"baseProductId": "77091643",
"increment": 0,
"maxQuantityAllowed": 99,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"__typename": "ProductDetailsType",
"components": [
{
"__typename": "AdditionalInfo",
"isLowEverydayPricing": false
}
]
},
"images": {
"__typename": "ProductImagesType",
"display": [
{
"__typename": "ProductAlternativeImageType",
"default": {
"__typename": "ProductImageType"
}
}
]
},
"shortDescription": "Apples.",
"averageWeight": 0,
"sellers": {
"__typename": "ProductSellers",
"results": [
{
"__typename": "ProductType",
"fulfilment": null,
"id": "284477542",
"isForSale": true,
"price": {
"__typename": "PriceType",
"actual": 2.9,
"price": 2.9,
"unitOfMeasure": "each",
"unitPrice": 0.58
},
"promotions": [],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"__typename": "ProductMediaType",
"defaultImage": {
"__typename": "ProductMediaDefaultImageType",
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycyU3Q1BpbmslMjAmJTIwUmVkJTIwQXBwbGVz",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycw==",
"__typename": "ProductType",
"aisleName": "Apples & Pears",
"context": null,
"bulkBuyLimit": 99,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": null,
"title": "Tesco Pink Lady Apples 5 Pack",
"catchWeightList": null,
"tpnc": "284477542",
"shelfName": "Pink & Red Apples",
"superDepartmentName": "Fresh Food"
}
},
{
"__typename": "CompositeResultType",
"node": {
"gtin": "00000003260630",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": false,
"reviews": {
"__typename": "ReviewsType",
"stats": {
"__typename": "ReviewStatsType",
"noOfReviews": 401,
"overallRating": 2.4,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "TESCO",
"tpnb": "78922224",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Clementines, Mandarin"
],
"id": "288135169",
"baseProductId": "78922224",
"increment": 0,
"maxQuantityAllowed": 99,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"__typename": "ProductDetailsType",
"components": [
{
"__typename": "AdditionalInfo",
"isLowEverydayPricing": false
}
]
},
"images": {
"__typename": "ProductImagesType",
"display": [
{
"__typename": "ProductAlternativeImageType",
"default": {
"__typename": "ProductImageType"
}
}
]
},
"shortDescription": "Clementines, Mandarin",
"averageWeight": 0,
"sellers": {
"__typename": "ProductSellers",
"results": [
{
"__typename": "ProductType",
"fulfilment": null,
"id": "288135169",
"isForSale": true,
"price": {
"__typename": "PriceType",
"actual": 2.2,
"price": 2.2,
"unitOfMeasure": "kg",
"unitPrice": 3.67
},
"promotions": [
{
"__typename": "PromotionType",
"attributes": [
"CLUBCARD_PRICING"
],
"description": "£1.49 Clubcard Price",
"endDate": "2026-11-03T00:00:00Z",
"id": "102760175",
"price": {
"__typename": "PromotionPriceType",
"afterDiscount": 2.2,
"beforeDiscount": null
},
"promotionType": null,
"startDate": "2026-10-05T23:00:00Z",
"unitSellingInfo": "£2.48/kg"
}
],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"__typename": "ProductMediaType",
"defaultImage": {
"__typename": "ProductMediaDefaultImageType",
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0JTdDQ2xlbWVudGluZXMlMjAmJTIwRWFzeSUyMFBlZWxlcnM=",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0",
"__typename": "ProductType",
"aisleName": "Oranges, Lemons & Citrus Fruit",
"context": null,
"bulkBuyLimit": 99,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": null,
"title": "Jaffa Easy Peelers 600g",
"catchWeightList": null,
"tpnc": "288135169",
"shelfName": "Clementines & Easy Peelers",
"superDepartmentName": "Fresh Food"
}
},
{
"__typename": "CompositeResultType",
"node": {
"gtin": "05060008092938",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": true,
"reviews": {
"__typename": "ReviewsType",
"stats": {
"__typename": "ReviewStatsType",
"noOfReviews": 39,
"overallRating": 2.9,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "PARRS",
"tpnb": "66759086",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Traditional Toffeee Apple."
],
"id": "267479525",
"baseProductId": "66759086",
"increment": 0,
"maxQuantityAllowed": 6,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"__typename": "ProductDetailsType",
"components": [
{
"__typename": "AdditionalInfo",
"isLowEverydayPricing": false
}
]
},
"images": {
"__typename": "ProductImagesType",
"display": [
{
"__typename": "ProductAlternativeImageType",
"default": {
"__typename": "ProductImageType"
}
}
]
},
"shortDescription": "Traditional Toffeee Apple.",
"averageWeight": 0,
"sellers": {
"__typename": "ProductSellers",
"results": [
{
"__typename": "ProductType",
"fulfilment": null,
"id": "267479525",
"isForSale": true,
"price": {
"__typename": "PriceType",
"actual": 1.4,
"price": 1.4,
"unitOfMeasure": "each",
"unitPrice": 1.4
},
"promotions": [
{
"__typename": "PromotionType",
"attributes": [
"CLUBCARD_PRICING"
],
"description": "£1.00 Clubcard Price",
"endDate": "2026-11-09T00:00:00Z",
"id": "102991341",
"price": {
"__typename": "PromotionPriceType",
"afterDiscount": 1.4,
"beforeDiscount": null
},
"promotionType": null,
"startDate": "2026-09-14T23:00:00Z",
"unitSellingInfo": "£1.00/each"
}
],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"__typename": "ProductMediaType",
"defaultImage": {
"__typename": "ProductMediaDefaultImageType",
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycyU3Q1RvZmZlZSUyMEFwcGxlcw==",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycw==",
"__typename": "ProductType",
"aisleName": "Apples & Pears",
"context": null,
"bulkBuyLimit": 6,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": "You have reached the maximum quantity of 6 for this item.",
"title": "Parrs Toffee Apples Each",
"catchWeightList": null,
"tpnc": "267479525",
"shelfName": "Toffee Apples",
"superDepartmentName": "Fresh Food"
}
},
{
"__typename": "CompositeResultType",
"node": {
"gtin": "00000003257005",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": false,
"reviews": {
"__typename": "ReviewsType",
"stats": {
"__typename": "ReviewStatsType",
"noOfReviews": 173,
"overallRating": 3.8,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "TESCO",
"tpnb": "78538719",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Blueberries."
],
"id": "287356888",
"baseProductId": "78538719",
"increment": 0,
"maxQuantityAllowed": 16,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"__typename": "ProductDetailsType",
"components": [
{
"__typename": "AdditionalInfo",
"isLowEverydayPricing": false
}
]
},
"images": {
"__typename": "ProductImagesType",
"display": [
{
"__typename": "ProductAlternativeImageType",
"default": {
"__typename": "ProductImageType"
}
}
]
},
"shortDescription": "Blueberries.",
"averageWeight": 0,
"sellers": {
"__typename": "ProductSellers",
"results": [
{
"__typename": "ProductType",
"fulfilment": null,
"id": "287356888",
"isForSale": true,
"price": {
"__typename": "PriceType",
"actual": 2,
"price": 2,
"unitOfMeasure": "kg",
"unitPrice": 13.33
},
"promotions": [],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"__typename": "ProductMediaType",
"defaultImage": {
"__typename": "ProductMediaDefaultImageType",
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0JlcnJpZXMlMjAmJTIwQ2hlcnJpZXMlN0NCbHVlYmVycmllcw==",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0JlcnJpZXMlMjAmJTIwQ2hlcnJpZXM=",
"__typename": "ProductType",
"aisleName": "Berries & Cherries",
"context": null,
"bulkBuyLimit": 16,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": "You have reached the maximum quantity of 16 for this item.",
"title": "Tesco Blueberries 150G",
"catchWeightList": null,
"tpnc": "287356888",
"shelfName": "Blueberries",
"superDepartmentName": "Fresh Food"
}
},
{
"__typename": "CompositeResultType",
"node": {
"gtin": "00000003260531",
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"adId": null,
"isRestrictedOrderAmendment": null,
"isNew": false,
"reviews": {
"__typename": "ReviewsType",
"stats": {
"__typename": "ReviewStatsType",
"noOfReviews": 274,
"overallRating": 2.6,
"overallRatingRange": 5
}
},
"isInFavourites": null,
"typename": "ProductType",
"brandName": "TESCO finest",
"tpnb": "78911934",
"minWeight": 0,
"modelMetadata": null,
"description": [
"Clementines, Mandarin."
],
"id": "288115395",
"baseProductId": "78911934",
"increment": 0,
"maxQuantityAllowed": 99,
"timeRestrictedDelivery": null,
"restrictions": [],
"details": {
"__typename": "ProductDetailsType",
"components": [
{
"__typename": "AdditionalInfo",
"isLowEverydayPricing": false
}
]
},
"images": {
"__typename": "ProductImagesType",
"display": [
{
"__typename": "ProductAlternativeImageType",
"default": {
"__typename": "ProductImageType"
}
}
]
},
"shortDescription": "Clementines, Mandarin.",
"averageWeight": 0,
"sellers": {
"__typename": "ProductSellers",
"results": [
{
"__typename": "ProductType",
"fulfilment": null,
"id": "288115395",
"isForSale": true,
"price": {
"__typename": "PriceType",
"actual": 2.5,
"price": 2.5,
"unitOfMeasure": "kg",
"unitPrice": 4.17
},
"promotions": [],
"seller": null,
"status": "AvailableForSale"
}
]
},
"displayType": "Quantity",
"restrictedDelivery": null,
"quantityInBasket": null,
"bulkBuyLimitGroupId": null,
"media": {
"__typename": "ProductMediaType",
"defaultImage": {
"__typename": "ProductMediaDefaultImageType",
"aspectRatio": 1
}
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0JTdDQ2xlbWVudGluZXMlMjAmJTIwRWFzeSUyMFBlZWxlcnM=",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": 0,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0",
"__typename": "ProductType",
"aisleName": "Oranges, Lemons & Citrus Fruit",
"context": null,
"bulkBuyLimit": 99,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": null,
"title": "Tesco Finest Sweet Easy Peelers 600g",
"catchWeightList": null,
"tpnc": "288115395",
"shelfName": "Clementines & Easy Peelers",
"superDepartmentName": "Fresh Food"
}
}
]
}
},
"status": 200
},
"total_count": 181
}
{"capability":"tesco.product.detail.get","input":{"tpnc":"https://www.tesco.com/groceries/en-GB/products/284477542"}}
Individual reviews and contact/address fields are omitted from this public example.
| # | Product , Product title as returned by Tesco; keep the pack information when comparing prices. | TPNC , Tesco product number, returned as id in these rows and accepted by the tpnc input. | Brand , Brand name supplied by Tesco. | GTIN , Product barcode as text; preserve its leading zeros. | Pack price (£) , Ordinary pack price in GBP. Keep any promotion separate, with its conditions and dates. | Unit price (£) , GBP per returned unit, such as each or kg. Compare only matching units. | Unit , Unit of measure attached to the unit price. |
|---|---|---|---|---|---|---|---|
| 1 | Tesco Pink Lady Apples 5 Pack | 284477542 | TESCO | 00000003249833 | 2.9 | 0.58 | each |
{
"product": {
"foodIcons": [],
"gtin": "00000003249833",
"icons": [],
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"seller": null,
"charges": [],
"isRestrictedOrderAmendment": null,
"promotions": [],
"isNew": false,
"reviews": {
"info": {
"count": 10,
"offset": 0,
"page": 1,
"total": 193
},
"stats": {
"noOfReviews": 193,
"overallRating": 2.9,
"ratingsDistribution": [
{
"name": "1.0",
"value": "62"
},
{
"name": "2.0",
"value": "36"
},
{
"name": "3.0",
"value": "20"
},
{
"name": "4.0",
"value": "16"
},
{
"name": "5.0",
"value": "59"
}
]
}
},
"isInFavourites": null,
"brandName": "TESCO",
"tpnb": "77091643",
"minWeight": null,
"status": "AvailableForSale",
"description": [
"Apples."
],
"id": "284477542",
"multiPackDetails": null,
"baseProductId": "77091643",
"depositAmount": null,
"restrictions": [],
"price": {
"actual": 2.9,
"unitOfMeasure": "each",
"unitPrice": 0.58
},
"details": {
"originInformation": [
{
"title": "Produce of",
"value": "Produce of Argentina, Australia, Chile, Spain, France, United Kingdom, Italy, New Zealand, USA, South Africa"
}
],
"packSize": [
{
"units": "SNGL",
"value": null
}
],
"boxContents": null,
"features": null,
"numberOfUses": "Variable Servings",
"upperAgeLimit": null,
"guidelineDailyAmount": {
"dailyAmounts": [
{
"name": "Energy",
"percent": "4",
"rating": "-",
"value": "313kJ 74kcal"
},
{
"name": "Fat",
"percent": "1",
"rating": "LOW",
"value": "0.7g"
},
{
"name": "Saturates",
"percent": "1",
"rating": "LOW",
"value": "0.2g"
},
{
"name": "Sugars",
"percent": "17",
"rating": "MEDIUM",
"value": "15.4g"
},
{
"name": "Salt",
"percent": "<1",
"rating": "LOW",
"value": "<0.01g"
}
],
"title": "One typical apple"
},
"manufacturerMarketing": null,
"ingredients": [
"Apple"
],
"specifications": [],
"alcoholInfo": null,
"drainedWeight": null,
"otherInformation": null,
"otherNutritionInformation": null,
"netContents": "Minimum 5",
"recyclingInfo": null,
"additives": null,
"safetyWarning": null,
"preparationAndUsage": [
"<p>Wash before use.</p>"
],
"healthmark": null,
"components": [
{
"isLowEverydayPricing": false,
"isLowPricePromise": false
}
],
"nutritionalClaims": null,
"brandMarketing": null,
"storage": null,
"cookingInstructions": {
"cookingGuidelines": [],
"cookingMethods": [],
"cookingPrecautions": [],
"microwave": {
"chilled": {
"detail": null,
"instructions": []
},
"frozen": {
"detail": null,
"instructions": []
}
},
"otherInstructions": [],
"oven": {
"chilled": {
"instructions": [],
"temperature": null,
"time": null
},
"frozen": {
"instructions": [],
"temperature": null,
"time": null
}
}
},
"freezingInstructions": null,
"directions": null,
"nutritionInfo": [
{
"name": "Typical Values",
"perComp": "100g contains",
"perServing": "A serving contains",
"referenceIntake": "%RI*",
"referencePercentage": "RI*"
},
{
"name": "Energy",
"perComp": "236kJ / 56kcal",
"perServing": "313kJ / 74kcal",
"referenceIntake": "4%",
"referencePercentage": "8400kJ / 2000kcal"
},
{
"name": "Fat",
"perComp": "0.5g",
"perServing": "0.7g",
"referenceIntake": "1%",
"referencePercentage": "70g"
},
{
"name": "Saturates",
"perComp": "0.2g",
"perServing": "0.2g",
"referenceIntake": "1%",
"referencePercentage": "20g"
},
{
"name": "Carbohydrate",
"perComp": "11.6g",
"perServing": "15.4g",
"referenceIntake": "6%",
"referencePercentage": "260g"
},
{
"name": "Sugars",
"perComp": "11.6g",
"perServing": "15.4g",
"referenceIntake": "17%",
"referencePercentage": "90g"
},
{
"name": "Fibre",
"perComp": "1.2g",
"perServing": "1.6g",
"referenceIntake": "",
"referencePercentage": ""
},
{
"name": "Protein",
"perComp": "0.6g",
"perServing": "0.8g",
"referenceIntake": "2%",
"referencePercentage": "50g"
},
{
"name": "Salt",
"perComp": "<0.01g",
"perServing": "<0.01g",
"referenceIntake": "<1%",
"referencePercentage": "6g"
},
{
"name": "* Reference intake of an average adult (8400 kJ / 2000 kcal)",
"perComp": "-",
"perServing": "-",
"referenceIntake": "-",
"referencePercentage": "-"
},
{
"name": "As sold",
"perComp": "-",
"perServing": "-",
"referenceIntake": "-",
"referencePercentage": "-"
}
],
"warnings": null,
"productMarketing": [
"Sweet & Sparkling Hand picked and grown longer for their pink blush and distinctive fizz At Tesco we believe in the importance of expertly selecting our seasonal produce for its freshness and quality. All our Pink Lady ® apples come from trusted growers around the world. A longer growing season with warm days and cool nights means our Pink Lady apples spend more time in the sun to give them their distinctive pink blush and fizzy flavour."
],
"preparationGuidelines": null,
"energyEfficiency": {
"class": null,
"energyClassUrl": null,
"productInfoDoc": null
},
"allergenInfo": null,
"healthClaims": null,
"hazardInfo": null,
"dosage": null,
"legalLabelling": [],
"lowerAgeLimit": null,
"nappyInfo": null,
"clothingInfo": null
},
"images": {
"display": [
{
"default": {},
"zoom": {}
}
]
},
"averageWeight": null,
"sellers": {
"results": [
{
"id": "284477542",
"isForSale": true,
"price": {
"actual": 2.9,
"unitOfMeasure": "each",
"unitPrice": 0.58
},
"promotions": [],
"returnDetails": null,
"seller": null,
"status": "AvailableForSale",
"unavailabilityReasons": null
}
],
"totalCount": 1
},
"displayType": "Quantity",
"bulkBuyLimitGroupId": null,
"media": {
"defaultImage": {
"aspectRatio": 1
},
"videos": []
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycyU3Q1BpbmslMjAmJTIwUmVkJTIwQXBwbGVz",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": null,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycw==",
"aisleName": "Apples & Pears",
"shelfLife": null,
"bulkBuyLimit": 99,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": null,
"title": "Tesco Pink Lady Apples 5 Pack",
"catchWeightList": null,
"tpnc": "284477542",
"isForSale": true,
"shelfName": "Pink & Red Apples",
"superDepartmentName": "Fresh Food"
},
"raw": {
"data": {
"product": {
"foodIcons": [],
"gtin": "00000003249833",
"icons": [],
"departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
"departmentName": "Fresh Fruit",
"seller": null,
"charges": [],
"isRestrictedOrderAmendment": null,
"promotions": [],
"isNew": false,
"reviews": {
"__typename": "ReviewsType",
"info": {
"__typename": "ListInfoType",
"count": 10,
"offset": 0,
"page": 1,
"total": 193
},
"stats": {
"__typename": "ReviewStatsType",
"noOfReviews": 193,
"overallRating": 2.9,
"ratingsDistribution": [
{
"__typename": "NameValuePairType",
"name": "1.0",
"value": "62"
},
{
"__typename": "NameValuePairType",
"name": "2.0",
"value": "36"
},
{
"__typename": "NameValuePairType",
"name": "3.0",
"value": "20"
},
{
"__typename": "NameValuePairType",
"name": "4.0",
"value": "16"
},
{
"__typename": "NameValuePairType",
"name": "5.0",
"value": "59"
}
]
}
},
"isInFavourites": null,
"brandName": "TESCO",
"tpnb": "77091643",
"minWeight": null,
"status": "AvailableForSale",
"description": [
"Apples."
],
"id": "284477542",
"multiPackDetails": null,
"baseProductId": "77091643",
"depositAmount": null,
"restrictions": [],
"price": {
"__typename": "PriceType",
"actual": 2.9,
"unitOfMeasure": "each",
"unitPrice": 0.58
},
"details": {
"originInformation": [
{
"__typename": "OriginInformationType",
"title": "Produce of",
"value": "Produce of Argentina, Australia, Chile, Spain, France, United Kingdom, Italy, New Zealand, USA, South Africa"
}
],
"packSize": [
{
"__typename": "PackSizeType",
"units": "SNGL",
"value": null
}
],
"boxContents": null,
"features": null,
"numberOfUses": "Variable Servings",
"upperAgeLimit": null,
"guidelineDailyAmount": {
"__typename": "GuidelineDailyAmountType",
"dailyAmounts": [
{
"__typename": "GuidelineDailyAmountItemType",
"name": "Energy",
"percent": "4",
"rating": "-",
"value": "313kJ 74kcal"
},
{
"__typename": "GuidelineDailyAmountItemType",
"name": "Fat",
"percent": "1",
"rating": "LOW",
"value": "0.7g"
},
{
"__typename": "GuidelineDailyAmountItemType",
"name": "Saturates",
"percent": "1",
"rating": "LOW",
"value": "0.2g"
},
{
"__typename": "GuidelineDailyAmountItemType",
"name": "Sugars",
"percent": "17",
"rating": "MEDIUM",
"value": "15.4g"
},
{
"__typename": "GuidelineDailyAmountItemType",
"name": "Salt",
"percent": "<1",
"rating": "LOW",
"value": "<0.01g"
}
],
"title": "One typical apple"
},
"manufacturerMarketing": null,
"ingredients": [
"Apple"
],
"specifications": [],
"alcoholInfo": null,
"drainedWeight": null,
"otherInformation": null,
"otherNutritionInformation": null,
"netContents": "Minimum 5",
"recyclingInfo": null,
"additives": null,
"safetyWarning": null,
"preparationAndUsage": [
"<p>Wash before use.</p>"
],
"healthmark": null,
"components": [
{
"__typename": "AdditionalInfo",
"isLowEverydayPricing": false,
"isLowPricePromise": false
}
],
"nutritionalClaims": null,
"brandMarketing": null,
"storage": null,
"cookingInstructions": {
"__typename": "CookingInstructionsType",
"cookingGuidelines": [],
"cookingMethods": [],
"cookingPrecautions": [],
"microwave": {
"__typename": "MicrowaveCookingInstructionType",
"chilled": {
"__typename": "MicrowaveCookingInstructionDetailType",
"detail": null,
"instructions": []
},
"frozen": {
"__typename": "MicrowaveCookingInstructionDetailType",
"detail": null,
"instructions": []
}
},
"otherInstructions": [],
"oven": {
"__typename": "OvenCookingInstructionType",
"chilled": {
"__typename": "OvenCookingInstructionDetailType",
"instructions": [],
"temperature": null,
"time": null
},
"frozen": {
"__typename": "OvenCookingInstructionDetailType",
"instructions": [],
"temperature": null,
"time": null
}
}
},
"freezingInstructions": null,
"directions": null,
"nutritionInfo": [
{
"__typename": "NutritionalInfoItemType",
"name": "Typical Values",
"perComp": "100g contains",
"perServing": "A serving contains",
"referenceIntake": "%RI*",
"referencePercentage": "RI*"
},
{
"__typename": "NutritionalInfoItemType",
"name": "Energy",
"perComp": "236kJ / 56kcal",
"perServing": "313kJ / 74kcal",
"referenceIntake": "4%",
"referencePercentage": "8400kJ / 2000kcal"
},
{
"__typename": "NutritionalInfoItemType",
"name": "Fat",
"perComp": "0.5g",
"perServing": "0.7g",
"referenceIntake": "1%",
"referencePercentage": "70g"
},
{
"__typename": "NutritionalInfoItemType",
"name": "Saturates",
"perComp": "0.2g",
"perServing": "0.2g",
"referenceIntake": "1%",
"referencePercentage": "20g"
},
{
"__typename": "NutritionalInfoItemType",
"name": "Carbohydrate",
"perComp": "11.6g",
"perServing": "15.4g",
"referenceIntake": "6%",
"referencePercentage": "260g"
},
{
"__typename": "NutritionalInfoItemType",
"name": "Sugars",
"perComp": "11.6g",
"perServing": "15.4g",
"referenceIntake": "17%",
"referencePercentage": "90g"
},
{
"__typename": "NutritionalInfoItemType",
"name": "Fibre",
"perComp": "1.2g",
"perServing": "1.6g",
"referenceIntake": "",
"referencePercentage": ""
},
{
"__typename": "NutritionalInfoItemType",
"name": "Protein",
"perComp": "0.6g",
"perServing": "0.8g",
"referenceIntake": "2%",
"referencePercentage": "50g"
},
{
"__typename": "NutritionalInfoItemType",
"name": "Salt",
"perComp": "<0.01g",
"perServing": "<0.01g",
"referenceIntake": "<1%",
"referencePercentage": "6g"
},
{
"__typename": "NutritionalInfoItemType",
"name": "* Reference intake of an average adult (8400 kJ / 2000 kcal)",
"perComp": "-",
"perServing": "-",
"referenceIntake": "-",
"referencePercentage": "-"
},
{
"__typename": "NutritionalInfoItemType",
"name": "As sold",
"perComp": "-",
"perServing": "-",
"referenceIntake": "-",
"referencePercentage": "-"
}
],
"__typename": "ProductDetailsType",
"warnings": null,
"productMarketing": [
"Sweet & Sparkling Hand picked and grown longer for their pink blush and distinctive fizz At Tesco we believe in the importance of expertly selecting our seasonal produce for its freshness and quality. All our Pink Lady ® apples come from trusted growers around the world. A longer growing season with warm days and cool nights means our Pink Lady apples spend more time in the sun to give them their distinctive pink blush and fizzy flavour."
],
"preparationGuidelines": null,
"energyEfficiency": {
"__typename": "EnergyEfficiencyType",
"class": null,
"energyClassUrl": null,
"productInfoDoc": null
},
"allergenInfo": null,
"healthClaims": null,
"hazardInfo": null,
"dosage": null,
"legalLabelling": [],
"lowerAgeLimit": null,
"nappyInfo": null,
"clothingInfo": null
},
"images": {
"__typename": "ProductImagesType",
"display": [
{
"__typename": "ProductAlternativeImageType",
"default": {
"__typename": "ProductImageType"
},
"zoom": {
"__typename": "ProductImageType"
}
}
]
},
"averageWeight": null,
"sellers": {
"__typename": "ProductSellers",
"results": [
{
"__typename": "ProductType",
"id": "284477542",
"isForSale": true,
"price": {
"__typename": "PriceType",
"actual": 2.9,
"unitOfMeasure": "each",
"unitPrice": 0.58
},
"promotions": [],
"returnDetails": null,
"seller": null,
"status": "AvailableForSale",
"unavailabilityReasons": null
}
],
"totalCount": 1
},
"displayType": "Quantity",
"bulkBuyLimitGroupId": null,
"media": {
"__typename": "ProductMediaType",
"defaultImage": {
"__typename": "ProductMediaDefaultImageType",
"aspectRatio": 1
},
"videos": []
},
"shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycyU3Q1BpbmslMjAmJTIwUmVkJTIwQXBwbGVz",
"superDepartmentId": "b;RnJlc2glMjBGb29k",
"maxWeight": null,
"aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycw==",
"__typename": "ProductType",
"aisleName": "Apples & Pears",
"shelfLife": null,
"bulkBuyLimit": 99,
"groupBulkBuyLimit": 0,
"productType": "SingleProduct",
"bulkBuyLimitMessage": null,
"title": "Tesco Pink Lady Apples 5 Pack",
"catchWeightList": null,
"tpnc": "284477542",
"isForSale": true,
"shelfName": "Pink & Red Apples",
"superDepartmentName": "Fresh Food"
}
},
"status": 200
}
}
{"capability":"tesco.categories.list","input":{}}
The table shows root categories; the JSON includes the complete nested tree. Use a category’s catId as the facet input.
| # | Category , Category name in Tesco’s hierarchy. | Facet , Returned catId to pass unchanged as facet to the category-products endpoint. | Child categories , Number of immediate child categories. The complete nested tree is in the JSON. |
|---|---|---|---|
| 1 | Clothing & Accessories | b;Q2xvdGhpbmclMjAmJTIwQWNjZXNzb3JpZXM= | 11 |
| 2 | Halloween | b;SGFsbG93ZWVu | 8 |
| 3 | Christmas | b;Q2hyaXN0bWFz | 12 |
| 4 | Tesco Finest | b;VGVzY28lMjBGaW5lc3Q= | 7 |
| 5 | Marketplace | b;TWFya2V0cGxhY2U= | 19 |
| 6 | Fresh Food | b;RnJlc2glMjBGb29k | 23 |
| 7 | Bakery | b;QmFrZXJ5 | 17 |
| 8 | Frozen Food | b;RnJvemVuJTIwRm9vZA== | 19 |
| 9 | Treats & Snacks | b;VHJlYXRzJTIwJiUyMFNuYWNrcw== | 13 |
| 10 | Food Cupboard | b;Rm9vZCUyMEN1cGJvYXJk | 19 |
| 11 | Drinks | b;RHJpbmtz | 22 |
| 12 | Baby & Toddler | b;QmFieSUyMCYlMjBUb2RkbGVy | 17 |
| 13 | Health & Beauty | b;SGVhbHRoJTIwJiUyMEJlYXV0eQ== | 19 |
| 14 | Pets | b;UGV0cw== | 5 |
| 15 | Household | b;SG91c2Vob2xk | 14 |
| 16 | Home & Furniture | b;SG9tZSUyMCYlMjBGdXJuaXR1cmU= | 14 |
| 17 | Garden, DIY & Car Care | b;R2FyZGVuLCUyMERJWSUyMCYlMjBDYXIlMjBDYXJl | 13 |
| 18 | Electronics & Gaming | b;RWxlY3Ryb25pY3MlMjAmJTIwR2FtaW5n | 16 |
| 19 | Toys & Games | b;VG95cyUyMCYlMjBHYW1lcw== | 15 |
| 20 | Parties & Seasonal | b;UGFydGllcyUyMCYlMjBTZWFzb25hbA== | 6 |
| 21 | Sports & Leisure | b;U3BvcnRzJTIwJiUyMExlaXN1cmU= | 15 |
| 22 | Hobbies & Stationery | b;SG9iYmllcyUyMCYlMjBTdGF0aW9uZXJ5 | 6 |
| 23 | Kiosk | b;S2lvc2s= | 5 |
| 24 | Inspiration & Events | b;SW5zcGlyYXRpb24lMjAmJTIwRXZlbnRz | 20 |
This response is large. Download the complete JSON to inspect every field and nested item.
A product’s pack, unit and offer conditions change what its price means.
TPNC identifies the product in a Tesco link. Save it alongside the pack title; a similar title alone is not enough to match packs.
Compare the price of the whole pack first. For value comparisons, keep Tesco’s unit price together with its unit, such as each or kilogram.
Keep the promotion text, dates and membership or quantity conditions. Check the dates before reporting an offer as current; retain the ordinary pack price separately.
These requests take no postcode or store. A sale-status field cannot establish whether a shopper can receive that product at a particular address.
A category name is a label. Pass the returned catId unchanged as facet when collecting its products; avoid rebuilding it from the name.
Request up to 48 products per page. Keep the facet, page size and sort order fixed as you advance through page numbers.
The page follows a category’s returned order. It does not measure where a pack ranks for a shopper’s search term.
The API reads the current catalog. Store your collection time, request and product IDs so later runs can be compared with the same packs.
Connect Upscrape through MCP and ask for a Tesco shelf comparison or a product check. These prompts keep the comparison tied to real product IDs.
Use Upscrape to read Tesco product 284477542. Show the pack price and unit price with its unit. Keep the product ID in the answer.
Use Upscrape to find Tesco’s Fresh Fruit category and collect its first five products. Show the product ID, title, pack price and unit price. Only compare unit prices with matching units.
Use Upscrape to collect the first two Tesco Fresh Fruit pages, with five products per page and relevance order. Combine them by product ID and state that this is a partial category scan.
Use Upscrape to request ten Tesco Fresh Fruit products with price-ascending order. Show each ordinary pack price and unit in the returned order. Check whether those prices increase throughout the page; flag any differences instead of assuming they do.
Use Upscrape to collect the first five Tesco Fresh Fruit products. Report any returned promotion text and dates next to the ordinary pack price. Keep membership conditions, and flag offers that have not started.
Start with a shelf or a known product, then keep the evidence behind the comparison.
Pricing analysts match Tesco product IDs, pack titles and units before deciding whether a rival’s product is cheaper.
Category teams collect successive pages from a chosen facet to build a pack-price comparison with the returned products.
Brand teams filter the collected category rows by brand and product ID. Record the pages collected so a partial scan stays visible.
Analysts compare returned unit prices on the same unit basis before treating differently sized packs as substitutes.
Trade marketing teams inspect the promotions supplied with their tracked products and retain the offer conditions in the report.
E-commerce teams fetch known product IDs and compare saved descriptions and pack information with their previous observations.
Data teams use Tesco’s category tree and product category information to group a collected assortment consistently.
Reporting teams save repeated requests and compare matching product IDs over time. They build the history from their own observations.
Practical answers about product links, category pages, offers and account access.
This is Upscrape’s Tesco grocery data API. It reads public catalog information through Upscrape’s service and uses your Upscrape API key. It does not connect to your Tesco shopping account. The request and response examples here describe this service, rather than an older Tesco developer API. Tesco API reference
You can browse the category tree, collect products from a category and read a product by its Tesco link or ID. Product fields depend on what Tesco supplies. Inspect the sample JSON for the returned structure before choosing the columns your report needs. Tesco API reference
Keyword search is currently unavailable. Start from the category tree to find a shelf, then collect its product pages. If you already have the product, send its Tesco link or TPNC directly. Category order should not be reported as a product’s keyword search rank. Tesco API reference
These endpoints do not accept a postcode or store. They return public UK catalog observations. Keep any returned availability field in that context: it does not confirm stock, delivery eligibility or the checkout price for a particular address. The API does not provide store-level inventory. Tesco API reference
Yes. Pass the Tesco product URL in the tpnc input, as shown in the code example. You can also pass the numeric TPNC from the URL. Retain that identifier with your saved response so later checks refer to the same Tesco product. Tesco API reference
Advance the page number while keeping the facet, count and sort_by inputs fixed. Count can be from 1 to 48; the default is 24. Read total_count alongside the returned items to plan collection. Catalog changes between requests mean a multi-page run is an observation, not a frozen snapshot. Tesco API reference
Yes. Category requests accept relevance, price-ascending and price-descending and pass the choice to Tesco. Check returned prices before ranking the rows: Tesco’s order can differ from a simple sort of the ordinary pack prices. Compare unit prices on the same unit basis when judging value. Tesco API reference
No. These endpoints do not read Clubcard accounts, points or personal purchase histories. Product responses may contain publicly listed promotions, including membership conditions where supplied. Keep those conditions with the offer; a public product promotion does not establish what a particular shopper will pay. Tesco API reference
It returns current catalog observations, not a supplied price-history dataset. Build your own history by scheduling requests and saving their collection times, product IDs and results. Compare the same packs across runs, and retain missing values as unknown rather than treating them as zero. Tesco API reference
Yes. Send the JSON request to Upscrape’s execution API with your API key. The example on this page includes Python, cURL and Node.js versions of the same call. An HTTP workflow in n8n or Make can send that request too. Tesco API reference
Yes. Connect Upscrape through MCP in a supported client. Your agent can request the category tree, collect category pages and inspect known products. The downloadable Tesco skill explains the inputs and comparison rules. Agree a request limit with your agent before collecting a large category. Tesco API reference
New accounts get up to 100 free credits. The endpoint cards show the current catalog prices, and failed requests are not charged. Try a known product or a small category page first to check whether the returned data fits your report before planning a larger collection. Tesco API reference
No. The API reads catalog data for research and reporting. It does not create a Tesco basket, book a delivery slot, place an order or process a payment. Use the product and category responses to build your analysis rather than a Tesco checkout workflow. Tesco API reference
Open the Tesco API in the playground and check a product link. New accounts get up to 100 free credits.