Product Price & Stock Monitor avatar

Product Price & Stock Monitor

Pricing

Pay per usage

Go to Apify Store
Product Price & Stock Monitor

Product Price & Stock Monitor

Watch product prices and stock on Shopify, Salla (سلة), and Zid (زد) storefronts. Get a row only when something actually changes — a price moved, a sale started or ended, an item sold out or came back.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Hussein Al-Mansori

Hussein Al-Mansori

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

Watch product pages and get told only when something actually changes — a price moved, a sale started or ended, an item sold out or came back. Free.

Point it at product addresses on Shopify, Salla (سلة), or Zid (زد) stores, run it on a schedule, and it publishes a row only when there is something to act on. Nothing changed means nothing in your dataset and nothing in your inbox.

The number this rests on

Most monitors are judged on what they catch. The harder problem is what they invent: a monitor that reports price moves that never happened stops being read, and the one alert that mattered goes with it.

Across 21 live products from 12 stores on all three platforms, read twice a minute apart with nothing edited in between: 0 false alerts. Reproduce it with the run_false_alert_sweep.py script kept beside the Actor — it reads real products, waits, reads them again, and every change it reports is by definition a false one. Ask on the issues page for the product list.

One further product could not be read at all and is counted as a failure rather than quietly dropped: removing the awkward cases after seeing the result is how a measurement stops being evidence.

That number is measured against the web as it looked in August 2026, and the web moves.

Who this is for

You areWhat you get
A reseller or dropshipperTold the moment a supplier's price drops or an item is back in stock
A merchantCompetitor price moves, without paying a monitoring SaaS per product
A shopper waiting on stockOne row the moment a sold-out size returns

What you paste in

Product page addresses — up to 500 per run. The platform is detected for you, including stores on their own domain.

https://www.kyliecosmetics.com/products/kylies-everyday-look-bundle
https://elfaleh.sa/2011097-al-faleh-football-training-signals-tools

Run it on Apify's scheduler — hourly, daily, whatever suits — and the Actor compares each check against what it saw last time.

Input

FieldTypeDefaultWhat it does
productUrlslist of URLsThe product pages to watch. Required.
onlyReportChangesbooleantruePublish a row only when something moved. Turn off to keep a full price history.
stateStoreNamestringproduct-price-monitor-stateWhere the baseline lives. Change it to run two independent watch lists.
respectRobotsbooleantrueSkip any address the store asks crawlers not to read. Checked on every page.
proxyConfigurationobjectoffLeave off unless a store refuses the connection.

What you get back

{
"event": "change-detected",
"platform": "shopify",
"url": "https://shop.example.com/products/wool-runners",
"nameEn": "Women's Wool Runners",
"price": 140.0,
"salePrice": 98.0,
"currency": "USD",
"availability": "in_stock",
"changeKinds": ["price-decreased", "sale-started"],
"previousPrice": 140.0,
"previousSalePrice": null,
"priceChangePercent": -30.0,
"previouslyCheckedAt": "2026-08-25T09:00:00Z",
"status": "verified"
}

Every row is self-contained: it repeats the store, the current values, and what they were before, so one row is enough to act on.

changeKinds is what actually moved: price-increased, price-decreased, sale-started, sale-ended, back-in-stock, out-of-stock, variant-stock-changed, or baseline for the first sighting of a product.

How honest a row is

statusMeaning
verifiedRead cleanly. Nothing was uncertain.
warningDelivered, but something was uncertain — the reason is on the row.
failedThe product could not be read. No price is published, and never a stale one.

Four rules this Actor does not bend:

  • A price that could not be read is null, and null is never a change. "The store did not say" is not "the price is nothing", so a reading failure is never reported as a price move.
  • Stock only changes between two things the store actually said. A product whose stock could not be read has not gone out of stock — you get unknown, not an alert.
  • A currency change cancels the price comparison. Some storefronts price by where the request comes from; one measured product answered 290 SAR from Saudi Arabia and 105 USD from a US data centre. Comparing those two numbers would report a 64% cut no shopper ever saw.
  • A drop too large to believe is reported but not called verified. It carries a warning so nobody reprices against it without looking.

What each platform can tell you

Platforms publish different things, and this Actor reports only what it can actually see.

Price movesSale started / endedStockPer-variant stock
Shopify
Zid (زد)
Salla (سلة)

Salla's product pages publish what a shopper pays but do not separate it from the list price, so a Salla row tells you the price moved and never claims a sale started. Inferring one would be a defensible-looking guess, and this Actor does not make those.

Limits

LimitValue
Products per run500
Products checked at once4
Time per product30 seconds
Time per run900 seconds
Variants tracked per product50
Smallest price move reported0.005

What this deliberately does not do

  • No logged-in prices, carts, or checkouts. Public product pages only.
  • No catalogue discovery: it watches the products you name, and does not crawl a shop for more.
  • No email or SMS. Use Apify's own integrations to route a run's dataset wherever you want it.

Pricing

Free. Only Apify's platform usage applies. Two events are defined — product-checked (every read) and change-detected (a real change) — and neither is charged today.

They exist so that adding a price later would be a price change and not a redesign.

Works well with

Salla Store Scraper and Zid Store Scraper — pull a catalogue, pick the products worth watching, and hand them to this Actor. Field names are identical across all three, so the datasets concatenate with no renaming.


FAQ

How does it know what changed? It stores a small record of each product — price, sale price, currency, stock — in a key-value store on your account, and compares the next check against it. Only those fields, never the page.

What happens on the first run? Every product is a baseline row: the starting point, not a change. You are never told a price moved on a product the Actor has not seen before.

Can I watch a whole store? Not directly — it checks the addresses you give it. Use the Salla or Zid store scraper to get the catalogue first.

Does it need my store login? No. Public product pages only.

Why is stock unknown on some rows? Because the store did not say. Guessing in_stock there is exactly the alert you would act on and regret.

Will it tell me twice about the same change? It can, in one case: if the row is published but the baseline cannot be saved. That is the deliberate trade — the alternative is losing the change silently and forever.


Support

Open an issue on the Actor's Apify page. Include the run ID and the product URL.

Not affiliated with, endorsed by, or sponsored by Shopify, Salla (سلة), or Zid (زد).