ParseForge Scrapers

E-commerce Scraper - Product Prices, Variants & Stock

parseforge/e-commerce-scraper

E-commerceAutomationDeveloper tools

Scrape any online store: Shopify, WooCommerce, Amazon, Walmart and schema.org sites. Prices, variants, stock and GTINs to CSV, Excel, JSON or XML.

Run this scraper See the API call
Total runs
14
Bookmarked
0
Last modified
2 days ago

This scraper was last updated on .

What does the E-commerce Scraper - Product Prices, Variants & Stock return?

ParseForge Banner

๐Ÿ›๏ธ E-commerce Scraper

๐Ÿš€ Export product data from almost any online store in seconds. Paste product, category or store URLs and get 29 clean columns per product: price, original price, discount, stock, GTIN, SKU, brand, rating, variants, images and specifications.

The E-commerce Scraper reads the same structured data a store publishes for search engines and for its own front end. Shopify stores are read through their product JSON, WooCommerce stores through the WooCommerce Store API, Amazon and Walmart through dedicated page parsers, and every other store through its schema.org Product data (JSON-LD or microdata), OpenGraph product tags, or a price-and-title fallback for plain HTML shops.

One run can mix stores and platforms. A Shopify collection comes back 250 products per request, a WooCommerce category 100 per request, and a whole store can be exported from its home page through its catalog API or its product sitemaps. Every product has the same 29 fields, whatever the store, so you can compare prices across sites in one table.

๐ŸŽฏ Target Audience ๐Ÿ’ก Primary Use Cases
Pricing and revenue teams Competitor price monitoring across many stores
E-commerce managers and marketplaces Catalog audits, assortment gaps, MAP checks
Data engineers and agencies Product feeds, PIM enrichment, GTIN matching
Researchers and founders Market sizing, brand and category studies

๐Ÿ“‹ What the E-commerce Scraper does

  • ๐Ÿ”— Product URLs: any product page. One row per product (or one row per variant if you want).
  • ๐Ÿ—‚๏ธ Category, collection and search URLs: finds every product on the page, follows pagination and scrapes each one. Shopify collections and WooCommerce categories go straight to the store's catalog API.
  • ๐Ÿฌ Whole store URLs: give a home page and get the full catalog, through Shopify products.json, the WooCommerce Store API or the store's product sitemaps. A market path such as ikea.com/us/en/ keeps the crawl on that market.
  • ๐Ÿงฉ Variants: sizes and colours with their own SKU, GTIN, price, compare-at price and stock, nested or as separate rows.
  • ๐Ÿ›ก๏ธ Blocked stores: when a store refuses direct traffic, the Actor retries it through residential proxy in the store's country, automatically.

๐Ÿ’ก Why it matters: price monitoring tools usually need one scraper per store. This Actor gives you one input, one schema and one dataset for Shopify brands, WooCommerce shops, Amazon, Walmart, IKEA, Nike, Decathlon and thousands of smaller stores.

๐ŸŽฌ Full Demo

๐Ÿšง Coming soon.

๐Ÿ“Š Output

Fields a store does not publish hold Not Disclosed; fields that do not apply hold N/A. Prices are numbers.

Field Description
๐Ÿ–ผ imageUrl Main product image
๐Ÿ“Œ title Product name
๐Ÿ”— url Canonical product URL
๐Ÿ†” id Store product ID (Shopify ID, ASIN, Walmart item ID...)
๐Ÿ‘ช parentId Parent product ID on variant rows, otherwise N/A
๐Ÿท๏ธ sku SKU of the product or of the first available variant
๐Ÿ”ข gtin GTIN, UPC or EAN barcode
๐Ÿ”ง mpn Manufacturer part number or model
๐Ÿญ brand Brand or vendor
๐Ÿ’ฐ price Current price as a number
๐Ÿ’ฑ currency ISO currency code
๐Ÿท๏ธ originalPrice Compare-at, list or "was" price when the product is discounted
๐Ÿ“‰ discountPercent Discount against originalPrice, rounded
๐Ÿ“ฆ availability Availability as the store states it
โœ… inStock Yes or No
โœจ condition New, Used, Refurbished...
๐Ÿช seller Seller or merchant, on marketplaces
โญ rating Average rating
๐Ÿ’ฌ reviewCount Number of reviews or ratings
๐Ÿ—‚๏ธ category Category or breadcrumb path
๐Ÿ“ description Description as plain text
๐ŸŽจ variantCount Number of variants
๐Ÿงฉ variants Variant list: id, title, sku, gtin, price, originalPrice, inStock, imageUrl
๐Ÿ–ผ๏ธ images Image gallery URLs
๐Ÿ“ specifications Attributes and specs as name / value pairs
๐Ÿงฑ platform Where the data came from: Shopify, WooCommerce, Amazon, Walmart, JSON-LD, Microdata, OpenGraph or HTML
๐ŸŒ domain Store domain
๐Ÿ•’ scrapedAt ISO timestamp
โŒ error null on success; error rows carry the URL and the reason

Three real records from a cloud run (long descriptions, variant lists, galleries and spec lists shortened here):

[
  {
    "imageUrl": "https://cdn.shopify.com/s/files/1/1330/6287/files/default_c26654cc-c7a7-4c97-a443-38676e7bcfac.jpg?v=1790096125",
    "title": "Simond Men's MT500 Down Puffer Jacket",
    "url": "https://www.decathlon.com/products/forclaz-mens-mt500-down-puffer-jacket",
    "id": "8214661529662",
    "parentId": "N/A",
    "sku": "375680",
    "gtin": "3608439667718",
    "mpn": "Not Disclosed",
    "brand": "Forclaz",
    "price": 149,
    "currency": "USD",
    "originalPrice": "N/A",
    "discountPercent": "N/A",
    "availability": "In Stock",
    "inStock": "Yes",
    "condition": "Not Disclosed",
    "seller": "Not Disclosed",
    "rating": "Not Disclosed",
    "reviewCount": "Not Disclosed",
    "category": "Down jacket",
    "description": "RDS-certified down jacket designed for backpacking in the mountains in cold weather down to 14ยฐF when active and 32ยฐF when static.",
    "variantCount": 6,
    "variants": [
      { "id": "43195505311806", "title": "2XL", "sku": "375680", "gtin": "3608439667718", "price": 149, "originalPrice": "N/A", "inStock": "Yes", "imageUrl": "Not Disclosed" },
      { "id": "43195508654142", "title": "3XL", "sku": "375682", "gtin": "3608439667701", "price": 149, "originalPrice": "N/A", "inStock": "Yes", "imageUrl": "Not Disclosed" }
    ],
    "images": [
      "https://cdn.shopify.com/s/files/1/1330/6287/files/default_c26654cc-c7a7-4c97-a443-38676e7bcfac.jpg?v=1790096125",
      "https://cdn.shopify.com/s/files/1/1330/6287/files/default_d15dc24c-e52e-4961-a356-0de540031c12.jpg?v=1790096125"
    ],
    "specifications": [{ "name": "Size", "value": "2XL, 3XL, L, M, XL, S" }],
    "platform": "Shopify",
    "domain": "decathlon.com",
    "scrapedAt": "2026-09-24T16:29:24.950Z",
    "error": null
  },
  {
    "imageUrl": "https://m.media-amazon.com/images/I/51VxSqysy6L._AC_SL1500_.jpg",
    "title": "KTGEE Wireless Earbuds Bluetooth 5.3 Ear Buds Headphones, 40Hrs Playback",
    "url": "https://www.amazon.com/dp/B0D5HG7TC3",
    "id": "B0D5HG7TC3",
    "parentId": "N/A",
    "sku": "B0D5HG7TC3",
    "gtin": "Not Disclosed",
    "mpn": "Not Disclosed",
    "brand": "KTGEE",
    "price": 16.1,
    "currency": "USD",
    "originalPrice": 25.99,
    "discountPercent": 38,
    "availability": "In Stock",
    "inStock": "Yes",
    "condition": "Not Disclosed",
    "seller": "whping Power Tech",
    "rating": 4.3,
    "reviewCount": 6881,
    "category": "Electronics > Headphones, Earbuds & Accessories > Headphones & Earbuds > Earbud Headphones",
    "description": "40Hrs Extra-Long Battery Life Wireless Earbuds - Enough time to listen to 500+ songs: T08 wireless earbuds can provide up to 8 hours of music on a single ...",
    "variantCount": 0,
    "variants": [],
    "images": [
      "https://m.media-amazon.com/images/I/51VxSqysy6L._AC_SL1500_.jpg",
      "https://m.media-amazon.com/images/I/61HGB-ctP9L._AC_SL1500_.jpg"
    ],
    "specifications": [
      { "name": "Brand", "value": "KTGEE" },
      { "name": "Color", "value": "A-White" },
      { "name": "Ear Placement", "value": "In Ear" }
    ],
    "platform": "Amazon",
    "domain": "amazon.com",
    "scrapedAt": "2026-09-24T16:29:26.603Z",
    "error": null
  },
  {
    "imageUrl": "https://i5.walmartimages.com/asr/3c3cb9a4-cbae-459d-ab83-f5083b8b75aa.5f98f5bb100a4d663ba29e3b0fe63ffd.jpeg",
    "title": "Apple AirPods Pro 2 In-Ear Headphones with USB-C Charging Case, White",
    "url": "https://www.walmart.com/ip/AirPods-Pro-2nd-generation-with-MagSafe-Case-USB-C/5689919121",
    "id": "5689919121",
    "parentId": "N/A",
    "sku": "5689919121",
    "gtin": "195949704529",
    "mpn": "MTJV3AM/A",
    "brand": "Apple",
    "price": 173.99,
    "currency": "USD",
    "originalPrice": 197.98,
    "discountPercent": 12,
    "availability": "In Stock",
    "inStock": "Yes",
    "condition": "Not Disclosed",
    "seller": "Gadget Replay",
    "rating": 4.2,
    "reviewCount": 35,
    "category": "Services > Immersive Shopping Suite > View in 3D",
    "description": "Apple AirPods Pro 2 In-Ear Headphones with USB-C Charging Case, White: Brand: Apple Headphone Style: In-Ear Headphone Type: Headphones Wireless Technology: TRUE ...",
    "variantCount": 0,
    "variants": [],
    "images": [
      "https://i5.walmartimages.com/asr/3c3cb9a4-cbae-459d-ab83-f5083b8b75aa.5f98f5bb100a4d663ba29e3b0fe63ffd.jpeg",
      "https://i5.walmartimages.com/asr/0f13e8de-9f60-4810-a5e2-a77ceacdd085.f043c740e058c48b072836f0211d8a9e.jpeg"
    ],
    "specifications": [
      { "name": "Noise control technology", "value": "Active Noise Cancellation" },
      { "name": "Battery life", "value": "6 h" },
      { "name": "Works with", "value": "iPhone, iPad, Mac" }
    ],
    "platform": "Walmart",
    "domain": "walmart.com",
    "scrapedAt": "2026-09-24T16:29:28.128Z",
    "error": null
  }
]

โœจ Why choose this Actor

What you get
One schema for every store 29 flat columns, prices as numbers, ISO currencies. Shopify, WooCommerce, Amazon, Walmart and schema.org stores land in the same table.
Variants done properly Every size and colour with its own SKU, barcode, price, compare-at price and stock. Nested by default, one row per variant with a switch.
Barcodes for matching GTIN / UPC / EAN and MPN where the store publishes them, so the same product can be matched across retailers.
Discounts computed for you originalPrice and discountPercent from compare-at, list and strikethrough prices.
Whole catalogs, fast Shopify and WooCommerce catalogs come from their JSON APIs: 250 or 100 products per request, no page rendering.
Honest error rows A blocked page or a page without product data returns a row that says why, instead of an empty or invented product.

๐Ÿ“ˆ How it compares to alternatives

Feature ParseForge E-commerce Scraper Apify E-commerce Scraping Tool Typical universal scrapers
Product and category URLs Yes Yes Mostly product URLs
Whole-store export from a home page Yes Not listed Rarely
Flat columns with numeric prices Yes, 29 fields Nested objects Varies
Variants with SKU, GTIN, price and stock each Yes Variants listed Rarely
Discount and original price Yes Not listed Varies
Shopify / WooCommerce catalog APIs Yes Not listed Some
Residential retry for blocked stores Automatic Yes Rarely
Reviews, sellers and AI summaries No Yes Rarely
eBay, Best Buy, Home Depot, Lowe's, Argos No (blocked over HTTP) Yes, with a browser Varies

The Actor reads pages over HTTP with a real browser TLS fingerprint and never starts a browser. That keeps runs fast and cheap, and it means stores that only render products with JavaScript, or that block every non-browser client, are out of reach. They come back as error rows that name the reason.

๐Ÿš€ How to use

  1. Create a free Apify account with $5 in credit.
  2. Open the E-commerce Scraper and paste product URLs, category URLs or store URLs.
  3. Set Max Items, and turn on One row per variant if you want each size or colour as its own row.
  4. Click Start and download the dataset as CSV, Excel, JSON or XML.

A mixed first run:

{
  "productUrls": [
    { "url": "https://www.allbirds.com/products/mens-tree-runner-go" },
    { "url": "https://www.amazon.com/dp/B0D5HG7TC3" }
  ],
  "listingUrls": [{ "url": "https://www.allbirds.com/collections/mens" }],
  "storeUrls": [{ "url": "https://www.decathlon.com/" }],
  "maxItems": 100
}

๐Ÿ’ผ Business use cases

๐Ÿ“Š Price monitoring

Schedule a daily run on your competitors' product or collection URLs and diff price, originalPrice and inStock by id. One dataset covers every store you track.

๐Ÿงพ Catalog and assortment audits

Export a competitor's whole store and compare brand, category, variantCount and sizes against your own range to spot gaps and overlaps.

๐Ÿ”ข Product matching and MAP checks

Match products across retailers by gtin and mpn, then flag sellers pricing below the minimum advertised price.

๐Ÿ—‚๏ธ Feeds and PIM enrichment

Pull titles, descriptions, images and specifications into your product information system or a marketplace feed.

๐Ÿ”Œ Automating E-commerce Scraper

  • Make and Zapier: start a run on a schedule and send the CSV to Google Sheets or Airtable.
  • Slack: post a message when prices change or a product goes out of stock.
  • Airbyte: load each dataset into your warehouse.
  • GitHub and Google Drive: archive daily exports for price history.

All of them are on the Actor's integrations tab, or use Apify integrations.

๐ŸŒŸ Beyond business use cases

  • Research: study price dispersion, discount depth and assortment across retailers.
  • Personal: track a wish list across several stores and buy at the lowest price.
  • Non-profit: monitor the price of essentials across local shops.
  • Experimentation: build a product dataset to train a classifier or a recommender.

๐Ÿค– Ask an AI assistant about this scraper

Add the Actor to Claude, Cursor or any MCP client and ask in plain language, for example "compare the price of these three jackets across Decathlon and Allbirds":

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/e-commerce-scraper"

โ“ Frequently Asked Questions

๐Ÿ›’ Which stores work? Shopify and WooCommerce stores, Amazon, Walmart product pages, and any store that publishes schema.org Product data, which includes most large retailers (IKEA, Nike, Decathlon and many more). Plain HTML shops work when the page shows one title and a visible price.

๐Ÿ”— What is the difference between the three URL fields? Product URLs are single product pages. Category / search / collection URLs are pages that list products: the Actor collects the product links, follows pagination and scrapes each product. Whole store URLs are home pages: the Actor exports the full catalog.

๐Ÿงฉ How do variants work? By default each product is one row with a variants array. Turn on One row per variant to get one row per size or colour, each with its own id, sku, gtin, price and inStock, and the product in parentId.

๐Ÿ›ก๏ธ What happens when a store blocks me? The Actor first tries two browser fingerprints directly. If the store still refuses, it retries through residential proxy in the store's country and keeps using it for that store. If that fails too, you get an error row with the reason. You can switch the residential fallback off.

๐Ÿšซ Which stores do not work? Stores that block every non-browser client, such as eBay, Best Buy, Home Depot, Lowe's and Argos, and stores that load products only with JavaScript. Walmart product pages work, but Walmart category and search pages do not publish products in their HTML, so pass Walmart product URLs.

๐Ÿฌ How does whole-store mode find products? It asks the store's Shopify or WooCommerce catalog API first. Otherwise it reads the product sitemaps listed in robots.txt. Add a market path such as /us/en/ to stay on one country's catalog.

๐Ÿ’ฑ Which currency do I get? The one the store shows. Amazon shows prices in the shopper's local currency, which depends on the IP address, so the currency column always says which one you got.

โญ Why is rating sometimes Not Disclosed? Many stores do not publish ratings in their page data, and Shopify's product JSON has none. When a store does publish them, they are included.

๐Ÿ“„ How many listing pages are followed? Max pages per listing (default 5) for HTML listings. Shopify and WooCommerce listings page through their APIs until Max Items.

๐Ÿ”ข Why do some rows have N/A in originalPrice? The product is not discounted, so there is no original price to show.

๐Ÿ†“ What do free users get? Up to 10 products per run as a preview. Upgrade your plan for up to 1,000,000 products per run.

๐Ÿ”Œ Integrate with any app

Pull results with the API in any language:

curl "https://api.apify.com/v2/acts/parseforge~e-commerce-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"productUrls":[{"url":"https://www.amazon.com/dp/B0D5HG7TC3"}],"maxItems":10}'

๐Ÿ”— Recommended Actors

๐Ÿ’ก Pro Tip: browse the complete ParseForge collection.

๐Ÿ†˜ Need Help? Open our contact form

โš ๏ธ Disclaimer: this Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Shopify, WooCommerce, Amazon, Walmart or any store it reads. It collects only publicly available product data. You are responsible for using it in line with each site's terms and applicable law.

What input does the E-commerce Scraper - Product Prices, Variants & Stock accept?

FieldTypeWhat it doesDefault
productUrls array Product detail pages from any online store (Shopify, WooCommerce, Amazon, Walmart, IKEA, Nike and most stores that publish schema.org product data). One row per product. [{"url":"https://www.allbirds.com/produc
listingUrls array Category, collection or search result pages. The Actor finds every product on the page, follows pagination and scrapes each product. Shopify collections and WooCommerce categories are read through the store's own catalog API. not set
storeUrls array A store's home page to export its full catalog. Uses the Shopify or WooCommerce catalog API when available, otherwise the store's product sitemaps. not set
maxItems integer Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000 10
maxListingPages integer How many pagination pages to follow for each category or search URL (HTML listings only; Shopify and WooCommerce APIs page until Max Items). 5
splitVariants boolean Off: one row per product with a nested variants array. On: one row per variant (size, colour...) with its own price, SKU and stock. false
residentialFallback boolean When a store blocks direct requests (Walmart, some Etsy and big-box pages), retry through Apify RESIDENTIAL proxy in the store's country. Products fetched this way are billed as an extra residential event. Turn off to never use residential. true
proxyConfiguration object Off by default: most stores answer directly, and the residential fallback above covers the ones that do not. Set a proxy here only to force every request through it. {"useApifyProxy":false}

How much does the E-commerce Scraper - Product Prices, Variants & Stock cost?

from $1.00 per 1,000 results

Charged forWhat it isPrice each
Product result One product (or one variant row) delivered to the dataset. Error rows are never charged. $0.001 to $0.003
Residential proxy per product Added only when a store blocks direct requests and the product had to be fetched through residential proxy. $0.001 to $0.002

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

How do I call the E-commerce Scraper - Product Prices, Variants & Stock API?

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~e-commerce-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "productUrls": [
      {
        "url": "https://www.allbirds.com/products/mens-tree-runner-go"
      },
      {
        "url": "https://www.amazon.com/dp/B0D5HG7TC3"
      }
    ],
    "maxItems": 10,
    "maxListingPages": 5,
    "splitVariants": false,
    "residentialFallback": true
  }'

What example inputs can I use?

Use these inputs to see how a run is configured.

input.json
{
  "productUrls": [
    {
      "url": "https://www.allbirds.com/products/mens-tree-runner-go"
    },
    {
      "url": "https://www.amazon.com/dp/B0D5HG7TC3"
    }
  ],
  "maxItems": 10,
  "maxListingPages": 5,
  "splitVariants": false,
  "residentialFallback": true
}

What do users say about the E-commerce Scraper - Product Prices, Variants & Stock?

No reviews yet. Be the first.

How do I report an issue with the E-commerce Scraper - Product Prices, Variants & Stock?

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

What related scrapers can I use?

Run E-commerce Scraper - Product Prices, Variants & Stock on Apify All scrapers