All insights Data Scraping

How to Monitor Competitor Prices with Web Scraping

A practical guide to competitor price monitoring: sources, product matching, refresh rates, anti-bot defences, alerts and running costs.

Asan Team6 min read

If you sell online, your competitors' prices change while you sleep, and your customers can compare them in a few seconds. Checking them by hand means either someone on the team spends hours a week in browser tabs, or your pricing decisions run on last week's data.

Automated price monitoring replaces that with a system: prices and stock for your products and your competitors' are collected on a schedule, the same product is matched across stores, and meaningful changes arrive as alerts. This guide covers how such a system is built, where the hard parts are, and how to decide between an off-the-shelf tool and a custom pipeline. It draws on the price monitoring panel we built for an e-commerce team.

Decide what you will do with the data first

Before any scraping, write down the decisions the data will drive. A few common ones:

  • Match or beat a competitor's price on key products.
  • Hold price when you are already cheapest, instead of discounting by reflex.
  • Raise price when a competitor runs out of stock.
  • Spot which competitor products are actually selling, from review counts.
  • Enforce minimum advertised price agreements with resellers.

Every field you collect should serve one of those decisions. Data nobody acts on is just storage and maintenance.

What to collect

For most retailers, the useful set per product and source is:

FieldWhy it matters
Current price and list priceTells a real price move from a temporary promotion
Stock statusOut-of-stock competitors are an opportunity
Seller or buy-box winnerOn marketplaces, who actually gets the sale
Shipping cost and delivery timeCustomers compare the total, not the sticker
Rating and review countA rough signal of what is selling
TimestampWithout history, you cannot see trends

Where the data comes from

Competitor websites. Most online stores are built on a handful of platforms, and many expose structured data you can read reliably:

  • Many product pages embed schema.org Product and Offer markup as JSON-LD, with price, currency and availability in a machine-readable block. It is the most stable thing on the page, because stores keep it correct for Google.
  • Shopify stores often serve product data as JSON at predictable URLs.
  • WooCommerce stores often expose a public Store API.

Reading those structured sources is far more robust than parsing visual HTML, which changes with every redesign.

Marketplaces. Amazon, eBay and regional marketplaces are where many price comparisons happen. They also have the strongest anti-bot defences. Amazon offers official APIs for sellers and affiliates, and third-party tools track Amazon price history. Check whether an official route covers your needs before building a scraper.

Price comparison engines such as Google Shopping show many sellers side by side. They are useful for a market overview, but prices can lag, so read your main competitors directly.

The hard part: matching products

Collecting prices is the easy half. The hard half is knowing that "Samsung Galaxy A55 5G 256GB Navy" in your catalog is the same item as "Galaxy A55 (256 GB, Awesome Navy)" on a competitor's site, and not the 128 GB model or another colour.

What works, in order of reliability:

  1. Hard identifiers. GTIN, EAN or UPC barcodes and manufacturer part numbers. Many product pages include them in their structured data.
  2. Normalized titles. Lowercase, unify units such as "GB" and "gb", strip marketing words, and normalize scripts and digits if you sell in more than one language.
  3. Attribute extraction. Pull brand, model, capacity, size and colour into separate fields and compare those instead of whole titles.
  4. Human confirmation for the uncertain middle. The system proposes matches with a confidence score, and a person confirms or rejects the doubtful ones in one click. Each match is confirmed once and then stays automatic.

In our panel, attribute mapping and product linking across catalogs were the core of the system. Without them, the charts look impressive and cannot be trusted.

How often to check

Match the refresh rate to how fast the market moves:

CategorySuggested refresh
Consumer electronics and fast-moving bestsellersEvery one to a few hours
Most other retailDaily
Slow-moving or seasonal goodsWeekly, more often during sales events

Checking more often than you act only raises infrastructure cost and the chance of being blocked.

Anti-bot defences, and being a good guest

Larger sites defend against automated traffic with rate limits, IP reputation, browser fingerprinting and CAPTCHAs. A production pipeline handles this with:

  • Polite pacing: reasonable delays, off-peak scheduling and only the requests you need.
  • Proxy rotation across residential or datacenter IPs, depending on the source.
  • Headless browsers only where a page genuinely needs JavaScript to show the price. They are slower and more expensive than plain HTTP requests.
  • Backing off when a source pushes back, and alerting a person instead of hammering it.

Keep it to public data: no logging into accounts, no bypassing paywalls, no personal data. Read each site's terms, and take legal advice for large-scale commercial collection.

A reference architecture

The system we build for this has five layers:

  1. Scheduler. Decides which product is read from which source and when. We use n8n for scheduling, retries and notifications. Our comparison of n8n, Make and Zapier explains why.
  2. Extractors. Python crawlers, one per source, that return raw records.
  3. Normalization and validation. Currency and tax handling, unit normalization, sanity checks, and matching.
  4. Storage with history. PostgreSQL with a price-history table, so every change is kept with its timestamp.
  5. Dashboard and alerts. Per-product charts across stores, plus alerts by email, Slack or Telegram when a rule fires.

In our panel, a Django REST layer handles catalog management, price history and analytics, and a Nuxt admin panel covers crawl monitoring, product linking and trend review.

Turning data into decisions

Alerts are where the value shows up. Rules that tend to earn their keep:

  • "A key competitor dropped the price of product X by more than 5%."
  • "We are no longer the cheapest seller of product Y."
  • "Product Z went out of stock at a competitor."
  • "A source returned an implausible price." This usually signals a scraping error rather than a market move, and it keeps bad data out of your decisions.

One caution: monitoring should inform pricing, not automate a race to the bottom. Automatic repricing that matches every competitor cut tends to end in a price war nobody wins. Put guardrails such as floor prices and margin limits on any automated rule.

Off-the-shelf tool or custom pipeline?

Off-the-shelf price monitoring tools are a good start when your competitors sell on mainstream platforms and matching is straightforward.

A custom pipeline earns its cost when:

  • Your sources are regional, unusual or not covered by existing tools.
  • Matching needs rules specific to your catalog.
  • The data should feed straight into your own pricing, ERP or BI systems.
  • You do not want your pricing data and strategy sitting in another company's product.

What it costs to run

The running costs come from four places: servers for crawlers and the database, proxies for sources that block datacenter traffic, headless-browser time for JavaScript-heavy pages, and maintenance when sources change their structure. Maintenance is the one most teams underestimate. Sources change, and a monitored pipeline catches it in hours instead of weeks.

If you want a price monitoring pipeline built and operated for you, see our web scraping service, or start with a project estimate.

Frequently asked questions

Collecting publicly displayed prices is common practice and lawful in many jurisdictions when done without logging in, at a reasonable rate, and without collecting personal data. Site terms and local law vary, so read each source's terms and take legal advice for large-scale commercial use.

With barcodes and part numbers where available, then normalized titles and extracted attributes such as brand, model, capacity and colour. Uncertain matches go to a person for one-click confirmation, after which they stay automatic.

Hourly for fast-moving categories like consumer electronics, daily for most retail, and weekly for slow-moving goods. Check only as often as you are able to act on the data.

A well-built pipeline validates every record and alerts when a source starts returning missing or implausible data. The extractor is then fixed, usually within hours, before gaps affect decisions.

Only with guardrails. Automated repricing needs floor prices, margin limits and rules about which competitors to follow. Otherwise it can trigger price wars that cost more than they win.