BlogsE-Commerce

Scrape FNAC Discounts in Paris: Extract Promo Price vs Original Price Automatically

If you’re tracking electronics, books, or gadget pricing in Europe, Fnac is a goldmine—especially in a competitive market like Paris.

FNAC frequently runs:

  • Flash discounts
  • Bundle deals
  • Seasonal promotions

But here’s the catch:
👉 Promo prices and original prices are displayed differently across pages, making manual tracking inefficient.

In this guide, you’ll learn how to automatically extract promo price vs original price using Python, along with real-world scraping strategies.


🧠 Why Track FNAC Discounts?

Let me give you a quick example.

While analyzing laptop prices across EU retailers, we noticed:

  • FNAC often shows “prix barré” (strikethrough price)
  • Discounts vary by category (electronics vs books)
  • Some deals are time-limited or membership-based

Without scraping both prices, you miss:

  • Actual discount percentage
  • Pricing trends
  • Competitive positioning

📊 What Data Should You Extract?

From FNAC product listings, collect:

💰 Pricing Data

  • Original price (strikethrough / prix initial)
  • Discounted price (prix promo)
  • Discount % (calculate manually)

🧾 Product Info

  • Product name
  • Category
  • Brand

🏷️ Promotion Data

  • Deal tags (e.g., “-20%”, “Offre spéciale”)
  • Availability

🔍 Step 1: Inspect FNAC Website Structure

Open DevTools → Inspect product page.

You’ll typically find:

  • Promo price → .userPrice or .f-price
  • Original price → .oldPrice or .striked

⚠️ FNAC uses dynamic rendering, so structure may vary.


🛠️ Python Script (Basic Scraper)

Step 1: Install Dependencies

pip install requests beautifulsoup4

Step 2: Scrape Product Page

import requests
from bs4 import BeautifulSoupurl = "https://www.fnac.com/example-product"headers = {
"User-Agent": "Mozilla/5.0",
"Accept-Language": "fr-FR,fr;q=0.9"
}response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")# Extract product name
name = soup.select_one("h1").text.strip()# Extract promo price
promo_price = soup.select_one(".userPrice")
promo_price = promo_price.text.strip() if promo_price else None# Extract original price
original_price = soup.select_one(".oldPrice")
original_price = original_price.text.strip() if original_price else Noneprint({
"name": name,
"promo_price": promo_price,
"original_price": original_price
})

⚡ Step 3: Extract Discount %

def calculate_discount(original, promo):
try:
original = float(original.replace("€", "").replace(",", "."))
promo = float(promo.replace("€", "").replace(",", ".")) discount = ((original - promo) / original) * 100
return round(discount, 2)
except:
return None

🚀 Step 4: Scrape Category Pages (Scale It)

Instead of scraping one product:

  • Scrape category pages
  • Collect product URLs
  • Loop through each product
product_links = soup.select("a.product-link")for link in product_links:
product_url = link.get("href")
# Call product scraping function

⚡ Step 5: API-Based Scraping (Best Method)

FNAC often loads data via APIs.

👉 Use DevTools → Network → XHR

Look for:

  • /products
  • /offers
  • /pricing

These endpoints return clean JSON like:

{
"price": 799,
"original_price": 999,
"discount": 20
}

👉 This avoids HTML parsing completely.


📍 Paris-Specific Considerations

Even though FNAC is national, some factors vary locally:

  • Store-based availability
  • Pickup discounts
  • Regional promotions

👉 To simulate Paris:

  • Use French headers (fr-FR)
  • Use EU IP/proxy

🚧 Common Challenges

1. Dynamic Pricing Blocks

FNAC may load prices via JavaScript.

✔ Solution:

  • Use Selenium / Playwright

2. Missing Original Price

Not all products show discounts.

✔ Solution:

  • Handle None values
  • Only calculate when both prices exist

3. Anti-Bot Protection

✔ Use:

  • Rotating proxies
  • Delays (2–5 seconds)
  • Session headers

4. Price Format Issues

France uses:

  • Comma instead of decimal
  • Euro symbol

✔ Always clean data before calculations


📊 Real Use Case

A European price comparison startup scraped FNAC + competitors and found:

  • FNAC often shows higher original price but bigger discount %
  • Competitors use lower base price but smaller discounts

👉 Insight:
Consumers are psychologically drawn to higher discount percentages, even if final price is similar.


🚀 Scaling Architecture

To build a production-grade system:

Use:

  • aiohttp for async scraping
  • Proxy rotation
  • Playwright for JS-heavy pages

Store in:

  • PostgreSQL
  • Data warehouse

Build:

  • Discount tracking dashboard
  • Alerts for price drops

🤖 How MyDataScraper Can Help

If you want to skip all the scraping headaches:

MyDataScraper provides:

✔ FNAC Price & Discount Extraction

Track promo vs original prices automatically

✔ Real-Time Monitoring

Get alerts on new deals

✔ Multi-Retailer Comparison

FNAC + Amazon + Carrefour + more

✔ Clean Structured Data

Ready for analytics


🔮 Future of Discount Intelligence

We’re moving toward:

  • AI-driven deal prediction
  • Real-time competitor benchmarking
  • Personalized pricing insights
  • Cross-market arbitrage detection

🏁 Final Thoughts

Scraping FNAC discounts isn’t just about collecting prices—it’s about understanding pricing psychology and market positioning.

If you extract:

  • Promo price
  • Original price
  • Discount %

You unlock:
👉 True pricing intelligence


💬 Let’s Talk

Are you building:

  • A price comparison tool?
  • A deal aggregator?
  • Or competitor intelligence system?

Tell me—I can help you design the exact scraping pipeline.


📩 Need Help with FNAC Data Scraping?

If you want a scalable FNAC scraping solution with real-time discount tracking:

👉 https://www.mydatascraper.com/contact-us/

Let’s turn pricing data into actionable insights 🚀