Multi-Source Car Listing Scraper & AI Feed

Aggregates car listings from multiple marketplaces into one normalized, AI-searchable feed.

Aggregates and normalizes car listings from multiple marketplaces into one AI-searchable feed.

Role
Sole developer

The problem

Car listings were scattered across several marketplace sites, each with its own format, making it impossible to search or compare inventory in one place.

The approach

Built a Laravel scraping pipeline that drives headless Browserless/Chromium instances against multiple marketplaces, normalizes every listing into one schema, and exposes the result through a Vue.js interface as a single AI-searchable feed.

The outcome

Single unified car-listing dataset; reduced manual data collection nearly to zero.

Stack

  • Laravel
  • Browserless Chromium
  • Vue.js

How it's built

Watch the system move between operational states, and trace a single request step by step through the stack.

Car Scraper & AI Feed

INGESTING: MARKETPLACE A
Browserless / Chromium ClusterHeadless Scraper
Target Site:Cars.com (Dynamic React DOM)
Payload:Raw DOM / JSON-LD / Prices
Laravel Normalization PipelineSchema Mapping Core
Standardization:Trim, Spec, Pricing Harmonized
Integrity:VIN Hash Verified ✓
Vue.js UIAI SEARCH
Query:"Reliable AWD SUV <$25k"
Feed:Live Stream ✓
DatasetCANONICAL
Format:Unified JSON
Sync:Standby
Headless Chromium handles infinite scroll on Marketplace A. Laravel normalizes specs into the Vue.js AI Feed.

Every marketplace normalizes into one canonical, VIN-deduplicated feed.

Marketplace Aggregation & AI Feed

STEP 1/6
Laravel Queue • Scheduler
dispatching parallel crawl batch across Autotrader, Kijiji, CarGurus • 0 ms
Browserless Chromium • ScraperAPI
geo-targeted proxy rotates; bypasses anti-bot challenge & executes client JS hydration • ~2.4 s
Parser Pipeline • DOM / JSON-LD
extracts disparate payloads: Canadian price formatting, imperial mileage, and raw gallery CDN links
Laravel Core • Normalization Engine
maps into canonical schema: VIN, Year, Make, Model, Trim, CAD Currency; deduplicates cross-posted inventory • ~24 ms
MySQL Core • Normalized Ledger
updates historical pricing tracks; sets active seller entity and coordinates geo-radius
AI Search Index • Vue.js UI
embeddings generated; record available for semantic filters "AWD SUV under $25k within 100km" • <50 ms index

System architecture

Open in new tab ↗

← All projects