Shopify Price & Stock Change Tracker
Pricing
from $5.00 / 1,000 product observations
Shopify Price & Stock Change Tracker
Monitor public Shopify products, variant prices and availability. Track price cuts, restocks, new products and confirmed removals with persistent snapshots.
Pricing
from $5.00 / 1,000 product observations
Rating
0.0
(0)
Developer
Marco Schwartz
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Security
Limited permissionsShare
Extract public Shopify products and variant prices, then monitor price cuts, price increases, restocks, out-of-stock changes, new products and confirmed catalogue removals. Persistent snapshots make scheduled runs useful for competitor research and ecommerce monitoring.
No store admin access, private Shopify token, proxy subscription, or AI service is required. Only storefront data is read.
Quick start
- Enter Shopify store homepages or specific /products/handle URLs.
- Set a maximum number of products per store.
- Run the Actor to create a baseline and export JSON, CSV or Excel.
- Save an Apify Task and schedule it. Enable Only changes to hide unchanged observations on subsequent runs.
{"storeUrls": ["https://www.allbirds.com/"],"maxProductsPerStore": 100,"changesOnly": false,"includeDescription": false,"monitorId": "competitor-watch"}
For selected products, supply their actual storefront URLs. Product URLs are merged by store. If a store homepage and individual products from that store are both supplied, the full-catalogue scan takes precedence. A monitor scans up to 25 input URLs and up to 5,000 products per store.
Output
Each product observation includes storeUrl, productId, handle, title, vendor, productType, tags, productUrl, imageUrl, publishedAt, currency, priceMin, priceMax, available, variants, optional description, changeType, changes, previous, and checkedAt.
Variants include stable variantId, title, SKU, decimal price, compareAtPrice and public availability. previous contains prior currency, price range, availability and variants, so individual price/stock changes can be inspected. JSON is best for nested variant history; the overview table gives flat prices and observation types.
Public availability is true when any variant is available, false when every variant explicitly says unavailable, and null when unknown. Currency is taken from the storefront's public cart.js currency field when available, otherwise null. Private inventory quantities are not returned or inferred. Prices are published storefront prices; discounts, shipping and checkout totals are not calculated.
Monitoring states
| changeType | Meaning |
|---|---|
| baseline | First observation; does not mean newly launched |
| new | Product newly observed since a previous successful scan |
| changed | Published product fields changed |
| unchanged | Same observed fields |
| possibly_removed | Missing from one complete successful catalogue scan |
| removed | Missing from two complete successful catalogue scans |
| returned | Previously removed product appeared again |
changes may contain price_decrease, price_increase, restocked, out_of_stock, compare_at_price_changed, variants_added, variants_removed, currency_changed or metadata_changed. Price comparisons match stable variant IDs. A currency change suppresses price-increase/decrease labels to avoid comparing different currencies.
Removal observations retain the last observed product details. They indicate absence from the public feed, not a confirmed business decision or physical stock count. Missing selected-product endpoints are treated as errors and preserve state; removal confirmation relies on successful whole-catalogue scans.
Snapshots are isolated by running user and monitor name. Without an explicit name, the Task ID or normalized input targets determine the monitor. Use one schedule per monitor; concurrent runs can race. Detected snapshot conflicts skip the update and appear in RUN_SUMMARY. State is subject to Apify's storage retention; an expired snapshot restarts the baseline.
Failed stores preserve snapshots. Capped scans never remove unseen products. If the spending limit prevents full output for a store, that store's snapshot is not advanced, so unreturned changes remain available on a subsequent run. Changing includeDescription does not change comparison fingerprints.
Pricing
$5 per 1,000 emitted product observations ($0.005 each), across all Apify plans. Variants are included in a product record without a separate per-variant event. Baseline, unchanged, changed and removal observations are billable. Only changes reduces output after the first baseline. Failed stores and RUN_SUMMARY do not have an Actor event charge.
Configure Maximum total charge before running. Product output stops at the event budget. Ordinary Apify platform usage charges may apply according to your plan. Store pricing is authoritative.
Coverage and limitations
- Requires public Shopify products.json or product-handle Ajax .js endpoints. The Ajax endpoint provides selected-product availability, with integer subunit prices converted to decimal prices. Password-protected stores, blocked feeds and non-Shopify websites are reported as errors.
- Homepages and /products/handle URLs are supported. Collection URLs, country/language subpaths, custom API filters, authentication and proxy routing are not supported in this release.
- Catalogue pagination uses a consistent page size. Exactly reaching a configured cap is conservatively marked truncated unless the end of the feed was observed.
- Stock, prices and currency reflect the public response from the run's network location. Storefront personalization and regional pricing can differ from a customer's checkout.
- The first run reports baseline rather than claiming every product is new.
- Fetch size, timeout, retries and public-network validation are bounded. No login, anti-bot bypass, or private admin API is used.
- RUN_SUMMARY records errors, scan truncation, spending-limit status, counts and detected state conflicts. A run fails when all requested stores fail.
Privacy and support
Only public product data is collected. The currency check reads the currency field from a fresh unauthenticated cart response; cart contents are not stored. Output and snapshots stay in the running user's Apify storage. No external AI or analytics service receives them. Use the Actor's Issues tab for support with a public store URL and run ID, without credentials.
Local development
Use Node.js 22 or newer: npm ci, npm test, then npm start with input in Apify local storage. Dependencies are pinned. Input/output/dataset schemas are included in .actor. The release script uses APIFY_TOKEN from the environment, never a source-code token.