Price & Competitor Monitor — Track Price Changes avatar

Price & Competitor Monitor — Track Price Changes

Pricing

from $3.00 / 1,000 product checkeds

Go to Apify Store
Price & Competitor Monitor — Track Price Changes

Price & Competitor Monitor — Track Price Changes

Track product prices and competitor offers on Shopify and AliExpress. Persistent per-URL price history, price/availability change detection and webhook alerts — clean JSON, no API key required.

Pricing

from $3.00 / 1,000 product checkeds

Rating

0.0

(0)

Developer

Oaida Adrian

Oaida Adrian

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

Monitor any Shopify or AliExpress product's price over time and get alerted the moment it changes. Give the Actor a list of product URLs and it keeps a persistent per-URL price history, detects price and availability changes between runs, and flags (or webhooks) every change — clean JSON, no API key, no login, no proxy required.

Built for price-watchers, dropshippers and competitor-research teams who track prices in a spreadsheet and want a scheduled, diffing alternative.

Why this Actor

  • Per-URL persistence — history lives in the Actor's own durable key-value store (30 days by default, up to 365), so scheduled runs build a real price timeline instead of throwaway snapshots.
  • Change detection, not just scraping — every run diffs against the previous one and reports diffType (NEW / PRICE_CHANGED / AVAILABILITY_CHANGED / UNCHANGED) with absolute and percentage change.
  • Alert output — changed rows carry alert: true; set a webhook URL and the Actor POSTs a compact JSON alert per change (Zapier, Make, Slack hooks, Mailgun…).
  • One schema for both marketplaces — Shopify product pages and AliExpress item pages produce the same normalized record, so your downstream table stays uniform.
  • Browser-grade TLS — requests impersonate the newest Chrome/Safari/Firefox fingerprints with per-request rotation, the same hardening that keeps the house AliExpress scraper alive against its anti-bot wall.
  • USD-pinned AliExpress prices — the storefront is pinned to the global site in USD/English so prices are comparable wherever the run executes.

How it works

For each URL the Actor: (1) fetches the product — Shopify via the store's public /products/<handle>.json plus /cart.js for currency; AliExpress via the item page with the house-proven search-page selector as a price fallback, matched by product id; (2) reads the previous snapshot from the durable key-value store; (3) computes the diff (price change, availability change, diffType); (4) appends the new point to history and prunes points older than historyDays; (5) emits one dataset row per URL with snapshot + diff + recent history, and posts to the webhook if the row changed.

The first run of a URL is the baseline (NEW, no alert). Alerts fire only on real changes afterwards.

Input

{
"urls": ["https://allbirds.com/products/mens-strider-medium-grey",
"https://colourpop.com/products/the-daily-face-eye-cream-moisturizer-set"],
"notifyOnChange": true,
"historyDays": 30,
"webhookUrl": "https://hooks.example.com/price-alerts"
}
FieldTypeDescription
urlsarrayShopify product URLs (/products/<handle>) or AliExpress item URLs (/item/<id>.html) — required
notifyOnChangebooleanEmit alert: true rows and fire the webhook on changes (default true)
historyDaysintegerHistory window to keep per URL (default 30, max 365)
webhookUrlstringOptional JSON POST target for change alerts

Output (one item per URL per run)

{
"url": "https://colourpop.com/products/the-daily-face-eye-cream-moisturizer-set",
"status": "ok",
"sourceType": "shopify",
"productId": "7397683134546",
"title": "The Daily Face + Eye Cream",
"currency": "USD",
"price": 29.0,
"diffType": "PRICE_CHANGED",
"previousPrice": 36.25,
"priceChange": -7.25,
"priceChangePercent": -20.0,
"priceDirection": "down",
"availabilityChanged": false,
"alert": true,
"priceHistory": [
{"price": 36.25, "currency": "USD", "available": false, "checkedAt": "2026-08-13T09:00:00Z"},
{"price": 29.0, "currency": "USD", "available": false, "checkedAt": "2026-08-14T09:00:00Z"}
],
"checkedAt": "2026-08-14T09:00:00Z"
}

A fetch that fails cleanly (blocked page, deleted product) emits a status: "error" row instead — so your pipeline sees outages, not just price moves.

Use cases

  • 📉 Price-drop alerts — schedule a daily run per competitor, get pinged the day a price dips.
  • 🧾 Price history — build a defensible "what it cost" timeline for listings and buying decisions.
  • 🏷️ Competitor monitoring — track the same product across Shopify stores and AliExpress sellers in one table.
  • 🔔 Availability watchAVAILABILITY_CHANGED fires when an item goes out of stock or comes back.

Run it from the API

curl:

curl -X POST "https://api.apify.com/v2/acts/darknezz~price-competitor-monitor/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls":["https://allbirds.com/products/mens-strider-medium-grey"],"notifyOnChange":true,"historyDays":30}'

Python (Apify SDK):

from apify_client import ApifyClient
client = ApifyClient("YOUR-APIFY-TOKEN")
run = client.actor("darknezz/price-competitor-monitor").call(
run_input={"urls": ["https://colourpop.com/products/the-daily-face-eye-cream-moisturizer-set"]},
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], "|", item["price"], item["currency"], "|", item["diffType"], "| alert:", item["alert"])

Scheduling: attach an Apify Schedule (daily or hourly) — the durable key-value store is what turns repeat runs into a history.

Pricing

Pay per event: a small fee for each product checked, plus Apify's standard platform events. No subscription — you pay only for what you run.

FAQ

How long is history kept? historyDays (default 30, max 365); older points are pruned each run, and the output row always carries the recent history.

Do I need a proxy or account? No — Shopify's public product JSON and AliExpress's server-rendered search pages are read directly with browser-grade TLS.

Can I get email alerts? The Actor posts JSON to any webhook URL; point it at a mail bridge (Mailgun, SendGrid, Zapier Email) and you have email alerts without SMTP credentials in the input.

What if a page is blocked or a product deleted? The run records a status: "error" row and leaves the previous snapshot untouched — a transient block never looks like a price crash.

Are AliExpress prices stable across runs? Yes — the storefront is pinned to USD/English, so the same product reads the same price regardless of egress region.

Is scraping this legal? Product pages and search results are public and unauthenticated. You are responsible for complying with each store's terms and applicable laws.

Limitations

  • Shopify stores that disabled /products.json are not supported (rare).
  • AliExpress item pages are client-rendered; the price comes from the search-page fallback matched by product id, so an item absent from search is reported without a price until it reappears.
  • Availability on AliExpress is not currently reported (available: null).
  • History is capped at 500 points per URL as a safety limit.