Product Availability Monitor avatar

Product Availability Monitor

Pricing

Pay per usage

Go to Apify Store
Product Availability Monitor

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

Harsh

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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.org Product JSON-LD
  • Change detection — compares inStock and price with the previous run via KV store or previousSnapshot input
  • Structured outputurl, inStock, price, currency, lastChange, timestamp
  • JSON run report — summary saved to key-value store key OUTPUT
  • Retries & rate limiting — configurable maxRequestRetries and maxRequestsPerMinute
  • Logging — per-product status and run summary in Actor logs

Input

FieldTypeDefaultDescription
productUrlsobject[]Product page URLs to monitor (required)
previousSnapshotobjectOptional URL → state map to override KV snapshot
persistSnapshotbooleantrueSave PRODUCT_SNAPSHOT for the next run
maxRequestRetriesinteger3HTTP retry count
maxRequestsPerMinuteinteger30Request rate limit
useProxybooleanfalseUse 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)

FieldTypeDescription
urlstringProduct page URL
inStockbooleanWhether the product appears available
pricenumber | nullParsed price when available
currencystring | nullISO currency code when available
lastChangestringfirst_run, no_change, or change description
timestampstringISO timestamp of the check
parseMethodstringshopify, woocommerce, schema.org, or unknown
titlestring | nullProduct title when parsed
errorstringPresent when the URL could not be monitored

lastChange values

  • first_run — no previous snapshot for this URL
  • no_change — stock and price unchanged
  • inStock: false -> true; price: 29.99 -> 24.99 USD — human-readable diff

Key-value store

KeyDescription
OUTPUTJSON run report with totals and full results array
PRODUCT_SNAPSHOTSnapshot 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

  1. Shopify — product URLs under /products/ are fetched via {url}.json first; HTML fallback is used on failure.
  2. WooCommerce — Woo-specific selectors plus schema.org JSON-LD on product pages.
  3. schema.org — generic Product JSON-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 install
npm run lint
npm run build
npm test
apify run --purge

Pricing

Pay per result: $0.003 per dataset item (apify-default-dataset-item).

License

ISC