Product Availability Monitor
Pricing
Pay per usage
Product Availability Monitor
Monitor e-commerce product URLs for stock and price changes. Supports Shopify products.json, WooCommerce pages, and schema.org Product parsing with snapshot-based change detection.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Harsh
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Monitor e-commerce product URLs for stock availability and price changes across Shopify, WooCommerce, and generic schema.org storefronts. Each run returns structured JSON with change detection against the previous snapshot.
Features
- Multi-platform parsing — Shopify
/products.json, WooCommerce HTML heuristics, and schema.orgProductJSON-LD - Change detection — compares
inStockandpricewith the previous run via KV store orpreviousSnapshotinput - Structured output —
url,inStock,price,currency,lastChange,timestamp - JSON run report — summary saved to key-value store key
OUTPUT - Retries & rate limiting — configurable
maxRequestRetriesandmaxRequestsPerMinute - Logging — per-product status and run summary in Actor logs
Input
| Field | Type | Default | Description |
|---|---|---|---|
productUrls | object[] | — | Product page URLs to monitor (required) |
previousSnapshot | object | — | Optional URL → state map to override KV snapshot |
persistSnapshot | boolean | true | Save PRODUCT_SNAPSHOT for the next run |
maxRequestRetries | integer | 3 | HTTP retry count |
maxRequestsPerMinute | integer | 30 | Request rate limit |
useProxy | boolean | false | Use Apify Proxy |
Example input
{"productUrls": [{ "url": "https://shop.polymer80.com/products/pf940v2-80-textured-pistol-frame" },{ "url": "https://woocommerce.com/products/woocommerce-subscriptions/" }],"persistSnapshot": true,"maxRequestRetries": 3,"maxRequestsPerMinute": 30}
See examples/input.json and storage/key_value_stores/default/INPUT.json.
Output
Dataset (per product)
| Field | Type | Description |
|---|---|---|
url | string | Product page URL |
inStock | boolean | Whether the product appears available |
price | number | null | Parsed price when available |
currency | string | null | ISO currency code when available |
lastChange | string | first_run, no_change, or change description |
timestamp | string | ISO timestamp of the check |
parseMethod | string | shopify, woocommerce, schema.org, or unknown |
title | string | null | Product title when parsed |
error | string | Present when the URL could not be monitored |
lastChange values
first_run— no previous snapshot for this URLno_change— stock and price unchangedinStock: false -> true; price: 29.99 -> 24.99 USD— human-readable diff
Key-value store
| Key | Description |
|---|---|
OUTPUT | JSON run report with totals and full results array |
PRODUCT_SNAPSHOT | Snapshot used on the next scheduled run |
Example report (OUTPUT)
{"timestamp": "2026-07-05T12:00:00.000Z","totalProducts": 2,"changed": 1,"inStock": 1,"outOfStock": 1,"errors": 0,"results": []}
See examples/example-output.json.
Parsing strategy
- Shopify — product URLs under
/products/are fetched via{url}.jsonfirst; HTML fallback is used on failure. - WooCommerce — Woo-specific selectors plus schema.org JSON-LD on product pages.
- schema.org — generic
ProductJSON-LD extraction for other storefronts.
Scheduling
Run this Actor on a schedule (e.g. every hour). With persistSnapshot: true, each run automatically compares against the last successful snapshot stored in the Actor key-value store.
Local development
npm installnpm run lintnpm run buildnpm testapify run --purge
Pricing
Pay per result: $0.003 per dataset item (apify-default-dataset-item).
License
ISC