How It Works
An autonomous investment intelligence system built to find mispriced classic BMWs.
Classic BMW prices vary 30-60% across platforms. A car selling for $16K on Copart is worth $28K on the enthusiast market. An E46 M3 in Japan sells for $31K — import it to the UK and it's worth $57K. These spreads exist because auction platforms don't understand variant-level value. A "330i" could be a regular sedan or a ZHP performance package worth 2x more.
Domain knowledge applied at scale. The system distinguishes 18 specific variants across 5 BMW platforms (E28, E30, E36, E39, E46), identifies misidentified cars via VIN decoding, calculates cross-market spreads in real-time, and sends deal alerts to Telegram and Slack when opportunities surface.
Architecture
DATA SOURCES PROCESSING OUTPUT
Classic.com ----+ +------------------+ +-- Telegram Alerts
| | | |
BaT Auctions ---+---> SQLite ---> Deal Scoring +---> Web --+-- Slack #bmw
| DB | VIN Decode | Dashboard|
Cars & Bids ----+ | Mileage Curves | +-- JSON API
| | Arbitrage Calc |
Copart/IAAI ----+ | Condition Class |
| +------------------+
Goo-net Japan --+
| Cron Schedule:
Exchange Rates -+ BaT: 3x/day
C&B: 1x/day
Google Trends --+ RSS: 6x/day
Analysis: weekly
Data Pipeline
5 data sources scraped automatically. Playwright browser automation for auction sites (BaT, C&B, Classic.com). REST API for Copart/IAAI via auction-api.app. HTTP for exchange rates and Goo-net Japan export inventory.
6 analysis types. Deal scoring (below-market detection). VIN decoding (M-car identification, salvage history). Mileage-price depreciation curves. Condition classification from listing titles. Transmission premium calculation. Cross-market arbitrage (Japan, salvage, BaT vs Classic.com).
Real-time notifications. Alerts when a car sells >15% below market, when a reserve isn't met on a valuable variant, when VIN decode reveals a misidentified car, or when new classic BMW inventory appears on BaT. Delivered to Telegram + Slack.
18 Tracked Variants
| Platform | Variants | Investment Thesis |
|---|---|---|
| E28 (1982-88) | M5, 535i/535is, M535i | Peak analog. M5 appreciating +37%. M535i undervalued Euro-only. |
| E30 (1982-94) | M3, 325is, 325i Touring | M3 is blue-chip ($89K avg). 325is down 29% — potential buy dip. |
| E36 (1992-99) | M3 US, M3 Evo, M3 Lightweight, 328i | Lightweight at $160K. Manual premium +213% over auto. Rising fast. |
| E39 (1996-03) | M5, 540i 6-speed, 530i Sport | M5 up 16%. US premium 35% over EU (arbitrage watch). |
| E46 (1999-06) | M3 manual, M3 CSL, 330i ZHP, 330Ci, 328i | M3 overtaking E36 in value. ZHP +66% premium for low-mileage. |
Tech Stack
Backend: Python, SQLite, Flask, Playwright, playwright-stealth
Infrastructure: DigitalOcean VPS, Nginx, Let's Encrypt SSL, cron scheduling
APIs: NHTSA VIN decoder, auction-api.app (Copart/IAAI), exchangerate-api.com, Google Trends
Notifications: Telegram Bot API, Slack Incoming Webhooks
Frontend: HTML/CSS, Chart.js — no frameworks, no build step
Data: 5,000+ transactions, 400+ auction listings, 18 variants, 5 platforms