EN
English
简体中文
Log inGet started for free

Blog

Proxies

retiring-the-beast-a-farewell-letter-to-our-e-commerce-scraper

Retiring the Beast: A Farewell Letter to Our E-Commerce Scraper

The most-requested migration story in web data is also the least documented: what it actually looks like when a team retires a hand-built e-commerce scraper that three engineers maintained for two years. This is that story, told as a farewell letter to the codebase — the honest account of what it cost, what finally triggered the retirement, and the checklist that made the handover boring.

Dear Scraper,

You were our first serious infrastructure. We wrote you in a sprint, named you something cute, and for a season you were the reason the price-monitoring product existed at all. This letter is the post-mortem we owe you — because the way you left taught us more than the way you arrived.

What You Actually Cost (The Accounting We Never Ran)

We tracked your infra bill religiously: servers, bandwidth, proxy spend — a tidy four-figure line every month. What we never ran was the full accounting:

Cost lineWhat we told financeWhat was true
Infra“Our data collection bill”The smallest component
Engineering time“Some maintenance”~0.8 FTE across two years, your parser suite alone
The outage ledger“Occasional blips”14 incidents past midnight, target-side changes
Coverage erosionNever mentioned3 of 20 marketplaces quietly degraded before anyone noticed
Hiring dragNever countedOur one senior slot spent on parser debugging, not the product

The parser suite was the story we couldn’t see while we were in it: twenty targets, twenty codepaths, each one a bet that a layout would hold. Every target redesign was your way of collecting on our overconfidence.

The Trigger (It Wasn’t Cost — It Was a Latency Incident)

The decision didn’t come from the accounting. It came from a launch: our product lead promised a client same-day coverage of a new marketplace, and the honest engineering answer was “three weeks — new parser, new anti-bot profile, new failure modes.” The three-week answer for a one-day promise is what forced the meeting. Cost arguments had lost that meeting for two years; the *calendar* argument won it in ten minutes.

The Migration Checklist (The Part Worth Stealing)

We moved to a managed stack — Thordata’s Web Scraper API for the major marketplaces (120+ maintained targets, structured JSON/CSV/XLSX delivery, ~$0.50–$1.00 per 1,000 delivered results, billed on delivery rather than attempts), with the unlocker tier (~$1.00–$1.30 per 1,000 responses) for the two stubborn mid-tier targets you could never quite crack, and raw residential (published slider, $0.65–$2.00/GB by volume) for the genuinely simple long tail. The checklist that made it boring:

  1. Inventory before migration: every target, its volume, its current success rate, its business owner. Surfaces the targets nobody actually used — we retired four outright.
  2. Parallel run, one month: both stacks live, same targets, comparing delivered-records-per-dollar and per-target success rates. You weren’t as good as we told the dashboard — the managed layer beat your block rate on eleven of twenty targets on week one.
  3. Cutover by target, not by flag-day: highest-volume first, watch downstream data quality (not just HTTP codes — actual field completeness), migrate in waves.
  4. Keep the parser suite read-only for a quarter: the gap-analysis reference when a field question arises, then archive.
  5. Re-forecast honestly: the new stack’s line item replaced your infra bill *and* the 0.8 FTE, and the honest number still came out cheaper — which told us how unpriced your maintenance had been.

What We Kept (The Compliment)

Two things survived the retirement, and both were yours: your monitoring discipline — block rates per target, per day, trended — became the acceptance criteria for the managed layer (a vendor you can’t measure is a vendor you can’t hold); and your observation-freshness metric — the age of the newest successful record per target — carried over unchanged, because that discipline was never about your code, it was about our data’s honesty.

The search-side monitoring joined the same month: our product’s category keywords, tracked through structured SERP collection, so demand signals and price signals landed in one warehouse. For the agent prototypes that followed, the same backend extends as an MCP endpoint the agents drive themselves — the Thordata MCP server exposes live search, request history, and usage stats as agent tools, and its 500-free-call tier made the experiment free.

To Every Team Still Living With Their Beast

The tell that it’s time isn’t cost — it’s the calendar argument: the next feature that requires a new target and gets a multi-week estimate for parser work alone. Run the full accounting (the table above, honestly), run the one-month parallel, and let delivered-records-per-dollar make the argument your cost dashboard never could.

We don’t miss you. But we kept what you taught us, and the agent era of our data stack was built on your monitoring discipline rather than in spite of you. Fair winds.

FAQ (From the Post-Mortem Session)

How long did the full migration actually take?
Six weeks including the parallel month — against the original internal estimate of “a quarter, probably two.” The managed layer’s maintained parsers did the compression: the engineering went from “write and defend a new parser per target” to “route and verify.”

Did any workload move back?
One: a target with a bespoke, negotiated data relationship where we kept custom collection deliberately. The retirement decision is per-workload, not existential — the beast’s replacement is a routing table, and one row of ours stayed custom by choice.

What would we do differently?
Run the full accounting in year one, not after the latency incident forced it. The 0.8 FTE was visible the whole time; we just priced it at zero because it wore the disguise of “maintenance.”

What about teams who need custom parsing anyway?
Keep it — for genuinely proprietary targets. The pattern worth avoiding isn’t custom code; it’s custom code for *standard* targets, paying engineering prices for shelf items. Route by rarity, give the agents live search through the MCP endpoint alongside the scraped corpus, and the stack stays honest at every layer.