Architecture and decisions
The acquisition problem
Dealer inventory was spread across inconsistent websites and third-party marketplaces. Search results repeated the same businesses. Storefronts changed without notice, and published listings disappeared. The marketplace needed a repeatable path from discovery to a dealer call and from inventory extraction to a current catalog.
Discover
Expand industry and geography plans into dealer candidates. Normalize identity by source key and website origin, then preserve first-seen history.
Qualify
Check site access, inventory fit, storefront signals, financing context, and extraction viability in a fixed order.
Extract
Run dealer-site scrapers and marketplace adapters. Convert each source into one listing contract with source provenance intact.
Publish and recheck
Ingest an exact run into the marketplace. Revisit known listing URLs on a separate cadence and record availability changes.
Qualification ends in a business action
The qualifier returns call partner, call low priority, manual review, or drop. Reasons travel with the decision. Human corrections are stored as inputs, so the next run does not repeat a known mistake.
Three runs at increasing scale
I increased the scraper input across three runs and watched category distribution instead of treating a successful process exit as proof. A taxonomy correction held as volume increased: industrial categories gained share and the catch-all Other bucket declined.
The contract failure
Four applicant-risk fields disappeared at a repository boundary because three services carried separate copies of the same type. Every repository compiled. The payload was incomplete.
I replaced the duplicated boundary types with an explicit wire DTO and added contract assertions at the handoff. Local type safety stops at the repository edge. The shared payload now has an owner and an executable contract.
What is public
The system map and counts reflect the implementation. Dealer records, credentials, endpoints, and qualification thresholds stay private. The example records are fictional.