Fnac API & Scraper
The Fnac API turns Fnac, the French electronics, books and culture retailer and marketplace, into clean JSON in four actions: search, product/detail, product/offers and product/reviews, across four storefronts chosen with country: fr (fnac.com, EUR), be (fr.fnac.be, EUR), ch (fr.fnac.ch, CHF) and pt (fnac.pt, EUR).
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search takes a keyword, offers the site's own orderings (relevance, price, customer rating) and its server-side filters (price range, sold by Fnac), and pages 20 products at a time. Each row carries the product id, title, URL, brand or the book's authors with their role, the price with the struck 30-day-lowest price and discount when the page shows one, the member price where the storefront prints it next to the standard price, the store-pickup price on books, condition (new or used with a grade), the seller (Fnac itself or a marketplace seller), availability, the star rating and its count, and how many other new and used offers exist with their from-prices. product/detail adds the EAN, SKU and MPN, the eco-participation and private-copy levy already included in the price, the delivery options with price and date, the marketplace seller's rating and sales count, the energy class, images, description, the full specification list and the breadcrumb. product/offers lists every seller's offer for a product, new and used, with price, shipping and total, so the buy-box can be compared against the cheapest delivered offer. product/reviews returns the customer reviews, paged and sortable, with the purchase date and verified flag. In a live check on 2026-09-16, 11 products in 6 categories matched their own product pages on title, price, EAN, rating and availability with no mismatch. No Fnac account, no browser, one ReefAPI key and the standard { ok, data, meta, error } envelope. Fnac Spain is not available.
The price, the struck price, the member price and the pickup price are four different numbers
A Fnac page can show up to four prices for one product. The API keeps each in its own field so a price tracker never compares the wrong two, and it breaks out the fees that are already inside the price.
| Product (storefront) | price | struck_price | other price on the page | included fees |
|---|---|---|---|---|
| Nikon Z f kit (fr) | 2,399 EUR | 2,749 (lowest price over 30 days), -13% | none | eco-participation 0.22 |
| Samsung Mini LED TV 55" (fr) | 569.99 EUR | 629.99 (lowest price over 30 days), -10% | none | eco-participation 17.47 |
| Apple iPhone 18 Pro 256 GB (fr) | 1,479 EUR | null | none | eco-participation 3.07, private-copy levy 14 |
| Strange Academy, grimoire edition (fr, book) | 36 EUR | null | store_pickup_price 34.20 (-5% with store pickup) | none |
| iPhone 16 128 GB (ch) | 799 CHF | null | member_price 759.05 (Prix adhérent) | none |
struck_price is the legal 'lowest price over the last 30 days' when the page says so (struck_price_type lowest_price_30_days) and null when the page strikes nothing. member_price appears only where the storefront prints a separate member number (Switzerland and Portugal); on fnac.com a member-only marketplace deal is a badge ('OFFRE ADHERENT'), and the API does not invent a member number for it.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/fnac/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "casque bluetooth"
}
}{
"ok": true,
"meta": {
"api": "fnac",
"endpoint": "search",
"mode": "live",
"latency_ms": 1917.5,
"record_count": 20,
"bytes": 952883,
"cache_hit": false,
"pagination": {
"page": 1,
"page_size": 20,
"total": 11197,
"has_more": true
}
},
"data": {
"results": [
{
"position": 1,
"product_id": "22687125",
"catalog": 1,
"product_code": "a22687125",
"offer_id": null,
"title": "Casque supra-auriculaire sans fil JBL Tune 535/530 Bluetooth Noir",
"url": "https://www.fnac.com/Casque-supra-auriculaire-sans-fil-JBL-Tune-535BT-Bluetooth-Noir/a22687125/w-4",
"brand": null,
"product_type": null,
"contributors": null,
"price": 34.99,
"currency": "EUR",
"struck_price": 49.99,
"struck_price_type": null,
"discount_percent": 30,
"member_price": null,
"member_price_label": null,
"store_pickup_price": null,
"store_pickup_label": null,
"store_pickup_only": false,
"store_availability": "Voir la disponibilité en magasin",
"condition": "new",
"condition_grade": null,
"seller": {
"name": "FNAC.COM",
"id": null,
"type": "fnac",
"is_fnac": true
},
"fulfilled_by": "FNAC.COM",
"availability": "En stock en ligne",
"availability_code": 199,
"sold_out": false,
"rating": 4.5,
"rating_count": 13,
"rating_scale": 5,
"other_offers": [
{
"condition": "[trimmed-depth]",
"count": "[trimmed-depth]",
"from_price": "[trimmed-depth]"
},
{
"condition": "[trimmed-depth]",
"count": "[trimmed-depth]",
"from_price": "[trimmed-depth]"
}
],
"lowest_new_offer_price": null,
"lowest_used_offer_price": 66.72,
"badges": [
"Offre FNAC -30%"
],
"highlights": [
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"image": "https://static.fnac-static.com/multimedia/Images/FR/MDM/7b/95/be/29267323/1540-1/tsp20260911094610/Casque-supra-auriculaire-sans-fil-JBL-Tune-535-530-Bluetooth-Noir.jpg"
},
{
"position": 2,
"product_id": "21836330",
"catalog": 1,
"product_code": "a21836330",
"offer_id": null,
"title": "Casque circum-auriculaire sans fil JBL Tune 780NC Bluetooth avec réduction active du bruit Noir",
"url": "https://www.fnac.com/Casque-circum-auriculaire-sans-fil-JBL-Tune-780NC-Bluetooth-avec-reduction-active-du-bruit-Noir/a21836330/w-4",
"brand": null,
"product_type": null,
"contributors": null,
"price": 89.99,
"currency": "EUR",
"struck_price": 129.99,
"struck_price_type": null,
"discount_percent": 31,
"member_price": null,
"member_price_label": null,
"store_pickup_price": null,
"store_pickup_label": null,
"store_pickup_only": false,
"store_availability": "Voir la disponibilité en magasin",
"condition": "new",
"condition_grade": null,
"seller": {
"name": "FNAC.COM",
"id": null,
"type": "fnac",
"is_fnac": true
},
"fulfilled_by": "FNAC.COM",
"availability": "En stock en ligne",
"availability_code": 199,
"sold_out": false,
"rating": 4.5,
"rating_count": 20,
"rating_scale": 5,
"other_offers": [
{
"condition": "[trimmed-depth]",
"count": "[trimmed-depth]",
"from_price": "[trimmed-depth]"
}
],
"lowest_new_offer_price": null,
"lowest_used_offer_price": null,
"badges": [
"Offre Fnac -31%"
],
"highlights": [
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"image": "https://static.fnac-static.com/multimedia/Images/FR/MDM/9e/4c/b3/28527774/1540-1/tsp20260911094610/Casque-circum-auriculaire-sans-fil-JBL-Tune-780NC-Bluetooth-avec-reduction-active-du-bruit-Noir.jpg"
},
{
"position": 3,
"product_id": "17689644",
"catalog": 1,
"product_code": "a17689644",
"offer_id": null,
"title": "Casque audio sans fil SONY Bluetooth à réduction de bruit WH-CH720N Noir",
"url": "https://www.fnac.com/Casque-audio-sans-fil-SONY-Bluetooth-a-reduction-de-bruit-WH-CH720N-Noir/a17689644/w-4",
"brand": null,
"product_type": null,
"contributors": null,
"price": null,
"currency": null,
"struck_price": null,
"struck_price_type": null,
"discount_percent": null,
"member_price": null,
"member_price_label": null,
"store_pickup_price": 69.99,
"store_pickup_label": "Retrait en magasin",
"store_pickup_only": true,
"store_availability": "Voir la disponibilité en magasin",
"condition": "new",
"condition_grade": null,
"seller": {
"name": "FNAC.COM",
"id": null,
"type": "fnac",
"is_fnac": true
},
"fulfilled_by": "FNAC.COM",
"availability": "Stock en ligne épuisé",
"availability_code": null,
"sold_out": true,
"rating": 4.5,
"rating_count": 522,
"rating_scale": 5,
"other_offers": [
{
"condition": "[trimmed-depth]",
"count": "[trimmed-depth]",
"from_price": "[trimmed-depth]"
},
{
"condition": "[trimmed-depth]",
"count": "[trimmed-depth]",
"from_price": "[trimmed-depth]"
}
],
"lowest_new_offer_price": null,
"lowest_used_offer_price": 74.28,
"badges": [
"Offre FNAC -30%"
],
"highlights": [
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"image": "https://static.fnac-static.com/multimedia/Images/FR/MDM/85/be/44/21282437/1540-1/tsp20260909184744/Casque-audio-sans-fil-SONY-Bluetooth-a-reduction-de-bruit-WH-CH720N-Noir.jpg"
}
],
"count": 20,
"total_results": 11197,
"total_pages": 560,
"page": 1,
"page_size": 20,
"sort": "relevance",
"sort_applied": "0",
"query": "casque bluetooth",
"country": "fr",
"currency": "EUR",
"applied_filters": null,
"price_filter_mode": null,
"dropped_outside_price_range": 0,
"keyword_matches_on_page": 20,
"query_recognised": true,
"fallback_results_dropped": 0,
"sponsored_dropped": 0,
"redirected_to": null,
"redirect_type": null,
"page_notice": null
}
}What the Fnac API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search a Fnac storefront by keyword with the site's own sorts and filters (price range, sold by Fnac). Each row: product id, title, URL, brand or contributors, the price with the struck 30-day-lowest price and discount when shown, the member price where the storefront shows one, the store-pickup price on books, condition (new/used + grade), seller (Fnac or marketplace), availability, rating + count, other new/used offers with their from-prices, badges and image. | Pricing teams call search to search a Fnac storefront by keyword with the site's own sorts and filters (price range, sold…. | query, country, page, sort, price_min, ... |
| product/detail | The Fnac product record by URL or product_id: title, brand or contributors, EAN, SKU, MPN, the buy-box price with the struck 30-day-lowest price and discount, the eco-participation and copie-privée levy it includes, member price where shown, store-pickup price on books, availability (in stock / pre-order), condition, seller (Fnac or marketplace, with rating and sales count), delivery, the other new/used offers summary, star rating + count, energy class, images, video, description, specs and breadcrumb. | Marketplace operators call product/detail to get the Fnac product record by URL or product_id. | url, product_id, country, max_rotations |
| product/offers | Every offer for one product (Fnac/Darty and marketplace sellers, new and used), by URL or product_id, with the site's condition filter and sorts: seller name + rating + review count, condition (new/refurbished/used + grade), price, shipping price, total price, delivery estimate and badges. | Catalog enrichment teams call product/offers to get every offer for one product (Fnac/Darty and marketplace sellers, new and used), by URL or pro…. | url, product_id, country, condition, sort, ... |
| product/reviews | Customer reviews for a product, by URL or product_id, paged and sortable: score, title, text, author display name, date, purchase date, verified-purchase flag and helpful votes, plus the average rating and review count. | Retail analysts call product/reviews to get customer reviews for a product, by URL or product_id, paged and sortable. | url, product_id, country, sort, page, ... |
Call search from your stack
curl -X POST https://api.reefapi.com/fnac/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"casque bluetooth"}'import requests
r = requests.post(
"https://api.reefapi.com/fnac/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "casque bluetooth"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/fnac/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "casque bluetooth"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.fnac.search with {"query":"casque bluetooth"}.Who uses this API and why
- French, Belgian, Swiss and Portuguese price trackers follow Fnac's price, the struck 30-day-lowest price and, where shown, the member price, each in its own field.
- Marketplace sellers watch which competitors list a product on Fnac, their condition, price plus shipping and seller rating, to see when the buy-box is beaten.
- Catalog teams pull the EAN, MPN, full specification list, energy class and images for products matched by GTIN, in four storefronts.
- Book and media analysts read authors with their roles, store-pickup prices and the new and used offer counts for titles.
Questions developers ask before integrating
Which storefronts does this cover?
Four, chosen with country: fr for fnac.com (EUR, the default), be for fr.fnac.be (EUR), ch for fr.fnac.ch (CHF) and pt for fnac.pt (EUR). A pasted product URL sets the storefront by itself. Product ids are shared across storefronts, but price, stock and sellers differ, and currency follows the storefront. Fnac Spain (fnac.es) returns MARKET_UNAVAILABLE: it is not served.
Which price does a row carry, and what is struck_price?
price is the price the page sells at, VAT and fees included. struck_price is the crossed-out number next to it; on fnac.com that is the legal lowest price of the last 30 days (struck_price_type lowest_price_30_days), and discount_percent is the page's own label. When nothing is struck, struck_price is null. The eco-participation and private-copy levy are already inside price; product/detail returns them apart, so never add them on top.
Does the API return the member (adhérent) price?
Where the storefront prints one. Fnac Switzerland and Fnac Portugal show a member price next to the standard price on many products; the API returns the standard price as price and the member price apart as member_price with its label. On fnac.com, member-only marketplace deals carry an 'OFFRE ADHERENT' badge without a separate number, so the API returns the badge and leaves member_price null rather than guessing. Books also show a store-pickup price (-5%), returned as store_pickup_price, never as price.
Is a search result the cheapest offer?
No. A row is the product's buy-box offer, sold by Fnac or by a marketplace seller, and it tells you how many other new and used offers exist and their from-prices. product/offers lists every offer with price, shipping and total; its price sorts order by price plus shipping. Some marketplace sellers park unavailable stock at 9,999 EUR; those offers are flagged price_looks_placeholder and left in place.
What happens on a keyword Fnac does not know?
Fnac answers most made-up keywords with zero results, but some it pads with loosely related products (zzqqxxnonexist returned books whose titles contain 'existe'). When no product on the page carries a query word and the page is not one coherent kind of product, the API returns an empty list, counts the removed rows in fallback_results_dropped and keeps Fnac's count in fallback_total; include_fallback_results returns them apart. Typos Fnac understands keep their results: on 2026-09-16 all 36 real French queries, including iphnoe, televison, harry poter and nintedo switch, kept their pages, and all 16 nonsense queries came back empty.
Why does a search row have no price?
Because the product is sold out on that storefront. Fnac keeps sold-out products in the grid with an empty price box and 'Stock épuisé'; the API returns price null and sold_out true instead of inventing a number. On a price-descending search that can be a large share of the page.
Can I read the reviews?
Yes. product/reviews returns 10 reviews a page, sortable newest first, most helpful, best or lowest scores, with the score, title, text, the reviewer's display name, the review date, the purchase date when the page states it, a verified-purchase flag and helpful votes, plus the average rating and total count. A page past the last one comes back empty with page_notice.
What is the Fnac API?
Fnac API is a ReefAPI endpoint group for fnac france, belgium, switzerland and portugal: prices, member prices, marketplace offers, specs and reviews as json. It returns live JSON through POST requests under /fnac/v1.
Is the Fnac API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Fnac calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Fnac login or account?
No login to Fnac is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Fnac data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Fnac API use?
Fnac actions currently cost 1-3 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Fnac from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call fnac actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Fnac API a Fnac scraper?
It is the managed alternative to a DIY Fnac scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same fnac france, belgium, switzerland and portugal: prices, member prices, marketplace offers, specs and reviews as json back as clean JSON.