Shopify Store Monitor: Price Drop, Stock & New Product Alerts
Pricing
from $4.00 / 1,000 store checks
Shopify Store Monitor: Price Drop, Stock & New Product Alerts
Watch any Shopify store or collection for new and removed products, price drops, restocks and sell-outs, with Slack, Discord or webhook alerts. Can also export the full product catalog. Fast, no browser, no proxy.
Pricing
from $4.00 / 1,000 store checks
Rating
0.0
(0)
Developer
kelvin lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
Track any Shopify store, or just one of its collections, and get told what changed since the last check: new products, removed products, new variants, price drops, price increases, sell-outs and restocks. Alerts go straight to Slack or Discord, or to any webhook (Make, n8n, Zapier).
It reads each store's public Shopify product feed: no browser, no login, and no proxy needed for most stores. A 700-product store is checked in about 3 seconds.
What you can use it for
- Competitor price tracking: see every price drop and price increase across your competitors' Shopify stores, with old price, new price and % change.
- Restock and sell-out alerts: know when a size, color or product comes back in stock or sells out.
- New product drops: get notified the moment a store adds a product or a new variant.
- Shopify catalog export: download every product variant of a store with price, compare-at price, SKU and stock status (full catalog mode).
Why this monitor
- Only real changes. If a store briefly returns an empty catalog, you don't get hundreds of "removed" and then "new" alerts. When only part of a catalog is fetched, nothing is wrongly flagged as removed or new.
- No lost alerts. If your Slack, Discord or webhook endpoint is down, the alert is retried on the next run.
- Ready-to-read messages. Slack and Discord get one clean message per store, for example
🔻 Price drop: Men's Tree Runner / 10: $98.00 → $78.00 (-20.41%). - Collections and keywords. Watch only
/collections/mens, or only products matching "runner" and not "kids". - Store currency is included in every row.
- You only pay for what you use. Failed stores are free, and the run stops cleanly at your maximum cost per run. Changes that didn't fit in the budget are reported on the next run.
How it works
- The first run saves a baseline of every product and variant for each store.
- Every later run compares the store with the last run and outputs only what changed.
- Optionally, it sends alerts to Slack, Discord or any webhook.
Schedule it hourly or daily with Apify Schedules and you have a competitor monitor on autopilot.
Quick start
- Add one or more store URLs, e.g.
https://www.allbirds.comorgymshark.com. - Run once. This saves the baseline, and the dataset shows one
STORE_SUMMARYrow per store. - Create a Schedule (Console → Schedules → Create) with the same input, daily or hourly.
- Optional: paste a Slack or Discord webhook URL into Alert webhook URL.
Input
| Field | Description |
|---|---|
storeUrls | Stores to monitor. A domain or any store URL works. A collection URL (/collections/<name>) monitors just that collection. Repeated URLs are checked once. |
outputMode | changes (default) outputs only changes. all also outputs every variant as a SNAPSHOT row (full catalog export). |
trackEvents | Which change types to report. Default: all. |
minPriceChangePercent | Ignore price moves smaller than this %. Measured from the last reported price, so slow drifts are still caught. |
webhookUrl | Slack or Discord webhook (formatted message), or any URL (JSON). Stored encrypted. |
keywords / excludeKeywords | Monitor only products whose title, tags, vendor or type match, or skip those that do. |
maxProductsPerStore | Cap products fetched per store. 0 = no limit. With a cap, removed products are not reported. |
stateKey | Monitor name. Runs with the same name share history. Changing keywords or the cap starts a fresh baseline automatically. |
proxyConfiguration | Optional. Apify datacenter proxy or your own proxies, if a store rate-limits you. Residential proxy is not supported. |
{"storeUrls": ["https://www.allbirds.com", "kith.com/collections/mens-footwear"],"minPriceChangePercent": 5,"keywords": ["runner"],"webhookUrl": "https://hooks.slack.com/services/..."}
Output
One row per change:
{"changeType": "PRICE_DROP","store": "https://www.allbirds.com","storeName": "Allbirds","productTitle": "Men's Tree Runners","variantTitle": "10 / Black","sku": "TR-M-10-BLK","oldPrice": 98,"newPrice": 78,"priceChangePercent": -20.41,"currency": "USD","available": true,"productUrl": "https://www.allbirds.com/products/mens-tree-runners","imageUrl": "https://cdn.shopify.com/...","vendor": "Allbirds","productType": "Shoes","detectedAt": "2026-10-18T09:00:00.000Z"}
Change types: NEW_PRODUCT, REMOVED_PRODUCT, NEW_VARIANT, PRICE_DROP, PRICE_INCREASE, OUT_OF_STOCK, BACK_IN_STOCK, plus SNAPSHOT rows in full catalog mode.
Each store also gets one free STORE_SUMMARY row per run:
{"changeType": "STORE_SUMMARY","store": "https://www.allbirds.com","storeName": "Allbirds","status": "ok","productsMonitored": 692,"variants": 7454,"changesDelivered": 3,"changesPostponed": 0,"scanComplete": true,"notification": "sent","pendingNotifications": 0}
status is one of:
baseline_saved: first run for this store.ok: checked;changesDeliveredsays how many changes were found.error: the store could not be checked, with the reason inerror, e.g.NOT_FOUND(not a Shopify store),BLOCKED(password-protected),DOMAIN_NOT_FOUNDorEMPTY_CATALOG.skipped_budget: your maximum cost per run was reached.skipped_newer_state: a newer run of the same monitor already checked this store.
The dataset has three views: Changes, Store summary and Full catalog. Export them as JSON, CSV or Excel, or read them through the Apify API.
Full catalog export
Set outputMode to all to also get every variant of every monitored product as a SNAPSHOT row: product and variant title, SKU, price, compare-at price, currency, stock status, vendor, type, tags, image and product URL. It works on the first run too, so it doubles as a Shopify product scraper.
Snapshot rows are charged per row, and each variant is one row. For example, Allbirds has 692 products in 7,454 variants (sizes), so a full export costs 7,454 × $0.0002 ≈ $1.49.
Alerts
- Slack: create an Incoming Webhook and paste its URL.
- Discord: Channel settings → Integrations → Webhooks → New Webhook → Copy URL. Mentions such as
@everyonein product titles never ping anyone. - Make, n8n, Zapier or your API: use their "custom webhook" URL. You receive
{ text, store, storeName, totalChanges, changes[] }, one request per store with changes (up to 200 changes per request; the full list is in the dataset).
Long Slack and Discord messages are trimmed to the platform's limit and end with "…and N more" plus a link to the full dataset.
Pricing
Pay per event: you pay only for what the Actor does.
| Event | Price | When |
|---|---|---|
| Store check | $0.004 | Per store or collection checked, per started block of 5,000 products. A 12,000-product store counts as 3 checks. |
| Change detected | $0.001 | Per change row delivered. |
| Catalog item | $0.0002 | Per SNAPSHOT row (one per variant), in full catalog mode only. |
Apify also charges its standard Actor start fee ($0.00005 per run). Summary rows are free, and stores that fail (not Shopify, password-protected, unreachable) are not charged.
Examples:
- 1 store (under 5,000 products) checked daily: about $0.12/month plus $0.001 per change.
- 20 competitor stores (about 2,000 products each) checked daily with about 50 changes a day: about $3.90/month.
- Full catalog export of a 2,000-product store with 10,000 variants: about $2.00.
Set a maximum cost per run in the run options to stay in control. When it is reached, the run stops cleanly and any changes that didn't fit are reported on the next run.
Limitations
- Works on stores that expose the standard Shopify product feed (
/products.json), which is the vast majority. Password-protected stores and stores that disable the feed or sit behind bot protection are reported aserror. - Shopify lists at most 25,000 products per store or collection. For bigger stores the first 25,000 are monitored and removed products are not reported; monitor collections separately to cover more.
- Prices are in the store's own currency and are not converted.
- Shopify only shows published products, so hidden or draft products are not tracked.
FAQ
Why are there no changes on the first run? The first run creates the baseline. Changes are reported from the second run on.
How often should I run it? Daily is enough for most price and catalog tracking. For restocks and product drops, run it hourly; each run is charged per store check, so 24 checks of one store cost about $0.10 a day.
Can I track hundreds of stores?
Yes. Add them all to storeUrls. Each store and collection keeps its own history.
Can I export all products of a Shopify store?
Yes. Use outputMode: all and export the Full catalog view as CSV, Excel or JSON.
Can two schedules run at the same time? Yes. If two runs of the same monitor overlap, the newer observation wins and the older run doesn't overwrite it.
I changed keywords and got no changes on the next run. Why? A different filter means a different set of products, so the Actor starts a fresh baseline instead of reporting false changes.
Is this legal? The Actor reads only public product data that any visitor's browser receives. It doesn't log in or access private data. Respect each store's terms of service.
Support
Found a bug or need a field? Open an issue on the Actor's Issues tab. We usually reply within 48 hours.