Shopify Price-Drop & Restock Monitor avatar

Shopify Price-Drop & Restock Monitor

Pricing

$1.50 / 1,000 results

Go to Apify Store
Shopify Price-Drop & Restock Monitor

Shopify Price-Drop & Restock Monitor

Monitor public Shopify product feeds for price drops, price increases, restocks, out-of-stock changes, new products, and removed variants using stateful change detection.

Pricing

$1.50 / 1,000 results

Rating

0.0

(0)

Developer

Catalin Ionut Iliescu

Catalin Ionut Iliescu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Monitor public Shopify product feeds for useful buyer and e-commerce events: price drops, price increases, restocks, out-of-stock changes, new products, removed products, new variants, removed variants, compare-at price changes, and compact snapshot rows.

This is a stateful change monitor, not a generic Shopify catalog scraper. It is built for scheduled monitoring tasks where the valuable output is "what changed since last run?"

What It Uses

The Actor uses only public Shopify product feed endpoints such as:

https://store-domain/products.json

It does not log in, use browser automation, use proxies, call paid APIs, call LLMs at runtime, scrape carts or checkouts, or extract customer or personal data. Some stores disable or block this public feed. When that happens, the Actor emits a source_error row with sourceHealth=error and does not overwrite the previous state for that store.

This Actor is not affiliated with Shopify or any monitored store.

Modes

changes is the default mode. It compares the current public feed with the previous saved snapshot for the same store and stateKey, then emits meaningful change events.

snapshot emits the current normalized product/variant snapshot without diffing.

both emits change events first, then current snapshot rows.

Snapshot rows use eventType=initial_snapshot and changeReason=current snapshot row.

First Run Behavior

State is stored in a persistent named Apify key-value store:

shopify-price-restock-monitor-state

State is scoped by this Actor namespace, normalized store domain, stateKey, and available Apify actor/user/task context. Use a unique stateKey for each monitoring setup or saved task.

On the first run for a given store and stateKey:

  • If emitInitialSnapshotAsNew=true, current product/variant rows are emitted as initial_snapshot events and saved as the baseline.
  • If emitInitialSnapshotAsNew=false, the baseline is saved and zero change events are emitted.

State stores compact normalized product and variant fields only. It does not store large raw product descriptions.

Change Rows

The Actor emits one row per affected product/variant identity per run. eventType contains the highest-priority event, while boolean fields show secondary changes on the same row.

Priority order is:

price_drop, restocked, price_increase, out_of_stock, compare_at_price_changed, changed, unchanged

For example, if a variant drops in price and restocks in the same run, eventType is price_drop, with both isPriceDrop=true and isRestock=true.

Restock Limitations

Shopify public products.json feeds may expose variant available as true or false, but they do not guarantee exact inventory quantities. This Actor never invents inventory counts. Restock and out-of-stock events are emitted only when public availability changes from false to true or true to false. If availability is not exposed, it remains null/unknown and restock detection is not claimed.

Currency is also often not exposed by products.json, so currency may be blank.

Input Notes

maxItems is a global cap across all stores in one run, not a per-store cap.

onlyProductsMatching and excludeProductsMatching are case-insensitive substring filters. They match against product title, handle, vendor, product type, tags, variant title, variant ID, product ID, and SKU before diffing and saving state.

priceDropThresholdPercent and priceIncreaseThresholdPercent default to 0, so every detected price decrease or increase can emit a price event. Raise these values when you only want larger moves.

Input Example

{
"stores": [
"https://example-store.myshopify.com",
"https://www.example-brand.com"
],
"maxProductsPerStore": 250,
"maxItems": 500,
"mode": "changes",
"stateKey": "default",
"emitInitialSnapshotAsNew": true,
"includeUnchanged": false,
"includeFullProductData": false,
"priceDropThresholdPercent": 0,
"priceIncreaseThresholdPercent": 0,
"onlyProductsMatching": [],
"excludeProductsMatching": [],
"requestDelayMs": 300
}

Output Example

{
"source": "shopify_products_json",
"storeUrl": "https://example-store.myshopify.com",
"storeDomain": "example-store.myshopify.com",
"productId": "1234567890",
"productHandle": "classic-tee",
"productTitle": "Classic Tee",
"productUrl": "https://example-store.myshopify.com/products/classic-tee",
"vendor": "Example Brand",
"productType": "Shirts",
"tags": ["sale"],
"variantId": "9876543210",
"variantTitle": "Medium / Black",
"sku": "TEE-BLK-M",
"currency": "",
"oldPrice": 40.0,
"newPrice": 32.0,
"priceChange": -8.0,
"priceChangePercent": -20.0,
"oldCompareAtPrice": 50.0,
"newCompareAtPrice": 45.0,
"oldAvailable": false,
"newAvailable": true,
"eventType": "price_drop",
"changeReason": "price decreased; compare-at price changed; availability changed from false to true",
"isPriceDrop": true,
"isPriceIncrease": false,
"isRestock": true,
"isOutOfStock": false,
"isNewProduct": false,
"isRemovedProduct": false,
"isNewVariant": false,
"isRemovedVariant": false,
"previousHash": "abc123",
"currentHash": "def456",
"firstSeenAt": "2026-07-07T10:00:00Z",
"lastSeenAt": "2026-07-07T10:05:00Z",
"runTimestamp": "2026-07-07T10:05:00Z",
"sourceHealth": "ok",
"errorMessage": ""
}

Public Task Ideas

  • Daily price-drop monitor for a shortlist of brands.
  • Restock watch for high-demand products where public availability is exposed.
  • New product and new variant feed for category buyers.
  • Compare-at price and sale tracking for merchandising teams.
  • Competitive price movement alerts for a controlled set of public stores.

Pricing Suggestion

Do not configure monetization until validation and marketplace positioning are final. A practical paid model later could be either $0.50-$1.00 per monitored store run or $2-$3 per 1,000 emitted change/snapshot records.