Tesco Category Products API
Pass a category facet to collect one page of Tesco products.
Sendfacet
Returnstitletpncpack_priceunit_priceunitoffer
Compare Tesco shelf prices by pack, then check the product behind each Tesco link or TPNC.
| # | Product | TPNC | Aisle id | Aisle name | Average weight | Base product id | Brand name | Bulk buy limit | Bulk buy limit message | Department id |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Tesco Pink Lady Apples 5 Pack | 284477542 | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZ… | Apples & Pears | 0 | 77091643 | TESCO | 99 | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA== | |
| 2 | Jaffa Easy Peelers 600g | 288135169 | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb… | Oranges, Lemons & Citrus Fruit | 0 | 78922224 | TESCO | 99 | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA== | |
| 3 | Parrs Toffee Apples Each | 267479525 | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZ… | Apples & Pears | 0 | 66759086 | PARRS | 6 | You have reached the maximum quantity of 6 for this item. | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA== |
| 4 | Tesco Blueberries 150G | 287356888 | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0JlcnJpZXMlMjAmJTIwQ… | Berries & Cherries | 0 | 78538719 | TESCO | 16 | You have reached the maximum quantity of 16 for this item. | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA== |
| 5 | Tesco Finest Sweet Easy Peelers 600g | 288115395 | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb… | Oranges, Lemons & Citrus Fruit | 0 | 78911934 | TESCO finest | 99 | b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA== |
| # | Name | Per comp | Per serving | Reference intake | Reference percentage |
|---|---|---|---|---|---|
| 1 | Typical Values | 100g contains | A serving contains | %RI* | RI* |
| 2 | Energy | 236kJ / 56kcal | 313kJ / 74kcal | 4% | 8400kJ / 2000kcal |
| 3 | Fat | 0.5g | 0.7g | 1% | 70g |
| 4 | Saturates | 0.2g | 0.2g | 1% | 20g |
| 5 | Carbohydrate | 11.6g | 15.4g | 6% | 260g |
| 6 | Sugars | 11.6g | 15.4g | 17% | 90g |
| 7 | Fibre | 1.2g | 1.6g | ||
| 8 | Protein | 0.6g | 0.8g | 2% | 50g |
| 9 | Salt | <0.01g | <0.01g | <1% | 6g |
| 10 | * Reference intake of an average adult (8400 kJ / 2000 kcal) | - | - | - | - |
| # | Name | Cat id | Label | Page type |
|---|---|---|---|---|
| 1 | Clothing & Accessories | b;Q2xvdGhpbmclMjAmJTIwQWNjZXNzb3JpZXM= | superDepartment | NONE |
| 2 | Halloween | b;SGFsbG93ZWVu | superDepartment | CATEGORY |
| 3 | Christmas | b;Q2hyaXN0bWFz | superDepartment | CATEGORY |
| 4 | Tesco Finest | b;VGVzY28lMjBGaW5lc3Q= | superDepartment | NONE |
| 5 | Marketplace | b;TWFya2V0cGxhY2U= | superDepartment | NONE |
| 6 | Fresh Food | b;RnJlc2glMjBGb29k | superDepartment | NONE |
| 7 | Bakery | b;QmFrZXJ5 | superDepartment | CATEGORY |
| 8 | Frozen Food | b;RnJvemVuJTIwRm9vZA== | superDepartment | CATEGORY |
| 9 | Treats & Snacks | b;VHJlYXRzJTIwJiUyMFNuYWNrcw== | superDepartment | CATEGORY |
| 10 | Food Cupboard | b;Rm9vZCUyMEN1cGJvYXJk | superDepartment | CATEGORY |
What each one takes and what it returns. Open one for a real response, every input and every field.
Pass a category facet to collect one page of Tesco products.
Sendfacet
Returnstitletpncpack_priceunit_priceunitoffer
Send a Tesco product link or TPNC to read its price, description and product information where supplied.
Sendtpnc
Returnstitletpncbrandgtinpack_priceunit_price
Read Tesco’s nested category tree, then reuse the returned facet for the category you want to collect.
Sendinclude_raw
ReturnscategoryfacetchildrennamecatIdimages
Price, offer and range checks on Tesco’s online grocery catalog.
Collect a category’s products page by page and compare pack prices across brands.
Category productsCategoriesLine up competing packs on Tesco’s unit price, on the same unit.
Category productsProduct detailCheck known products for current promotions and keep each offer’s conditions in your report.
Product detailCategory productsGroup your collected products by Tesco’s category tree to see which packs appear and which are new.
CategoriesCategory productsEvery endpoint shows its price in credits before it runs. You buy credits once, with no subscription.
Credit packs| Per call | Endpoints |
|---|---|
| 1 credit | Product detailCategories |
| 1–8 credits | Category products |
One request shape for every Tesco endpoint: the endpoint ID and its input. No SDK needed.
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.category.products.list", "input": { "count": 5, "facet": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==", "page": 1, "sort_by": "relevance" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "tesco.category.products.list", "input": { "count": 5, "facet": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==", "page": 1, "sort_by": "relevance" }}''')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.category.products.list", "input": { "count": 5, "facet": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==", "page": 1, "sort_by": "relevance" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
{ "total_count": 181, "page": { "count": 5, "matchType": null, "offset": 0, "pageId": null, "pageNo": 1, "pageSize": 5, "totalCount": 181, "query": { "actualTerm": null, "queryPhase": "primary", "searchTerm": null } }, "raw": { "status": 200, "data": { "category": { "facets": null, "options": { "sortBy": [ "relevance", "price-ascending" ] }, "pageInformation": { "count": 5, "matchType": null, "offset": 0, "pageId": null, "pageNo": 1, "pageSize": 5, "totalCount": 181, "query": { "actualTerm": null, "queryPhase": "primary", "searchTerm": null } }, "facetLists": [ { "category": "Superdepartment", "categoryId": "superDepartment", "facets": [ { "binCount": 280, "facetId": "Fresh Food", "facetName": "Fresh Food", "isSelected": true } ] }, { "category": "Department", "categoryId": "department", "facets": [ { "binCount": 280, "facetId": "Fresh Fruit", "facetName": "Fresh Fruit", "isSelected": true } ] } ], "results": [ { "node": { "title": "Tesco Pink Lady Apples 5 Pack", "adId": null, "aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycw==", "aisleName": "Apples & Pears", "averageWeight": 0, "baseProductId": "77091643", "brandName": "TESCO", "bulkBuyLimit": 99, "bulkBuyLimitGroupId": null, "bulkBuyLimitMessage": null, "catchWeightList": null, "context": null, "departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==", "departmentName": "Fresh Fruit", "displayType": "Quantity", "groupBulkBuyLimit": 0, "gtin": "00000003249833", "id": "284477542", "increment": 0, "isInFavourites": null, "isNew": false, "isRestrictedOrderAmendment": null, "maxQuantityAllowed": 99, "maxWeight": 0, "minWeight": 0, "modelMetadata": null, "productType": "SingleProduct", "quantityInBasket": null, "restrictedDelivery": null, "shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycyU3Q1BpbmslMjAmJTIwUmVkJTIwQXBwbGVz", "shelfName": "Pink & Red Apples", "shortDescription": "Apples.", "superDepartmentId": "b;RnJlc2glMjBGb29k", "superDepartmentName": "Fresh Food", "timeRestrictedDelivery": null, "tpnb": "77091643", "tpnc": "284477542", "typename": "ProductType", "reviews": { "stats": { "noOfReviews": 193, "overallRating": 2.9, "overallRatingRange": 5 } }, "details": { "components": [ { "isLowEverydayPricing": false } ] }, "images": { "display": [ { "default": {} } ] }, "media": { "defaultImage": { "aspectRatio": 1 } }, "sellers": { "results": [ { "fulfilment": null, "id": "284477542", "isForSale": true, "seller": null, "status": "AvailableForSale", "price": { "price": 2.9, "actual": 2.9, "unitOfMeasure": "each", "unitPrice": 0.58 }, "promotions": [] } ] }, "description": [ "Apples." ], "restrictions": [] } }, { "node": { "title": "Jaffa Easy Peelers 600g", "adId": null, "aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0", "aisleName": "Oranges, Lemons & Citrus Fruit", "averageWeight": 0, "baseProductId": "78922224", "brandName": "TESCO", "bulkBuyLimit": 99, "bulkBuyLimitGroupId": null, "bulkBuyLimitMessage": null, "catchWeightList": null, "context": null, "departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==", "departmentName": "Fresh Fruit", "displayType": "Quantity", "groupBulkBuyLimit": 0, "gtin": "00000003260630", "id": "288135169", "increment": 0, "isInFavourites": null, "isNew": false, "isRestrictedOrderAmendment": null, "maxQuantityAllowed": 99, "maxWeight": 0, "minWeight": 0, "modelMetadata": null, "productType": "SingleProduct", "quantityInBasket": null, "restrictedDelivery": null, "shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0JTdDQ2xlbWVudGluZXMlMjAmJTIwRWFzeSUyMFBlZWxlc…", "shelfName": "Clementines & Easy Peelers", "shortDescription": "Clementines, Mandarin", "superDepartmentId": "b;RnJlc2glMjBGb29k", "superDepartmentName": "Fresh Food", "timeRestrictedDelivery": null, "tpnb": "78922224", "tpnc": "288135169", "typename": "ProductType", "reviews": { "stats": { "noOfReviews": 401, "overallRating": 2.4, "overallRatingRange": 5 } }, "details": { "components": [ { "isLowEverydayPricing": false } ] }, "images": { "display": [ { "default": {} } ] }, "media": { "defaultImage": { "aspectRatio": 1 } }, "sellers": { "results": [ { "fulfilment": null, "id": "288135169", "isForSale": true, "seller": null, "status": "AvailableForSale", "price": { "price": 2.2, "actual": 2.2, "unitOfMeasure": "kg", "unitPrice": 3.67 }, "promotions": [ { "description": "£1.49 Clubcard Price", "endDate": "2026-11-03T00:00:00Z", "id": "102760175", "promotionType": null, "startDate": "2026-10-05T23:00:00Z", "unitSellingInfo": "£2.48/kg", "price": { "afterDiscount": 2.2, "beforeDiscount": null }, "attributes": [ "CLUBCARD_PRICING" ] } ] } ] }, "description": [ "Clementines, Mandarin" ], "restrictions": [] } } ] } } }, "items": [ { "title": "Tesco Pink Lady Apples 5 Pack", "adId": null, "aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycw==", "aisleName": "Apples & Pears", "averageWeight": 0, "baseProductId": "77091643", "brandName": "TESCO", "bulkBuyLimit": 99, "bulkBuyLimitGroupId": null, "bulkBuyLimitMessage": null, "catchWeightList": null, "context": null, "departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==", "departmentName": "Fresh Fruit", "displayType": "Quantity", "groupBulkBuyLimit": 0, "gtin": "00000003249833", "id": "284477542", "increment": 0, "isInFavourites": null, "isNew": false, "isRestrictedOrderAmendment": null, "maxQuantityAllowed": 99, "maxWeight": 0, "minWeight": 0, "modelMetadata": null, "productType": "SingleProduct", "quantityInBasket": null, "restrictedDelivery": null, "shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q0FwcGxlcyUyMCYlMjBQZWFycyU3Q1BpbmslMjAmJTIwUmVkJTIwQXBwbGVz", "shelfName": "Pink & Red Apples", "shortDescription": "Apples.", "superDepartmentId": "b;RnJlc2glMjBGb29k", "superDepartmentName": "Fresh Food", "timeRestrictedDelivery": null, "tpnb": "77091643", "tpnc": "284477542", "typename": "ProductType", "reviews": { "stats": { "noOfReviews": 193, "overallRating": 2.9, "overallRatingRange": 5 } }, "details": { "components": [ { "isLowEverydayPricing": false } ] }, "images": { "display": [ { "default": {} } ] }, "media": { "defaultImage": { "aspectRatio": 1 } }, "sellers": { "results": [ { "fulfilment": null, "id": "284477542", "isForSale": true, "seller": null, "status": "AvailableForSale", "price": { "price": 2.9, "actual": 2.9, "unitOfMeasure": "each", "unitPrice": 0.58 }, "promotions": [] } ] }, "description": [ "Apples." ], "restrictions": [] }, { "title": "Jaffa Easy Peelers 600g", "adId": null, "aisleId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0", "aisleName": "Oranges, Lemons & Citrus Fruit", "averageWeight": 0, "baseProductId": "78922224", "brandName": "TESCO", "bulkBuyLimit": 99, "bulkBuyLimitGroupId": null, "bulkBuyLimitMessage": null, "catchWeightList": null, "context": null, "departmentId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==", "departmentName": "Fresh Fruit", "displayType": "Quantity", "groupBulkBuyLimit": 0, "gtin": "00000003260630", "id": "288135169", "increment": 0, "isInFavourites": null, "isNew": false, "isRestrictedOrderAmendment": null, "maxQuantityAllowed": 99, "maxWeight": 0, "minWeight": 0, "modelMetadata": null, "productType": "SingleProduct", "quantityInBasket": null, "restrictedDelivery": null, "shelfId": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdCU3Q09yYW5nZXMsJTIwTGVtb25zJTIwJiUyMENpdHJ1cyUyMEZydWl0JTdDQ2xlbWVudGluZXMlMjAmJTIwRWFzeSUyMFBlZWxlc…", "shelfName": "Clementines & Easy Peelers", "shortDescription": "Clementines, Mandarin", "superDepartmentId": "b;RnJlc2glMjBGb29k", "superDepartmentName": "Fresh Food", "timeRestrictedDelivery": null, "tpnb": "78922224", "tpnc": "288135169", "typename": "ProductType", "reviews": { "stats": { "noOfReviews": 401, "overallRating": 2.4, "overallRatingRange": 5 } }, "details": { "components": [ { "isLowEverydayPricing": false } ] }, "images": { "display": [ { "default": {} } ] }, "media": { "defaultImage": { "aspectRatio": 1 } }, "sellers": { "results": [ { "fulfilment": null, "id": "288135169", "isForSale": true, "seller": null, "status": "AvailableForSale", "price": { "price": 2.2, "actual": 2.2, "unitOfMeasure": "kg", "unitPrice": 3.67 }, "promotions": [ { "description": "£1.49 Clubcard Price", "endDate": "2026-11-03T00:00:00Z", "id": "102760175", "promotionType": null, "startDate": "2026-10-05T23:00:00Z", "unitSellingInfo": "£2.48/kg", "price": { "afterDiscount": 2.2, "beforeDiscount": null }, "attributes": [ "CLUBCARD_PRICING" ] } ] } ] }, "description": [ "Clementines, Mandarin" ], "restrictions": [] } ]}
https://data.upscrape.com/mcp
With Upscrape, get the Tesco category products for facet "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==" and sort by "relevance". Tell me what it costs before you run it, then show the results as a table.
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.
The short answers. The docs have the long ones.
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.
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.
Keyword search is not available yet. Start from the category tree to find a shelf, then collect its products. If you already have a product, send its Tesco link or TPNC directly.
These endpoints take no postcode or store. They return Tesco's public UK catalog, so an availability field describes the catalog, not stock, delivery or the checkout price at a particular address. Store-level stock is not part of it.
Yes. Category requests can sort by relevance or by price, low or high first, and Tesco does the sorting. Tesco’s order can differ from a plain sort of pack prices, so compare unit prices on the same basis when judging value.
No. It reads Tesco’s public catalog for research and reporting. It does not read Clubcard accounts, points or purchase histories, and it does not create a basket, book a delivery slot or place an order. Public promotions, including Clubcard conditions where Tesco lists them, come with the product.
It returns the catalog as it is now, not a ready-made price history. Build your own by scheduling requests and saving the time, product IDs and results of each run. Compare the same packs across runs, and keep missing values as unknown rather than zero.
Tesco endpoints cost from 1 credit per successful call, each priced before it runs. You buy credits once, with no subscription, and paid credits never expire. New accounts get free credits to try it.
Up to 100 free credits to start, no card needed.