# FnacPro Scraper (`fayoussef/fnacpro-scraper`) Actor

Scrape full product data from fnacpro.com — price, EAN, brand, specs, ratings, images and more — from product or listing URLs.

- **URL**: https://apify.com/fayoussef/fnacpro-scraper.md
- **Developed by:** [youssef farhan](https://apify.com/fayoussef) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## FnacPro Scraper — Extract Full Product Data from fnacpro.com

🇬🇧 **English** · [🇫🇷 Français](#fnacpro-scraper--données-produits-complètes-depuis-fnacprocom)

Scrape fnacpro.com product data — price, EAN, brand, full specifications, ratings, images and video — from any product or listing URL. Built for B2B resellers, price-monitoring teams, and catalog builders who need clean, structured FnacPro data without fighting DataDome. Unlike generic HTML scrapers, this actor reads FnacPro's structured product schema directly, so you get complete specs and identifiers, not page snippets.

### What you get

Every product is returned as one structured record. Fields:

**Listing info**
- `title` — full product name
- `url` — canonical product URL
- `product_id` — FnacPro article ID (the `aNNN` in the URL)
- `reference` — FnacPro B2B reference / SKU
- `ean` — EAN / GTIN-13 barcode
- `warehouse` — warehouse code (the `w-N` in the URL)
- `category` — leaf category name
- `breadcrumbs` — full category path with URLs
- `scraped_at` — ISO 8601 timestamp of the scrape

**Pricing & availability**
- `price` — numeric price
- `currency` — ISO currency code (e.g. `EUR`)
- `price_displayed` — price as shown on page (e.g. `58,33 € HT`)
- `availability` — stock status (`InStock`, `OutOfStock`)
- `condition` — item condition (`NewCondition`)
- `seller` — seller name

**Brand & specs**
- `brand` — brand name
- `brand_url` — FnacPro brand page URL
- `characteristics` — full key/value spec table (dimensions, weight, DPI, power, connectivity…)

**Ratings**
- `rating_value` — average rating
- `rating_count` — number of reviews
- `rating_best` / `rating_worst` — rating scale bounds

**Media & description**
- `images` — all product image URLs
- `image_count` — number of images
- `video` — product video (MP4 + thumbnail) when present
- `description` — full product description text

### Sample output

```json
{
  "title": "Souris sans fil Bluetooth ergonomique Logitech MX Vertical Noir",
  "url": "https://www.fnacpro.com/Souris-sans-fil-Bluetooth-ergonomique-Logitech-MX-Vertical-Noir/a12949355/w-4",
  "product_id": "12949355",
  "reference": "9123430",
  "ean": "5099206081901",
  "warehouse": "w-4",
  "price": 58.33,
  "currency": "EUR",
  "price_displayed": "58,33 € HT",
  "availability": "InStock",
  "condition": "NewCondition",
  "brand": "Logitech",
  "brand_url": "https://www.fnacpro.com/Logitech/m55614/w-4",
  "category": "Clavier, souris, tablette graphique",
  "rating_value": 4.5,
  "rating_count": 185,
  "image_count": 12,
  "images": [
    "https://static.fnac-static.com/multimedia/Images/FR/MDM/7f/51/92/9589119/3756-1/.../MX-Vertical-Noir.jpg",
    "https://static.fnac-static.com/multimedia/Images/FR/MDM/7f/51/92/9589119/1520-1/.../MX-Vertical-Noir.jpg"
  ],
  "characteristics": {
    "Type de périphérique": "Souris",
    "Résolution": "4000 dpi",
    "Nombre de boutons": "4 boutons personnalisables",
    "Poids": "Souris : 135 g Récepteur : 2 g"
  },
  "scraped_at": "2026-06-24T20:28:25Z"
}
````

### Use cases

- ✓ B2B resellers benchmarking FnacPro prices against their own catalog daily
- ✓ Price-monitoring teams tracking `price` and `availability` changes over time
- ✓ Marketplace sellers enriching listings with FnacPro `ean`, specs, and images
- ✓ Market researchers analyzing brand coverage and `rating_count` by category
- ✓ Procurement teams building structured product catalogs from FnacPro references

### Pricing

Pay only for what you scrape. No subscription, no idle fees.

| Event | Price | Real example |
|---|---|---|
| Per product scraped | $2.00 / 1,000 results | 10,000 products ≈ **$20** |

The **first 20 results are free** — test the actor on real products, no credit card needed. You can set your own per-result price in the Actor's monetization settings.

### How it works

- **Input:** paste any FnacPro product URLs and/or listing/category/brand/search URLs.
- **Listing expansion + pagination:** listing URLs are paginated through every page automatically and expanded into the product URLs they contain (up to `maxItems`).
- **Concurrent fetch:** products are scraped in parallel (configurable `maxConcurrency`), each request on its own rotating France residential IP.
- **Output:** results land in the Apify dataset — export as JSON, CSV, Excel, or XML.
- **Scheduling & webhooks:** run on a schedule and push results to your endpoint via Apify webhooks.

### Why this scraper

- **Fast & concurrent** — many products are fetched in parallel, so big jobs finish in a fraction of the time of a sequential scraper.
- **Beats DataDome** — versioned browser TLS/JA3 impersonation plus residential proxies, with automatic fingerprint + IP rotation on every retry.
- **Full product detail** — complete spec tables, EAN, and B2B reference, not just search snippets.
- **Handles both product URL formats** — `…/name/aNNN/w-N` (hardware) and `…/aNNN/name` (books, DVDs, games), so search results aren't missed.

### Input example

```json
{
  "startUrls": [
    { "url": "https://www.fnacpro.com/Souris-sans-fil-Bluetooth-ergonomique-Logitech-MX-Vertical-Noir/a12949355/w-4" },
    { "url": "https://www.fnacpro.com/Clavier-souris-tablette-graphique/shi116485/w-4" }
  ],
  "maxItems": 100,
  "maxConcurrency": 20,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "FR" }
}
```

Omit `maxItems` (or set it to `0`) to scrape every product found.

### FAQ

**Does it handle FnacPro's anti-bot protection?**
Yes. FnacPro uses DataDome. The actor uses browser TLS impersonation and rotating residential proxies, retrying with a fresh fingerprint and IP on each block.

**How fast is it?**
It scrapes products concurrently — set `maxConcurrency` (default 10) higher for big jobs. Hundreds of products take minutes, not hours.

**What output formats are supported?**
JSON, CSV, Excel, and XML — exported directly from the Apify dataset or via API.

**Can I scrape a single product instead of a whole listing?**
Yes. Paste one product URL and you get exactly that product.

**Can I scrape a whole category?**
Yes. Paste a category, brand, best-seller, or search URL and the actor paginates through every page and scrapes its products, up to `maxItems`.

**Does it handle pagination?**
Yes — it follows FnacPro's "Voir plus d'articles" pagination across all pages of category, brand, and search listings automatically.

**Does it support scheduling?**
Yes — use Apify Schedules to run it hourly, daily, or weekly, with webhooks on completion.

**Is the data live or cached?**
Live. Every run fetches the current FnacPro page, so prices and stock are real-time.

**How do I limit how much it scrapes?**
Set `maxItems` to cap total products. Use `0` for no limit.

**Can I request extra fields?**
Yes — see the custom scraper section below.

### Use via API or MCP

Run it programmatically via the Apify REST API:

```
POST https://api.apify.com/v2/acts/fayoussef~fnacpro-scraper/runs?token=YOUR_TOKEN
```

Or connect it as an MCP server so AI agents (Claude, ChatGPT, Cursor) can call it directly:

```
https://mcp.apify.com/actors/fayoussef~fnacpro-scraper
```

### Need a custom scraper?

💼 Need a custom solution? Reach out at youssefarhan24@gmail.com
🌐 Got a site in mind? https://automationbyexperts.com/apify

***

## FnacPro Scraper — Données produits complètes depuis fnacpro.com

🇫🇷 **Français** · [🇬🇧 English](#fnacpro-scraper--extract-full-product-data-from-fnacprocom)

Extrayez les données produits de fnacpro.com — prix, EAN, marque, caractéristiques complètes, notes, images et vidéo — depuis n'importe quelle URL de produit ou de liste. Conçu pour les revendeurs B2B, les équipes de veille tarifaire et les créateurs de catalogues qui ont besoin de données FnacPro propres et structurées sans se battre contre DataDome. Contrairement aux scrapers HTML génériques, cet actor lit directement le schéma produit structuré de FnacPro : vous obtenez des caractéristiques et des identifiants complets, pas des fragments de page.

### Ce que vous obtenez

Chaque produit est renvoyé sous la forme d'un enregistrement structuré. Champs :

**Informations produit**

- `title` — nom complet du produit
- `url` — URL canonique du produit
- `product_id` — identifiant article FnacPro (le `aNNN` dans l'URL)
- `reference` — référence B2B / SKU FnacPro
- `ean` — code-barres EAN / GTIN-13
- `warehouse` — code entrepôt (le `w-N` dans l'URL)
- `category` — catégorie finale
- `breadcrumbs` — fil d'Ariane complet avec les URLs
- `scraped_at` — horodatage ISO 8601 de l'extraction

**Prix & disponibilité**

- `price` — prix numérique
- `currency` — code devise ISO (ex. `EUR`)
- `price_displayed` — prix tel qu'affiché sur la page (ex. `58,33 € HT`)
- `availability` — état du stock (`InStock`, `OutOfStock`)
- `condition` — état de l'article (`NewCondition`)
- `seller` — nom du vendeur

**Marque & caractéristiques**

- `brand` — nom de la marque
- `brand_url` — URL de la page marque FnacPro
- `characteristics` — tableau complet clé/valeur des caractéristiques (dimensions, poids, DPI, alimentation, connectique…)

**Notes**

- `rating_value` — note moyenne
- `rating_count` — nombre d'avis
- `rating_best` / `rating_worst` — bornes de l'échelle de notation

**Médias & description**

- `images` — toutes les URLs d'images du produit
- `image_count` — nombre d'images
- `video` — vidéo du produit (MP4 + miniature) si présente
- `description` — texte de description complet du produit

### Exemple de résultat

```json
{
  "title": "Souris sans fil Bluetooth ergonomique Logitech MX Vertical Noir",
  "url": "https://www.fnacpro.com/Souris-sans-fil-Bluetooth-ergonomique-Logitech-MX-Vertical-Noir/a12949355/w-4",
  "product_id": "12949355",
  "reference": "9123430",
  "ean": "5099206081901",
  "warehouse": "w-4",
  "price": 58.33,
  "currency": "EUR",
  "price_displayed": "58,33 € HT",
  "availability": "InStock",
  "condition": "NewCondition",
  "brand": "Logitech",
  "brand_url": "https://www.fnacpro.com/Logitech/m55614/w-4",
  "category": "Clavier, souris, tablette graphique",
  "rating_value": 4.5,
  "rating_count": 185,
  "image_count": 12,
  "images": [
    "https://static.fnac-static.com/multimedia/Images/FR/MDM/7f/51/92/9589119/3756-1/.../MX-Vertical-Noir.jpg",
    "https://static.fnac-static.com/multimedia/Images/FR/MDM/7f/51/92/9589119/1520-1/.../MX-Vertical-Noir.jpg"
  ],
  "characteristics": {
    "Type de périphérique": "Souris",
    "Résolution": "4000 dpi",
    "Nombre de boutons": "4 boutons personnalisables",
    "Poids": "Souris : 135 g Récepteur : 2 g"
  },
  "scraped_at": "2026-06-24T20:28:25Z"
}
```

### Cas d'usage

- ✓ Revendeurs B2B comparant chaque jour les prix FnacPro à leur propre catalogue
- ✓ Équipes de veille tarifaire suivant l'évolution de `price` et `availability`
- ✓ Vendeurs sur marketplaces enrichissant leurs fiches avec l'`ean`, les caractéristiques et les images FnacPro
- ✓ Études de marché analysant la couverture des marques et le `rating_count` par catégorie
- ✓ Services achats construisant des catalogues produits structurés à partir des références FnacPro

### Tarification

Payez uniquement ce que vous extrayez. Pas d'abonnement, pas de frais à vide.

| Événement | Prix | Exemple concret |
|---|---|---|
| Par produit extrait | 2,00 $ / 1 000 résultats | 10 000 produits ≈ **20 $** |

Les **20 premiers résultats sont gratuits** — testez l'actor sur de vrais produits, sans carte bancaire. Vous pouvez définir votre propre prix par résultat dans les paramètres de monétisation de l'Actor.

### Comment ça marche

- **Entrée :** collez n'importe quelles URLs de produits FnacPro et/ou des URLs de liste/catégorie/marque/recherche.
- **Expansion des listes + pagination :** les URLs de liste sont paginées sur toutes les pages automatiquement et converties en URLs de produits (jusqu'à `maxItems`).
- **Extraction concurrente :** les produits sont extraits en parallèle (`maxConcurrency` configurable), chaque requête sur sa propre IP résidentielle française à rotation.
- **Sortie :** les résultats arrivent dans le dataset Apify — export en JSON, CSV, Excel ou XML.
- **Planification & webhooks :** exécutez selon un calendrier et envoyez les résultats à votre endpoint via les webhooks Apify.

### Pourquoi ce scraper

- **Rapide & concurrent** — de nombreux produits sont extraits en parallèle : les gros volumes se terminent en une fraction du temps d'un scraper séquentiel.
- **Déjoue DataDome** — usurpation d'empreinte navigateur TLS/JA3 versionnée et proxies résidentiels, avec rotation automatique de l'empreinte et de l'IP à chaque nouvelle tentative.
- **Détail produit complet** — tableaux de caractéristiques complets, EAN et référence B2B, pas seulement des extraits de recherche.
- **Gère les deux formats d'URL produit** — `…/nom/aNNN/w-N` (matériel) et `…/aNNN/nom` (livres, DVD, jeux), pour ne rien manquer dans les résultats de recherche.

### Exemple d'entrée

```json
{
  "startUrls": [
    { "url": "https://www.fnacpro.com/Souris-sans-fil-Bluetooth-ergonomique-Logitech-MX-Vertical-Noir/a12949355/w-4" },
    { "url": "https://www.fnacpro.com/Clavier-souris-tablette-graphique/shi116485/w-4" }
  ],
  "maxItems": 100,
  "maxConcurrency": 20,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "FR" }
}
```

Omettez `maxItems` (ou mettez-le à `0`) pour extraire tous les produits trouvés.

### FAQ

**Gère-t-il la protection anti-bot de FnacPro ?**
Oui. FnacPro utilise DataDome. L'actor recourt à l'usurpation TLS du navigateur et à des proxies résidentiels à rotation, en réessayant avec une nouvelle empreinte et une nouvelle IP à chaque blocage.

**Quelle est sa rapidité ?**
Il extrait les produits en parallèle — augmentez `maxConcurrency` (10 par défaut) pour les gros volumes. Des centaines de produits prennent des minutes, pas des heures.

**Quels formats de sortie sont pris en charge ?**
JSON, CSV, Excel et XML — exportés directement depuis le dataset Apify ou via l'API.

**Puis-je extraire un seul produit plutôt qu'une liste entière ?**
Oui. Collez une URL de produit et vous obtenez exactement ce produit.

**Puis-je extraire une catégorie entière ?**
Oui. Collez une URL de catégorie, de marque, de meilleures ventes ou de recherche : l'actor pagine toutes les pages et extrait leurs produits, jusqu'à `maxItems`.

**Gère-t-il la pagination ?**
Oui — il suit automatiquement la pagination « Voir plus d'articles » de FnacPro sur toutes les pages des listes de catégorie, de marque et de recherche.

**Prend-il en charge la planification ?**
Oui — utilisez les Schedules Apify pour l'exécuter toutes les heures, chaque jour ou chaque semaine, avec des webhooks à la fin.

**Les données sont-elles en direct ou mises en cache ?**
En direct. Chaque exécution récupère la page FnacPro actuelle : prix et stock en temps réel.

**Comment limiter le volume extrait ?**
Définissez `maxItems` pour plafonner le nombre total de produits. Utilisez `0` pour aucune limite.

**Puis-je demander des champs supplémentaires ?**
Oui — voir la section scraper sur mesure ci-dessous.

### Utilisation via API ou MCP

Exécutez-le par programmation via l'API REST Apify :

```
POST https://api.apify.com/v2/acts/fayoussef~fnacpro-scraper/runs?token=YOUR_TOKEN
```

Ou connectez-le en tant que serveur MCP pour que des agents IA (Claude, ChatGPT, Cursor) l'appellent directement :

```
https://mcp.apify.com/actors/fayoussef~fnacpro-scraper
```

### Besoin d'un scraper sur mesure ?

💼 Besoin d'une solution personnalisée ? Écrivez à youssefarhan24@gmail.com
🌐 Un site en tête ? https://automationbyexperts.com/apify

***

```
PLACEHOLDERS TO FILL IN
- $2.00 / 1,000 results  →  set your actual per-result price in the Actor's monetization settings
```

# Actor input Schema

## `startUrls` (type: `array`):

Paste any fnacpro.com URLs — individual product pages (e.g. .../a12949355/w-4) and/or category, brand, best-seller, or search listing pages. Listing pages are automatically paginated (all pages) and expanded into the products they contain, up to Max products.

## `maxItems` (type: `integer`):

Maximum number of products to scrape across all input URLs. Set to 0 for no limit (scrape everything found).

## `maxConcurrency` (type: `integer`):

How many products to scrape in parallel. Higher = faster, but very high values can trigger more DataDome blocks. 10 is a good balance; raise it for big jobs on residential proxies.

## `maxRetries` (type: `integer`):

How many times to retry a page (rotating browser fingerprint and proxy IP) before giving up. Increase if you see DataDome blocks.

## `proxyConfiguration` (type: `object`):

fnacpro.com is protected by DataDome — residential proxies are strongly recommended. Defaults to Apify Residential proxies.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.fnacpro.com/Souris-sans-fil-Bluetooth-ergonomique-Logitech-MX-Vertical-Noir/a12949355/w-4"
    }
  ],
  "maxItems": 0,
  "maxConcurrency": 10,
  "maxRetries": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}
```

# Actor output Schema

## `products` (type: `string`):

All scraped product records (title, url, reference, EAN, price, availability, brand, category, specifications, ratings, images, video, description).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.fnacpro.com/Souris-sans-fil-Bluetooth-ergonomique-Logitech-MX-Vertical-Noir/a12949355/w-4"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "FR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fayoussef/fnacpro-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.fnacpro.com/Souris-sans-fil-Bluetooth-ergonomique-Logitech-MX-Vertical-Noir/a12949355/w-4" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "FR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("fayoussef/fnacpro-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.fnacpro.com/Souris-sans-fil-Bluetooth-ergonomique-Logitech-MX-Vertical-Noir/a12949355/w-4"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}' |
apify call fayoussef/fnacpro-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fayoussef/fnacpro-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FnacPro Scraper",
        "description": "Scrape full product data from fnacpro.com — price, EAN, brand, specs, ratings, images and more — from product or listing URLs.",
        "version": "1.0",
        "x-build-id": "ETsYqWeb6dldEQgAo"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fayoussef~fnacpro-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fayoussef-fnacpro-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fayoussef~fnacpro-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fayoussef-fnacpro-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fayoussef~fnacpro-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fayoussef-fnacpro-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Product or listing URLs",
                        "type": "array",
                        "description": "Paste any fnacpro.com URLs — individual product pages (e.g. .../a12949355/w-4) and/or category, brand, best-seller, or search listing pages. Listing pages are automatically paginated (all pages) and expanded into the products they contain, up to Max products.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max products",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of products to scrape across all input URLs. Set to 0 for no limit (scrape everything found).",
                        "default": 0
                    },
                    "maxConcurrency": {
                        "title": "Concurrency (speed)",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many products to scrape in parallel. Higher = faster, but very high values can trigger more DataDome blocks. 10 is a good balance; raise it for big jobs on residential proxies.",
                        "default": 10
                    },
                    "maxRetries": {
                        "title": "Max retries per page",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many times to retry a page (rotating browser fingerprint and proxy IP) before giving up. Increase if you see DataDome blocks.",
                        "default": 4
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "fnacpro.com is protected by DataDome — residential proxies are strongly recommended. Defaults to Apify Residential proxies.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "FR"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
