Fnac.com - Prices, Discounts, Variants & Reviews
Pricing
from $1.00 / 1,000 product results
Fnac.com - Prices, Discounts, Variants & Reviews
Scrape Fnac (fnac.com) products: current price plus strike-through discount, colour/model variant matrix, brand, breadcrumb category, and the site's own reviews with rating. Search by keyword/category or paste product and search-result links.
Pricing
from $1.00 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Fnac Product Scraper
Pull product data from Fnac (fnac.com), a French electronics, media and entertainment retailer. Search by keyword and/or category, or paste product and search-result links directly. Every record includes the current price, the strike-through reference price with computed discount when a product is genuinely marked down, and the colour/model variant matrix when you ask for full detail.
Why This Scraper?
- Was-price and discount, structured, never fabricated. When a product is marked down against the site's own reference price, both prices are captured plus the computed discount amount, percentage, and the site's own promo label. Full-price products simply carry
null-- nothing is guessed. - Real narrowing, not a filter that quietly does nothing. A single requested brand narrows via the site's own search facet (verified against the live site: it narrowed a multi-page keyword result down to a single page); sort reorders the full server-side result set.
- Colour/model variant matrix. Products sold in more than one colour or configuration return every sibling variant, each with its own id, url, image and availability.
- Reviews straight from the product page. Overall rating, rating count, and the product's own individual reviews (author, date, rating, title, body, verified-purchase flag) -- not a third-party review vendor.
- Flattened spec sheet. Full detail returns every characteristic the product page itself declares (storage, screen size, colour, EAN, condition, and whatever else that category carries) rather than a fixed field list, so nothing category-specific is silently dropped.
- Two ways in. Keyword/category search with real site filters (brand, price range, discount-only, sort), or paste any product/search-result link and continue pagination automatically.
- Optional export to your apps. Send results into Notion, Linear, Airtable, or any Apify MCP connector alongside the dataset.
- Resume and recurring updates. Turn on Incremental mode to get only NEW, UPDATED, and REAPPEARED products on every scheduled run, or resume one specific interrupted crawl with
resumeFromRunId.
Data You Get
| Field | Example value |
|---|---|
| productId / sku | 00000001, 0000000000000 (EAN) |
| name | Sample Brand Smartphone 128 Go Black |
| brand | SampleBrand |
| category / breadcrumbPath | Smartphones, ["Home", "Smartphones and Connected Devices", "All phones"] |
| url | https://www.fnac.com/mp00000001/sample-brand-smartphone-128-go-black/w-4 |
| price / currency | 429.99, EUR |
| originalPrice / discountAmount / discountPercent | 499.99, 70.00, 14.0 |
| isOnSpecial / promoLabel | true, Bon plan |
| onlineAvailable / condition | true, new |
| image / images | ["https://static.example.com/000000000.jpg"] |
| description | full product description text |
| characteristics | {"Storage capacity": "128 Go", "Colour": "Black", "EAN": "0000000000000"} |
| variants | [{"axis": "Colour", "name": "Blue", "url": "https://www.fnac.com/mp00000002/.../w-4", "available": true}] |
| rating / reviewCount | 4.5, 26 |
| reviews.averageRating / reviews.ratingCount / reviews.totalReviewCount | 4.5, 26, 10 |
| reviews.items[] | [{"rating": 5, "title": "Sample title", "body": "Sample review text.", "author": "Jane D.", "date": "Posted on 01 Jan 2026", "verifiedPurchase": true}] |
Sample shape: values above are illustrative placeholders, not from a live product.
How to Use
1. Keyword search, first page, with reviews (default):
{"mode": "search","searchTerm": "iphone","maxItems": 20}
2. Keyword + category, filtered to a brand, discounted items only, sorted by price:
{"mode": "search","searchTerm": "smartphone","category": "reconditionne","brands": ["Apple"],"specialsOnly": true,"sortBy": "PRICE_ASC","maxItems": 50,"maxPages": 5}
3. Full product detail (spec sheet + variants) and reviews for a pasted product link:
{"mode": "url","urls": ["https://www.fnac.com/mp00000001/sample-brand-smartphone-128-go-black/w-4"],"fetchDetails": true,"fetchReviews": true}
4. Paste a search-result link and keep paginating forward:
{"mode": "url","urls": ["https://www.fnac.com/SearchResult/ResultList.aspx?Search=console"],"maxItems": 100,"maxPages": 10}
5. Recurring monitoring of the same search, only what changed:
{"mode": "search","searchTerm": "iphone","incrementalMode": true,"maxItems": 50}
Resume and recurring updates
Two different things, both under the same input section:
resumeFromRunIdcontinues ONE specific interrupted crawl. Paste a previous run ID or dataset ID and this run skips every product that run already collected, picking up where it left off -- useful after a run was stopped early or hit an error partway through a large pull.incrementalModeis for running the SAME search or URL set again and again (daily, weekly, on a schedule) and getting only what changed. It remembers the previous run's products in a dedicated key-value store, keyed automatically from the mode, search/URL and filter settings (or your ownstateKeyif you want to name or deliberately share a campaign) -- so two differently-configured runs never mix their baselines. Every product is classified aschangeType:NEW(first time seen),UPDATED(a comparable field changed -- seechangedFields),REAPPEARED(was gone, is back), or, withemitExpiredon and only once a run has fully scanned every tracked search/URL,EXPIRED(was tracked, no longer found).UNCHANGEDproducts are tracked but not returned unlessemitUnchangedis on -- both extra-emission toggles are off by default because they return, and bill, rows you already have. The state key folds infetchReviewsalongside the search filters, since turning it on or off changes the emitted record shape.incrementalModedefaults tofalse-- a normal run's behavior and output shape are unchanged until you opt in. Combining it withresumeFromRunIdbootstraps a brand-new monitoring campaign from that resumed crawl's results; if a baseline already exists for the derived (or given) state key, the run fails fast rather than silently mixing the two.
Input Parameters
| Parameter | Type | Description |
|---|---|---|
mode | string | search or url. |
searchTerm | string | Keyword (search mode only; uses the site's own product search). |
category | string | A category/rayon name (search mode only), combined with searchTerm into the site's own free-text search. |
brands | array | Exact brand names to keep (search mode only). |
minPrice / maxPrice | number | EUR price band to keep (search mode only). |
specialsOnly | boolean | Keep only products currently showing a genuine discount against the site's own reference price (search mode only). |
sortBy | string | RELEVANCE, PRICE_ASC, PRICE_DESC, BEST_SELLERS, or TOP_RATED. |
urls | array | Product or search-result-listing URLs to scrape (url mode only). |
fetchDetails | boolean | Fetch full product detail (description, EAN/SKU, breadcrumb category, flattened characteristics, image gallery, variant matrix). |
fetchReviews | boolean | Fetch the product's own reviews. |
maxReviewsPerProduct | integer | Cap on written reviews per product; the product page itself only ever surfaces a recent subset. |
maxPages | integer | Cap on result pages per search/URL entry; empty = unlimited. |
maxItems | integer | Cap on total products returned; 0 = unlimited. |
resumeFromRunId | string | Previous run ID or dataset ID to continue ONE interrupted crawl without re-returning/re-charging products it already collected. See "Resume and recurring updates" above. |
incrementalMode | boolean | Recurring monitoring of the same search/URL set: returns only NEW/UPDATED/REAPPEARED products against a remembered baseline. Default false. See "Resume and recurring updates" above. |
stateKey | string | Incremental mode only. Name a monitoring campaign, or deliberately share state across differently-configured runs. Leave empty to derive one automatically. |
emitUnchanged | boolean | Incremental mode only. Also return UNCHANGED products. Off by default -- returns and bills rows you already have. |
emitExpired | boolean | Incremental mode only. Also return EXPIRED products once a run fully scans every tracked search/URL. Off by default -- returns and bills extra synthetic rows. |
proxy | object | Apify proxy configuration. Works on every plan by default. |
mcpConnectors | array | Optional MCP connectors to export results into (Notion, Linear, Airtable, Apify). |
notionParentPageUrl | string | Notion connector only: page under which item pages are created. |
maxNotifyListings | integer | Cap on items exported to each connector per run. Does not affect the dataset. |
Output Example
{"productId": "00000001","sku": "0000000000000","name": "Sample Brand Smartphone 128 Go Black","brand": "SampleBrand","category": "Smartphones","breadcrumbPath": ["Home", "Smartphones and Connected Devices", "All phones"],"url": "https://www.fnac.com/mp00000001/sample-brand-smartphone-128-go-black/w-4","price": 429.99,"currency": "EUR","originalPrice": 499.99,"discountAmount": 70.00,"discountPercent": 14.0,"isOnSpecial": true,"promoLabel": "Bon plan","onlineAvailable": true,"condition": "new","image": "https://static.example.com/000000000.jpg","description": "Sample product description as shown on the site.","characteristics": { "Storage capacity": "128 Go", "Colour": "Black", "EAN": "0000000000000" },"variants": [{ "axis": "Colour", "name": "Blue", "url": "https://www.fnac.com/mp00000002/sample-brand-smartphone-128-go-blue/w-4", "available": true }],"rating": 4.5,"reviewCount": 26,"reviews": {"averageRating": 4.5,"ratingCount": 26,"totalReviewCount": 10,"items": [{ "rating": 5, "title": "Sample title", "body": "Sample review text.", "author": "Jane D.", "date": "Posted on 01 Jan 2026", "verifiedPurchase": true }]}}
Sample shape: values above are illustrative placeholders, not from a live product.
A note on reviews and prices
Reviews come directly from the product page itself, not a third-party review vendor -- the page only ever surfaces its own recent written reviews, while the overall rating and rating count reflect the full history. originalPrice reflects the site's own reference price and is only ever populated when it is genuinely higher than the current price -- a full-price product always carries null there, never a fabricated discount.
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 (name 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.
A note on plans
The default connection works on every Apify plan, including the free tier. Change it only for a specific country or very large runs.