Shopify Store Monitor: Product Prices & Stock Changes
Pricing
from $0.64 / 1,000 product returneds
Shopify Store Monitor: Product Prices & Stock Changes
Watch public Shopify catalogues for new products, price changes and stock status via /products.json. Non-Shopify, blocked or password-protected stores are reported as skipped rows — never a silent empty success.
Pricing
from $0.64 / 1,000 product returneds
Rating
0.0
(0)
Developer
Southern Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Security
Limited permissionsShare
Read a Shopify store’s public catalogue (/products.json) and get structured product rows — title, vendor, price range, compare-at price, stock status and the product URL. Optional monitor mode remembers the last catalogue so a daily schedule only returns new products, removals, price changes and stock changes.
If a domain is not Shopify, is password-protected, is blocked, or really has zero products, you get a skipped or empty row that says so. The run never reports a silent success with zero unexplained rows.
Limits (read these first)
- Public catalogue only. This Actor reads
/products.json(or/collections/{handle}/products.json). It does not log in, does not bypass a store password, and does not copy checkout or customer data. - About 250 products per page, capped per store. Default cap is 2,000 products per store (maximum 5,000). Shopify’s public feed itself often stops around 10,000 products, so very large catalogues are incomplete by design.
- One row per product, not per variant.
priceis the lowest variant price,priceMaxthe highest, andavailableis true if any variant is in stock. Variant-level detail is not written as separate rows. - Headless or custom storefronts may not expose
/products.json. Those stores are reported as skipped (not_shopifyornot_json) rather than guessed. - Respect the merchant. This is for watching public prices and stock — not for copying a store wholesale. Keep request volume reasonable (this Actor already pauses between pages).
- Monitor first run returns a full snapshot. In
mode=changed, the first run saves a baseline and returns every product (changeType=baseline) so you can see the catalogue. Later runs return only changes.
Quick start
{"stores": ["allbirds.com", "https://www.gymshark.com"],"mode": "all","maxProducts": 200}
Daily competitor watch (schedule this):
{"stores": ["allbirds.com", "https://www.gymshark.com"],"mode": "changed","monitorName": "competitors-daily"}
First scheduled run: full snapshot + baseline saved. Later runs: only new products, removals, price moves and stock changes.
A collection URL limits the scrape to that collection:
{"stores": ["https://allbirds.com/collections/mens"]}
Output fields
| Field | Meaning |
|---|---|
status | ok, skipped, or empty |
reason / reasonCode | Why a store was skipped (not_shopify, password_protected, blocked, empty_catalogue, …) |
store, title, vendor, url | Product basics |
price, priceMax, compareAtPrice | Lowest / highest variant price and lowest “was” price |
available, variantCount, availableVariantCount | Stock summary |
previousPrice, previousAvailable, changeType, priceDelta | Set in monitor mode (baseline / new / price_drop / price_rise / sold_out / back_in_stock / removed) |
Pricing (pay per event)
| Event | Price | When |
|---|---|---|
actor-start | $0.001 | Once per run, after the first successful Shopify catalogue fetch |
store-check | $0.005 | Each store whose public catalogue was fetched (including a genuine empty catalogue) |
product | $0.0008 | Each product row in mode=all, and each snapshot row on the first changed run |
change | $0.002 | Each change / new / removed row on later changed runs |
Store discount tiers: free-plan and Bronze users pay the prices above. Silver gets 10% off and Gold (and higher) gets 20% off.
Free: invalid / empty input (exit 0, $0), skipped stores (not Shopify, password-protected, blocked, network errors), unchanged products in monitor mode.
Typical cost to snapshot one 200-product store: $0.001 + $0.005 + 200×$0.0008 = $0.166. A later monitor run of that store with 8 changes: $0.001 + $0.005 + 8×$0.002 = $0.022.
Tips
- Set
monitorNameand keep it stable when using Apify Schedules. - Cap spend with Apify’s
maxTotalChargeUsdon the run or task. - Prefer specific collection URLs when you only care about one category.
- Default memory is 512 MB — enough for this Actor.
Self-test
Set "selfTest": true to run offline checks of parsing, skip reasons, pagination and change detection. Used by our daily health schedule.
Related tools
- Google Shopping Price Monitor — see how the same products are priced across Google Shopping, not just on one store
- Website Contact Finder — find a merchant's published email or social profiles from their website