Structured Product Price & Stock Monitor — JSON-LD / Shopify
Track product price and stock from a store's own JSON-LD/Shopify data. Get price-drop and restock events plus Slack/Discord alerts. No API key.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
products,onlyNewSinceLastRun,trackPrice(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Inputs
| Field | What it does | Type |
|---|---|---|
products | The product URLs to track. Each item is an object: { "url": "https://store.com/products/x", "label": "optional human name" }. `url` is required; `label` is opti | array |
onlyNewSinceLastRun | When ON (recommended for scheduled monitoring), only products that are new or have changed are emitted to the dataset — deltas, not a full re-dump. When OFF, ev | boolean |
trackPrice | Detect price_change events (old -> new, with % change). | boolean |
trackStock | Detect back_in_stock / out_of_stock events. | boolean |
trackSalePrice | Detect sale_started / sale_ended events (based on compare-at / list price where the source exposes it — best on Shopify & WooCommerce). | boolean |
trackTitle | Detect title_change events (useful for catching relisted / swapped products). | boolean |
priceDropThresholdPct | Only treat a price DROP as a change when it is at least this percentage. 0 (default) records every price change. Price increases are always recorded regardless. | integer |
notifyOnRestock | Send a webhook notification when a product comes back in stock. | boolean |
notifyOnPriceDrop | Send a webhook notification when a price drops (respecting the price-drop threshold above). | boolean |
webhookUrl | Optional. Slack, Discord, or generic webhook to receive a compact change summary. Slack (hooks.slack.com) and Discord (discord.com/api/webhooks) formats are aut | string |
What you get
A structured dataset — each result includes fields like:
change_countchangeschecked_atcurrentextraction_methodextraction_statusis_changedis_newlabelsync_statustargeturlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
4 ready-to-run use cases
Competitor Price Monitoring for Repricing
Competitor storefront prices read straight from JSON-LD, so your repricing matches their exact listed price, sale price and live stock. For ecommerce sellers.
Shopify Sale Price Tracker: Start & End Dates
Know the exact moment a Shopify or WooCommerce product gets a compare-at discount, and when the sale ends, all from the store's own published list price.
Discord Restock Alerts for Limited Drops
Cook groups and hype channels get a Discord ping the second a limited drop restocks. Stock and price read live from the store, no HTML scraping.
Product Price & Stock Feed for AI Agents
Live, accurate price and availability for any product list, read from each store's own published JSON-LD data and structured for AI shopping agents.
Structured Product Price & Stock Monitor (JSON-LD / Shopify)
Track product price and stock by reading each store's own JSON-LD / Shopify / WooCommerce structured data — then get price-drop and restock alerts on Slack or Discord. No API key, no brittle HTML selectors.
What it does
This actor monitors product price and stock availability across online stores. Instead of guessing at the page layout with HTML selectors that break on every redesign, it reads the structured data the store already publishes: JSON-LD Product/Offer markup, Shopify product JSON, and WooCommerce/Schema.org data.
On each run it:
- Checks every product URL you give it and pulls the current price, sale price, stock status, and title from the page's own structured data.
- Compares against the previous run and emits discrete events:
change-detected(price or stock changed),restock-detected, andsale-started. - Sends Slack or Discord webhook alerts when a product comes back in stock or drops in price past a threshold you set (
priceDropThresholdPct). - Writes a clean, machine-readable price/stock record to the dataset for every product checked.
Because the data comes from the store's own published markup, the price and stock values are the ones the store itself reports — not a number scraped out of arbitrary HTML that shifts when the theme changes.
Honest limitation: this works only on stores that publish structured data (JSON-LD, Shopify, or WooCommerce). Most major ecommerce platforms do, but it is not a universal any-site scraper. If a page has no structured data, the actor records a no-structured-data result for it instead of inventing a price.
Who it's for
- Ecommerce sellers and dropshippers watching competitor and supplier pages for price and stock moves.
- Repricing and arbitrage sourcers who need accurate price + availability to make sourcing and repricing decisions.
- Developers building price-comparison tools or AI shopping agents who want a stable, structured price/stock feed instead of maintaining their own scraper.
Quick start
Run it as a monitor
Paste a list of product URLs, pick what to track, and (optionally) add a webhook. Minimal input:
{
"products": [
{ "url": "https://example-store.com/products/wireless-headphones" }
],
"trackPrice": true,
"trackStock": true,
"notifyOnPriceDrop": true,
"notifyOnRestock": true,
"priceDropThresholdPct": 5,
"webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ"
}
Run it once to seed a baseline, then schedule it (Apify Schedules) to run on whatever cadence you need. With onlyNewSinceLastRun enabled, each run reports only what changed since the last one.
Connect it to an AI agent (MCP)
The actor is exposed over the Apify MCP server using streamable HTTP, so Claude, Cursor, VS Code, and any MCP-compatible client can call it as a tool.
Endpoint:
https://mcp.apify.com/?actors=dami_studio/structured-product-price-stock-monitor
Authenticate with OAuth (your client opens a browser the first time) or with a Bearer <APIFY_TOKEN> header.
Claude Desktop / Cursor config (claude_desktop_config.json or .cursor/mcp.json):
{
"mcpServers": {
"price-stock-monitor": {
"url": "https://mcp.apify.com/?actors=dami_studio/structured-product-price-stock-monitor",
"headers": {
"Authorization": "Bearer <APIFY_TOKEN>"
}
}
}
}
Replace <APIFY_TOKEN> with your Apify API token (Apify Console → Settings → Integrations). Once connected, the agent can ask for the current price and stock of any product URL and get back structured JSON.
Input
- products — list of products to monitor, each with a product
url. - trackPrice — track the listed price.
- trackSalePrice — track the sale/discount price separately.
- trackStock — track in-stock / out-of-stock availability.
- trackTitle — track the product title (catches renames and relisting).
- priceDropThresholdPct — minimum percent drop before a price-drop alert fires (
notifyOnPriceDrop). - notifyOnPriceDrop — send a webhook alert on a qualifying price drop.
- notifyOnRestock — send a webhook alert when a product is back in stock.
- onlyNewSinceLastRun — only report products that changed since the previous run.
- webhookUrl — Slack or Discord incoming-webhook URL for alerts.
- proxyConfiguration — Apify proxy settings for the requests.
Output
Every checked product produces one structured record in the dataset, plus an event when something changes. A result looks roughly like:
{
"url": "https://example-store.com/products/wireless-headphones",
"title": "Wireless Headphones",
"price": 79.99,
"salePrice": 59.99,
"currency": "USD",
"inStock": true,
"availability": "InStock",
"dataSource": "json-ld",
"event": "change-detected",
"previousPrice": 89.99,
"priceChangePct": -11.11,
"checkedAt": "2026-06-22T10:00:00Z"
}
Events you may see on a record: change-detected (price or stock moved), restock-detected, sale-started, and no-structured-data (when a page publishes no usable markup). A price drop past your priceDropThresholdPct is a change-detected event with a negative priceChangePct; that threshold and notifyOnPriceDrop control whether you also get a webhook alert for it.
Example use cases
- Competitor price monitor with repricing alerts
- Shopify sale started / ended tracker
- Discord restock bot for a sneaker drop
- Structured product price feed for an AI agent
Pricing
This actor is pay-per-event. You pay only for what runs:
| Event | Price (USD) |
|---|---|
| Actor start | $0.003 |
| Product checked | $0.0025 |
| Change detected | $0.015 |
| Restock detected | $0.02 |
| Sale started | $0.015 |
| Report generated | $0.05 |
| No structured data found | $0.001 |
A run that checks 100 products with no changes costs the actor start plus 100 × $0.0025. Events only add cost when something actually changes.
FAQ
Does this work on any website? No. It works on stores that publish structured data — JSON-LD Product/Offer markup, Shopify product JSON, or WooCommerce/Schema.org data. Most major ecommerce platforms publish this. Pages without it return a no-structured-data result instead of a fabricated price.
Why read structured data instead of scraping the HTML? The price and stock in a store's structured data are the values the store itself publishes (often the same feed it sends to Google Shopping). Reading them avoids selector-based scraping that breaks whenever the site's theme or HTML changes.
Do I need an API key for the stores I monitor? No. The actor reads each product page's public structured data. You only need an Apify account to run it.
Can I get a Slack or Discord alert when something restocks or drops in price? Yes. Set webhookUrl to a Slack or Discord incoming webhook and enable notifyOnRestock and/or notifyOnPriceDrop. Use priceDropThresholdPct to avoid alerts on tiny changes.
Can an AI agent use this as a price/stock tool? Yes. Connect it through the Apify MCP server at https://mcp.apify.com/?actors=dami_studio/structured-product-price-stock-monitor and call it from Claude, Cursor, or any MCP client to get structured price and stock data back.