Shopify Product & Price Monitor
Pricing
from $0.50 / 1,000 product results
Shopify Product & Price Monitor
Monitor public Shopify catalogs over time. Detect product launches and removals, price and discount changes, stock updates, variants, and content changes using persistent baselines. Export structured results or add concise AI competitor insights only when changes occur.
Pricing
from $0.50 / 1,000 product results
Rating
0.0
(0)
Developer
Roman Bublyk
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Monitor public Shopify catalogs for product launches and removals, price and discount changes, stock status, variants, and product-content updates. Run deterministic monitoring on its own or add a concise AI competitive-intelligence report.
What it does
For every store, the Actor:
- Reads the public Shopify catalog endpoint.
- Normalizes products and variants.
- Compares the current catalog with the persistent snapshot from the previous run.
- Returns deterministic change records.
- Optionally asks an LLM to summarize only the detected changes.
- Saves the current snapshot for the next run.
The first run establishes a baseline. Change detection starts with the second run.
Changes detected
NEW_PRODUCTandREMOVED_PRODUCTPRICE_INCREASEandPRICE_DECREASEDISCOUNT_STARTEDandDISCOUNT_ENDEDBACK_IN_STOCKandOUT_OF_STOCKNEW_VARIANTandREMOVED_VARIANTCONTENT_CHANGEDfor title, handle, vendor, product type, or tags
Input
{"storeUrls": ["https://colourpop.com"],"mode": "data","maxProductsPerStore": 100,"aiLanguage": "English"}
| Field | Type | Description |
|---|---|---|
storeUrls | string[] | One to 20 public Shopify storefront URLs. |
mode | data or ai | Deterministic results only, or deterministic results plus an AI report when changes exist. |
maxProductsPerStore | integer | Maximum products collected per store, from 1 to 50,000. Use the same value on recurring runs. |
aiLanguage | string | Language of the optional AI report. |
AI token safeguards are fixed internally at the benchmark-validated ceilings of 5,000 input tokens and 800 output tokens per store report.
Output
The default dataset can contain four record types:
product— normalized product and variant data.change-summary— deterministic changes and the observation window.ai-insight— optional AI report and token/cost telemetry.store-error— a store-specific error that does not prevent other input stores from being processed.
Example change summary:
{"recordType": "change-summary","storeUrl": "https://colourpop.com","status": "ok","isBaseline": false,"productCount": 100,"observationStart": "2026-09-20T19:35:42.000Z","observationEnd": "2026-09-20T19:37:39.000Z","changeCount": 1,"changes": [{"type": "PRICE_DECREASE","productId": "123","productTitle": "Example product","variantId": "456","before": 29.99,"after": 19.99}]}
AI mode
AI mode never replaces deterministic comparison. The model receives:
- exact aggregate counts calculated from the complete change set;
- a stratified sample of detailed changes that fits the internal token budget;
- the real observation window when it is available.
The report is limited to 250 words and includes an executive summary, event-volume facts, uncertainties, and recommended monitoring actions. If no changes are detected, no LLM request is made and no AI event is charged.
The aiUsage object reports model name, input/output/reasoning tokens, included and original change counts, truncation, completion status, and estimated provider cost.
Recurring monitoring
Want a ready-to-run example? Open the public ColourPop Daily Product & Price Monitor Task. It monitors up to 100 products in data mode and can be copied to your Apify account before changing the store, limits, or schedule.
For reliable comparisons:
- Create an Apify Task with fixed store URLs and
maxProductsPerStore. - Run it once to create the baseline.
- Add an hourly, daily, or weekly schedule.
- Read
change-summary, or connect dataset/webhook integrations.
Changing maxProductsPerStore resets the store baseline for that run. This prevents artificial new/removed product events when the monitored catalog scope changes.
API
Apify automatically generates actor-specific API examples in the Console API tab. Replace YOUR_APIFY_TOKEN and IDs returned by the API where shown.
REST API
Start an asynchronous Actor run:
curl -X POST \"https://api.apify.com/v2/acts/highbrow_qualification_z7w~shopify-product-price-monitor/runs" \-H "Authorization: Bearer YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"storeUrls": ["https://colourpop.com"],"mode": "data","maxProductsPerStore": 100,"aiLanguage": "English"}'
The response contains the run object in data. After the run succeeds, read data.defaultDatasetId and download its records:
curl \"https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
JavaScript client
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('highbrow_qualification_z7w/shopify-product-price-monitor').call({storeUrls: ['https://colourpop.com'],mode: 'data',maxProductsPerStore: 100,aiLanguage: 'English',});const { items } = await client.dataset(run.defaultDatasetId).listItems();const summary = items.find((item) => item.recordType === 'change-summary');console.log(summary);
Python client
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("highbrow_qualification_z7w/shopify-product-price-monitor").call(run_input={"storeUrls": ["https://colourpop.com"],"mode": "data","maxProductsPerStore": 100,"aiLanguage": "English",})items = client.dataset(run["defaultDatasetId"]).list_items().itemssummary = next((item for item in items if item["recordType"] == "change-summary"), None)print(summary)
Ready-made ColourPop Task
After copying the public Task to your account, start your copy through its API tab. Apify will provide the exact task ID and a token-ready REST, JavaScript, or Python example. A Task keeps the monitoring input stable between runs, which is recommended for meaningful comparisons.
Stateful API behavior
- A first call for a store creates its baseline; it does not report historical changes.
- Repeated calls compare against the most recently saved snapshot for the same store.
- Keep
maxProductsPerStorestable between calls for uninterrupted change history. If it changes, the next call safely establishes a new baseline. - Use an Apify Task for recurring API/scheduled monitoring so the input remains consistent.
- A successful run can still contain
store-errorrecords for individual URLs; inspect the dataset rather than relying only on the run status.
Limits and expected errors
- The store must expose a public Shopify
/products.jsoncatalog endpoint. - Password-protected stores, non-Shopify sites, blocked endpoints, or storefronts with custom access controls can return
store-error. - Prices are returned as exposed by Shopify; the public catalog response does not always include an explicit currency code.
CONTENT_CHANGEDidentifies that monitored product metadata changed, not which individual metadata field changed.- The Actor reports catalog observations. It cannot establish sales, demand, revenue, margin, or business intent without those data sources.
Charging events
product-result— one successfully normalized product record.ai-store-insight— one completed AI insight for one store and run.
Event prices are configured in Apify Monetization. AI is charged only after a visible AI result has been produced.
Privacy
The Actor processes public storefront catalog data. Input URLs, snapshots, results, and errors are stored in the Apify storage associated with the run and monitoring workflow. Do not submit credentials or private storefront data in the input.
Technical validation
- Deterministic diff behavior is covered by automated tests.
- Shopify pagination and short-response retries are covered by automated tests.
- Persistent snapshots include observation timestamps and remain backward-compatible with the earlier snapshot format.
- LLM volume benchmarks were completed for 10, 100, 1,000, and 10,000 changes.
- At 1,000–10,000 changes, the bounded AI request remained near 4,000 total tokens while retaining exact full-feed aggregates.