Web Data Collection Suite
The data the models needed sat behind 20+ platforms that change their markup, throttle requests and break collectors quietly.

Problem
The data the models needed sat behind 20+ platforms that change their markup, throttle requests and break collectors quietly.
A single off-the-shelf collector treats twenty platforms as one problem. They are not: each has its own markup, its own rate limits and its own idea of what a reasonable client looks like, so a tool tuned for the average of them is wrong for all of them.
Approach
Collectors built per platform against a shared schema, with confidence scoring at every stage and a review queue for anything under threshold. Failures alert instead of degrading silently.
Each platform gets the least tooling that holds: plain requests where those are enough, and full browser automation with an OCR fallback for pages that render their content as images. Request pacing, rotating sessions and proxy failover keep a collector inside what a platform will serve rather than hammering it, and every retry escalates one step at a time instead of starting with the heaviest option.
Result
98%+ extraction success across 20+ protected platforms, running at 99.9% uptime as the feed under the intelligence products.
That reliability is what lets the intelligence and prediction-market systems trust the data arriving underneath them — sports odds, entertainment and box-office data, weather records and prediction-market listings all move through the same validation and deduplication layer before anything downstream sees them.
Stack
Python and asyncio carry the collection layer; Playwright handles browser automation for JavaScript-heavy and protected pages; Postgres stores the normalized output; Redis backs the caching and deduplication layer; and Docker packages each collector so it runs the same way in production as it did in development.