Auchan France Scraper - Products, Local Prices & Reviews avatar

Auchan France Scraper - Products, Local Prices & Reviews

Pricing

from $1.00 / 1,000 product results

Go to Apify Store
Auchan France Scraper - Products, Local Prices & Reviews

Auchan France Scraper - Products, Local Prices & Reviews

Scrape Auchan.fr products: grocery, drinks, household and general merchandise. Real price scoped to your drive/delivery point, genuine was-price and discount % when on offer, unit price, brand, shopper ratings and reviews. Search by keyword or paste product/search/category links.

Pricing

from $1.00 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

5

Monthly active users

9 days ago

Last modified

Share

Auchan France Scraper: Prices, Promotions, Stock & Shopper Reviews

Auchan France Scraper turns Auchan.fr into a clean grocery data feed. Pull French hypermarket products across food, drinks, household goods and general merchandise, with the current price scoped to a drive, click and collect or delivery point you choose by postal code, a genuine strike through was price and discount percent whenever an item is really on offer, unit pricing, stock, images and Auchan's own shopper ratings and reviews. Search by keyword with brand and on offer filters, or paste any product, search or category link directly, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.

Why This Scraper?

  • Real, store-scoped prices. Resolves a drive, click and collect or delivery point from a postal code you provide, the same way the site's own "Choisir vos courses" flow does, so prices, promotions and stock match what a real shopper at that address would see.
  • Was-price captured only when it's real. Reads the site's own strike-through price element per item and only ever fills a was-price and discount when it is genuinely present and higher than the current price. Full-price items simply get null, never a fabricated markdown.
  • Loyalty cashback kept separate from a real discount. Auchan's "Avantages Waaoh" badge is a loyalty rewards-points percentage, not a price cut, so it is surfaced under its own loyaltyCashbackPercent field and never mistaken for a genuine promotion.
  • Real shopper reviews, straight from Auchan's own product pages. Ratings and reviews come from Auchan's own on-site review widget: overall rating, star-by-star breakdown, and per-review author, date, rating, title and body, included on request.
  • Unit pricing included. The site's own price-per-kilo or price-per-litre is read directly, never guessed from a pack size.
  • Two ways in. Keyword search with brand and "on offer" filters and sort, or paste any product, search, or category link directly.
  • Resume and recurring updates. Continue one interrupted crawl with resumeFromRunId, or monitor a search on a schedule with Incremental mode: later runs return only new and updated products by default; expired products need Emit expired on for that specific run plus a complete scan, and a product previously marked expired can then come back as reappeared.

Use Cases

  • Grocery price tracking and deal hunting: watch a shopping list or category for genuine promotions and price drops at a specific drive or delivery point.
  • Comparison shopping: build a store-scoped grocery price feed alongside other retailers you track.
  • Loyalty and rewards analysis: separate real discounts from Auchan's own loyalty cashback percentage across a catalogue.
  • Product and review research: pull shopper ratings, rating breakdowns and full review text for a brand or category.
  • Recurring stock and price monitoring: schedule a daily run against the same search and get back only what changed.

Data You Get

FieldExample
productId / title"a1b2c3d4-1111-4fff-9999-000000000001", "SAMPLE BRAND Riz basmati parfume 1kg"
brand"SAMPLE BRAND"
category / categoryPath"Riz, pates et legumes secs", ["Epicerie salee", "Riz, pates et legumes secs"] (with Fetch product detail or a pasted product URL, null otherwise)
name / url / imageUrl / inStock / rating / scrapedAtCompatibility aliases of title, productUrl, first images entry, availability, averageRating, plus the scrape timestamp; they never affect change detection in incremental mode
productUrlhttps://www.auchan.fr/sample-brand-riz-basmati-parfume-1kg/pr-C0000001
packSize"1kg"
price / currency3.49, "EUR"
wasPrice / discountAmount / discountPercent4.99, 1.5, 30.1 (only when genuinely on offer, otherwise all null)
isOnSpecialtrue
loyaltyCashbackPercent5.0 (Waaoh loyalty cashback, kept separate from a real discount)
unitPrice / unitOfMeasure3.49, "€/kg"
availability / stock"InStock", 42
deliveryPromise / deliveryChannel"Dans mon drive", "PICK_UP"
priceValidUntil"2027-01-01" (offer validity date; only on non-grocery cards, null otherwise)
averageRating / reviewCount4.2, 87
imagesone card image by default; full-resolution gallery with Fetch product detail or a pasted product URL
ean"3400000000019" (with Fetch product detail or a pasted product URL, null otherwise)
reviewItemsThe same review list as reviews.items, repeated at the top level so the Reviews view can show one row per review
reviews{"averageRating": 4.3, "reviewCount": 12, "ratingBreakdown": {"5": 7, "4": 3, "3": 1, "2": 1, "1": 0}, "items": [...]} (empty shape by default, full feed with Fetch product detail or a pasted product URL)

Sample shape: values above are illustrative placeholders, not from a live product.

reviews is always an object, even when detail fetching is off or a product genuinely has no shopper reviews: averageRating and ratingBreakdown come back null and items comes back empty until fetchDetails (or a pasted product URL) pulls the real feed, and even then a product with zero shopper reviews still returns that same empty shape rather than an error. When Incremental mode is on, every returned record also carries changeType (NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED), changedFields, firstSeenAt and lastSeenAt; REAPPEARED and EXPIRED only ever appear once emitExpired has been used on a run that fully scanned the search, which tombstones a missing product so a later run that finds it again can classify it as REAPPEARED. See How to Use for the full walkthrough.

How to Use

  1. Pick a mode: search (by keyword) or url (paste links).
  2. Set your postal code or city so prices and stock match a real shopper at that address, and choose drive/click&collect or home delivery.
  3. For search mode, add a keyword, brand, "on offer" filter and sort as needed; for url mode, paste one or more product, search or category links.
  4. Set Max products and Max search pages to control run size and cost, then click Start.

1. Keyword search (default):

{
"mode": "search",
"postalCode": "75001",
"searchTerm": "lait",
"maxItems": 20
}

2. Offers only, biggest discount first, home delivery instead of drive:

{
"mode": "search",
"postalCode": "69001",
"deliveryMode": "shipping",
"specialsOnly": true,
"sortBy": "BIGGEST_DISCOUNT",
"maxItems": 50
}

3. One brand, with full detail and reviews:

{
"mode": "search",
"postalCode": "75001",
"searchTerm": "lait",
"brand": "LACTEL",
"fetchDetails": true,
"maxItems": 20
}

4. Paste product, search or category links directly:

{
"mode": "url",
"postalCode": "75001",
"urls": [
"https://www.auchan.fr/lactel-lait-demi-ecreme-bio-uht/pr-C1177205",
"https://www.auchan.fr/oeufs-produits-laitiers/cremerie-oeufs-laits/ca-n0101"
],
"maxItems": 50
}
ShapeExampleResult
Product page with slughttps://www.auchan.fr/lactel-lait-demi-ecreme-bio-uht/pr-C1177205One product with full detail and reviews
Product page without slughttps://www.auchan.fr/pr-C1177205One product with full detail and reviews
Product page, non-www host or tracking parametershttps://auchan.fr/.../pr-C1177205?x=1Same as the product page
Searchhttps://www.auchan.fr/recherche?text=laitResult pages in order
Search with pagehttps://www.auchan.fr/recherche?text=lait&page=2Starts at that page (partial scan, never produces EXPIRED)
Search with the site's sort parameterhttps://www.auchan.fr/recherche?text=lait&sort=asc_price_posResult pages in the site's own sort order (sort values as used by the site, for example asc_price_pos, desc_price_pos)
Category ca-n<code>https://www.auchan.fr/oeufs-produits-laitiers/cremerie-oeufs-laits/ca-n0101Category listing pages
Category with page.../ca-n0101?page=2Starts at that page (partial scan)
Top-level categoryhttps://www.auchan.fr/oeufs-produits-laitiers/ca-n01Category listing pages
Category ca-<digits>https://www.auchan.fr/jouets-jeux-video-loisirs/ca-101042021Category listing pages; a link that returns no products logs a per-link warning

Default behaviour: if you leave urls untouched in url mode, the actor scrapes 8 example links (one per distinct page type; the non-www, tracking-parameter and slug-less product forms are accepted but resolve to the same product, so they are not in the default) and every returned product is billed as usual. Clear the field or paste your own links to avoid that.

Filters and sorting (search mode)

sortBy offers 10 values: RELEVANCE, PRICE_ASC, PRICE_DESC, UNIT_PRICE_ASC, UNIT_PRICE_DESC, BIGGEST_DISCOUNT, BESTSELLERS, TOP_RATED, BRAND_ASC, BRAND_DESC. brand is a best-effort match against the site's own brand facet and specialsOnly keeps only genuine current promotions; none of these apply in url mode.

Views and reviews

The dataset has four views: Overview (all products), Reviews (one row per shopper review), Detail (breadcrumb, barcode, gallery) and Changes (Incremental mode classification and changed fields). Each product carries the reviews shown on its Auchan page (no extra review pages are fetched), so the review count per product is bounded by what the page lists. At the end of a run a short summary is stored under the OUTPUT key of the run's key-value store.

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/auchan-fr-scraper").call(run_input={"mode": "search", "postalCode": "75001", "searchTerm": "lait"})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["title"], product["price"], product["currency"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/auchan-fr-scraper').call({ mode: 'search', postalCode: '75001', searchTerm: 'lait' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Limits, resume and recurring updates

NeedUse
A crawl stopped and should continueresumeFromRunId
Run the same search on a schedule and receive only changesincrementalMode
Keep separate monitoring campaigns for similar searchesdistinct stateKey values
Run a normal full snapshotleave both off

Resume (resumeFromRunId) continues one specific interrupted or previous crawl: paste a run id or dataset id and this run skips products already collected there, returning only the remaining new products.

Incremental mode (incrementalMode) is for a schedule, for example daily: the actor remembers the previous run of the same search itself, so you never paste a run id. The first run returns everything as NEW. Later runs return only NEW and UPDATED products by default; duplicates and unchanged products are suppressed and not charged. Turn on emitUnchanged to also get and pay for unchanged rows, or emitExpired to also get and pay for products from a previous run that a complete, uncapped, non-resumed scan of the search no longer found, marked EXPIRED. Only once a run with emitExpired on has found a product missing (marking it gone) can a later run classify it as REAPPEARED if it shows up again; without ever turning on emitExpired, REAPPEARED cannot occur. State is isolated per postal code, delivery mode, search or URL and detail-mode setup automatically, since Auchan scopes the price itself to the postal code and delivery point; set stateKey to name or deliberately share a monitoring campaign.

What is compared: every output field except the ones excluded. A product is UPDATED when any compared field differs (price, was-price, unit price, promotion, availability, title, brand, rating, review count, images, category and so on), and changedFields lists them. deliveryPromise, stock and priceValidUntil (a rolling offer date shown on non-grocery cards) change from one scrape to the next without the product really changing, so they are left out of the comparison by default but stay in the output. Add your own with ignoreFieldsForChanges (names match at any depth, or use a dotted path such as parent.child). Pasted links that start at a later page (?page=2 or higher) are a partial scan, so they never produce EXPIRED rows. When maxItems is split across several pasted links, each link gets an equal share of what is still left, and unused share carries over to the next link.

maxItems caps (hard ceiling 1,000,000; 0 means that ceiling) total products returned; maxPages (empty = unlimited) caps result pages fetched (shared across pasted search links, per category link in url mode). A capped run still returns everything found up to that point, and Incremental mode's EXPIRED detection is skipped for any run that was capped, resumed, or otherwise did not reach the natural end of the tracked search.

Send results into your apps (MCP connectors)

Optionally pipe results into the apps you already use through Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it in the mcpConnectors field. Each connector receives a condensed, human-readable summary per product (title plus key fields), while the complete record always stays in the Apify dataset. For Notion, set notionParentPageUrl to the page the item pages should be created under, and use maxNotifyListings to cap how many items are exported per connector per run. Supported connectors: Notion, Linear, Airtable, and Apify. Leave the field empty to skip; it never changes the dataset output.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch browses by keyword with brand and on-offer filters and sort; url scrapes any product, search, or category link you paste.
postalCodestring75001French postal code or city used to resolve a drive, click and collect or delivery point, the same way the site's own picker does. Applies to every mode.
deliveryModestringdrivedrive for a drive or click and collect point, or shipping for a home delivery point at the postal code above.
searchTermstring(none; prefill lait)Keyword against the site's own search index. Leave empty to browse the store-wide catalogue and narrow with Brand or On offer only instead. Search mode only.
brandstring(none)Keep only this brand, as shown on the site. Leave empty for all brands. Best-effort match against the site's own brand facet. Search mode only.
specialsOnlybooleanfalseKeep only products carrying a genuine current promotion. Search mode only.
sortBystringRELEVANCESort order, using the site's own real sort options. Search mode only.
urlsarrayone example of each distinct page type (8 links)One or more product, search, or category listing links to scrape (product pages with or without slug, search with page or sort, category ca-n<code> or ca-<digits> with page; tracking parameters and the non-www host are accepted). If you leave this field untouched in url mode, the actor scrapes one example of each distinct page type (8 links), and every returned product is billed as usual; clear the field or paste your own links to avoid that. Search filters (keyword, brand, on offer, sort) are ignored in this mode; postal code and delivery mode still apply.
fetchDetailsbooleanfalseFetch the full category breadcrumb, barcode, complete image gallery and native shopper review feed for each product. Current price, was-price and discount, unit price, rating and one image are already included without this toggle. Always on for a pasted product URL.
maxPagesinteger(none; empty = unlimited)Stop after fetching this many result pages. Leave empty for no limit; the run still stops at Max products total.
maxItemsinteger20Hard cap on total products returned across the run. 0 means the 1,000,000 hard ceiling, still bounded by Max search pages.
resumeFromRunIdstring(none)Continue one specific previous run or dataset: products already collected there are skipped, so this run only returns the remaining new products. For recurring monitoring of the same search, use Incremental mode instead.
incrementalModebooleanfalseTurn on for recurring monitoring of this same search. The first run returns everything as NEW. Later runs return only NEW and UPDATED products by default, plus REAPPEARED/EXPIRED once emitExpired has been used on a fully scanned run. See How to Use.
stateKeystring(none)Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the postal code, delivery mode, search/URL and filter settings.
ignoreFieldsForChangesarray[]Field names that must not make a product count as UPDATED (matched at any depth, or by dotted path). They stay in the output. Incremental mode only.
emitUnchangedbooleanfalseAlso return products unchanged since the last run, marked UNCHANGED. Returns and bills extra rows you already have. Incremental mode only.
emitExpiredbooleanfalseAlso return products from a previous run no longer found, marked EXPIRED, once a run has fully scanned the tracked search (not capped, not a resume). Returns and bills extra synthetic rows, and is required before a later REAPPEARED classification can ever occur. Incremental mode only.
proxyobject{"useApifyProxy": true}Connection settings used to route requests. The default works out of the box.
mcpConnectorsarray(none)Optional connectors to export results into (Notion, Linear, Airtable, Apify).
notionParentPageUrlstring(none)Notion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items exported to each connector per run. Does not affect the dataset.
searchQuerystring(none)Alias of searchTerm, accepted for compatibility. Ignored when searchTerm is set.
maxResultsinteger(none)Alias of maxItems, accepted for compatibility. Used when maxItems is left at its default.

Output Example

{
"productId": "a1b2c3d4-1111-4fff-9999-000000000001",
"title": "SAMPLE BRAND Riz basmati parfume 1kg",
"brand": "SAMPLE BRAND",
"packSize": "1kg",
"productUrl": "https://www.auchan.fr/sample-brand-riz-basmati-parfume-1kg/pr-C0000001",
"price": 3.49,
"currency": "EUR",
"unitPrice": 3.49,
"unitOfMeasure": "€/kg",
"wasPrice": 4.99,
"discountAmount": 1.5,
"discountPercent": 30.1,
"isOnSpecial": true,
"loyaltyCashbackPercent": 5.0,
"availability": "InStock",
"deliveryPromise": "Dans mon drive",
"deliveryChannel": "PICK_UP",
"stock": 42,
"averageRating": 4.2,
"reviewCount": 87,
"images": [
"https://cdn.auchan.fr/media/sample/0000?width=2048&height=2048&fit=pad&format=rw&quality=75",
"https://cdn.auchan.fr/media/sample/0001?width=2048&height=2048&fit=pad&format=rw&quality=75"
],
"categoryPath": ["Epicerie salee", "Riz, pates et legumes secs"],
"category": "Riz, pates et legumes secs",
"ean": "3400000000019",
"reviews": {
"averageRating": 4.3,
"reviewCount": 12,
"ratingBreakdown": { "5": 7, "4": 3, "3": 1, "2": 1, "1": 0 },
"items": [
{ "reviewId": "0000000001", "author": "Sample Shopper", "date": "01/01/26", "rating": 5.0, "title": "Sample review title", "body": "Sample review text.", "verifiedPurchase": true }
]
}
}

Sample shape: values above are illustrative placeholders, not from a live product.

Plan Requirement

On a paid Apify plan, the default connection setting (Apify Proxy, automatic group) serves Auchan.fr pages for typical run sizes; this was measured without a residential connection. Apify free plans do not include proxy access, so on a free plan the default connection is unavailable: the run logs the warning below once and continues on the backup connection, and it ends as failed (see the messages below) when that cannot load the pages. If a request is refused, the run backs off and retries on a fresh exit; if refusals keep happening, retries stop for the rest of that run and whatever was already collected is kept and returned rather than lost.

If the selected connection is unavailable to your account (for example on a free plan), the run logs this warning once and continues on a backup connection:

The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable.

When the backup connection serves data, the log says: "Served over the backup connection (the default connection was unavailable)."

The run ends as failed (instead of finishing empty) when no page could be loaded:

  • Every connection refused: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required."
  • Free plan, backup could not load the pages: "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Auchan.fr pages."
  • Any other run where no page loaded: "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later."

For large or frequent runs, the residential proxy group under Proxy & connection gives more headroom, with a choice of country. You can also supply your own proxy URLs.

FAQ

How much does it cost?

You pay per product returned, a one-time actor start fee, and a separate detail-enrichment fee for each product that is returned after its full detail page was fetched, whether because Fetch product detail was switched on or because it came from a pasted product URL, which always fetches full detail. A product that Incremental mode suppresses as unchanged is never charged the detail fee even if its detail page had to be fetched to check for changes. Shopper reviews ride on the same product page, so they add no separate charge: the review feed is covered by that one detail-enrichment fee per returned product, and each product returns the reviews shown on its Auchan page (no extra pages are fetched), so review volume per product is bounded by what the page lists. Three events can be charged: the product result (one per product returned), detail enrichment (one per returned product whose full detail page was fetched, which includes its reviews) and the one-time actor start. Nothing is charged for suppressed, unchanged or failed rows. The Pricing tab shows current rates. Use Max products to cap the cost of any run.

This actor collects only publicly available grocery product data. You are responsible for how you use it: follow Auchan's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product names, images and review text may be subject to third-party rights.

Can I get only new or changed products on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated products by default; unchanged ones are not billed unless you turn on Emit unchanged.

What is the difference between Resume and Incremental mode?

Resume continues one specific interrupted or previous crawl using a pasted run or dataset id; you use it once, for one run. Incremental mode is for running the exact same search again and again on a schedule: the actor remembers the previous run itself, so you never paste an id, and it classifies every product as new, updated or unchanged against what it saw last time (reappeared and expired only after you turn on Emit expired for a complete scan).

Why did my run finish with an empty dataset instead of failing?

If the postal code cannot be matched to a real address, the run still finishes and products still come back, but prices and stock may come back empty (identity, rating and image fields still populate) since no store is selected. If requests keep being refused instead, the actor logs a warning and still finishes as a completed run, just with fewer or no products, rather than an errored run. Check the run log for what was skipped and try again. The run only stops early with an explicit error for a small number of input problems, such as an unresolvable Resume id or turning on Resume while Incremental mode already has saved state for that search.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

🔗 Want more grocery data?

Pair this actor with these related scrapers from the same team:

🥦 E.Leclerc Scraper
Scrape E.Leclerc France (e.leclerc) grocery and retail products. Search by keyword or...
🥦 Mercadona Scraper
Scrape Mercadona products by delivery-area postal code. Search by keyword or category, or...
🥦 Lidl.es Products, Weekly Offers, Prices & Reviews Scraper
Scrape Lidl.es grocery and non-food products across weekly offers, tools, home, garden...
🥦 REWE.de Scraper
Scrape REWE Germany (rewe.de) grocery products: current price, was-price and discount...
🥦 Instacart Scraper
Scrape Instacart grocery catalogs with per-store prices. Run keywords across several...
🥦 Flashfood Scraper
Scrape Flashfood discounted groceries and stores by location or store. Extract current...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.