Shopify Scraper – Products, Prices, Variants & Stock Monitor avatar

Shopify Scraper – Products, Prices, Variants & Stock Monitor

Pricing

Pay per event

Go to Apify Store
Shopify Scraper – Products, Prices, Variants & Stock Monitor

Shopify Scraper – Products, Prices, Variants & Stock Monitor

Scrape any Shopify store: all products, variants, SKUs, prices, compare-at (sale) prices, discount %, stock availability, vendor, type, tags, images and description. Store, collection or product URLs. Price & stock change monitor. No login, no proxy.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Scrapeworks HQ

Scrapeworks HQ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Shopify Scraper – Products, Prices, Variants & Stock Monitor for Any Shopify Store

Scrape any Shopify store (custom domains included): every product, variant, SKU, price, compare-at (sale) price, discount %, stock availability, vendor, product type, tags, images and description. Point it at a store, a collection or a single product URL. Built-in price & stock change monitor – schedule it and get only what changed. No login, no proxy, no browser.

🚀 Quick start (60 seconds)

  1. Paste one or more store URLs into Shopify stores, collections or product URLs, e.g. allbirds.com, https://www.tentree.com/collections/sale or https://shop.com/products/some-handle.
  2. Optional: set filters (keywords, vendor, in-stock only, on-sale only, price range) and Max products per store.
  3. Click Start and export to JSON, CSV, Excel or Google Sheets.
{
"startUrls": ["https://www.allbirds.com/collections/mens", "tentree.com"],
"onlyOnSale": true,
"maxProductsPerStore": 100
}

Sample output

{
"storeDomain": "www.allbirds.com",
"productId": 4870548979792,
"handle": "mens-tree-runners",
"title": "Men's Tree Runner - Jet Black (White Sole)",
"vendor": "Allbirds",
"productType": "Shoes",
"currency": "USD",
"minPrice": 100,
"maxPrice": 100,
"compareAtPrice": null,
"onSale": false,
"discountPct": null,
"available": true,
"variantsCount": 7,
"availableVariantsCount": 5,
"options": ["Size"],
"imageUrl": "https://cdn.shopify.com/...png",
"url": "https://www.allbirds.com/products/mens-tree-runners",
"variants": [{ "variantId": 42146889039952, "title": "8", "sku": "TR3MJBW080", "price": 100, "compareAtPrice": null, "available": true }],
"publishedAt": "2025-03-01T10:00:00.000Z",
"updatedAt": "2026-10-21T22:37:55.000Z"
}

Why this Shopify product scraper?

  • Works on any Shopify store – reads the store's public product feed (/products.json), so custom domains just work, 250 products per request.
  • Store, collection or product URLs – scrape a whole catalog, just the /collections/sale page, or a watchlist of products.
  • Product or variant rows – one row per product (with min/max price and nested variants) or one row per size/color/SKU with its own price and stock.
  • Sale & discount detection – compareAtPrice, onSale, discountPct computed for you.
  • Price & stock monitor – Monitor mode returns only new/changed products with previousPrice and priceChange; unchanged items are free.
  • Cheapest in class – $0.75 / 1,000 products, 25% below the leading Shopify Actors.
  • Fast & polite – plain HTTP, no browser; a 1,000-product store takes a few seconds.

Use cases

  • Competitor price monitoring for DTC brands and Shopify merchants – daily price/discount/stock changes per SKU.
  • Product research & dropshipping – full catalogs with vendors, types, tags and images.
  • Market & assortment analysis – catalog size, price ranges and discount depth across many stores.
  • Restock alerts – variant mode + Monitor mode tells you when a size comes back in stock.
  • AI / RAG datasets – clean product titles, descriptions and attributes.

Input

FieldDescription
startUrlsStore domains, collection URLs or product URLs (required).
keywords / excludeKeywordsInclude/exclude by words in title, tags, type, vendor.
vendors, productTypesExact vendor / product type filters.
onlyAvailable, onlyOnSaleIn-stock only; discounted only.
minPrice, maxPricePrice range in the store's currency (0 = off).
outputLevelproduct (default) or variant.
includeDescriptionAdd description text/HTML (default on).
maxProductsPerStore, maxResultsTotalLimits (0 = all).
monitorMode, monitorKey, outputFormat, summaryWebhookUrlMonitoring & output options (see below).

Output

Product rows: storeDomain, storeUrl, productId, handle, title, vendor, productType, tags, currency, minPrice, maxPrice, compareAtPrice, onSale, discountPct, available, variantsCount, availableVariantsCount, options, imageUrl, images, url, descriptionText, descriptionHtml, publishedAt, createdAt, updatedAt, variants[] (variantId, title, sku, price, compareAtPrice, available, option1-3, grams, requiresShipping, imageUrl), scrapedAt.

Variant rows carry the same product fields plus the variant's own variantId, sku, price, compareAtPrice, available and a variant url.

Dataset views: Overview, Variants and Changes. A RUN_STATS record lists stores scraped, blocked or not Shopify.

⭐ Unique: Monitor mode, CSV-ready output & webhook summary

Shopify price tracker in one setting: schedule daily with monitorMode: "changes" and you get only products whose price, compare-at price or stock changed (with previousPrice, priceChange, priceChangePct) plus brand-new products. Unchanged products are free. SUMMARY also counts price drops/rises and products that disappeared.

  • Monitor mode (monitorMode: all | changes | onlyNew, plus monitorKey) – cross-run dedupe and field-level diffs (changeType, changedFields, changes, firstSeenAt). Skipped items cost $0.
  • Flat / CSV-ready output (outputFormat: "flat") – one column per field, perfect for Excel and Google Sheets.
  • Run summary – a free SUMMARY record in the run's key-value store (linked in the Output tab) and optionally POSTed to summaryWebhookUrl.

💰 Pricing (pay per result)

EventPrice
Run start$0.00005
Product (or variant row)$0.75 / 1,000

25% cheaper than the most-used Shopify product Actors ($1.00 / 1,000). Filtered-out, duplicate and monitor-skipped items are never charged; stores that block their feed cost nothing.

Notes & limitations

  • Works for stores that expose Shopify's standard public product feed (the vast majority). A few large brands block it (HTTP 403) or are password-protected – these are skipped and logged, not charged.
  • Inventory quantities aren't public on Shopify; you get per-variant in-stock true/false.
  • Currency is detected from the store; multi-currency stores return their default currency.

This Actor reads only public product catalog data that stores publish to every visitor. It does not log in, does not touch checkout, customers or orders and collects no personal data. You are responsible for using the data in line with applicable laws and each store's terms.

🔌 Integrations & API

Works with Zapier, Make, n8n, Google Sheets, Slack, Airbyte, LangChain/LlamaIndex and the Apify MCP server (AI agents).

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('scrapeworkshq/shopify-scraper').call({ startUrls: ['https://www.allbirds.com'], onlyOnSale: true });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
client = ApifyClient('<APIFY_TOKEN>')
run = client.actor('scrapeworkshq/shopify-scraper').call(run_input={"startUrls": ["https://www.allbirds.com"], "onlyOnSale": True})
items = client.dataset(run['defaultDatasetId']).list_items().items

cURL (sync, returns CSV)

curl -X POST 'https://api.apify.com/v2/acts/scrapeworkshq~shopify-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>&format=csv' \
-H 'content-type: application/json' -d '{"startUrls": ["tentree.com"], "outputLevel": "variant", "outputFormat": "flat"}'

❓ More FAQ

How do I know if a site is a Shopify store?
Just try it – non-Shopify sites are detected, logged and skipped for free.

Can I scrape only one collection?
Yes, paste the collection URL (https://store.com/collections/<handle>).

How does Monitor mode work?
The Actor remembers the IDs and key fields of items it returned before (in a named key-value store in your account, keyed by monitorKey). Next run, each item gets changeType = new / changed / unchanged plus a changes diff. In Only new / Only new or changed modes, the rest is skipped and not charged.

How do I get a clean CSV / Excel / Google Sheet?
Set Output format → Flat / CSV-ready. Nested objects become dot.columns and lists are joined with |.

How do I limit cost?
Use the max-results inputs and Apify's Maximum cost per run. The Actor stops cleanly when the limit is reached.

Found a bug or need a field? Open an issue on the Issues tab – we usually reply within 24 h.

Changelog

  • 2026-10-21 – First release: store/collection/product URLs, product & variant rows, sale detection, Monitor mode, flat output, SUMMARY + webhook.