Shopify & WooCommerce Product Scraper: Prices, Stock avatar

Shopify & WooCommerce Product Scraper: Prices, Stock

Pricing

$0.40 / 1,000 products

Go to Apify Store
Shopify & WooCommerce Product Scraper: Prices, Stock

Shopify & WooCommerce Product Scraper: Prices, Stock

Scrape every product of any Shopify or WooCommerce store: price, compare-at price, currency, variants with SKU and stock, images, tags, categories and vendor. Whole stores, Shopify collections or single products, no browser. $0.40 per 1,000 products.

Pricing

$0.40 / 1,000 products

Rating

0.0

(0)

Developer

Data Gleaner

Data Gleaner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Shopify & WooCommerce Product Scraper exports the full product catalog of any Shopify or WooCommerce store into a clean table. Give it store addresses, such as allbirds.com or https://kaffeeroester.de. For each product you get the title, current price and compare-at (original) price, currency, every variant with its SKU, price and stock status, option values (size, color), all image URLs, tags, categories, vendor, description, and the dates it was created, updated and published. Shopify collection URLs and single product URLs work too, and the platform is detected for you. It reads the catalog JSON that each store publishes for its own storefront, so there is no browser and no login. It costs $0.40 per 1,000 products, with no start fee.

What you can do with it

  • Monitor competitor prices. Run a list of rival stores every day or week and compare price, compareAtPrice and onSale over time. Every row has updatedAt from the store and scrapedAt from the run.
  • Track stock and restocks. available per product and per variant shows which sizes and colors are sold out.
  • Product research and dropshipping. Pull whole catalogs of successful stores: what they sell, at what prices, which vendors, how many variants, and what they launched recently (createdAt, publishedAt).
  • Catalog migration and feeds. Export a store's products with images, options, SKUs and descriptions to move them to another platform or build a product feed.
  • Market and brand analysis. Count products, price bands and vendors across hundreds of stores in one dataset.
  • Data for AI agents and apps. The same field names for Shopify and WooCommerce, ready for a spreadsheet, a database or an LLM.

Input

FieldTypeWhat it does
startUrlslist of textStore home pages or bare domains (whole catalog), Shopify collection URLs such as https://www.allbirds.com/collections/mens (that collection), or Shopify product URLs (that product). One per line.
maxProductsPerStorenumberDefault 1,000, max 100,000. Each store URL stops after this many products.
maxConcurrencynumberHow many store URLs run at once. Default 5, max 10. Pages within one store are fetched one after another.
requestDelaySecsnumberPause between two pages of the same store. Default 0.5 seconds.
proxyConfigurationproxyDefault: Apify residential proxy, included in the price. See Limits.

Example:

{
"startUrls": [
"https://www.allbirds.com",
"https://kith.com/collections/mens-footwear",
"https://kaffeeroester.de"
],
"maxProductsPerStore": 2000
}

An empty input {} runs a small example (the first 5 products of allbirds.com), and the status message says so.

Output

One row per product. Example (shortened lists):

{
"platform": "shopify",
"storeUrl": "https://allbirds.com",
"storeName": "Allbirds",
"productId": "7340901859408",
"title": "Women's Allbirds Flip Flop - Dusty Pink",
"handle": "womens-allbirds-flip-flop-dusty-pink",
"url": "https://allbirds.com/products/womens-allbirds-flip-flop-dusty-pink",
"vendor": "Allbirds",
"productType": "Shoes",
"categories": [],
"tags": ["allbirds::gender => womens", "allbirds::material => sugar"],
"description": "Sun on your feet. Comfort underneath. Light, easy, and made for warm weather, these flip flops...",
"price": 25,
"maxPrice": 25,
"compareAtPrice": 50,
"currency": "USD",
"onSale": true,
"available": true,
"sku": "A12513W050",
"variantCount": 7,
"variants": [
{"variantId": "42146889039952", "title": "5", "sku": "A12513W050", "price": 25, "compareAtPrice": 50,
"available": false, "options": {"Size": "5"}, "weightGrams": 455}
],
"options": [{"name": "Size", "values": ["5", "6", "7", "8", "9", "10", "11"]}],
"imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png?v=1774646345",
"images": ["https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png?v=1774646345"],
"rating": null,
"reviewCount": null,
"createdAt": "2026-03-27T14:03:50-07:00",
"updatedAt": "2026-10-21T17:18:34-07:00",
"publishedAt": "2026-09-25T16:58:13-07:00",
"startUrl": "https://www.allbirds.com",
"scrapedAt": "2026-10-22T10:15:02+00:00"
}
FieldWhat it holds
platform, storeUrl, storeNameshopify or woocommerce, the store address, and the Shopify store name.
productId, handle, url, titleThe store's product id, URL slug, product page and title.
price, maxPrice, currencyLowest and highest current variant price, as numbers, and the ISO currency code.
compareAtPrice, onSaleThe original price before the sale (cheapest variant), and whether any variant is discounted.
availableTrue when at least one variant can be bought.
sku, variantCount, variantsFirst SKU, number of variants, and each variant's id, title, SKU, price, compare-at price, availability, option values and weight.
optionsOption names and their values, e.g. Size: 5 to 12.
vendor, productType, categories, tagsBrand or vendor, product type, WooCommerce categories, and tags.
descriptionThe product description as plain text.
imageUrl, imagesMain image and every image URL.
rating, reviewCountAverage rating and review count, where the WooCommerce store has reviews.
createdAt, updatedAt, publishedAtShopify's product dates (ISO 8601).
startUrl, scrapedAtThe input URL the row came from, and when it was collected.

Per-store results (platform, products found, and a reason for any store that returned nothing) are saved in the run's key-value store as the record STORES.

Fill rates measured on Apify over 17,003 products from 38 stores (2026-10-22). Shopify (16,173 products, 31 stores): title, price, currency, available, url, vendor, createdAt 100%; imageUrl 99%; sku 98%; description 95%; productType 92%. WooCommerce (830 products, 7 stores): title, price, currency, available, url 100%; categories 97%; imageUrl 96%; description 95%; sku 21%, as many stores leave it empty. compareAtPrice is filled only for products on sale (26% of Shopify rows, 10% of WooCommerce rows in these runs).

Shopify vs WooCommerce: WooCommerce stores publish variant ids and options but not each variant's own price, SKU or stock, so those variant fields are empty there; the product-level price range, stock status and SKU are filled. WooCommerce has no public product dates.

How much does it cost to scrape a Shopify store?

You pay per product saved to the dataset. This price is final:

EventPricePer 1,000
product: one product row (all its variants included)$0.0004$0.40

There is no start fee. Nothing is charged for failed requests, retries, repeated products or stores that return nothing. Platform usage and the residential proxy are included in the price. The run stops by itself when it reaches your maximum total charge.

Examples:

  • One store with 600 products: $0.24.
  • Daily price check of 10 rival stores with 500 products each, for a month: 150,000 products = $60.
  • A 3,000-product catalog export: $1.20.

Limits

  • Shopify and WooCommerce only. Other platforms are reported in the status message as "not a Shopify or WooCommerce store". A few large Shopify brands run a custom front end that turns off the public catalog; for www. addresses the Actor also tries the bare domain (and the other way round), which recovers some of them.
  • Stores behind a bot check are skipped and listed in the status message. The Actor never tries to get past a check a store has put up.
  • Speed. Shopify serves 250 products per request and WooCommerce 100. On Apify, 30 Shopify stores (8,978 products) took 85 seconds, and 6,000 products from two big stores 89 seconds.
  • Proxy. Shopify rate-limits catalog requests from shared datacenter IPs (most requests were refused in our tests), so the default is Apify's residential proxy, and every retry uses a new IP. You can switch to another proxy or none in proxyConfiguration.
  • Prices are the store's own list prices in its base currency, as its catalog publishes them; they do not include taxes, shipping or local-market price rules.
  • Collections and single products are supported for Shopify. For WooCommerce, give the store address; the whole catalog is returned.

Use with Python

# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("datagleaner/shopify-product-scraper").call(
run_input={"startUrls": ["https://www.allbirds.com"], "maxProductsPerStore": 500}
)
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["title"], item["price"], item["compareAtPrice"], item["available"])

That run returns up to 500 products for at most $0.20.

Use with JavaScript / Node.js

// npm install apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagleaner/shopify-product-scraper').call({
startUrls: ['https://kith.com/collections/mens-footwear', 'https://kaffeeroester.de'],
maxProductsPerStore: 300,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const p of items) console.log(p.platform, p.title, p.price, p.currency);

Use it from n8n, Make, Zapier or an AI agent

Actor ID: datagleaner/shopify-product-scraper

Minimal input:

{"startUrls": ["https://www.allbirds.com"], "maxProductsPerStore": 50}

Each tool below runs this Actor with your own Apify API token.

  • n8n: add the Apify node (@apify/n8n-nodes-apify) and choose Run an Actor and get dataset. Set the Actor to datagleaner/shopify-product-scraper and paste the input above.

  • Make: use the Apify app's Run an Actor module, then Get Dataset Items.

  • Zapier: use the Apify action Run Actor, then the search Fetch dataset items.

  • Scheduled monitoring: save the input as a task in Apify Console and add a schedule (daily or weekly) to collect fresh prices and stock.

  • AI agents (MCP): connect to https://mcp.apify.com?tools=datagleaner/shopify-product-scraper. In Claude Code:

      claude mcp add --transport http apify "https://mcp.apify.com?tools=datagleaner/shopify-product-scraper"
    

    Then run /mcp to sign in to Apify, and ask in plain language. For example: "Use the Shopify product scraper on allbirds.com and list the products on sale with their discount."

FAQ

How do I scrape all products from a Shopify store? Put the store address in startUrls (for example allbirds.com) and set maxProductsPerStore above the store's size. The Actor pages through the whole catalog, 250 products per request.

Can I scrape one Shopify collection? Yes. Use the collection URL, such as https://www.allbirds.com/collections/mens.

Does it work for WooCommerce? Yes. Give the store address; the Actor detects WooCommerce and reads its public Store API catalog, with prices, sale prices, stock status, categories, attributes and images.

How do I know if a store runs Shopify or WooCommerce? You don't need to. Mix both in one list; each row says its platform, and the STORES record lists what was found for each URL.

Do I get inventory quantities? Stores publish whether each variant can be bought (available), not how many units are left, so the Actor returns availability.

Can I track price changes over time? Yes. Schedule the same input daily and compare runs by productId (and variantId for each size or color).

Need store emails, phones and social links instead? Our Shopify Email Scraper (datagleaner/shopify-store-contacts) returns each store's public contact details.

Do I need a Shopify account, API key or proxy? No. Everything runs on Apify. You only need an Apify account.

Responsible use

This Actor collects only product data that stores publish openly for their own storefronts: products, prices, images and descriptions. It does not log in, does not read customer data, and skips any store that shows a bot check. Product descriptions and images belong to their owners, so check your rights before you republish them. You are responsible for how you use the results and for any rules that apply where you work. This is not legal advice.

Feedback

If this Actor saved you time, a rating on its Store page helps others find it. Problems or requests: open an issue on the Issues tab.