Public-web pipelines fail in boring ways: a layout changes, an encoding breaks, a rate limit appears. Engineering for those failures — detectably, recoverably — is what separates a dataset from a science project.
DADaniel Brooks
Every experienced data engineer has a story about a pipeline that worked beautifully until the day a marketing team redesigned a product page and three downstream dashboards went quietly wrong. Public-web pipelines live in an environment you don't control and can't negotiate with. Reliability here means something specific: failures are expected, so they must be detected fast and contained locally.
Treat sources as systems, not targets
The unit of engineering is not "a scraper" but a source profile — a documented contract with each public source covering what is collected, at what cadence, under what politeness constraints, and with what structural assumptions. The profile is versioned like code, because every structural assumption it makes *will* eventually be violated.
Structural fingerprints — stable hashes over the DOM regions you actually parse — catch layout changes early. But the more insidious failures are *semantic*: the field is still there, and now means something slightly different. That's why every pipeline needs two layers of monitors:
Structural monitors — fingerprints, parse success rates, field null rates per run.
Semantic monitors — distribution checks on values: price magnitude bounds, unit sanity, categorical vocabularies, cross-field coherence (a "sale price" above list price is a flag, not a fact).
The design rule we follow: no silent failure. Every degradation either passes a quality gate and ships, or is quarantined and alerts a human. "Shipped with a warning" is a state, visible in delivery metadata — never a default.
Normalization is where meaning is made
Raw extraction gives you strings; delivery requires meaning. Normalization maps those strings to canonical forms — currencies unified, units converted, entities resolved, vocabularies standardized. Do it in an explicit, versioned layer rather than scattering string munging across consumers. The quality framework only works if normalization is inspectable.
1collection run for a mid-size source, days later the layout changed
0silent deliveries — the drift was caught at the fingerprint layer
17minutes median time-to-alert for structural changes
Median time-to-alert across monitored sources, trailing 30 days.
Politeness and stability are the same work
Respectful collection — conservative concurrency, identified user agents, honored directives — isn't just ethics; it's what keeps sources stable enough to build on. Aggressive collection gets you blocked, and blocks are the most expensive failure mode there is. The acceptable-use boundaries we publish are engineering constraints as much as policy ones.
What "reliable" buys you
A pipeline with real monitoring changes the conversation downstream. Analysts stop asking "is this data right?" and start asking "what is this data saying?" — which is, bluntly, the only question worth paying for. Everything in this post exists to protect that conversation.
If you're evaluating vendors, ask one question first: "show me your quarantine dashboard." The answer tells you everything about their pipeline's actual maturity.
Daniel designs the collection and normalization pipelines behind Heroku's datasets. He cares about honest error bars, boring-reliable infrastructure, and documentation that people actually read.
The last mile of market intelligence is unglamorous and decisive: how data actually reaches the systems where decisions happen. Delivery design notes for API, warehouse and hybrid patterns.
Arjun Mehta·
4 comments
CL
Clara Voss
The source-profile YAML is a great pattern. We’ve adopted something similar — including the quarantine-on-fingerprint-change rule — and on-call pages dropped noticeably.
DA
Daniel Brooks
The quarantine rule is controversial until the first time it saves a delivery, Clara. Thanks for the confirmation from the field.
OW
Owen Murphy
“No silent failure” — simple to say, hard to enforce. The three-outcome gate design is the cleanest formulation I’ve seen.
HA
Hannah Kim
Any chance of a follow-up on testing extraction logic? Fixture-heavy testing for parsers is where our coverage is weakest.
4 comments
The source-profile YAML is a great pattern. We’ve adopted something similar — including the quarantine-on-fingerprint-change rule — and on-call pages dropped noticeably.
The quarantine rule is controversial until the first time it saves a delivery, Clara. Thanks for the confirmation from the field.