Track Weekly Staple Price Changes at Auchan Poland
This builds a weekly price tracker for grocery staples at Auchan Poland using Pepesto's /catalog endpoint. The script diffs the current catalog against a saved previous week's snapshot and reports which items changed in price — useful for tracking inflation in your regular shop.
Run this yourself
$ PEPESTO_API_KEY=your_key node auchan-pl-price-tracker-weekly.jsFull script: auchan-pl-price-tracker-weekly.js. You'll need an API key to run it — get one here.
Getting started
export PEPESTO_API_KEY=pep_sk_your_key_here node auchan-pl-price-tracker-weekly.js
The first call
The /api/catalog call is a single POST with just the supermarket domain. The response is a full snapshot of all indexed products — save it to disk immediately, then filter down to the SKUs you need.
const response = 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: 'zakupy.auchan.pl',
}),
});
const { parsed_products } = await response.json();
// parsed_products is keyed by product URL
// Each value has: entity_name, names, price, currency, quantity_str{
"parsed_products": {
"https://zakupy.auchan.pl/products/%C5%82opatka-wieprzowa-auchan-300-g/00971824": {
"entity_name": "Pork shoulder",
"names": {
"en": "Auchan Pork Shoulder",
"pl": "Łopatka wieprzowa Auchan"
},
"price": 888,
"price_per_meausure_unit": "29.60 zł/kg",
"quantity_str": "300g"
},
"https://zakupy.auchan.pl/products/%C5%82ata-wo%C5%82owa-auchan-na-wag%C4%99-ok-500-g/00569968": {
"entity_name": "Beef",
"names": {
"en": "Auchan Beef Flank Steak",
"pl": "Łata wołowa Auchan"
},
"price": 1850,
"price_per_meausure_unit": "36.99 zł/kg",
"quantity_str": "500g"
},
"https://zakupy.auchan.pl/products/%C5%82opatka-bez-ko%C5%9Bci-auchan-na-wag%C4%99-ok-1-kg/00571717": {
"entity_name": "Pork shoulder",
"names": {
"en": "Auchan boneless shoulder approx. 1 kg",
"pl": "Łopatka bez kości Auchan na wagę ok. 1 kg"
},
"price": 1899,
"currency": "zł",
"quantity_str": "1kg"
},
"https://zakupy.auchan.pl/products/%C5%82oso%C5%9B-%C5%9Bwie%C5%BCy-4-porcje-mowi-400-g/00117799": {
"entity_name": "Salmon fillet",
"names": {
"en": "Fresh salmon 4 portions Mowi 400 g",
"pl": "Łosoś świeży 4 porcje Mowi 400 g"
},
"price": 6498,
"quantity_str": "400g"
}
}
}The script maintains a list of tracked product URLs — real Auchan PL URLs from the catalog — alongside a stored snapshot of last week's prices. On each run it loads the current catalog, looks up each URL, and builds a diff.
const TRACKED_PRODUCTS = [
{
url: 'https://zakupy.auchan.pl/products/%C5%82opatka-wieprzowa-auchan-300-g/00971824',
label: 'Łopatka wieprzowa Auchan 300 g',
},
{
url: 'https://zakupy.auchan.pl/products/%C5%82ata-wo%C5%82owa-auchan-na-wag%C4%99-ok-500-g/00569968',
label: 'Łata wołowa Auchan (Beef Flank) ~500 g',
},
// ... more items
];
for (const tracked of TRACKED_PRODUCTS) {
const current = parsedProducts[tracked.url]?.price ?? null;
const previous = LAST_WEEK_PRICES[tracked.url] ?? null;
const change = current !== null && previous !== null ? current - previous : null;
// ↑ positive = more expensive, negative = cheaper
}What the data showed
Over the first month of tracking, pork shoulder and beef cuts showed the most movement — up to 5–8% in a single week, then reverting. Fresh salmon was the most volatile item: the Mowi 400g fillet shifted by over 1 zł in both directions within a fortnight.
The catalog response also includes price_per_meausure_unit strings from the Auchan site directly — "36.99 zł/kg" — which makes it easy to compare across different pack sizes without doing the per-kilo maths yourself.
Next steps
To turn this into a proper time-series tracker, save each week's snapshot to a JSON file named by ISO week number, load the previous file at runtime, and compute the diff automatically without hardcoding last week's prices.
import { writeFile, readFile } from 'fs/promises';
const week = getISOWeekString(); // e.g. "2026-W16"
await writeFile(`prices-${week}.json`, JSON.stringify(snapshot, null, 2));
// Next week:
const lastWeek = loadSnapshot(`prices-2026-W15.json`);The result
The Pepesto catalog endpoint made this a 50-line script instead of a scraping project. No browser automation, no HTML parsing, no rate-limiting headaches. The data comes back structured, with real Polish product names and prices already in the correct unit.
What else you could do?
Three natural extensions. Add a chart: pipe the weekly snapshots into a simple HTML chart to visualize trends over time rather than reading a raw text diff. Add alerting: if any tracked item rises more than 10% in a week, trigger a notification. Extend coverage to Frisco PL using the same /catalog call and the same product categories — giving you cross-retailer price movement, not just absolute changes at Auchan.