Dealership Intel¶
Repo: savvydealer-adam/dealership-intel · Path: C:/Users/adam/dealership-intel · Owner: Adam
Status: Active dev · % Done: 70 · Last commit: 2026-03-24
Deployed: local Streamlit (not a public-facing product)
What it is¶
Internal sales-intelligence tool. Crawls OEM dealer locators and dealer websites to extract staff contacts, platform, inventory counts, social links, and review scores — then pushes enriched records into the AI CRM.
Why it exists¶
Apollo and Rocket Reach don't know dealerships. We built a purpose-built crawler for automotive rooftops so SavvyDealer's sales team always has a fresh, accurate prospect list by OEM and region.
How it works¶
Stack: Python + Streamlit, Playwright + nodriver (stealth crawling), Apollo.io API (fallback), Gemini (enrichment fallback), AI CRM REST API, direct Supabase/Postgres for bulk inserts.
- app.py — Streamlit entry; multi-page UI under pages/
- crawlers/ — browser pool, stealth layer, staff crawler, contact/platform/inventory extractors
- audit_brand.py — primary OEM-vs-CRM diff tool; creates groups, adds missing dealers, marks stale as Inactive
- OEM JSON files seeded per brand (Ford 3503, Honda 1069, Nissan 1052, Kia 794, Mitsubishi 299)
- enrich_dealers.py — batch enrichment; batch JSON files batch10_contacts.json … batch31_contacts.json captured
- CRM sync via X-API-Key header, key rotates — pulled from GCP Secret Manager (SERVICE_API_KEY in savvydealer-website)
What's done¶
- 5 OEMs scraped (Ford, Honda, Nissan, Kia, Mitsubishi)
- Staff contact extraction with role classification, email/phone validation, confidence scoring
- Platform detection (DealerOn, Dealer.com, DealerInspire, DealerFire, etc. — strict signatures, no dealer.com default)
- CRM sync + dedup scripts
- 4-phase cleanup plan: Phases 1–2 done (audit + clean)
What's next¶
- Phase 3: enrichment (fill contact gaps via Apollo + Gemini)
- Phase 4: dedup across OEMs and regions
- Add Toyota, Hyundai, Mazda to the OEM crawl roster
- Background scheduler instead of manual Streamlit runs
Where the code lives¶
- Entry:
app.py,pages/1_Process.py…pages/4_Settings.py - Crawlers:
crawlers/ - Audit:
audit_brand.py - Config:
config/settings.py,config/platforms.py - OEM data:
ford_official_dealers.jsonet al.
Integrations¶
- AI CRM — destination for enriched dealer/contact records (
https://ai-crm-isbpcosoxa-uc.a.run.app/api) - Apollo.io — fallback contact enrichment
- Gemini — AI fallback for hard-to-parse pages
- Supabase — bulk enrichment inserts
Don't rebuild this — extend it¶
Any dealer/contact prospecting pipeline belongs here. Do not re-crawl OEMs in another repo — add a brand scraper under crawlers/ and an audit_brand.py path.