Shopify Price-Drop & Restock Monitor
Pricing
$1.50 / 1,000 results
Shopify Price-Drop & Restock Monitor
Monitor public Shopify product feeds for price drops, price increases, restocks, out-of-stock changes, new products, and removed variants using stateful change detection.
Pricing
$1.50 / 1,000 results
Rating
0.0
(0)
Developer
Catalin Ionut Iliescu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Monitor public Shopify product feeds for useful buyer and e-commerce events: price drops, price increases, restocks, out-of-stock changes, new products, removed products, new variants, removed variants, compare-at price changes, and compact snapshot rows.
This is a stateful change monitor, not a generic Shopify catalog scraper. It is built for scheduled monitoring tasks where the valuable output is "what changed since last run?"
What It Uses
The Actor uses only public Shopify product feed endpoints such as:
https://store-domain/products.json
It does not log in, use browser automation, use proxies, call paid APIs, call LLMs at runtime, scrape carts or checkouts, or extract customer or personal data. Some stores disable or block this public feed. When that happens, the Actor emits a source_error row with sourceHealth=error and does not overwrite the previous state for that store.
This Actor is not affiliated with Shopify or any monitored store.
Modes
changes is the default mode. It compares the current public feed with the previous saved snapshot for the same store and stateKey, then emits meaningful change events.
snapshot emits the current normalized product/variant snapshot without diffing.
both emits change events first, then current snapshot rows.
Snapshot rows use eventType=initial_snapshot and changeReason=current snapshot row.
First Run Behavior
State is stored in a persistent named Apify key-value store:
shopify-price-restock-monitor-state
State is scoped by this Actor namespace, normalized store domain, stateKey, and available Apify actor/user/task context. Use a unique stateKey for each monitoring setup or saved task.
On the first run for a given store and stateKey:
- If
emitInitialSnapshotAsNew=true, current product/variant rows are emitted asinitial_snapshotevents and saved as the baseline. - If
emitInitialSnapshotAsNew=false, the baseline is saved and zero change events are emitted.
State stores compact normalized product and variant fields only. It does not store large raw product descriptions.
Change Rows
The Actor emits one row per affected product/variant identity per run. eventType contains the highest-priority event, while boolean fields show secondary changes on the same row.
Priority order is:
price_drop, restocked, price_increase, out_of_stock, compare_at_price_changed, changed, unchanged
For example, if a variant drops in price and restocks in the same run, eventType is price_drop, with both isPriceDrop=true and isRestock=true.
Restock Limitations
Shopify public products.json feeds may expose variant available as true or false, but they do not guarantee exact inventory quantities. This Actor never invents inventory counts. Restock and out-of-stock events are emitted only when public availability changes from false to true or true to false. If availability is not exposed, it remains null/unknown and restock detection is not claimed.
Currency is also often not exposed by products.json, so currency may be blank.
Input Notes
maxItems is a global cap across all stores in one run, not a per-store cap.
onlyProductsMatching and excludeProductsMatching are case-insensitive substring filters. They match against product title, handle, vendor, product type, tags, variant title, variant ID, product ID, and SKU before diffing and saving state.
priceDropThresholdPercent and priceIncreaseThresholdPercent default to 0, so every detected price decrease or increase can emit a price event. Raise these values when you only want larger moves.
Input Example
{"stores": ["https://example-store.myshopify.com","https://www.example-brand.com"],"maxProductsPerStore": 250,"maxItems": 500,"mode": "changes","stateKey": "default","emitInitialSnapshotAsNew": true,"includeUnchanged": false,"includeFullProductData": false,"priceDropThresholdPercent": 0,"priceIncreaseThresholdPercent": 0,"onlyProductsMatching": [],"excludeProductsMatching": [],"requestDelayMs": 300}
Output Example
{"source": "shopify_products_json","storeUrl": "https://example-store.myshopify.com","storeDomain": "example-store.myshopify.com","productId": "1234567890","productHandle": "classic-tee","productTitle": "Classic Tee","productUrl": "https://example-store.myshopify.com/products/classic-tee","vendor": "Example Brand","productType": "Shirts","tags": ["sale"],"variantId": "9876543210","variantTitle": "Medium / Black","sku": "TEE-BLK-M","currency": "","oldPrice": 40.0,"newPrice": 32.0,"priceChange": -8.0,"priceChangePercent": -20.0,"oldCompareAtPrice": 50.0,"newCompareAtPrice": 45.0,"oldAvailable": false,"newAvailable": true,"eventType": "price_drop","changeReason": "price decreased; compare-at price changed; availability changed from false to true","isPriceDrop": true,"isPriceIncrease": false,"isRestock": true,"isOutOfStock": false,"isNewProduct": false,"isRemovedProduct": false,"isNewVariant": false,"isRemovedVariant": false,"previousHash": "abc123","currentHash": "def456","firstSeenAt": "2026-07-07T10:00:00Z","lastSeenAt": "2026-07-07T10:05:00Z","runTimestamp": "2026-07-07T10:05:00Z","sourceHealth": "ok","errorMessage": ""}
Public Task Ideas
- Daily price-drop monitor for a shortlist of brands.
- Restock watch for high-demand products where public availability is exposed.
- New product and new variant feed for category buyers.
- Compare-at price and sale tracking for merchandising teams.
- Competitive price movement alerts for a controlled set of public stores.
Pricing Suggestion
Do not configure monetization until validation and marketplace positioning are final. A practical paid model later could be either $0.50-$1.00 per monitored store run or $2-$3 per 1,000 emitted change/snapshot records.