Tesco Ireland vs Tesco GB: comparing grocery prices with two catalog API calls
This compares prices between Tesco Ireland and Tesco Great Britain by pulling both supermarket catalogs via Pepesto's /catalog endpoint. The script matches products by food category and shows which market is cheaper — reporting figures in both EUR and GBP.
Run this yourself
$ PEPESTO_API_KEY=your_key node tesco-ie-vs-gb-price-gap.jsFull script: tesco-ie-vs-gb-price-gap.js. You'll need an API key to run it — get one here.
Getting started
If you have already checked out the GitHub repository:
export PEPESTO_API_KEY=your_key_here
node tesco-ie-vs-gb-price-gap.jsThe first call — fetching both catalogs in parallel
The /catalog endpoint returns a full snapshot of a supermarket's product catalog, with prices, quantities, and entity names that are consistent across markets. Running both requests in parallel cuts the wait time in half.
async function fetchCatalog(domain) {
const res = await fetch('https://s.pepesto.com/api/catalog', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.PEPESTO_API_KEY}`,
},
body: JSON.stringify({ supermarket_domain: domain }),
});
const data = await res.json();
return data.parsed_products;
}
// Fetch both in parallel
const [ieProducts, gbProducts] = await Promise.all([
fetchCatalog('tesco.ie'),
fetchCatalog('tesco.com'),
]);Each catalog entry has an entity_name — a normalised product category. Matching on entity_name lets me compare equivalent products even when the brand names differ:
{
"parsed_products": {
"https://www.tesco.ie/groceries/en-IE/products/250000335": {
"entity_name": "Milk",
"names": { "en": "Avonmore Milk 500Ml" },
"price": 85,
"currency": "EUR",
"price_per_meausure_unit": "1.70 EUR / litre",
"quantity_str": "500ml"
},
"https://www.tesco.ie/groceries/en-IE/products/250004694": {
"entity_name": "Milk",
"names": { "en": "Avonmore Milk 2 Litre" },
"price": 269,
"currency": "EUR",
"quantity_str": "2l"
},
"https://www.tesco.ie/groceries/en-IE/products/250006087": {
"entity_name": "Whipped cream",
"names": { "en": "Avonmore Whipped Cream" },
"price": 279,
"currency": "EUR",
"price_per_meausure_unit": "7.97 EUR / litre",
"quantity_str": "350ml"
}
}
}{
"parsed_products": {
"https://www.tesco.com/groceries/en-GB/products/250065690": {
"entity_name": "Mozzarella cheese",
"names": { "en": "Galbani Maxi Italian Mozzarella Cheese 250g" },
"price": 295,
"currency": "GBP",
"quantity_str": "250g"
},
"https://www.tesco.com/groceries/en-GB/products/250167878": {
"entity_name": "Ketchup",
"names": { "en": "Heinz Top Down Squeezy Tomato Ketchup Sauce" },
"price": 300,
"price_per_meausure_unit": "0.65 / 100g",
"quantity_str": "460g"
},
"https://www.tesco.com/groceries/en-GB/products/250044899": {
"entity_name": "Honey",
"names": { "en": "Tesco Organic Set Honey 340g" },
"price": 335,
"price_per_meausure_unit": "£0.98/100g",
"quantity_str": "340g"
}
}
}What the data showed
143 shared product categories matched across the two catalogs (simple matching against the product names). EUR/GBP have been close to parity, so the cent/pence prices are directly comparable for this exercise.
The pattern was clear: dairy is consistently cheaper in Ireland — Avonmore Milk 2 Litre at €2.69 in IE vs the closest Tesco GB equivalent at £2.89. For fresh produce, GB came out ahead. The biggest gap was in branded condiments: Heinz Ketchup 460g runs 300p in GB, €3.49 in IE. Tesco Organic Set Honey 340g showed a 40p gap in GB's favour. Galbani Maxi Italian Mozzarella Cheese 250g was nearly identical (£2.95 GB vs €3.25 IE) — effectively parity.
Next steps
A single snapshot only tells part of the story. Run this weekly for three months and chart the price drift. Promotional pricing skews results — the tesco.ie catalog had 23 items with promo_deadline_yyyy_mm_dd set, meaning those prices are temporary. Filtering those out gives a better like-for-like baseline.
The result
Two catalog API calls, 143 matched categories, and a category-level scorecard. Dairy cheaper in Ireland, branded goods cheaper in GB — the overall difference depends on your basket. Normalise by price_per_meausure_unit to eliminate pack-size distortion in the comparison.
What else you could do?
Extend to Lidl IE vs Lidl GB, where own-brand dominance makes the comparison cleaner. Add a normalisation step that converts everything to price-per-100g or price-per-litre before comparing, eliminating pack size distortion. Run the diff weekly and email items where the price gap changed by more than 10% — "these 5 items shifted this week" is more actionable than a full catalog comparison.