🇵🇱 Auchan Poland Example solution JavaScript /catalog API

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.js

Full script: auchan-pl-price-tracker-weekly.js. You'll need an API key to run it — get one here.

Getting started

bash
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.

js
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
json — catalog response (excerpt, zakupy.auchan.pl)
{
  "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.

js — building the 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.

js — persisting weekly snapshots
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.

Links

Ready to build?

Start tracking staple prices at Auchan Poland

Pull a weekly Auchan Poland catalog snapshot and watch staple prices move — one endpoint, one key.

27supermarkets 13countries 1schema Instant access