The Technical Edge

How We Monitor Hundreds of Competitors in Real Time

Building a competitor price monitor sounds straightforward. Load the page, find the price, store it. Repeat tomorrow. Do it for 5,000 products across 200 competitor sites, multiple times per day, reliably — and the simple version breaks immediately. Here's what production-grade real time competitor price monitoring actually requires.

19 June 2026 7 min read The Technical Edge

Building a competitor price monitor sounds simple: load the page, find the price, store it. Do it again tomorrow. In a single afternoon you could write a Python script that fetches a URL, parses the HTML, finds the price element, and saves it to a spreadsheet. That works. For one URL. On a site you control. On the day you write it.

Now do it for 5,000 products across 200 competitor sites. Multiple times per day. Including stock status and variant-level accuracy. With automatic retry on failure, alert logic, and push back to your Shopify store the moment a price changes. On sites that actively try to block you. On sites that render their prices via JavaScript. On sites that change their page structure without notice.

The simple version breaks immediately. What's left after it breaks is an infrastructure problem — and solving that infrastructure problem is a significant part of what real time competitor price monitoring in e-commerce actually involves. This post explains the hard parts honestly, because understanding them is the only way to evaluate whether you should build this yourself or use a service that's already solved it.

200+ competitor sites monitored across PriceSpy's customer base
2×+ daily fetch frequency for high-priority products
12mo price history stored per tracked product URL

Why "Just Write a Scraper" Doesn't Scale

A basic web scraper does three things: fetches a URL with an HTTP request, parses the returned HTML, and extracts a value from a CSS selector or XPath expression. If you're targeting a single, stable website with a simple structure, this approach is entirely reasonable and works well. The problems emerge at scale and across a diverse set of sites.

HTML structures change without notice. A competitor redesigns their product page template. The price is no longer inside .product-price span — it's now in a data attribute on a different element entirely. Your scraper returns nothing, or worse, returns the wrong number and you don't notice for days. Silent failures are the most dangerous kind in a monitoring system.

JavaScript-rendered prices. Many modern e-commerce stores — particularly those built on Shopify, BigCommerce, or WooCommerce with heavy plugins — render critical data via JavaScript after the initial page load. A basic HTTP fetch returns the skeleton HTML: the navigation, the product title, the image tags. The price field is empty, populated only after the browser executes the storefront JavaScript. A scraper that doesn't execute JavaScript will consistently return no price from these sites.

Anti-bot measures. Sites serving significant traffic have legitimate reasons to limit automated access. IP rate limiting blocks repeated requests from the same address. User-Agent detection rejects requests that don't match a known browser fingerprint. CAPTCHA challenges gate access after a threshold of requests. Cloudflare and similar services analyse traffic patterns and block sessions that look non-human. These are not edge cases — they are standard configuration on any well-maintained e-commerce site.

Dynamic and personalised pricing. Some sites vary prices based on geolocation, login state, or A/B test variant. A scraper running from a Sydney server might see a different price than a customer browsing from Melbourne. A logged-in trade account might see a different price than a guest. These variations are real, and a monitoring system that doesn't account for them will report inaccurate data.

The real problem with basic scrapers at scale

Each of these failure modes is manageable in isolation. The problem is that at scale — hundreds of sites, thousands of product URLs — you encounter all of them simultaneously, constantly. A system with a 95% daily success rate sounds acceptable until you realise that 5% failure across 10,000 URLs means 500 missing or stale data points every single day.

The Infrastructure Problem — Volume and Frequency

Scale changes the nature of the problem entirely. Monitoring 50 products once a day is a script you can run on your laptop. Monitoring 10,000 products across 200 sites, multiple times per day, with 99.9% uptime, automatic retry on failure, and alert delivery within minutes of a price change — that's a distributed system with several interdependent components.

What it actually requires:

  • Distributed crawlers. A single server hitting hundreds of sites would be rate-limited or blocked immediately. The work needs to be distributed across multiple crawl nodes, each with different IP addresses, operating at a cadence that looks like normal browsing activity rather than a bulk scrape job.
  • Queue management. Not all products are equal. High-priority products — fast-moving SKUs, category leaders, products currently running promotions — need more frequent checks than the long tail of your catalogue. A priority queue determines which URLs are fetched when, ensuring the data that matters most is always current.
  • Proxy infrastructure. Routing requests through diverse IP addresses across different providers and locations prevents IP-level blocking. Managing a proxy pool — rotating addresses, retiring blocked IPs, validating that proxies are delivering accurate responses — is itself a non-trivial operational task.
  • Parsing pipelines. Different sites need different extraction logic. A structured pipeline handles site-specific parsers, validates outputs against expected formats, and flags anomalies for review rather than silently accepting bad data.
  • Validation layer. A fetch that returns an HTTP 200 status isn't automatically a good result. The response could be a CAPTCHA page, a cached version, a redirect to a homepage, or an empty price field. Validation logic checks that the returned data is plausible — within normal range for the product, consistent with recent history — before it's committed to the database.

None of these components is particularly exotic. Each is well-understood. The challenge is building and operating all of them together reliably, and then maintaining them as target sites evolve. That maintenance burden is ongoing — it doesn't end at launch.

The JavaScript Rendering Challenge

This deserves its own section because it's the failure mode that most catches out developers who attempt in-house monitoring for the first time. The assumption is that fetching a URL returns the page content. For a significant proportion of modern e-commerce sites, that assumption is wrong.

When a Shopify store loads, the initial HTML response from the server contains the page structure. The actual price — and often the stock status — is populated by the storefront JavaScript after the browser parses and executes the page scripts. This is by design: it allows dynamic, real-time pricing updates and personalisation without requiring a full server round-trip.

What this means for monitoring: a basic HTTP request to a Shopify product page will often return a price field that's either empty or contains a placeholder. To get the real price, you need a headless browser — a full browser instance running without a visible window — that loads the page, executes the JavaScript, waits for the price element to render in the DOM, and then extracts it.

The tools for this are mature. Playwright and Puppeteer are widely used, well-documented, and reliable. The constraint is resource consumption. A headless browser instance uses significantly more CPU and memory than a simple HTTP fetch. Running hundreds of concurrent headless browser sessions requires meaningful compute capacity, and scaling that capacity to handle peak monitoring loads adds cost and operational complexity.

This creates a real tradeoff in monitoring system design: how do you decide which URLs require headless browser rendering and which can be served by a lightweight HTTP fetch? Getting this wrong in either direction costs you — either you have inaccurate data from sites that needed browser rendering, or you're burning compute resources on sites that didn't need it.

Competitor Monitoring That Actually Stays Up

PriceSpy handles the infrastructure — scraping, JavaScript rendering, anti-bot handling, stock tracking. You get the data. We handle everything that breaks.

See a live demo

Stock Status — The Harder Problem

Price monitoring gets most of the attention, but stock status monitoring is arguably the harder technical problem — and the more commercially important one. Knowing that a competitor is out of stock on a product you carry is often more valuable than knowing their price, because it directly affects how you should be pricing at that moment.

Several factors make stock status harder to monitor reliably than price:

Stock status is conveyed through UI elements, not structured data. Price fields are typically rendered in a consistent, structured way — a specific element with a predictable class or data attribute. Stock status is usually communicated through button text ("Add to Cart" vs "Out of Stock" vs "Notify Me"), badge labels, or inline messages. These vary enormously across themes and platforms, and they're often generated by JavaScript after page load.

The language of "out of stock" is inconsistent. One site says "Out of Stock." Another says "Currently Unavailable." A third shows a greyed-out "Add to Cart" button with no text explanation at all. A fourth shows "Low Stock — Order Now" which could mean 1 unit or 50 units remaining, and the threshold that matters to you is probably different from what the site is communicating. Parsing all of these states correctly requires site-specific logic, not a generic rule.

Some competitors remove listings rather than marking them OOS. A grey-market seller or marketplace seller who runs out of stock may simply delete their listing rather than marking it out of stock. From a monitoring perspective, "URL returns 404" and "URL shows an OOS status" are different states — but both mean the competitor is no longer selling the product. A system that only tracks price changes and ignores listing removal will miss this entirely.

Stock can change multiple times per day. For fast-moving products — particularly around promotional periods, new releases, or supply chain constraints — a competitor might go in and out of stock several times in a single day. If you're only monitoring once daily, you'll routinely miss these windows.

Why stock monitoring changes your pricing decisions

When a competitor goes out of stock on a product you carry, you often become the only available source for a period. That's a window where you can hold or slightly raise your price without losing the sale — a genuine margin opportunity. Missing that window because your monitoring didn't catch the OOS event is a real cost, not a theoretical one.

The Alert System — When to Notify, When Not To

A monitoring system that alerts on every detected price change is worse than useless — it trains people to ignore alerts. If a store is monitoring 300 competitors across 500 SKUs, even a modest change rate produces dozens of notifications per day. Within a week, no one reads them.

Good alert systems are threshold-based and configurable at the product or category level. The right threshold varies enormously by product economics. A $0.50 price movement on a $500 item is noise — it's well within normal rounding variation and has no meaningful impact on your competitive position. The same $0.50 movement on a $12 item represents a 4% price cut and is absolutely worth knowing about.

PriceSpy's alerting works on configurable percentage and absolute thresholds: alert when a competitor drops more than X% below your current price, or when a competitor previously cheaper than you goes out of stock, or when the cheapest available price in the market changes by more than $Y. These parameters are set per product category and overridden at the individual SKU level where needed.

The goal is signal, not volume. An alert that interrupts your day should always be one that warrants a pricing decision. Getting that calibration right is an ongoing process — most stores adjust their thresholds after the first few weeks of live data as they develop a feel for which movements are meaningful in their specific category.

The Human Layer — Why Automation Alone Isn't Enough

Every well-functioning monitoring system at scale has a human layer sitting on top of the automation. This isn't a concession to technical limitations — it's a deliberate design choice, because there are categories of judgement that automation handles poorly.

Product matching. When a new competitor listing appears, it needs to be matched to a product in your catalogue before monitoring can begin. Automated matching works well for products with clear, consistent identifiers (barcodes, manufacturer part numbers, exact model names). It struggles with products that are described differently across sites, products in categories with ambiguous specifications, or genuine near-matches where the products are similar but not identical. A human reviewer verifying matches before they enter the monitoring pool prevents the system from tracking the wrong product entirely.

Anomaly triage. When a monitored price drops by 80% overnight, the most likely explanation is a scraping error — a blocked response, an incorrectly parsed element, a cached page. But it might also be a genuine clearance sale or a pricing mistake the competitor hasn't noticed yet. Automation can flag the anomaly. A human decides whether to trigger an alert or requeue for re-verification.

Structural changes. When a competitor site undergoes a redesign, the existing parser for that site will start failing silently or returning wrong data. Automated detection catches when a site's output deviates from expected patterns. Fixing the parser requires a human to review the new page structure and update the extraction logic. The turnaround time on this matters — a large competitor going unmonitored for several days while a parser is updated is a genuine gap in your intelligence.

URL lifecycle management. Products get relaunched under new URLs. Discontinued products have their pages removed. Bundle listings get split into individual SKUs. Keeping the list of monitored URLs accurate requires ongoing curation that goes beyond what automated systems can reliably do on their own.

This is what "fully managed" means in practice for PriceSpy customers. The automation handles the volume and frequency. The team handles the edge cases, the parser updates, and the product matching verification. Customers don't interact with any of this — they see accurate data in their dashboard and receive alerts that reflect real competitor behaviour. Setup takes days, not months, because we're not asking customers to configure any of the infrastructure above.

Production Monitoring Is an Infrastructure Problem

The stores that attempt to build competitor monitoring in-house typically discover the infrastructure complexity around the time the business needs the data most — during a competitive pricing period, a new market entrant, or a category-wide shift. By that point, they're maintaining scrapers instead of using the data the scrapers were meant to produce.

Production real time competitor price monitoring in e-commerce requires distributed crawlers, proxy infrastructure, headless browser rendering, variant and stock status parsing, anomaly validation, configurable alert logic, and a human layer for the edge cases that automation can't reliably handle. Each component is solvable. The challenge is building and maintaining all of them together, correctly, continuously.

If that infrastructure already exists and is already running — as it does for PriceSpy customers — you spend your time on pricing strategy, not system maintenance. View the live demo to see what the data looks like in practice, or get in touch and we'll walk through what monitoring would look like across your specific catalogue.

PS
PriceSpy Team

The PriceSpy team works with Australian e-commerce stores on competitor monitoring and automated repricing.

See It Running Live

Explore a real pricing dashboard — products, competitors, price history, alerts. No signup required.

Open Live Demo

Competitor Monitoring at Scale — Without Building the Infrastructure

PriceSpy runs production-grade monitoring across hundreds of competitor sites — so your pricing data is always current, accurate, and actionable.

Book a Demo Explore Features