Shopify Competitor Price Tracker & Stock Monitor avatar

Shopify Competitor Price Tracker & Stock Monitor

Under maintenance

Pricing

Pay per usage

Go to Apify Store
Shopify Competitor Price Tracker & Stock Monitor

Shopify Competitor Price Tracker & Stock Monitor

Under maintenance

Track Shopify competitor prices, product availability and catalog changes across public stores with automated change detection.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ege Usta

Ege Usta

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Categories

Share

Shopify Competitor Price & Stock Monitor

Track competitor pricing and product availability for ecommerce research, pricing intelligence and catalog monitoring. Add public Shopify stores and get structured snapshots plus changes between runs.

Monitors one or more public Shopify stores via their /products.json endpoint and emits deterministic change events between runs.

Input

FieldTypeDefaultNotes
storeDomainsstring[]— (required)shop.com, https://shop.com, or shop.myshopify.com. Non-http(s) schemes, IP literals and localhost are rejected. Duplicates are collapsed.
maxProductsPerStoreinteger2000Distinct-product cap per store.
maxPagesPerStoreinteger20/products.json page cap (page size 250).
requestTimeoutSecsinteger30Per-request timeout.
concurrencyinteger3Stores fetched in parallel.
minRequestDelayMsinteger500Client-side rate limit between paginated requests.
maxResponseBytesinteger5000000Byte ceiling per response.
emitSnapshotRowsbooleantrueAlso write the current variant-level catalog to the dataset.
resetSnapshotbooleanfalseIgnore the stored snapshot; treat as a fresh baseline.

How comparison works

Each run fetches the current catalog, loads the previous snapshot from the key-value store (SNAPSHOT-<domain>), diffs them deterministically, writes the new snapshot, and appends events to the dataset.

  • First run for a domain (or resetSnapshot) establishes the baseline and emits no change events (firstRun: true in the summary).
  • Event types: new_product, removed_product (a product id appeared / disappeared); price_changed (a shared variant's price, compare-at price or SKU moved, or a new variant appeared under an existing product with before: null); availability_changed (a shared variant's available flag flipped, or a variant disappeared from a surviving product with after.removed: true).
  • Events are fully sorted (type → productId → variantId) so re-running on unchanged data produces byte-identical output.

Resilience

  • A request failure stops pagination for that store, is counted in requestFailures / failuresByReason, and never throws.
  • If every page fails (pagesFetched === 0) the stored snapshot is left untouched and no events are emitted — a network blip never looks like "all products removed".
  • If a previously populated store (> 5 products) suddenly returns an empty catalog, the run flags suspicious-empty-catalog and refuses to overwrite the snapshot.
  • One failing store never affects the others (bounded-concurrency, per-store isolation).

Output

type: "change" and type: "snapshot" rows — see .actor/dataset_schema.json. A SUMMARY record with per-domain reports, totals, changeCounts and failuresByReason is written to the key-value store.

Safety

Only the public /products.json endpoint is used — no admin API, no tokens, no private data. All requests go through the shared safeFetchJson (https upgrade, DNS checked against private ranges, manual redirects, JSON content-type allow-list, byte ceiling, timeout cleared in finally).

Known limitations

  • Stores that disable /products.json, sit behind Cloudflare bot protection, or are not Shopify will yield catalog-fetch-failed / an empty parse rather than data. This is reported, not fatal.
  • available reflects the storefront available flag, not real-time inventory counts (Shopify does not expose those publicly).

Commands

npm ci # monorepo root
npm run check -w shopify-competitor-price-stock-monitor
npm run smoke -w shopify-competitor-price-stock-monitor # offline, two-run diff
npx apify validate-schema

Deployment

Not deployed here. apify push is intentionally not run — the lead engineer handles deployment.