Scan Conad's Weekly Promotions โ Every Deal Sorted by Best Value
This pulls the full Conad Italy product catalog via Pepesto's /catalog endpoint and surfaces every item currently on promotion, sorted by best deal first โ useful for building a weekly Italian grocery deals digest.
Run this yourself
$ PEPESTO_API_KEY=your_key node conad-italy-promotions-scanner.jsFull script: conad-italy-promotions-scanner.js. You'll need an API key to run it โ get one here.
Getting started
export PEPESTO_API_KEY=your_key_here
node conad-italy-promotions-scanner.jsThe catalog call
/catalog takes a supermarket domain and returns every product the API has indexed, with prices, quantities, tags, and promo flags. For Conad it's a big response โ thousands of products โ so the filter step matters.
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: 'spesaonline.conad.it' }),
});
const { parsed_products } = await res.json();
// Filter to products currently on promo
const onPromo = Object.entries(parsed_products)
.filter(([, p]) => p.promo === true)
.map(([url, p]) => ({ url, ...p }));A sample of what the catalog looks like โ each product has a consistent entity_name, Italian and English names, price in EUR cents, and promo metadata:
{
"parsed_products": {
"https://spesaonline.conad.it/p/3-mozzarelle-con-fermenti-lattici-vivi-3-x-125-g-conad--225225": {
"entity_name": "Mozzarella cheese",
"names": {
"en": "3 Mozzarella with live cultures Conad",
"it": "3 Mozzarelle con fermenti lattici vivi Conad"
},
"price": 249,
"currency": "EUR",
"promo": true,
"price_per_meausure_unit": "6.64 EUR / kg",
"quantity_str": "375g"
},
"https://spesaonline.conad.it/p/6-uova-fresche-da-galline-allevate-a-terra-grandi-percorso-qualita-conad--342290": {
"entity_name": "Eggs",
"names": {
"en": "6 Fresh large barn-raised eggs Conad",
"it": "6 Uova Fresche Grandi Percorso Qualitร Conad"
},
"price": 199,
"currency": "EUR",
"promo": true,
"price_per_meausure_unit": "5.22 EUR / kg",
"quantity_str": "6 pieces"
},
"https://spesaonline.conad.it/p/aceto-balsamico-di-modena-igp-500-ml-conad--335268": {
"entity_name": "Balsamic vinegar",
"names": {
"en": "Balsamic Vinegar of Modena IGP Conad",
"it": "Aceto Balsamico di Modena IGP Conad"
},
"price": 149,
"currency": "EUR",
"promo": true,
"price_per_meausure_unit": "2.98 EUR / l",
"quantity_str": "500ml"
},
"https://spesaonline.conad.it/p/aceto-di-mele-500-ml-conad--321992": {
"entity_name": "Apple vinegar",
"names": {
"en": "Apple Cider Vinegar Conad",
"it": "Aceto di Mele Conad"
},
"price": 115,
"currency": "EUR",
"promo": true,
"price_per_meausure_unit": "2.30 EUR / l",
"quantity_str": "500ml"
}
}
}Sorting and displaying the deals
Sort by the per-unit price extracted from price_per_meausure_unit โ this normalises across different package sizes so a 500ml bottle and a 1L bottle can be compared fairly.
const scored = onPromo.map(p => {
let perUnitScore = p.price;
if (p.price_per_meausure_unit) {
const match = p.price_per_meausure_unit.match(/([\d.,]+)/);
if (match) perUnitScore = parseFloat(match[1].replace(',', '.')) * 100;
}
return { ...p, perUnitScore };
}).sort((a, b) => a.perUnitScore - b.perUnitScore);
scored.slice(0, 25).forEach((p, i) => {
const name = p.names.en || p.names.it;
const price = `โฌ${(p.price / 100).toFixed(2)}`;
const deadline = p.promo_deadline_yyyy_mm_dd
? ` (until ${p.promo_deadline_yyyy_mm_dd})` : '';
console.log(`${i + 1}. ${name} โ ${p.quantity_str} โ ${price}${deadline}`);
});What the data showed
In a sample run, Conad had 312 products on promotion across the full catalog. The best deals were concentrated in a few categories. Balsamic Vinegar of Modena IGP Conad (500ml) at โฌ1.49 was the standout โ normal price around โฌ2.98/l, so this is roughly 50% off. Apple Cider Vinegar Conad (500ml) at โฌ1.15 was another strong one in the same category.
In dairy: 3 Mozzarelle con fermenti lattici vivi Conad (375g, three balls) at โฌ2.49 works out to โฌ6.64/kg โ very competitive. 6 Fresh large barn-raised eggs Percorso Qualitร Conad at โฌ1.99 for a pack of six is below the usual Conad quality-tier price.
The category with the most promotions by count was Balsamic vinegar (four separate SKUs on promo simultaneously), followed by Eggs (three SKUs) and Mozzarella cheese (two SKUs).
One edge case: some products have a promo_deadline_yyyy_mm_dd set in the past โ meaning the data still marks them as promo: true even if the promotion has technically ended. Add a check to flag those separately rather than treating them as active deals.
The result
Run this every Monday morning. The output is a sorted text list that can be scanned in under a minute. Any items of interest go into a manual Conad order, or pipe the URLs straight into a /products + /session flow to pre-fill a basket with the deals.
What else you could do?
Add price history tracking โ store each week's snapshot and alert when a product goes on promo for the first time, or when a recurring deal returns after a gap. Add a watchlist filter so only categories you actually buy appear in the output rather than the full 300-item promo list. Wire up a Telegram or email notification to deliver the top 10 deals each Monday morning automatically.