Skip to main content

Firecrawl Ecommerce Product Scraping: Clean JSON Product Data 2026

· 3 min read
Yassine El Haddad
Software Developer & Automation Specialist

I build production AI agents, web scrapers, and automation pipelines. Most of what I publish here comes from the actual problems they run into: proxies that get banned, anti-bot stacks that fingerprint your client, RAG that drifts when the underlying data moves. Stack: Python, TypeScript, Go, FastAPI, LangChain, Crawlee, Playwright, deployed on AWS, GCP, and Cloudflare.

Use Firecrawl to scrape product pages into structured JSON. Map product URLs first, extract with a schema (name, price, stock, brand), validate and normalize, then upsert to your storage. For heavy anti-bot sites or very high volume, Apify ecommerce actors may be a better fit.

Start Firecrawl product scraping →

Product Schema

Define fields before crawling:

FieldRequiredNotes
product_nameYes
priceYesNumeric, non-negative
currencyYesISO (USD, EUR, etc.)
in_stockYesBoolean
product_urlYesCanonical URL
brandNoHigh value for matching

Optional: rating, review_count, variant, image_url. Add only after baseline consistency is proven.

Extraction Flow

  1. Discover URLs — Use map or a known category list
  2. Batch extract — Run extract with product schema
  3. Validate — Price numeric, currency in allowed set, URL canonical
  4. Normalize — Currency, decimals, locale formats
  5. Upsert — Store with run metadata (source_url, timestamp)

Python Example

from firecrawl import Firecrawl
from pydantic import BaseModel

class Product(BaseModel):
product_name: str
price: float
currency: str
in_stock: bool
product_url: str
brand: str | None = None

app = Firecrawl(api_key="fc-YOUR-API-KEY")

# Single product page
res = app.extract(
urls=["https://example.com/product/sku-123"],
prompt="Extract product name, price, currency, stock status, URL, and brand.",
schema=Product.model_json_schema()
)

data = res.get("data", {})
product = Product.model_validate(data)

Validation Rules

  • price numeric, ≥ 0
  • currency in allowed ISO set
  • product_url canonical (no tracking params)
  • Missing required fields → route to review queue

Use Cases

Use CaseBest Tool
Docs, blogs, general pagesFirecrawl
Product catalog, few domainsFirecrawl
Amazon, Walmart, heavy anti-botApify actors
Millions of product pagesApify + Bright Data

Firecrawl excels at LLM-ready markdown and schema extraction. Apify offers platform-specific actors with proxy rotation and anti-bot handling.

Data Quality Controls

  • Deduplicate by canonical URL + domain
  • Track extraction confidence or validation status
  • Keep raw snapshots for schema drift debugging
  • Alert on null-rate spikes in key fields
Apify Affiliate Banner 728x90Apify Affiliate Banner 728x90Apify Affiliate Banner 300x50Apify Affiliate Banner 300x50
Next step

For platform-specific scrapers (Amazon, Shopify), see Apify ecommerce actors.

Frequently Asked Questions

Start with name, price, currency, stock status, and canonical product URL. Add ratings and variants after baseline consistency.

Set by business need. High-change categories may need multiple checks daily; low-change can run daily or weekly.

Normalize currencies, deduplicate URLs, and validate before treating extracted price differences as real events.

Firecrawl: fast schema extraction, clean markdown. Apify: pre-built actors for Amazon/Shopify, better anti-bot.

Common mistakes and fixes

Price extraction inconsistent across locales

Normalize currency in post-processing. Use schema with string type and parse client-side.

Out-of-stock vs unavailable confusion

Define explicit enum in schema (in_stock, out_of_stock, unavailable). Validate against known states.