Shopify & WooCommerce Scraper – Prices & Stock Changes avatar

Shopify & WooCommerce Scraper – Prices & Stock Changes

Pricing

from $1.00 / 1,000 products

Go to Apify Store
Shopify & WooCommerce Scraper – Prices & Stock Changes

Shopify & WooCommerce Scraper – Prices & Stock Changes

Export full product catalogs from any Shopify or WooCommerce store (public storefront endpoints, no login) and track price drops, price increases, restocks, sell-outs and removed products between runs.

Pricing

from $1.00 / 1,000 products

Rating

0.0

(0)

Developer

Rahul Neeraj Mody

Rahul Neeraj Mody

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Shopify & WooCommerce Scraper – Products, Prices & Stock Changes

Export the full product catalog of any Shopify or WooCommerce store and track price drops, price increases, restocks, sell-outs and removed products between runs. Paste store homepage URLs, press Start, and get a clean spreadsheet of products, variants, SKUs, prices, compare-at prices, stock status, images and tags. No login, no API key, no browser needed.

This Actor reads the stores' public storefront endpoints (Shopify /products.json and the WooCommerce Store API) — the same data any visitor's browser can see. It is fast, cheap and does not collect any customer or personal data.

What can this Shopify & WooCommerce scraper do?

  • Auto-detects the platform – Shopify or WooCommerce, per store.
  • Exports the whole catalog – title, vendor/brand, product type/category, handle, URL, SKU, price, compare-at price, currency, availability, stock status, tags, image, created/updated dates.
  • Per product or per variant – one row per product (lowest price, any-in-stock) or one row per size/colour variant.
  • Price & stock change tracking – every row gets a changeType: new, price_up, price_down, back_in_stock, out_of_stock, removed or unchanged, plus previousPrice.
  • Only-changes mode – schedule it daily and get (and pay for) only the products that changed.
  • Collection / category filter – scrape one Shopify collection or one WooCommerce category.
  • Polite by design – sequential requests per store, delays, retries with exponential backoff and Retry-After support for HTTP 429.

Use cases

  • Competitor price monitoring – schedule daily runs on competitors' stores and get alerted on every price drop or increase.
  • Dropshipping & product research – find what a store sells, its price points, best-selling categories, and newly added products.
  • Stock / restock alerts – know when a sold-out product is back in stock (or a competitor runs out).
  • Catalog migration & backups – export a Shopify or WooCommerce catalog to CSV, Excel or JSON.
  • Market and assortment analysis – compare vendors, product types, discount depth (compareAtPrice vs price) across many stores.
  • MAP / reseller compliance – check that resellers' prices stay above your minimum advertised price.

How to use it

  1. Add one or more store URLs to Store URLs (e.g. https://www.allbirds.com).
  2. Optionally set Collection / category, Max products per store and One row per variant.
  3. Keep Track price & stock changes on. The first run records a baseline (all rows are new).
  4. Schedule the Actor (e.g. daily) and turn on Output only changed products to receive just the changes.
  5. Download results as JSON, CSV, Excel, or connect them to Google Sheets, Slack, Make, Zapier or webhooks.

Input example

{
"startUrls": [
{ "url": "https://www.allbirds.com" },
{ "url": "https://colourpop.com" },
{ "url": "https://www.filamentive.com" }
],
"platform": "auto",
"collection": "",
"maxProductsPerStore": 1000,
"includeVariants": false,
"trackChanges": true,
"onlyChanges": false
}
FieldDescription
startUrlsStore homepages. Product/collection URLs also work (the store root is used).
platformauto (default), shopify or woocommerce.
collectionShopify collection handle (e.g. mens) or WooCommerce category slug/ID.
maxProductsPerStoreProduct cap per store (default 1000).
includeVariantstrue = one row per variant, false = one row per product.
trackChangesCompare with the previous run's snapshot (default true).
onlyChangesOutput only rows whose changeType is not unchanged.
requestDelayMsPause between page requests to one store (default 700 ms).

Output example

{
"store": "https://www.allbirds.com",
"platform": "shopify",
"productId": "7340901859408",
"variantId": null,
"title": "Women's Allbirds Flip Flop - Dusty Pink",
"vendor": "Allbirds",
"productType": "Shoes",
"handle": "womens-allbirds-flip-flop-dusty-pink",
"url": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink",
"sku": "A12513W050",
"price": 25,
"maxPrice": 25,
"compareAtPrice": 50,
"currency": "USD",
"available": true,
"stockStatus": "in_stock",
"tags": ["allbirds::gender => womens", "shoprunner"],
"imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png",
"variantCount": 7,
"createdAt": "2026-03-27T14:03:50-07:00",
"updatedAt": "2026-10-15T21:27:17-07:00",
"changeType": "price_down",
"changes": ["price_down"],
"previousPrice": 30,
"previousAvailable": true,
"scrapedAt": "2026-10-16T04:27:14.391Z"
}

The dataset has three ready-made views: Products, Price & stock changes, and All fields. A run summary (products, rows, change counts per store) is saved to the SUMMARY record in the run's key-value store.

If a store cannot be read (not Shopify/WooCommerce, API disabled, or blocked), you are not charged for it: the reason is listed under errors in the run's SUMMARY record (Storage → Key-value store), and in the run log.

Change types

changeTypeMeaning
newNot present in the previous snapshot (every row on the first run).
price_up / price_downPrice changed since the last run; see previousPrice.
back_in_stock / out_of_stockAvailability flipped. If price also changed, changes lists both.
removedWas in the last snapshot but is gone now (only reported when the full catalog was scraped).
unchangedSame price and availability.

Snapshots are stored per store (and per collection / variant mode) in the named key-value store store-catalog-tracker-snapshots in your Apify account, so tracking works across scheduled runs. Delete a record there to reset the baseline.

Pricing

Pay per result: $0.001 per product row in the dataset ($1 per 1,000 products). Error rows are free, and rows skipped by Output only changed products are not charged. Set a maximum cost per run in the run options – the Actor stops cleanly when your budget is reached (and doesn't advance the change-tracking baseline, so you never miss a change).

Example: tracking 3 competitor stores with 1,000 products each, daily, with only-changes on – the first run costs ~$3, then you pay only for the products that changed.

FAQ

Is it legal to scrape Shopify and WooCommerce stores? This Actor only reads public product data that stores expose to every visitor through their storefront endpoints. It collects no personal data. You are still responsible for complying with the target site's terms and applicable laws.

Why did a store return an error? Some stores disable /products.json or the WooCommerce Store API, sit behind bot protection (Cloudflare, etc.), or use another platform (Magento, BigCommerce, Wix…). Those stores can't be read via public endpoints.

How many products can it get? Shopify's public endpoint paginates up to 100 pages × 250 = 25,000 products per store (or per collection – use collections to go beyond). WooCommerce has no fixed cap.

Does it get inventory quantities? Shopify's public endpoint exposes only availability (in/out of stock), not quantities. WooCommerce exposes lowStockRemaining when the store shows "only X left".

Why is currency empty? Shopify currency comes from the store's /meta.json (base currency); a few stores hide it. WooCommerce always returns a currency code.

Do I need proxies? Usually not – requests are light and polite. Heavily protected stores may block datacenter IPs.

Can I monitor only one collection? Yes – set Collection / category. Each collection keeps its own change-tracking snapshot.

Limitations

  • Shopify page-based pagination stops at page 100 (25,000 products per endpoint).
  • WooCommerce Store API does not expose created/updated dates or vendor unless the store uses WooCommerce Brands.
  • Prices are those shown to an anonymous visitor in the store's default currency/market (no currency conversion, no B2B/member pricing).
  • removed is only reported when the whole catalog fits under maxProductsPerStore.