Shopify Price Drop & Restock Monitor — Competitor Watch
Pricing
from $5.00 / 1,000 store checkeds
Shopify Price Drop & Restock Monitor — Competitor Watch
Shopify competitor monitor: an alert row for every price drop, price rise, new product or restock. Schedule it, no login.
Pricing
from $5.00 / 1,000 store checkeds
Rating
0.0
(0)
Developer
Mohammed Samaan
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
12 days ago
Last modified
Categories
Share
Shopify Products Scraper + Price Drop & Restock Monitor
Pull the full product catalog of any Shopify store — title, price, compare-at price, discount, availability, SKU, vendor, tags, images and product URL — as one clean row per variant. Or switch on monitor mode and get only what changed since the last run: price drops, restocks, new products, price rises.
No login, no cookies, no API key and no browser: every Shopify store publishes
its catalog at /products.json, and this actor reads that directly.
Who it's for
- Ecommerce sellers and dropshippers watching competitor pricing and stock
- Agencies building product feeds, price-comparison sheets or catalog audits
- Market researchers sizing a niche by scanning many stores at once
- Automation builders (n8n / Make / Zapier / MCP agents) that need Shopify products as JSON
What you get
Scraper mode (default) — one row per product variant:
| Field | What it is |
|---|---|
store | Store origin, e.g. https://www.allbirds.com |
title / variant | Product title and variant name (size, colour…) |
price / compareAtPrice / discountPct | Current price, strike-through price, discount % |
available | In stock (true/false) |
sku / productId / variantId | Identifiers |
vendor / productType / tags | Catalog metadata |
url / handle | Product page URL |
image / imageCount | First image URL and image count |
createdAt / updatedAt / publishedAt | Shopify timestamps |
Monitor mode (onlyChanges: true) — one row per change, with
changeType = PRICE DROP / RESTOCK / NEW PRODUCT / PRICE RISE, plus
was / now / drop / dropPct. The first run for a store returns the full
catalog tagged INITIAL and saves the baseline, so it is never empty.
Sample scraper row:
{"store": "https://www.allbirds.com","title": "Men's Tree Runners","variant": "Blizzard / 10","price": 98,"compareAtPrice": 120,"discountPct": 18.3,"available": true,"sku": "TR-M-BLZ-10","vendor": "Allbirds","url": "https://www.allbirds.com/products/mens-tree-runners"}
Example output
One real row (scraper mode, allbirds.com). The tags field is shortened here; the actor returns it in full.
{"store": "https://www.allbirds.com","productId": 7340901859408,"variantId": 42146889039952,"title": "Women's Allbirds Flip Flop - Dusty Pink","variant": "5","price": 25,"compareAtPrice": 50,"discountPct": 50,"available": false,"sku": "A12513W050","vendor": "Allbirds","productType": "Shoes","tags": "allbirds::edition => limited, allbirds::gender => womens, allbirds::hue => pink, … (shortened)","handle": "womens-allbirds-flip-flop-dusty-pink","url": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink","image": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png?v=1774646345","imageCount": 5,"createdAt": "2026-03-27T14:03:50-07:00","updatedAt": "2026-09-28T09:00:35-07:00","publishedAt": "2026-09-25T16:58:13-07:00","checkedAt": "2026-09-28T16:04:19.893Z"}
In monitor mode (onlyChanges: true) the first run returns the whole catalog with changeType: "INITIAL"; later runs return only rows with changeType set to PRICE DROP, RESTOCK, NEW PRODUCT or PRICE RISE.
Input
{"stores": ["https://www.allbirds.com", "gymshark.com"],"maxProducts": 2000,"onlyChanges": false}
stores— one Shopify store URL per line (any URL on the store works).maxProducts— cap per store.onlyAvailable— scraper mode: drop sold-out variants.onlyChanges— off by default. On = monitor mode; pair with an Apify schedule. Choose which changes to report withalertOnPriceDrop,alertOnRestock,alertOnNewProduct,alertOnPriceRise.webhookUrl— monitor mode: changes are POSTed as JSON.
Pricing
Pay per event: a small charge per store checked and a charge per change detected
in monitor mode. Catalog product rows are currently not charged separately.
Exact prices are on the Pricing tab. ERROR rows are not billed; a store that returns NO CHANGES or NO PRODUCTS is still charged the per-store fee.
Monitor mode on a schedule
- Set
onlyChanges: trueand your competitorstores. - Save as a Task and add an Apify Schedule (hourly or daily).
- Read the dataset, or set
webhookUrlto push changes to Slack / Zapier.
Errors and limits
How the actor behaves when things go wrong (read from its code):
- No input. An empty
storeslist makes the run fail immediately with "Provide at least one Shopify store URL". An entry that cannot be parsed as a URL is skipped with a warning. - Not a Shopify store, password-protected, blocked or down. The actor reads
<store>/products.json. An HTTP error (403, 404, 429, 5xx), a non-JSON response or a 20-second timeout produces one row{"store": ..., "status": "ERROR: <reason>"}for that store, and the run moves on to the next store. Error rows are not charged. - Partial catalogs. The catalog is fetched 250 products per page, up to 80 pages. If a later page fails after earlier pages succeeded, the actor keeps what it already has and continues without reporting an error, so a catalog can be incomplete.
maxProducts(default 2,000 per store) cuts the catalog off silently at that number. There is no proxy and no retry. - Empty results. A store that answers but has no products (or none left after
onlyAvailable) returns one row withstatus: "NO PRODUCTS". - Monitor mode. The first run for a store saves a baseline and returns the full catalog tagged
INITIAL. After that, a run with no differences returns onestatus: "NO CHANGES"row for that store. Baselines are kept in a named key-value store (ecom-monitor-state) in your account, so a store is only compared against runs from the same account. Changes are detected per variant: price drops, price rises (if enabled), restocks and new variants. - Webhook. If
webhookUrlis set and changes were found, the actor POSTs them once. A failed POST logs a warning and does not fail the run, and it is not retried. - Charging. One
store-checkedevent for each store whose catalog was fetched (including a store that then returnsNO CHANGESorNO PRODUCTS), and onechange-detectedevent per change in monitor mode. Stores that return anERRORrow are not charged. If your max-charge limit is reached, the run stops with what it has.
FAQ
A store returned ERROR: http 401/403 or "not a JSON response". The store
has password protection or has disabled the public products feed. Nothing to
fix on your side — that store is not publicly readable.
Does it show exact inventory counts? No — Shopify's public feed exposes
available (in stock / sold out), not quantities.
Is it only for Shopify? It works on any storefront that serves the
Shopify-style /products.json format.
Send results to Notion (new, Sep 2026)
Authorize Notion once in Apify Console → Settings → API & Integrations → MCP connectors (choose Notion, sign in). Then pick that connector in Notion connector and paste the link of any Notion page in Notion page to create the table in. The first run creates a table inside that page and fills it with the price and stock changes (up to 500 rows per run; the full set is always in the dataset). To keep adding to the same table on later runs, paste the table ID from the log into Existing Notion table ID. This Actor never sees your Notion login: Apify's connector proxy holds it. If the Notion step fails, your dataset results are still delivered and the reason is logged.
Use it from an AI agent (MCP)
Add this Actor to any MCP client (Claude, Cursor, VS Code) with one URL:
https://mcp.apify.com?tools=leadharbor/ecommerce-price-restock-monitor
Or call it through the Apify API with an input like this:
{"stores": ["https://www.allbirds.com"],"alertOnPriceDrop": true,"alertOnNewProduct": true,"alertOnRestock": true,"maxProducts": 100}
Returns one alert per change on a Shopify store: price drop, price rise, new product, restock. Results land in the run's default dataset (JSON, CSV or Excel). No login or API key is needed for the sites it reads, and pay-per-event pricing works with Apify's x402 agent payments.
API usage
Run it from your own code with an Apify API token. The input below is this actor's prefilled example.
curl (runs the actor and returns the dataset items):
curl -X POST "https://api.apify.com/v2/acts/leadharbor~ecommerce-price-restock-monitor/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"stores": ["https://www.allbirds.com"],"onlyChanges": false,"maxProducts": 100}'
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("leadharbor/ecommerce-price-restock-monitor").call(run_input={"stores": ["https://www.allbirds.com"],"onlyChanges": False,"maxProducts": 100})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Changelog
28 Sep 2026 — Buyer max-charge cap now stops the run; optional Notion output for price drops, new products and restocks; MCP agent section. Plus 5 public example tasks with their own pages.
More from leadharbor
- Google Maps Scraper — MX-Checked Business Email Leads
- Website Contact Extractor
- Bulk Email Verifier
- App Store Reviews Scraper + Monitor
- Reddit Keyword Search Scraper + Mention Monitor
- Local Review Booster
- YouTube Scraper
- Airbnb Scraper
- LinkedIn Jobs Scraper
- USA Business Email Finder
- UK Business Email Finder
- UAE Business Email Finder
- UAE Property Broker Contacts
Using this actor? A quick review helps other buyers find it: ecommerce-price-restock-monitor
Related actors
- Disposable Email & Domain Checker — Flags throwaway and free-provider email domains using 5 merged public lists. $0.30 per 1,000 checks.
- Domain Trust Check — 0-100 trust score for a domain from domain age, SSL, SPF/DKIM/DMARC and disposable-domain lists. $2.50 per 1,000 domains.
- Website Contact Extractor — Pulls emails, phone numbers and social links from website URLs.
- Website Technology Detector — Detects the CMS, frameworks, analytics and 100+ other technologies a website uses from its homepage. $9 per 1,000 sites.