Skip to the content.

Shopify Products Scraper

Products of any Shopify store: prices, discounts, stock, variants, SKUs and images. From $0.0008 / product, pay per result, no browser, no login.

▶ Run it on Apify · Python example · All scrapers

Export the full product catalog of any Shopify store as JSON, CSV or Excel: titles, prices, compare-at prices and discount %, stock status, every variant with SKU, options (size, color), images, vendor, product type, tags and dates. Paste store or collection URLs — no browser, no login, no API key. 300 products take about 5 seconds.

✅ Whole catalogs or single collections (/collections/sale) ✅ Prices, compare-at prices and discount % — spot every sale ✅ Stock status per product and per variant ✅ Variants with SKU, options, weight and price ✅ Store name and currency added to every product ✅ Headless stores too (Gymshark, Fashion Nova…): read from their sitemap and product pages, with customer rating and review count ✅ Filters: only in stock, only discounted ✅ Hundreds of stores per run; non-Shopify sites are skipped and never charged


🚀 Why this Shopify scraper is different

  This Actor Typical Shopify scrapers
Price $0.0008 per product $0.001+ per product
Discount % and on-sale flag Computed for you Raw prices only
Collections Yes Often whole store only
Headless stores (custom front end) Yes, from sitemap + product pages Skipped or failing
Non-Shopify URLs Skipped, not charged Run fails or is charged
Blocked pages Retried with new IPs, residential fallback Lost
Speed ~300 products in 5 s Browser-based, minutes

💡 Use cases


🛠️ How to use it (3 steps)

  1. Paste store URLs (allbirds.com) or collection URLs (https://shop.com/collections/sale).
  2. Optionally keep only in-stock or only discounted products.
  3. Click Start and download products as CSV, Excel or JSON, or use the API.

📥 Input example

{
  "storeUrls": ["https://www.allbirds.com", "https://www.colourpop.com", "kyliecosmetics.com"],
  "maxProductsPerStore": 1000,
  "onlyOnSale": true
}

📤 Output example (real product)

{
  "store": "https://www.allbirds.com",
  "storeName": "Allbirds",
  "productId": "7366895894608",
  "title": "Women's Wool Runner - Natural Grey (Light Grey Sole)",
  "url": "https://www.allbirds.com/products/womens-wool-runners-natural-grey",
  "vendor": "Allbirds",
  "productType": "Shoes",
  "tags": ["FINAL SALE", "allbirds::material => wool", "allbirds::gender => womens"],
  "currency": "USD",
  "price": 49,
  "maxPrice": 49,
  "compareAtPrice": 110,
  "onSale": true,
  "discountPercent": 55,
  "available": true,
  "variantsCount": 7,
  "variants": [
    { "variantId": "42424464900176", "title": "5", "sku": "WR3WNCW050", "price": 49, "compareAtPrice": 110, "available": true, "options": ["5"], "grams": 698 },
    { "variantId": "42424464932944", "title": "6", "sku": "WR3WNCW060", "price": 49, "compareAtPrice": 110, "available": false, "options": ["6"], "grams": 714 }
  ],
  "options": [{ "name": "Size", "values": ["5", "6", "7", "8", "9", "10", "11"] }],
  "images": ["https://cdn.shopify.com/s/files/1/1104/4168/files/WR3WNCW_SHOE_LEFT_GLOBAL_WOMENS_WOOL_RUNNER_GREY_LIGHT_GREY_bc7cc3a6-43a0-4dde-8f9e-48a8d80499df.png"],
  "description": "The Allbirds Wool Runner is the original wool sneaker that started it all…",
  "createdAt": "2026-05-26T11:10:21-07:00",
  "updatedAt": "2026-10-31T17:37:05-07:00",
  "publishedAt": "2026-09-25T16:24:03-07:00"
}

⚙️ Input parameters

Field Type Default Description
storeUrls array ["https://www.allbirds.com"] Store home pages (“allbirds.com”) or collection pages (“https://shop.com/collections/sale”). Non-Shopify sites are skipped and never charged.
maxProductsPerStore integer 1000 Products read per store or collection (before the filters below).
onlyAvailable boolean false Skip products with no available variant.
onlyOnSale boolean false Keep products with a compare-at price above the price.
proxyConfiguration, maxRetries object, integer Apify Proxy, auto Proxy and retries; the defaults work for most runs.

📋 Output fields

Field Type Description
store string Store URL
storeName string Store name
productId string Shopify product ID
title string Product title
url string Product page
handle string URL handle
vendor string Brand / vendor
productType string Product type
tags array Tags
currency string Store currency
price number Lowest variant price
maxPrice number Highest variant price
compareAtPrice number Price before discount
onSale boolean At least one variant discounted
discountPercent integer Biggest variant discount, %
available boolean At least one variant in stock
variantsCount integer Number of variants
variants array Variants with SKU, price, stock, options
options array Options (size, color…) and values
images array Image URLs
description string Description as plain text
createdAt string Created at
updatedAt string Updated at
publishedAt string Published at
rating number Average customer rating (product pages)
reviewsCount integer Number of customer reviews (product pages)
dataSource string products.json (standard feed) or product pages (headless stores)

Export as JSON, CSV, Excel, XML or HTML, or read it through the API.


💰 Pricing — pay per product

What you run Products Cost (free plan)
1 store, 300 products 300 $0.24
10 competitor stores × 500 5,000 $4.00
Daily sale tracking, 3 collections × 100 9,000/month $7.20/month

Higher Apify plans pay less: $0.0007 (Bronze), $0.0006 (Silver), $0.0005 (Gold and above). Platform usage and proxies are included. Non-Shopify sites and empty stores are never charged.


🔌 API & integrations

Python

from apify_client import ApifyClient  # pip install "apify-client>=3"

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("victorrodi/shopify-products-scraper-api").call(
    run_input={"storeUrls": ["https://www.allbirds.com"], "onlyOnSale": True}
)
for p in client.dataset(run.default_dataset_id).iterate_items():
    print(p["discountPercent"], p["price"], p["title"])

cURL

curl -X POST "https://api.apify.com/v2/acts/victorrodi~shopify-products-scraper-api/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"storeUrls": ["colourpop.com"], "maxProductsPerStore": 50}'

Works with Google Sheets, Make, Zapier, n8n and MCP / AI agents: “List every discounted product of these 5 Shopify stores, sorted by discount.”


🤖 Use it from AI agents (Claude, ChatGPT, Cursor…)

This Actor is available to AI assistants through the Apify MCP server. Add the server to Claude Desktop, Claude Code, Cursor or any MCP client, then simply ask:

“List every discounted product of allbirds.com sorted by discount.”

“Compare the price range of these 5 Shopify stores and tell me which one is cheapest.”

The clean, flat output is designed to be read directly by LLMs.


🛡️ Reliability

More examples and docs for all our Actors: Vicshock/trendpulse-scrapers.


📌 Tips

❓ FAQ

How do I know if a site is a Shopify store? Just add it: if it does not expose Shopify product data, it is listed under notShopify in the run summary and nothing is charged.

What about big brands with a custom (headless) front end? They hide the standard Shopify product feed, so the Actor reads their sitemap and product pages instead (dataSource: "product pages"). You get prices, stock, SKUs, sizes, colors and customer ratings; compare-at prices and tags are not shown on those pages, and collections of headless stores are not supported. It takes about 1 second per product instead of 250 products per request.

Do I get stock quantities? Shopify publicly shows whether each variant is available, not the exact quantity.

Is it legal? The Actor reads public product data that the stores publish for browsers, with no personal data. Respect each site’s terms and the laws that apply to you.

💬 Support

Missing a field or a store that does not work? Open an issue in the Issues tab — it is answered fast.