Why your web scraper keeps breaking

Back to overview

Our solution

Your benefit

If you're reading this, there's a good chance you already have something in place. Maybe a scraper your own team built, maybe a third-party scraping tool or API you pay for. Either way, you're not here because scraping sounded interesting in theory. You're here because it keeps costing more attention, more engineering time, or more budget than it should, and the data it delivers isn't as trustworthy as you need it to be for pricing or assortment decisions.

That gap between "it works" and "it works reliably, at a predictable cost, without anyone babysitting it" is the actual problem. It's worth understanding exactly why that gap exists, because the answer explains why so many teams that built something perfectly functional six months ago are dealing with a mess today.

Why does a scraper that worked fine keep quietly breaking?

The most common failure mode isn't a scraper that crashes loudly. It's one that keeps running, returns HTTP 200, and quietly delivers wrong or incomplete data because the website underneath it changed.

Scrapers extract data by targeting specific elements in a page's structure, typically through CSS selectors or XPath expressions tied to a particular version of a site's HTML. The moment a target site redesigns a page, renames a CSS class, restructures a table, or shifts a field's position, those selectors stop matching what they used to. This is generally called selector drift, and it's the single biggest reason scraping pipelines degrade over time. A single typo fix or class rename on the target's side, something a competitor's front-end team wouldn't think twice about, can silently take a price field out of your feed with no error thrown anywhere.

This is precisely why "we built a scraper and it worked" is such a misleading milestone. Building a scraper against a site's current structure is a snapshot in time. Every redesign, every A/B test, every framework migration on the target's side is a new snapshot your scraper wasn't built for.

Why do defenses that used to be simple IP blocks now stop even careful scrapers?

A second, compounding problem is that the sites you're monitoring are actively trying to make automated access harder, not because they're targeting you specifically, but because bot traffic in general (credential stuffing, scraping, inventory hoarding, ad fraud) has become expensive enough for large sites that most e-commerce and retail platforms now run dedicated bot management systems.

What used to be straightforward IP-based rate limiting has evolved into layered systems that combine several signals into a continuous trust score rather than a binary allow/block decision: how your connection negotiates TLS, how your HTTP requests are structured and ordered, what your browser environment reports back through JavaScript, and how your mouse movements, scroll behavior, and timing compare to a real user's session. Vendors like Cloudflare, Akamai, DataDome, and HUMAN (formerly PerimeterX) each weigh these signals differently, and some now run detection models trained per customer rather than a single generic ruleset, meaning a technique that works on one protected site may not transfer to the next one at all.

The practical implication isn't that scraping has become impossible. It's that it has become a genuinely specialized, continuously shifting discipline rather than a script you write once. Techniques that work today can stop working after a vendor pushes an update, and a setup that handles one protected site well can fail completely on the next, because the underlying detection logic is different.

Why does scraping keep getting more expensive, even as proxy prices fall?

This is the part finance teams often don't see coming. Base proxy pricing has generally trended downward as the market has matured and competition among providers has increased. Yet many teams report their actual proxy spend climbing anyway. The reason isn't the price per request, it's the mix.

As monitoring scope expands and defenses on the target side get stricter, a growing share of requests can no longer be served through cheap datacenter proxies and need residential or mobile IPs instead, which cost meaningfully more per successful request. At meaningful scale, the cost of the residential proxy volume required to reliably get through a well-defended site can end up exceeding what a purpose-built scraping service would have charged for the same data, once engineering time spent debugging blocks and rotating providers is added on top.

That last part, the engineering time, is usually the true hidden cost. Every blocked request that has to be diagnosed, every provider swap needed because one proxy pool got burned, every emergency fix when a site update breaks extraction at 3am, is time an engineering team isn't spending on anything that grows the business. It rarely shows up as a separate line item, so it rarely gets budgeted for, which is exactly why it feels like scraping "costs more than it should" without anyone being able to point to a specific number.

What does a genuinely reliable setup actually require?

If selector drift and evolving defenses are the root causes, the fix isn't a smarter one-time build. It's an operating model designed around the fact that things will break, built to catch that quickly and cheaply rather than expensively and late. In practice, that means a few concrete components working together.

  • Validate the data, not just the HTTP status code: A page can return a perfectly healthy 200 response while the content underneath has quietly changed shape. Reliable pipelines validate extracted data against a schema, rejecting records with null, empty, or out-of-range fields, and flag sharp shifts in record counts or value distributions, catching selector drift and stale challenge pages that a status-code check alone would miss entirely.
  • Run canary checks against known-good pages: Periodically re-scraping a small set of reference pages with a known-correct result, and comparing the outcome against the stored baseline, surfaces structural changes fast, often before they've corrupted a meaningful share of production data.
  • Fingerprint content by meaning, not just by position: Anchoring extraction to a specific CSS selector is fragile by nature. Identifying a field by nearby text, relative position, or semantic pattern instead of a single brittle selector path survives far more layout changes without breaking.
  • Build a repair path, ideally an automated one, with a human safety net: Modern approaches increasingly use models to propose a replacement selector when an old one stops matching, testing candidates in a sandbox against live HTML before anything reaches production data. Crucially, not every failure should be auto-repaired silently: pages that turn out to be empty JavaScript shells, or cases where no repair candidate passes validation, need to be escalated to a person rather than guessed at indefinitely.
  • Tier your alerts by actual impact: Not every hiccup deserves to wake someone up. A transient retry spike can sit in a dashboard; a sustained data gap on a category that feeds live pricing decisions should page someone immediately. Getting this distinction right is what keeps a monitoring system useful instead of becoming background noise everyone learns to ignore.
  • Treat proxy and tooling spend as a managed budget, not a fixed cost: Applying premium residential proxies and heavy browser automation to every target regardless of how defended it actually is wastes money on the easy sites and still may not be enough for the hardest ones. An escalation model, cheap and simple by default, upgraded only where a specific target genuinely requires it, keeps the cost curve under control as scope grows.
  • Spread risk across more than one proxy provider: No single network performs equally well on every site, and a provider-wide IP ban or outage shouldn't be able to take your entire monitoring pipeline down at once.

Build, buy a tool, or outsource entirely?

None of this is impossible to build in-house. Plenty of technically strong teams have done exactly this. What's worth being honest about is what it actually takes to sustain: a validation and monitoring layer, an automated repair path with proper safeguards, a proxy strategy that adapts as sites harden their defenses, and someone accountable for all of it as targets and protections keep changing indefinitely. That's a genuine ongoing operational commitment, not a project with an end date.

A scraping API or SaaS tool solves part of this. It typically hands you infrastructure and raw extraction, but you're often still responsible for defining what to extract, validating that it's actually correct for your use case, and dealing with the specific sites that resist the tool's generic approach. It reduces the problem; it doesn't remove it.

What actually removes it is having a team whose day-to-day job is exactly this: watching for drift, maintaining the escalation logic, tuning the proxy mix per target, and absorbing the cost of every site redesign or new anti-bot rollout as part of an ongoing service rather than a fire drill on your side. That's a meaningfully different commitment than running a tool, and it's the reason organizations that need dependable competitor data at scale increasingly treat scraping as something to have managed for them rather than something to keep re-solving internally.

At Competify, this is precisely the operational discipline we run for clients every day: scrapers we build, monitor, and repair as part of the subscription, with cost kept in check through the kind of tiered, target-specific approach described above. If any of what's described here sounds familiar from the inside, we're happy to talk through what your setup actually needs.

Want to know how we work?

We’ve designed a simple 3-step approach for easy onboarding.

Get inspired

We build and maintain custom webscrapers that turn any website into structured data and insights.

Discover more inspiration

Discover insights, trends and company news.

All inspiration
Insights
Why EAN matching is giving you few or wrong matches
Discover how to build a matching pipeline solid enough to base pricing decisions on.
Read more
Insights
Why your web scraper keeps breaking
What it takes to keep your scraper reliable: validation, an automated repair path, and a proxy strategy that adapts.
Read more
Insights
Competitive monitoring in telecom: 7 principles that make the difference
Discover why competitive monitoring in telecom is so difficult and how we solve it
Read more
Ready to outsmart your competitors?
Do you have a specific business challenge to solve or simply want to brainstorm on ways to outsmart your competition? Get in touch!
Bas Swierstra
Managing Partner