{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"2167e9b5-1ee9-4b3d-888c-3511906e431a","name":"Tesco API","description":"The Tesco Data API returns grocery product data from Tesco UK and Tesco Ireland as JSON: keyword search, category pages, the full category tree, and product records with shelf price, unit price, Clubcard Price offers, barcodes (GTIN), ratings, dietary icons and the department, aisle and shelf each product sits on. Tesco has no public product API. This collection holds every endpoint of the Tesco Data API on RapidAPI, ready to send from Postman.\n\nBuilt and maintained by [Happy Endpoint](https://happyendpoint.com/library/tesco-data?utm_source=postman&utm_medium=collection&utm_campaign=tesco-data).\n\n## Get started\n\n1. Subscribe to the [Tesco Data API on RapidAPI](https://rapidapi.com/happyendpoint/api/tesco-data-api) and copy your key. Current plans are listed there.\n2. Fork this collection into your own workspace. Open the collection's **Variables** tab and paste your key into the **Current value** of `rapidapi_key`. Leave the Initial value empty: current values stay on your machine and are never shared.\n3. Send **Search > Search products by keyword (UK)** with a term such as `bread`. Each product carries an `id` (the Tesco product number shown in the product URL).\n4. Send **Products > Product details (UK)** with that `id` as `productId` for the full record.\n\nTo walk a whole aisle, send **Category ids > Category ids (UK)** first, copy an aisle `id` (they start with `b;`), and page through **Category pages > Products in a category (UK)** with `pageNo`.\n\n## What you can do\n\n- **Search the UK range** by keyword, with price, unit price, promotions, rating and review count on every result, plus Tesco's suggested filters.\n- **Walk the category tree:** super departments, departments and aisles with their ids, for the UK and Ireland.\n- **List every product in an aisle**, 24 per page, for the UK and Ireland.\n- **Get a full product record:** title, brand, description, barcode (`gtin`), the Tesco product numbers (`tpnb`, `tpnc`), department, aisle and shelf, dietary and certification icons, bulk-buy limit, price, unit price and every active promotion.\n\nAll 8 requests are `GET`. Every response is wrapped in `{\"success\": true, \"data\": {...}}`.\n\n## Things to know about the data\n\n- **Clubcard Prices are promotions, not a price field.** The `price` is the shelf price. A Clubcard Price shows up in `promotions` with `offerType: \"CLUBCARD_PRICING\"`, its value only in text (`\"£2.20 Clubcard Price\"`), and a `startDate` and `endDate`. Parse the amount from the description, and keep the dates: the offers change every few weeks.\n- **The price key differs by endpoint.** Search results use `price.price`; product details use `price.actual`. Both come with `unitPrice` and `unitOfMeasure` (`kg`, `litre`, `each`). Compare products on unit price.\n- **Use aisle-level ids for category pages.** A top-level id such as Fresh Food's returned 0 products in our test, while the Bread aisle returned 142. Take the `id` values labelled `aisle` from **Category ids**.\n- **Products disappear.** The product number in the public docs' example now returns 404, because the product was delisted. A 404 on product details means the item is gone, not that the request is wrong.\n- **One product, three numbers.** `id` equals `tpnc` (the number in the product URL), `tpnb` is the base product number, and `gtin` is the barcode. Join to other retailers on `gtin`.\n- **`resultsOnPage` can exceed `resultsPerPage`.** A bread search returned 26 results on a page of 24. Use the length of `products`, not the page size, when counting.\n- **Ireland is a separate endpoint**, with prices in euros; the UK endpoints are in pounds.\n\n## Worked example\n\n[Scrape Tesco Data with Python: How Much Do Clubcard Prices Really Save?](https://medium.com/@happyendpointhq/scrape-tesco-data-with-python-how-much-do-clubcard-prices-really-save-03e67e828908): 940 products from 14 aisles: a Clubcard Price saves a median 20.9%, but only about 1 in 7 products carries one. Full script included.\n\n## Use it from Claude, Cursor or any MCP client\n\nRapidAPI exposes every endpoint of this API as an MCP tool. Point your MCP client at `https://mcp.rapidapi.com` with the headers `x-api-host: tesco-data-api.p.rapidapi.com` and `x-api-key: <your RapidAPI key>`.\n\n## Links\n\n- Product page and FAQ: [happyendpoint.com/library/tesco-data](https://happyendpoint.com/library/tesco-data?utm_source=postman&utm_medium=collection&utm_campaign=tesco-data)\n- Subscribe and plans: [rapidapi.com/happyendpoint/api/tesco-data-api](https://rapidapi.com/happyendpoint/api/tesco-data-api)\n- Product overview on LinkedIn: [Tesco API and Scraper: Grocery Prices, Clubcard Offers and Product Data as JSON](https://www.linkedin.com/pulse/tesco-api-scraper-grocery-prices-clubcard-offers-product-fs0tc)\n- More retail and ecommerce data, including Sephora, H&M and IKEA: [happyendpoint.com/ecommerce-data](https://happyendpoint.com/ecommerce-data?utm_source=postman&utm_medium=collection&utm_campaign=tesco-data)\n\n## More from Happy Endpoint on Postman\n\nEvery public Happy Endpoint collection, for real estate, ecommerce and other platforms: [postman.com/happyendpoints-team](https://www.postman.com/happyendpoints-team).\n\n## Disclaimer\n\nHappy Endpoint is an independent provider. This collection is not affiliated with, endorsed by, sponsored by or connected to Tesco. Tesco and Clubcard are trademarks of their owner, referenced only to describe the data.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"56555678","team":43080622,"collectionId":"2167e9b5-1ee9-4b3d-888c-3511906e431a","publishedId":"2sBYHXReCc","public":true,"publicUrl":"https://documenter-api.postman.tech/view/56555678/2sBYHXReCc","privateUrl":"https://go.postman.co/documentation/56555678-2167e9b5-1ee9-4b3d-888c-3511906e431a","customColor":{"highlight":"1D4ED8","top-bar":"FFFFFF","right-sidebar":"303030"},"documentationLayout":"classic-double-column","customisation":{"appearance":{"themes":[{"colors":{"highlight":"1D4ED8","top-bar":"FFFFFF","right-sidebar":"303030"},"name":"light","logo":null},{"colors":{"highlight":"60A5FA","top-bar":"212121","right-sidebar":"303030"},"name":"dark","logo":null}],"default":"light"},"metaTags":[{"value":"Tesco API: UK Grocery Prices, Clubcard Offers, Products","name":"title"},{"value":"Tesco API Postman collection: Tesco UK and Ireland grocery products, shelf and unit prices, Clubcard Price offers, barcodes and categories as JSON.","name":"description"}]},"version":"8.12.12","publishDate":"2026-11-03T19:54:25.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"Tesco API: UK Grocery Prices, Clubcard Offers, Products","description":"Tesco API Postman collection: Tesco UK and Ireland grocery products, shelf and unit prices, Clubcard Price offers, barcodes and categories as JSON."},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/0d967c87095e757db82929b270ca9e6f39361a13321214cb4c21a32a767ccc2e","favicon":"https://postman-image-service.postman.com/api/cloudinary-proxy/postman/image/upload/v1793253795/team/fea4634cfb38c1c4b615f71bbf3e1a80"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/2sBYHXReCc"}