Shopify Product Scraper & Price Change Monitor
Pricing
$1.50 / 1,000 product scrapeds
Shopify Product Scraper & Price Change Monitor
Extract public Shopify catalogs with prices, variants and availability. Compare complete catalogs across scheduled runs to find price, stock and product changes. Free-plan sample: 25 products from one store per run.
Pricing
$1.50 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Scopras Data Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
Extract Shopify product prices, variants and availability from public store catalogs. Export product snapshots to JSON, CSV or Excel, or compare complete catalogs across runs to detect price changes, new products and availability changes.
Built for ecommerce analysts and agencies maintaining competitor catalog watchlists. No Shopify admin credentials are required. The store must expose a public /products.json endpoint.
Try a small catalog sample
- Enter a public Shopify store domain.
- Start with 25 products and keep Emit full catalog snapshot rows enabled.
- Open the Output dataset to inspect product and variant data. Check the
SUMMARYrecord for source failures or partial catalogs. - For ongoing monitoring, use a paid Apify plan, choose limits large enough for the complete catalog, and reuse the same monitor name and limits on a schedule.
{"storeDomains": ["gymshark.com"],"maxProductsPerStore": 25,"emitSnapshotRows": true,"monitorKey": "competitor-watchlist"}
This is a small extraction example. A 25-product cap gives a partial catalog: repeat runs still detect price, stock and variant changes on the products scanned, but cannot report new or removed products.
Free-plan sample and production use
On an Apify Free plan, each run samples at most 25 distinct products from one store. The Actor finishes with a clear sample-limit status. Larger catalogs and multiple stores require an Apify paid plan; configured limits and your run spending limit still apply. This is a per-run sample limit, not a lifetime trial.
Pricing
The current standard event price is $1.50 per 1,000 distinct products scanned ($0.0015 per product). A product with several variants is counted once within a store, rather than once per output row. The same product scanned again on a later run is another scan. Change rows do not add a second product charge.
For example, scanning 1,000 distinct products once costs $1.50 in product events. Scanning that catalog daily for 30 days costs $45 in product events. Your current Pricing tab is authoritative for any future price or plan changes.
No product events are charged when no products are obtained. Set a maximum total charge for each run. The Actor caps collection to its remaining product-event budget and stops when it is spent.
How recurring price monitoring works
The first complete catalog establishes a baseline. Later complete runs with the same monitorKey, store domain and collection limits compare against it. Baselines are held in a named key-value store associated with your account and this Actor, so they survive normal run-to-run storage changes.
new_productandremoved_product: a product appears or disappears in a complete catalog.price_changed: a shared variant's price, compare-at price or SKU changes, or a new variant appears.availability_changed: a variant's availability changes, or it disappears from a surviving product.
When the catalog is larger than your caps, or a page request fails, the run is marked partialCatalog: true in SUMMARY. It compares price, stock and variant changes only for products seen in both runs, never reports unseen products as removed, and carries unseen products forward with their last known values. New and removed products are reported only when a complete catalog is compared against a complete stored one. Empty or non-catalog responses (bot walls) never replace the stored baseline. Raise the product/page caps to monitor the whole catalog. Avoid simultaneous runs for the same monitor. A new monitor name or changed collection limits starts an independent baseline. resetSnapshot: true starts a fresh comparison baseline.
Input options
| Input | Purpose |
|---|---|
storeDomains | Public Shopify domains or HTTPS storefront URLs |
maxProductsPerStore | Product cap per store; default 2,000 |
maxPagesPerStore | Pagination cap; default 20 pages of up to 250 products |
monitorKey | Reusable monitor name; default default |
emitSnapshotRows | Include current variant rows; default true |
resetSnapshot | Start a new baseline; default false |
requestTimeoutSecs | Timeout per request; default 30 seconds |
minRequestDelayMs | Delay between catalog pages; default 500 ms |
maxResponseBytes | Per-page response size ceiling; default 5 MB |
Output
Snapshot rows contain domain, productId, productHandle, productTitle, variantId, variantTitle, sku, price, compareAtPrice, available, updatedAt and capturedAt. Change rows include changeType, before/after values and a detection timestamp. SUMMARY contains per-store reports, product counts, sample status and budget-stop status.
The available flag is a public storefront signal. It is not an inventory-unit count. Prices follow the values published by the endpoint; this Actor does not perform currency conversion.
FAQ
Why are there no changes on my first run? A complete first run establishes the baseline. Partial samples (catalog larger than your caps) still save what was scanned, so the second run compares those products.
Why did a successful HTTP request return no products? The store may disable the catalog endpoint, require browser rendering, or return a challenge page. Check SUMMARY. If all catalog requests fail, the run reports failure rather than claiming success.
Can I scrape a non-Shopify store? Use E-commerce Product Scraper for product data exposed in public HTML. Use XML Sitemap Scraper to collect product URLs first.
Can I compare an existing product dataset? Use Product Catalog Change Monitor, which accepts structured catalog input.
For support, open an issue with your run ID, public target domain and expected output. Do not include API tokens or private customer data.