← back to Rentv Licensed Targets
README.md
44 lines
# rentv-licensed-targets
Real, named **licensed CRE-adjacent professionals** for the RENTV Growth console — the
roles the CA-DRE broker registry can't see. Turns the console's LinkedIn-search *lenses*
(title, escrow, contractors, lenders, attorneys) into drillable **real names**, the same
way the DRE registry backs Brokers/Owners.
## Scope (Steve-confirmed)
- **Roles:** Title · Escrow · Contractors/Builders · Lenders & Capital Sources · Attorneys (RE).
- **Geography:** near-term markets — **SoCal (LA/OC/IE/SD/Ventura) + Arizona (Scottsdale/Maricopa)**, within ~300 mi of the LA core + Scottsdale.
- **Filter:** **commercial-relevant only** (e.g. CSLB class B general-building + relevant C-classes; CRE lenders; commercial title/escrow).
## Sources — status: DISCOVERY COMPLETE + VERIFIED (2026-07-31). See `specs/`.
| Role | Best source | Access | Verified volume |
|------|-------------|--------|-----------------|
| Contractors | CA **CSLB** master CSV | direct .ashx, no auth ✅ | ~290k statewide (52 cols, County+Class) |
| Contractors AZ | **ROC** Commercial CSV | browser (CF-walled) ✅ | **47,235** commercial |
| Escrow | CA **DFPI** Solr JSON | public token ✅ | **1,711** (~700–1k SoCal) |
| Title | CA **DOI** APEX + AZ NAIC/DIFI | Playwright | small (insurers ~30–40 + UTCs) |
| Lenders | CA **DFPI CFL** Solr JSON | public token ✅ | **2,565** Active SoCal CFL |
| Lenders NMLS/AZ | ⛔ **NMLS ToS DROP** | — | AZ lenders route through NMLS → blocked |
| Attorneys | reuse local `lawyer_professional_directory` | local DB, $0 ✅ | **55** CRE SoCal core (of 21.7k Active) + AZ Bar (Playwright) |
data.ca.gov CKAN confirmed dead-end. **NMLS is a hard ToS red line** (no bulk scrape / no soliciting) — CA lenders come from DFPI instead; AZ lenders need a paid CSBS feed (gated spend) or drop.
## Honesty rules (non-negotiable)
- Public **license** data = targeting only, **not** a send list. No email/phone unless the
source provides it; never imply contact data we don't have (mirrors `/summit-leads`).
- Respect each source's **robots.txt / ToS** — especially **NMLS** (reuse restrictions).
Any source whose ToS forbids bulk reuse is dropped or handled per its terms, and flagged.
## Pipeline
1. **Discovery** (agents) → per-source access spec (endpoint, fields, filter, volume, ToS).
2. **Scrapers** (`scrapers/<source>.mjs`) → normalize to `schema.sql` rows (commercial + 300mi filter).
3. **Stage** → `rentv_licensed_targets` (local mirror first; canonical dw_unified apply is **gated**).
4. **Feed** → the `/social` console role facets read it (a new `/api/summit/*`-style route) — **gated** (prod).
## Gates (drafted to `~/.claude/yolo-queue/pending-approval/`)
- Volume scraping each source (per its ToS).
- Applying the staging table to **canonical Kamatera dw_unified**.
- Feeding results into the **live** `/social` console.
Reversible/local work (schema, scraper code, sample pulls to the local mirror) proceeds directly.