Automated E-commerce Price Monitoring: The Complete Guide
Quick Answer
To monitor e-commerce prices with web scraping, you point a scraper at competitor product pages, run it on a schedule, store each run as a snapshot, then diff snapshots to flag changes. Apify Actors handle this across Amazon, eBay, Walmart, and Shopify: schedule daily or hourly scrapes and export CSV or JSON to spreadsheets, dashboards, or alerts.
An Apify account is enough to start (free plan credits). Pair scheduled runs with exports or webhooks so pricing, RevOps, or e-commerce teams see changes without manual checks.
Why price monitoring matters
In e-commerce, small price gaps change who wins the click. Manual checks do not scale; you need a repeatable pipeline: scrape → store → compare → alert.
| What you monitor | Why it matters |
|---|---|
| Live price and “was” price | Spot discounting and promo patterns |
| Stock / availability | Infer demand and competitor supply stress |
| Buy Box vs lowest offer (Amazon) | Separate marketplace dynamics from seller mix |
| Seller name | Multi-seller noise vs first-party pricing |
| Timestamp | Prove freshness for internal SLAs |
Recommended Apify Actors
| Use case | Actor | Notes |
|---|---|---|
| Many retailers | E-commerce Scraping Tool | Flexible product-page inputs |
| Amazon (ASIN-level) | Amazon Product Scraper | Track listings and price fields per ASIN |
| Shopify / generic stores | Same tool or Shopify-focused Actors | Often products.json-friendly |
| eBay | Store search “eBay” or the ecommerce tool | Auction vs Buy It Now need clear rules |
Always open each Actor’s Pricing tab before large runs; cost scales with volume, proxies, and site difficulty.
How to set up automated monitoring
1. Scrape baseline product data
Collect competitor prices for the SKUs you care about. Use direct product URLs (or ASINs for Amazon), not category pages, for stable, efficient runs.
- General pattern: Scrape e-commerce prices
- Amazon: Scrape Amazon products
Fields worth capturing
- Product URL (stable key)
- Title and variant (size, color, model)
- Current price and strikethrough / “was” price
- Stock or availability text
- Seller (marketplaces)
- Scraped-at timestamp
Your first successful dataset is the baseline for diffs and alerts.
2. Schedule daily or hourly runs
Save your verified run as a reusable task (it stores the input preset), then attach a schedule so prices refresh on their own. See Apify tasks and schedules for the full setup. In Apify Console → Schedules → Create new, link the Actor task and set a cron:
| Cadence | Cron (example) | Typical use |
|---|---|---|
| Daily | 0 6 * * * | Most B2C catalogs |
| Every 4 hours | 0 */4 * * * | Peak season or fast categories |
| Hourly | 0 * * * * | Flash sales or high-volatility SKUs |
| Weekly | 0 9 * * 0 | Slow B2B lines |
Match frequency to how fast prices move in your category and to your internal SLA. More runs mean more compute and higher block risk; tune instead of maxing cron by default.
3. Alert on price changes
When a scheduled run finishes, you can compare the new dataset to the last run (or a sheet baseline) and notify teams.
Option A: Make.com (visual)
Trigger on run finished → fetch dataset items → compare price to stored values → Slack or email if changed.
Option B: n8n (end-to-end playbook for Amazon)
Actor: junglee/amazon-crawler. Input (20 ASINs, one cron run/day at 06:00):
{
"categoryOrProductUrls": [
{ "url": "https://www.amazon.com/dp/B08N5WRWNW" },
{ "url": "https://www.amazon.com/dp/B09G9FPHY6" }
],
"maxItemsPerStartUrl": 1,
"proxyCountry": "AUTO_SELECT_PROXY_COUNTRY"
}
Fields returned (subset): asin, title, price.value, price.currency, listPrice.value, inStock, seller, buyBoxUsed, url. Wire into n8n:
// n8n Code node: diff today's run vs yesterday's Sheet baseline
const today = $input.all().map(i => i.json);
const baseline = $('Google Sheets').all().map(i => i.json);
const alerts = [];
for (const row of today) {
const prev = baseline.find(b => b.asin === row.asin);
if (!prev) continue;
const drop = (prev.price - row.price.value) / prev.price;
if (drop >= 0.05) {
alerts.push({
asin: row.asin,
title: row.title,
from: prev.price,
to: row.price.value,
pct: (drop * 100).toFixed(1),
url: row.url,
});
}
}
return alerts.map(a => ({ json: a }));
Slack node message template: :chart_with_downwards_trend: *{{title}}* ({{asin}}) {{from}} → {{to}} (-{{pct}}%) <{{url}}|view>. Upsert today back into the Sheet so tomorrow's run has a fresh baseline.
Option C: Zapier
Use the Apify Zapier integration to push new rows or trigger Zaps when runs complete.
Deeper automation: n8n · Make · Google Sheets.
For a full walkthrough, follow the automated price monitoring blueprint, which lays out the scrape, store, and alert stages with a dynamic-pricing loop. To build the tracker from scratch (custom Crawlee scraper, database storage, and trend charts), see build an e-commerce price tracker with web scraping.
Store price snapshots and build dashboards
Every scheduled run writes its results to a dataset in Apify Storage, so each run is a timestamped price snapshot. Keep those snapshots (or append them to a sheet, warehouse table, or time-series DB keyed by url + scrapedAt) and you get price history for free: that history is what powers diffing, trend charts, and "is this discount real" checks.
- CSV / JSON / Excel: Download from Storage after each run, or use the Apify API to pull dataset items into your warehouse.
- Google Sheets: Append or upsert rows via Make, n8n, or the Sheets integration so finance and merchandising share one view.
- BI (Looker, Power BI, etc.): Export to BigQuery/Snowflake or sync files to a bucket your BI tool reads on a schedule.
- Internal dashboards: Webhook → your API → update a time-series DB keyed by
url+scrapedAt.
Keeping a mapping table (your SKU, competitor URL, ASIN, EAN/UPC) makes joins across retailers reliable.
Platform notes (short)
- Amazon: Track Buy Box and lowest offer separately; prices can move many times per day on competitive ASINs.
- Shopify: Many themes expose structured product data; compare_at vs price matters for “fake” discounts.
- eBay: Separate auction vs fixed price; completed listings help demand research.
- Walmart: Strong bot defenses; residential proxies (Apify Proxy) often help; filter “Sold by Walmart” if you only want 1P.
SKU matching across retailers
Titles differ; IDs rarely align across Amazon, Shopify, and eBay.
- Maintain a master sheet: internal SKU, URLs per channel, ASIN, EAN/UPC when available.
- Join on EAN/UPC when both sides expose it.
- Use fuzzy title match only as a fallback for private label.
- Track variants at URL granularity, not category level.
MAP monitoring
Minimum Advertised Price (MAP) workflows: list authorized reseller product URLs → schedule scrapes → compare advertised price to policy → alert compliance when below MAP.
MAP usually governs advertised prices visible on the page, not necessarily the final checkout price. Policies and enforceability vary by jurisdiction; involve legal for your program.
Cost at scale (illustrative)
| Scope | Volume | Cadence | Rough monthly range |
|---|---|---|---|
| Small | ~100 URLs | Daily | ~$3–5 |
| Mid | ~500 URLs | Daily | ~$10–20 |
| Large | ~5k URLs | Daily | ~$80–150 |
Actual spend depends on Actor pricing, proxies, and page complexity; smoke-test before scaling.
Legal and practical boundaries
Public product prices are usually factual and not copyrightable like prose, but terms of service, robots.txt, and rate limits still matter. Scrape public pages, avoid logins you are not allowed to automate, and keep request rates reasonable. See Is web scraping legal?.
Related: Competitor analysis · Market intelligence · Best e-commerce scrapers
Start price monitoring on Apify →
Schedules use cron expressions, so you can run daily, hourly, or more often. Most catalogs are fine on daily; use hourly or shorter windows during promotions. Balance freshness with compute cost and polite request rates.
Scraping publicly visible prices is generally treated as collecting factual data in many jurisdictions, but platform terms may restrict automation. Stay on public pages, avoid bypassing access controls, and read our scraping legality guide for context, not legal advice.
MAP monitoring checks whether resellers advertise below your minimum advertised price. Apify can automate scheduled scrapes of reseller product pages, compare prices to your policy, and trigger alerts to a compliance inbox or Slack.
The Store includes Actors for Amazon, eBay, Walmart, Shopify stores, and many other retailers. Use a dedicated Amazon Actor for ASIN workflows or the general e-commerce tool for mixed sites; niche sites may need a custom Actor built with Crawlee.
Maintain a mapping table with your SKU, per-channel URLs, ASINs, and EAN/UPC codes. Join scraped rows on shared identifiers; use fuzzy title matching only when no shared code exists.
Use Apify webhooks on successful runs and a workflow tool (Make, n8n, or Zapier) to diff the new dataset against a baseline in Sheets or a database, then send Slack or email when values change.
Match cadence to how fast prices move in your category. Daily covers most B2C catalogs; switch to every few hours or hourly during promotions and flash sales; weekly is plenty for slow B2B lines. More frequent runs cost more compute and raise block risk, so tune the cron rather than maxing it out.
Yes. Each scheduled run saves a timestamped dataset in Apify Storage, so the runs themselves form a snapshot history. Pull them via the Apify API into a sheet, warehouse, or time-series database keyed by product URL and scraped-at date to chart trends and detect real versus fake discounts over time.



