Durable web extractionPrice Intelligence Platform
An async control plane for price and catalog extraction jobs that keeps task history, isolates failures, and recovers interrupted work.
System routeRead left to right
- 01Typed run
- 02Durable queue
- 03HTTP / browser
- 04Validate
- 05Persist
01 / Context and problemThe operational problem
One-off scraping scripts become difficult to operate when pages hang, selectors change, targets throttle requests, or workers stop mid-run.
OwnershipDesigned and built the service architecture, request schemas, extraction registry, task queue, worker flow, persistence model, failure semantics, tests, Docker packaging, and recruiter-facing documentation.
02 / Technical challengeWhat made it non-trivial
The platform needed predictable ownership of work, explicit retry meaning, per-target errors, and safe recovery without duplicating extracted results.
SQLite is intentionally used for an easy local demo.
Real targets, proxies, cookies, and private selectors are excluded.
The project respects target terms, robots policies, rate limits, and applicable law.
03 / System designThe architecture decision
Each target becomes a durable task. Workers lease pending or expired tasks, run one bounded extraction attempt, then persist the result and task state in one transaction. HTTP and browser extractors share a typed registry.
01Python02FastAPI03asyncio04httpx05Playwright06SQLAlchemy07Pydantic08Docker
04 / ReliabilityDesigned for the failure path
- 01
Expired lease recovery for interrupted workers
- 02
Idempotent, task-linked result persistence
- 03
Explicit retry budgets and terminal dead-task state
- 04
Bounded HTTP and browser concurrency
- 05
Structured JSON run, lease, retry, and terminal logs
- 06
Safe in-place SQLite upgrade path
05 / Result and evidenceWhat this system proves
A locally runnable extraction service with inspectable run history, failure replay behavior, quality gates, CI, Docker verification, and clear operational boundaries. No hosted production deployment is claimed.
Tayyab can turn fragile browser scripts into a maintainable extraction system with explicit failure and recovery behavior.
06 / LessonsWhat carries forward
01Retry semantics should be named in total attempts, not inferred from an ambiguous budget.
02Recovery is only useful when result persistence is idempotent.
03A small operational API can make extraction failures understandable without a full dashboard.