A catalog parser that crashes is a good day. The expensive one keeps returning valid data that no longer means what it used to.
I have run retail catalog parsers for a cross-border shopping platform for years, and the pattern repeats. The selector still matches. The price is still a number in range. But the page started showing a member price instead of the retail one, or the unit shifted from a pack to a single item, or a variant field moved and every size now maps to the default. Nothing throws. Downstream, the listing is wrong, the delivery rate is quoted against the wrong weight, and you find out from a customer rather than from a log.
So I stopped treating parsers as code that either works or errors, and started treating extraction as data with an expected shape. Field-level presence rates, value distributions per source, and a diff against the previous crawl. A sudden jump in the share of products with no discount, or a currency that appears where it never did before, is a stronger signal than any exception.
Structural change is easy to detect. Semantic change is the one that costs money.
If you run scrapers at scale: what actually tells you a source changed meaning rather than markup?