Skip to content
Price IntelligencePrice Intelligence home

Product

Scrape monitoring, because the worst failure is silent

Scrape monitoring is the practice of watching the collection pipeline itself, not just the prices it produces. It measures coverage, meaning how many tracked listings returned a valid price, and freshness, meaning how recently each one did. Good scrape monitoring detects a source that quietly stopped updating before anyone prices against a stale number.

Start free trialOpen the live demo14 days, no credit card, cancel in one click.

The expensive failure here is almost never a wrong price. It is a price that stopped updating while the dashboard still looked fine. A scraper that breaks loudly gets fixed the same day. One that breaks quietly leaves last Tuesday's number on screen, and by then a repricing rule has run on it for a week. Scrape monitoring makes that silence impossible: coverage and freshness measured per source, automatic repair when extraction breaks, and an alert on degradation rather than on disappearance.

How a price feed goes quiet without an error

The mechanics matter, because the abstraction hides the problem. A retailer redesigns a product page and moves the price out of the server-rendered HTML into a component a script writes after load. Nothing errors. The fetch returns HTTP 200. The parser finds an empty placeholder and returns nothing.

What happens next decides whether you lose money. A naive pipeline reads an empty result as no change and keeps the previous value. The listing shows $159.00 in every view, export and rule, the chart stays a smooth line, and the one honest signal, the age of that number, is nowhere on screen.

What a silent failure looks like

  • The last good price sits on screen with no age beside it.
  • One domain of eleven stopped, so the overall total barely moves.
  • The history chart is interpolated straight across the gap.
  • The alert channel is quiet, because no price changed.
  • It surfaces when somebody opens the competitor site by hand.

What scrape monitoring shows instead

  • Every price carries its capture time. Stale values are marked stale.
  • Coverage and freshness are broken out per domain and per category.
  • A gap in collection renders as a gap. Nothing is interpolated.
  • The degradation itself raises the alert.
  • You are told before you notice.

Why totals hide it: track eleven competitor domains, let one go dark, and overall coverage falls to about 91 percent, because 10 / 11 = 0.909. That reads like rounding. It is every price from one competitor being a week old.

Coverage and freshness, the two measures scrape monitoring reports

Coverage
The share of tracked product-competitor pairs that returned a valid, plausible price in the most recent collection cycle. Coverage answers whether the number exists.
Freshness
The age of the newest good observation for each pair, measured against the refresh interval your plan expects. Freshness answers whether the number is from today.

Coverage, worked. A store tracks 4,200 product-competitor pairs and 4,061 returned a valid price last night, so coverage was 4,061 / 4,200 = 0.967, or 96.7 percent. The 139 that did not are listed and grouped by cause.

Freshness, worked. On the Growth plan the expected interval is 12 hours, so a pair whose newest observation is 31 hours old has missed two cycles. Freshness is the share of pairs inside 1.5 times that interval, 18 hours here, reported with the oldest pair per category so nothing hides in an average.

Coverage and freshness are independent, and each combination means something different
CoverageFreshnessWhat is actually happeningWhat we do
HighHighHealthy. Prices exist and they are from this cycleNothing. This is the normal state
HighLowThe dangerous state. Values present but old, usually a source serving cached pagesZero-variance detection marks the source degraded and the prices stale wherever they appear
LowHighSomething broke recently and cleanly. What arrived is currentRegeneration and re-discovery run automatically, and failing pairs are listed by cause
LowLowA source has failed for more than one cycle without repairAn incident opens, you are alerted, and affected pairs leave repricing until they recover

A dashboard that reports only coverage reads green in row two, which is the row that costs money.

Data quality — source health

Coverage

98.8%

of tracked URLs

Checks today

1,106

Auto-healed (7d)

7

no data gaps

Human queue

2

awaiting review

SourceMethodCoverageLast full passStatus
VoltbayStructured data100%38 min agoHealthy
HarborlineDomain recipe98.4%1 h 12 m agoSelf-healed

Recipe regenerated 3 h ago after a layout change

PrimeDeckMarketplace API99.6%22 min agoHealthy
Casa & KinDomain recipe96.1%2 h 04 m agoDegraded

12 URLs returning 404 — queued for re-discovery

Belmont DirectStructured data100%51 min agoHealthy

Incident log

  • Today 04:12HarborlinePrice selector returned null on 214 URLs.New extraction recipe generated and validated — live 04:19
  • Today 01:50Casa & Kin12 product URLs returned 404.Re-discovery queued via GTIN lookup
  • Yesterday 19:31PrimeDeckRate limit reached.Backed off and completed the cycle 22 min late
The source health board in the Northline Supply demo tenant: coverage and freshness per competitor domain, current incident state, and the age of the oldest observation in each category.
How a competitor price is extracted and validatedA product page is fetched, then extraction is attempted in three orders of preference: schema.org structured data, then a per-domain recipe, then full page rendering. Every extracted value passes a plausibility check before it is stored. A failed check regenerates the domain recipe and, if that also fails, raises a human review task and alerts the customer.Fetch pagerate limitedTRIED IN ORDER — CHEAPEST AND MOST ROBUST FIRST1 · Structured dataschema.org Product JSON-LD2 · Domain recipeselectors written once per site3 · Rendered pageslowest, used only when neededPlausible?currency · magnitude · stockpassStoredappend-onlyfailRegenerate recipe, revalidateHuman queue + alert
Where collection breaks, and what happens automatically when it does.

Self-healing extraction, mechanism by mechanism

Automatic repair is not one feature. It is four mechanisms catching four different breakages, and it is worth knowing which is doing the work.

  1. 1

    Structured data first, so most redesigns change nothing

    Where a retailer publishes schema.org Product markup, price, currency and availability are read from it. That is the data the site hands to search engines, so it survives cosmetic redesigns. A per-domain recipe is the fallback.

  2. 2

    Recipe regeneration when a layout changes

    When a domain's parse-failure rate jumps in one cycle, the recipe is regenerated from a fresh render of sampled pages, then validated against recent known-good prices. If it reproduces them within a plausible band it is promoted. If not, nothing is written.

  3. 3

    Identifier-based re-discovery when a URL moves

    The most common breakage after a redesign. The old address 301s to a category page or returns 404. Rather than drop the listing, the product is re-discovered on the retailer's own catalogue by GTIN, UPC, EAN or MPN, and the new URL attaches to the same match with a fresh confidence score. History continues on one series.

  4. 4

    Plausibility validation before anything is written

    Every candidate price is checked against the listing's own history and against peer listings. A $0.00, a shipping fee, a financing instalment where the shelf price was, or a fortyfold overnight jump is quarantined. A quarantined value never reaches a chart, an index or a rule.

  5. 5

    A human queue when automation fails

    Some sites cannot be repaired by pattern. When regeneration fails validation twice, the source escalates to a person and the incident stays open in your account meanwhile. Automation that admits defeat beats automation that keeps writing.

Failure modes, detection, and automatic response

Eight ways price collection breaks, how each is detected, and what happens without anyone filing a ticket
Failure modeWhat it looks likeHow it is detectedWhat happens automatically
Layout changeA redesign moves the price into a different elementParse-failure rate for the domain jumps in one cycleThe recipe is regenerated and validated against known-good prices before it may write
Price rendered by scriptThe HTML holds a placeholder and the price arrives after loadA static read returns no price and no structured data is presentThe page is re-fetched with full rendering. If still missing, regeneration runs, then the human queue
Product URL movedThe old address 301s to a category page or returns 404HTTP status, plus an identifier mismatch on the page landed onThe product is re-discovered by GTIN, UPC, EAN or MPN and the new URL joins the same history
Different product at the same URLThe address resolves but now sells something elseIdentifier and title stop agreeing with the stored matchConfidence drops, the pair leaves repricing and analytics, and it is queued for review
Bot mitigation returning HTTP 200A challenge or interstitial page served with a success statusNo offer markup and no plausible price node in the responseThe fetch retries on another profile and schedule. Repeated failures open an incident rather than write a null
Wrong number capturedShipping, a subscription rate or a financing instalment where the shelf price wasPlausibility bands against its own history and peer listingsThe value is quarantined rather than stored, and regeneration is triggered
Frozen sourceEvery request succeeds and every price is identical, cycle after cycleZero price variance across a domain while the category movesThe source is marked degraded and you are alerted, though coverage still reads 100 percent
Currency or locale switchThe page renders in a different currency or regionThe currency code stored with the amount stops matching the source profileThe observation is held out of the market average, not converted silently into a USD figure

The detection column is the one to interrogate in any evaluation. Repair is common. Detecting a failure that produces a plausible wrong number is not. More on the fetch layer in price scraping.

Rows three and four are why matching belongs to data quality. A URL is a location, not an identity. When the identity behind a URL changes, the honest response is to drop confidence and stop using the pair, not keep charting whatever price is now there.

Product matching — confirmation queue

Your productMatched atMethodConfidenceAction
Aurora H7 Noise-Cancelling Headphones — SandGTIN 009100010713VoltbayGTIN exact
94%
Confirm or correct
Aurora Buds ProGTIN 009100014284HarborlineTitle + attributes
97%
Auto-confirmed
Aurora Buds Pro — BlackGTIN 009100017855PrimeDeckImage + title
94%
Confirm or correct
Aurora Buds Pro — Midnight BlueGTIN 009100021426Casa & KinGTIN exact
99%
Auto-confirmed
Aurora Buds Pro — SandGTIN 009100024997Belmont DirectTitle + attributes
90%
Confirm or correct

Matches at or above 95% confidence are applied automatically. Anything below is queued, and every correction you make is fed back into matching.

The match review queue. Each pair shows its confidence score, the evidence behind it, and whether it is currently excluded from repricing. Corrections feed back into matching.

Why we show you our own incident log

Every vendor claims high accuracy, and none of those claims are checkable, because you cannot audit a figure handed to you about data you did not collect. What is checkable is whether a vendor tells you when something broke. So the incident log lives in your account.

  • What broke. The domain and the failure mode, in the plain terms used above.
  • When it started and when it was restored. Both timestamps, so you can check whether a number you used on Wednesday sat inside the window.
  • How many products were affected. Scope in pairs, not a severity colour. Fourteen pairs and 1,400 pairs are different conversations.
  • Whether history was backfilled. Some outages recover by re-reading pages that still show the same price. Many do not.
  • Whether it is still open. Affected pairs stay out of repricing until it closes.

What we do not claim

  • Not 100 percent coverage, and nothing behind a login. Some sites cannot be read reliably, and we say so and stop rather than serve degraded data quietly. No member pricing, no negotiated B2B rates: if a shopper cannot see it, we do not collect it.
  • No retroactive capture. Backfill works only when a page still shows the price it showed during the outage. A moment that passed uncollected stays uncollected.
  • Detection is not omniscience. A new failure mode on one domain can run a cycle before it is caught. What we commit to is that it surfaces as an incident, not as a confident wrong number. Evidence capture for MAP protection is held to the same rule.

Data quality is one of six modules, all included on every plan. See how they fit together on the product overview, or how collection itself works in price monitoring.

Check the health board before you trust the prices

Start a trial, connect a store, and watch coverage and freshness on your own competitor set for two weeks. Fourteen days, no credit card.

Frequently asked questions

What is scrape monitoring?

Scrape monitoring is the practice of measuring the health of a price collection pipeline rather than only the prices it outputs. It tracks whether each tracked listing returned a valid price this cycle, how old the newest good observation is, and whether any source has started failing or returning stale values. Its purpose is to catch a feed that stops updating before decisions are made on old data.

What is the difference between coverage and freshness?

Coverage is the share of tracked product-competitor pairs that returned a valid price in the latest cycle, so it answers whether a number exists. Freshness is the age of each newest good observation against the expected refresh interval, so it answers whether the number is current. A source can show 100 percent coverage while serving a cached price that has not changed in nine days.

How do you know when a scraper has silently broken?

Three signals. Parse-failure rate for a domain jumping in one cycle catches layout changes. Plausibility bands against a listing's own history and against peer listings catch a wrong number that still looks like a price. Zero price variance across a whole domain while the rest of the category moves catches a frozen or cached source, which is the failure coverage alone will never show.

What does self-healing extraction actually do?

Four things. Structured product data is read first, so many redesigns change nothing. When a layout does break parsing, the extraction recipe is regenerated and validated against recent known-good prices before it is allowed to write. When a product URL moves, the item is re-discovered by GTIN, UPC, EAN or MPN. When automation fails validation twice, a person takes over and the incident stays visible.

What happens to my repricing rules when a source goes down?

Pairs affected by an open incident are excluded from repricing until they recover, so a rule cannot act on a stale or missing competitor price. Guardrails for margin, cost and MAP floors still apply to everything else. The exclusion is visible on the rule, so you can see exactly which competitors were counted in any proposed change.

Do you interpolate missing prices on charts?

No. A gap in collection is drawn as a gap, and exports return nulls rather than estimates. Interpolation turns a known unknown into a fabricated data point, which is particularly harmful when the series feeds a warehouse or a board deck. If a price existed on a day it was not captured, that observation is simply gone and we say so.

Can I see a history of data incidents on my account?

Yes. The incident log records what broke, the domain involved, the start and restore times, how many product-competitor pairs were affected, whether history could be backfilled, and whether the incident is still open. Accuracy claims cannot be audited by a buyer. A disclosure habit can be, which is the point of showing it.

How quickly are customers told when a source degrades?

Alerting is triggered by degradation, not only by total failure, so a source that misses one cycle or starts returning suspicious values raises a flag rather than waiting for a full outage. Alerts go to email or Slack, and any source that degraded during the week also appears in the weekly digest alongside pricing movement.

Start monitoring in the next ten minutes

Connect your store, match your catalogue and get your first competitor comparison in the same session.

14 days, no credit card, cancel in one click.