← back to Rentv
CRM: add Directory/Lists imported-contact type + LABJ Book-of-Lists importer (58 contacts: Banks, Environmental, Waste)
fe5ea86567822519763674f318971606499763a2 · 2026-08-12 14:12:26 -0700 · Steve Abrams
- /api/crm now merges data/crm-imported.jsonl as type 'directory' (📇), full schema (name/title/firm/phone/city/website/list_category/rank/employees/year_founded)
- scripts/import-labj-lists.py: reproducible importer, deduped by id, INTERNAL prospecting use only (factual contact data; copyrighted list arrangement not republished)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Files touched
A data/crm-imported.jsonlA scripts/import-labj-lists.pyM server.js
Diff
commit fe5ea86567822519763674f318971606499763a2
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Aug 12 14:12:26 2026 -0700
CRM: add Directory/Lists imported-contact type + LABJ Book-of-Lists importer (58 contacts: Banks, Environmental, Waste)
- /api/crm now merges data/crm-imported.jsonl as type 'directory' (📇), full schema (name/title/firm/phone/city/website/list_category/rank/employees/year_founded)
- scripts/import-labj-lists.py: reproducible importer, deduped by id, INTERNAL prospecting use only (factual contact data; copyrighted list arrangement not republished)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
data/crm-imported.jsonl | 58 ++++++++++++++++++++++
scripts/import-labj-lists.py | 115 +++++++++++++++++++++++++++++++++++++++++++
server.js | 25 +++++++++-
3 files changed, 196 insertions(+), 2 deletions(-)
diff --git a/data/crm-imported.jsonl b/data/crm-imported.jsonl
new file mode 100644
index 00000000..1efaacd0
--- /dev/null
+++ b/data/crm-imported.jsonl
@@ -0,0 +1,58 @@
+{"id": "labj-banks-1-city-national-bank", "list_category": "Banks", "rank": 1, "firm": "City National Bank", "address": "555 S. Flower St., Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "cnb.com", "name": "Howard Hammond", "title": "President & CEO", "phone": "(800) 773-7100", "employees": "6,700", "year_founded": "1953", "hq": "66 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-2-east-west-bank", "list_category": "Banks", "rank": 2, "firm": "East West Bank", "address": "135 N. Los Robles Ave., 7th Floor, Pasadena 91101", "city": "Pasadena", "state": "CA", "website": "eastwestbank.com", "name": "Dominic Ng", "title": "CEO & Chair", "phone": "(626) 768-6000", "employees": "3,700", "year_founded": "1972", "hq": "98 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-3-banc-of-california", "list_category": "Banks", "rank": 3, "firm": "Banc of California", "address": "11611 San Vicente Blvd., Suite 500, Los Angeles 90049", "city": "Los Angeles", "state": "CA", "website": "bancofcal.com", "name": "Jared M. Wolff", "title": "President & CEO", "phone": "(310) 887-8500", "employees": "1,800", "year_founded": "1982", "hq": "82 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-4-cathay-bank", "list_category": "Banks", "rank": 4, "firm": "Cathay Bank", "address": "777 N. Broadway, Los Angeles 90012", "city": "Los Angeles", "state": "CA", "website": "cathaybank.com", "name": "Chang Liu", "title": "President & CEO", "phone": "(213) 625-4700", "employees": "1,300", "year_founded": "1962", "hq": "62 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-5-bank-of-hope", "list_category": "Banks", "rank": 5, "firm": "Bank of Hope", "address": "3200 Wilshire Blvd., Suite 1400, Los Angeles 90010", "city": "Los Angeles", "state": "CA", "website": "bankofhope.com", "name": "Kevin S. Kim", "title": "President, CEO & Chair", "phone": "(213) 639-1700", "employees": "1,000", "year_founded": "1986", "hq": "76 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-6-citizens-business-bank", "list_category": "Banks", "rank": 6, "firm": "Citizens Business Bank", "address": "16830 Ventura Blvd., Suite 310, Encino 91436", "city": "Encino", "state": "CA", "website": "cbbank.com", "name": "David Brager", "title": "CEO", "phone": "(909) 980-4030", "employees": "1,000", "year_founded": "1974", "hq": "67 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-7-farmers-and-merchants-bank-of-long-beach", "list_category": "Banks", "rank": 7, "firm": "Farmers and Merchants Bank of Long Beach", "address": "302 Pine Ave., Long Beach 90802", "city": "Long Beach", "state": "CA", "website": "fmb.com", "name": "Daniel Walker", "title": "Executive Chair", "phone": "(562) 437-0011", "employees": "650", "year_founded": "1907", "hq": "27 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-8-mizrahi-tefahot-bank-ltd", "list_category": "Banks", "rank": 8, "firm": "Mizrahi Tefahot Bank, Ltd.", "address": "633 W. 5th St., Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "umtbusa.com", "name": "Moshe Larry", "title": "President & CEO", "phone": "(213) 362-2999", "employees": "7,200", "year_founded": "1923", "hq": "1 LA branch", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-9-hanmi-bank", "list_category": "Banks", "rank": 9, "firm": "Hanmi Bank", "address": "3660 Wilshire Blvd., Suite A, Los Angeles 90010", "city": "Los Angeles", "state": "CA", "website": "hanmi.com", "name": "Bonita Lee", "title": "President & CEO", "phone": "(213) 382-2200", "employees": "500", "year_founded": "1982", "hq": "33 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-10-preferred-bank", "list_category": "Banks", "rank": 10, "firm": "Preferred Bank", "address": "601 S. Figueroa St., Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "preferredbank.com", "name": "Li Yu", "title": "CEO & Chair", "phone": "(213) 891-1188", "employees": "250", "year_founded": "1991", "hq": "16 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-11-smbc-manubank", "list_category": "Banks", "rank": 11, "firm": "SMBC Manubank", "address": "515 S. Figueroa St., Plaza Level, Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "smbcmanubank.com", "name": "Takeshi Okamoto", "title": "CEO & Chair", "phone": "(213) 489-6200", "employees": "600", "year_founded": "1962", "hq": "6 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-12-ctbc-bank-corp-usa", "list_category": "Banks", "rank": 12, "firm": "CTBC Bank Corp. (USA)", "address": "801 S. Figueroa St., Suite 2300, Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "ctbcbankusa.com", "name": "Noor Menai", "title": "President & CEO", "phone": "(310) 791-2828", "employees": "600", "year_founded": "1965", "hq": "20 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-13-american-business-bank", "list_category": "Banks", "rank": 13, "firm": "American Business Bank", "address": "400 S. Hope St., Suite 300, Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "americanbb.bank", "name": "Leon Blankstein", "title": "President & CEO", "phone": "(213) 430-4000", "employees": "200", "year_founded": "1998", "hq": "1 LA branch", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-14-royal-business-bank", "list_category": "Banks", "rank": 14, "firm": "Royal Business Bank", "address": "1055 Wilshire Blvd., Suite 1200, Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "royalbusinessbankusa.com", "name": "David Morris", "title": "CEO & Director", "phone": "(213) 627-9888", "employees": "250", "year_founded": "2008", "hq": "24 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-15-pcb-bank", "list_category": "Banks", "rank": 15, "firm": "PCB Bank", "address": "3701 Wilshire Blvd., Suite 900, Los Angeles 90010", "city": "Los Angeles", "state": "CA", "website": "mypcbbank.com", "name": "Henry Kim", "title": "President & CEO", "phone": "(213) 210-2000", "employees": "100", "year_founded": "2003", "hq": "19 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-16-open-bank", "list_category": "Banks", "rank": 16, "firm": "Open Bank", "address": "1000 Wilshire Blvd., Suite 500, Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "myopenbank.com", "name": "Min Kim", "title": "President & CEO", "phone": "(213) 892-9999", "employees": "120", "year_founded": "2005", "hq": "11 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-17-commonwealth-business-bank", "list_category": "Banks", "rank": 17, "firm": "Commonwealth Business Bank", "address": "3435 Wilshire Blvd., Suite 700, Los Angeles 90010", "city": "Los Angeles", "state": "CA", "website": "cbb-bank.com", "name": "James Hong", "title": "CEO", "phone": "(323) 988-3000", "employees": "100", "year_founded": "2005", "hq": "11 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-18-malaga-bank", "list_category": "Banks", "rank": 18, "firm": "Malaga Bank", "address": "2514 Via Tejon, Palos Verdes Estates 90274", "city": "Palos Verdes Estates", "state": "CA", "website": "malagabank.com", "name": "Randy C. Bowers", "title": "President & CEO", "phone": "(310) 375-9000", "employees": "100", "year_founded": "1985", "hq": "5 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-19-bny-mellon-trust-co", "list_category": "Banks", "rank": 19, "firm": "BNY Mellon Trust Co.", "address": "333 S. Hope St., Suite 2525, Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "bny.com", "name": "Robin Vince", "title": "President & CEO", "phone": "(213) 630-6400", "employees": "54,000", "year_founded": "1981", "hq": "1 LA branch", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-banks-20-state-bank-of-india-california", "list_category": "Banks", "rank": 20, "firm": "State Bank of India (California)", "address": "707 Wilshire Blvd., Suite 2900, Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "sbical.com", "name": "Prakash Paranthaman", "title": "President & CEO", "phone": "(213) 623-7250", "employees": "200", "year_founded": "1982", "hq": "8 LA branches", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-1-tetra-tech-inc", "list_category": "Environmental Engineering & Consulting", "rank": 1, "firm": "Tetra Tech Inc.", "address": "3475 E. Foothill Blvd., Pasadena 91107", "city": "Pasadena", "state": "CA", "website": "tetratech.com", "name": "Dan Batrack", "title": "CEO, Chair", "phone": "(626) 351-4664", "employees": "610", "year_founded": "1966", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-2-scs-engineers", "list_category": "Environmental Engineering & Consulting", "rank": 2, "firm": "SCS Engineers", "address": "3900 Kilroy Airport Way, Suite 300, Long Beach 90806", "city": "Long Beach", "state": "CA", "website": "scsengineers.com", "name": "Michelle Leonard", "title": "Senior VP & Project Director", "phone": "(800) 767-4727", "employees": "224", "year_founded": "1970", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-3-stantec", "list_category": "Environmental Engineering & Consulting", "rank": 3, "firm": "Stantec", "address": "801 S. Figueroa St., Suite 300, Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "stantec.com", "name": "Amy Chang", "title": "Principal, Architecture", "phone": "(213) 955-9775", "employees": "200", "year_founded": "1954", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-4-rincon-consultants-inc", "list_category": "Environmental Engineering & Consulting", "rank": 4, "firm": "Rincon Consultants, Inc.", "address": "250 E. 1st St., Suite 1400, Los Angeles 90012", "city": "Los Angeles", "state": "CA", "website": "rinconconsultants.com", "name": "John Dreher", "title": "CEO, President", "phone": "(213) 788-4842", "employees": "180", "year_founded": "1994", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-5-aecom-technical-services-inc", "list_category": "Environmental Engineering & Consulting", "rank": 5, "firm": "AECOM Technical Services Inc.", "address": "300 S. Grand Ave., Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "aecom.com", "name": "Michael Arvidson", "title": "AVP, Operations Manager", "phone": "(213) 593-8000", "employees": "177", "year_founded": "1990", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-6-nv5", "list_category": "Environmental Engineering & Consulting", "rank": 6, "firm": "NV5", "address": "3777 Long Beach Blvd., Annex Building, Long Beach 90807", "city": "Long Beach", "state": "CA", "website": "nv5.com", "name": "Lisa Kay", "title": "President", "phone": "(954) 495-2112", "employees": "160", "year_founded": "1997", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-7-arcadis", "list_category": "Environmental Engineering & Consulting", "rank": 7, "firm": "Arcadis", "address": "445 S. Figueroa St., Suite 3650, Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "arcadis.com", "name": "Macaria Flores", "title": "City Executive, Los Angeles", "phone": "(213) 486-9884", "employees": "150", "year_founded": "1888", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-8-psomas", "list_category": "Environmental Engineering & Consulting", "rank": 8, "firm": "Psomas", "address": "865 S. Figueroa St., Suite 3200, Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "psomas.com", "name": "Ryan Lynch", "title": "VP, LA Office Manager", "phone": "(213) 223-1400", "employees": "150", "year_founded": "1946", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-9-ramboll-americas-engineering-solutions-i", "list_category": "Environmental Engineering & Consulting", "rank": 9, "firm": "Ramboll Americas Engineering Solutions, Inc.", "address": "350 S. Grand Ave., Suite 2800, Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "americas.ramboll.com", "name": "Eric Lu", "title": "Regional Director", "phone": "(213) 943-6300", "employees": "122", "year_founded": "1982", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-10-kimley-horn-and-associates-inc", "list_category": "Environmental Engineering & Consulting", "rank": 10, "firm": "Kimley-Horn and Associates Inc.", "address": "660 S. Figueroa St., Suite 2050, Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "kimley-horn.com", "name": "Jason Matson", "title": "Senior VP", "phone": "(213) 261-4040", "employees": "118", "year_founded": "1967", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-11-mott-macdonald", "list_category": "Environmental Engineering & Consulting", "rank": 11, "firm": "Mott MacDonald", "address": "1000 Wilshire Blvd., Suite 400, Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "mottmacamericas.com", "name": "Ernest Figueroa", "title": "Unit General Manager", "phone": "(818) 506-8088", "employees": "93", "year_founded": "1972", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-12-swca-environmental-consultants", "list_category": "Environmental Engineering & Consulting", "rank": 12, "firm": "SWCA Environmental Consultants", "address": "51 W. Dayton St., Pasadena 91105", "city": "Pasadena", "state": "CA", "website": "swca.com", "name": "John Dietler", "title": "VP, Southern California", "phone": "(626) 240-0587", "employees": "90", "year_founded": "2005", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-13-environmental-science-associates", "list_category": "Environmental Engineering & Consulting", "rank": 13, "firm": "Environmental Science Associates", "address": "633 W. 5th St., Suite 830, Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "esassoc.com", "name": "Ruta Thomas", "title": "SVP, SoCal Regional Director", "phone": "(213) 599-4300", "employees": "90", "year_founded": "1969", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-14-efi-global-inc", "list_category": "Environmental Engineering & Consulting", "rank": 14, "firm": "EFI Global Inc.", "address": "317 S. Isis Avenue, Suite 207, Inglewood 90301", "city": "Inglewood", "state": "CA", "website": "efiglobal.com", "name": "Shayan Simantob", "title": "VP", "phone": "(310) 854-6300", "employees": "80", "year_founded": "1971", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-15-icf", "list_category": "Environmental Engineering & Consulting", "rank": 15, "firm": "ICF", "address": "555 W. 5th St., Suite 3100, Los Angeles 90013", "city": "Los Angeles", "state": "CA", "website": "icf.com", "name": "Tony DeJulio", "title": "VP", "phone": "(213) 627-5376", "employees": "70", "year_founded": "1969", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-16-partner-engineering-and-science-inc", "list_category": "Environmental Engineering & Consulting", "rank": 16, "firm": "Partner Engineering and Science Inc.", "address": "2154 Torrance Blvd., Torrance 90501", "city": "Torrance", "state": "CA", "website": "partneresi.com", "name": "Joseph Derhake", "title": "CEO", "phone": "(800) 419-4923", "employees": "68", "year_founded": "2007", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-17-citadel-ehs", "list_category": "Environmental Engineering & Consulting", "rank": 17, "firm": "Citadel EHS", "address": "1725 Victory Blvd., Glendale 91201", "city": "Glendale", "state": "CA", "website": "citadelehs.com", "name": "Loren Witkin", "title": "Chair", "phone": "(818) 246-2707", "employees": "65", "year_founded": "1993", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-18-dudek", "list_category": "Environmental Engineering & Consulting", "rank": 18, "firm": "Dudek", "address": "225 S. Lake Ave., Suite 225-M210, Pasadena 91101", "city": "Pasadena", "state": "CA", "website": "dudek.com", "name": "Eric Wilson", "title": "COO", "phone": "(626) 204-9800", "employees": "64", "year_founded": "1980", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-19-jacobs-engineering-group-inc", "list_category": "Environmental Engineering & Consulting", "rank": 19, "firm": "Jacobs Engineering Group Inc.", "address": "555 Flower St., Suite 3200, Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "jacobs.com", "name": "", "title": "", "phone": "", "employees": "60", "year_founded": "", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-20-geosyntec-consultants-inc", "list_category": "Environmental Engineering & Consulting", "rank": 20, "firm": "Geosyntec Consultants Inc.", "address": "1031 S. Broadway Suite 300, Los Angeles 90015", "city": "Los Angeles", "state": "CA", "website": "geosyntec.com", "name": "", "title": "", "phone": "", "employees": "60", "year_founded": "1983", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-21-sapphos-environmental-inc", "list_category": "Environmental Engineering & Consulting", "rank": 21, "firm": "Sapphos Environmental Inc.", "address": "430 N. Halstead St., Pasadena 91107", "city": "Pasadena", "state": "CA", "website": "sapphosenvironmental.com", "name": "", "title": "", "phone": "", "employees": "40", "year_founded": "1993", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-22-aei-consultants-inc", "list_category": "Environmental Engineering & Consulting", "rank": 22, "firm": "AEI Consultants Inc.", "address": "2207 W. 190th St., Torrance 90504", "city": "Torrance", "state": "CA", "website": "aeiconsultants.com", "name": "", "title": "CEO", "phone": "(940) 977-9967", "employees": "37", "year_founded": "1992", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-23-woodard-curran", "list_category": "Environmental Engineering & Consulting", "rank": 23, "firm": "Woodard & Curran", "address": "515 S. Flower St., 18th floor, Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "woodardcurran.com", "name": "Alyson Watson", "title": "CEO", "phone": "(213) 223-9460", "employees": "95", "year_founded": "1979", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-24-partner-energy-inc", "list_category": "Environmental Engineering & Consulting", "rank": 24, "firm": "Partner Energy Inc.", "address": "680 Knox St., Suite 150, Los Angeles 90502", "city": "Los Angeles", "state": "CA", "website": "ptrenergy.com", "name": "Tony Liou", "title": "President", "phone": "(888) 826-1216", "employees": "", "year_founded": "2009", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-25-envicom-corp", "list_category": "Environmental Engineering & Consulting", "rank": 25, "firm": "Envicom Corp.", "address": "4165 E. Thousand Oaks Blvd., Suite 290, Thousand Oaks 91362", "city": "Thousand Oaks", "state": "CA", "website": "envicomcorporation.com", "name": "Joseph Johns", "title": "President", "phone": "(818) 879-4700", "employees": "", "year_founded": "1972", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-26-davenport-engineering-inc", "list_category": "Environmental Engineering & Consulting", "rank": 26, "firm": "Davenport Engineering Inc.", "address": "23705 Crenshaw Blvd., Suite 101, Torrance 90505", "city": "Torrance", "state": "CA", "website": "davenport-co.com", "name": "Neal Davenport", "title": "Principal Engineer", "phone": "(310) 787-4600", "employees": "", "year_founded": "1997", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-engineering-consulting-27-ship-shore-environmental-inc", "list_category": "Environmental Engineering & Consulting", "rank": 27, "firm": "Ship & Shore Environmental Inc.", "address": "2474 N. Palm Dr., Signal Hill 90755", "city": "Signal Hill", "state": "CA", "website": "shipandshore.com", "name": "Anoosheh Oskouian", "title": "CEO, President", "phone": "(562) 997-0233", "employees": "", "year_founded": "2000", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-1-athens-services", "list_category": "Environmental Waste Management & Recycling", "rank": 1, "firm": "Athens Services", "address": "14048 E. Valley Blvd., City of Industry 91746", "city": "City of Industry", "state": "CA", "website": "AthensServices.com", "name": "Gary Clifford", "title": "Senior EVP", "phone": "(888) 336-6100", "employees": "2,100", "year_founded": "1957", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-2-waste-management", "list_category": "Environmental Waste Management & Recycling", "rank": 2, "firm": "Waste Management", "address": "9081 Tujunga Ave., Sun Valley 91352", "city": "Sun Valley", "state": "CA", "website": "wm.com", "name": "James C. Fish, Jr.", "title": "President & CEO", "phone": "(818) 767-5867", "employees": "1,500", "year_founded": "1969", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-3-ramboll-americas-engineering-solutions-i", "list_category": "Environmental Waste Management & Recycling", "rank": 3, "firm": "Ramboll Americas Engineering Solutions, Inc.", "address": "350 S. Grand Ave., Suite 2800, Los Angeles 90071", "city": "Los Angeles", "state": "CA", "website": "americas.ramboll.com", "name": "Eric Lu", "title": "Regional Director", "phone": "(213) 943-6300", "employees": "122", "year_founded": "1982", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-4-los-angeles-fiber", "list_category": "Environmental Waste Management & Recycling", "rank": 4, "firm": "Los Angeles Fiber", "address": "4920 Boyle Ave., Vernon 90058", "city": "Vernon", "state": "CA", "website": "lafiber.com", "name": "Ronald Greitzer", "title": "President", "phone": "(323) 589-5637", "employees": "116", "year_founded": "1983", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-5-universal-waste-systems-inc", "list_category": "Environmental Waste Management & Recycling", "rank": 5, "firm": "Universal Waste Systems Inc.", "address": "2460 E. 24th St., Los Angeles 90058", "city": "Los Angeles", "state": "CA", "website": "uwscompany.com", "name": "Mark Blackburn", "title": "President", "phone": "(800) 631-7016", "employees": "50", "year_founded": "1986", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-6-homeboy-recycling", "list_category": "Environmental Waste Management & Recycling", "rank": 6, "firm": "Homeboy Recycling", "address": "6433 Canning St., Commerce 90040", "city": "Commerce", "state": "CA", "website": "homeboyrecycling.com", "name": "Kabira Stokes", "title": "CEO", "phone": "(323) 222-3322", "employees": "30", "year_founded": "2011", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-7-envicom-corp", "list_category": "Environmental Waste Management & Recycling", "rank": 7, "firm": "Envicom Corp.", "address": "4165 E. Thousand Oaks Blvd., Suite 290, Thousand Oaks 91362", "city": "Thousand Oaks", "state": "CA", "website": "envicomcorporation.com", "name": "Joseph Johns", "title": "President", "phone": "(818) 879-4700", "employees": "30", "year_founded": "1972", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-8-ware-disposal", "list_category": "Environmental Waste Management & Recycling", "rank": 8, "firm": "Ware Disposal", "address": "4259 S. Central Ave., Los Angeles 90011", "city": "Los Angeles", "state": "CA", "website": "waredisposal.com", "name": "Judith Ware", "title": "CEO, President", "phone": "(213) 275-1146", "employees": "", "year_founded": "1968", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-9-california-waste-services", "list_category": "Environmental Waste Management & Recycling", "rank": 9, "firm": "California Waste Services", "address": "621 W. 152nd St., Gardena 90247", "city": "Gardena", "state": "CA", "website": "californiawasteservices.com", "name": "Eric Casper", "title": "President", "phone": "(800) 839-5550", "employees": "", "year_founded": "1999", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-10-nasa-services-inc", "list_category": "Environmental Waste Management & Recycling", "rank": 10, "firm": "Nasa Services Inc.", "address": "1100 S. Maple Ave., Montebello 90640", "city": "Montebello", "state": "CA", "website": "nasaservices.com", "name": "Arsen Sarkisian", "title": "CEO", "phone": "(888) 888-0388", "employees": "", "year_founded": "1986", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
+{"id": "labj-environmental-waste-management-recycling-11-mott-macdonald", "list_category": "Environmental Waste Management & Recycling", "rank": 11, "firm": "Mott MacDonald", "address": "1000 Wilshire Blvd., Suite 400, Los Angeles 90017", "city": "Los Angeles", "state": "CA", "website": "mottmacamericas.com", "name": "Ernest Figueroa", "title": "Unit General Manager", "phone": "(818) 506-8088", "employees": "", "year_founded": "1972", "hq": "", "source": "labj-book-of-lists", "created_at": "2026-08-12T00:00:00Z"}
diff --git a/scripts/import-labj-lists.py b/scripts/import-labj-lists.py
new file mode 100644
index 00000000..86637074
--- /dev/null
+++ b/scripts/import-labj-lists.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+"""Import LA Business Journal 'Book of Lists' scans into the CRM directory source.
+Each record = a company + its top executive, normalized to the CRM schema. Appends to
+data/crm-imported.jsonl (deduped by id). INTERNAL prospecting use only — factual contact
+data; the copyrighted list selection/arrangement is NOT republished on any public surface.
+Run: python3 scripts/import-labj-lists.py
+"""
+import json, os, re
+HERE = os.path.dirname(os.path.abspath(__file__))
+OUT = os.path.join(HERE, '..', 'data', 'crm-imported.jsonl')
+IMPORT_DATE = '2026-08-12T00:00:00Z' # scan/import date (stamped as created_at)
+
+def slug(s): return re.sub(r'[^a-z0-9]+', '-', s.lower()).strip('-')
+def city_of(addr):
+ # ".., <City> <ZIP>" -> City
+ m = re.search(r',\s*([A-Za-z .]+?)\s+\d{5}', addr)
+ return m.group(1).strip() if m else ''
+
+def rec(cat, rank, firm, addr, website, name, title, phone, employees='', year_founded='', branches=''):
+ return {
+ 'id': 'labj-' + slug(cat) + '-' + str(rank) + '-' + slug(firm)[:40],
+ 'list_category': cat, 'rank': rank, 'firm': firm, 'address': addr, 'city': city_of(addr),
+ 'state': 'CA', 'website': website, 'name': name, 'title': title, 'phone': phone,
+ 'employees': employees, 'year_founded': year_founded, 'hq': branches,
+ 'source': 'labj-book-of-lists', 'created_at': IMPORT_DATE,
+ }
+
+BANKS = [
+ (1,'City National Bank','555 S. Flower St., Los Angeles 90071','cnb.com','Howard Hammond','President & CEO','(800) 773-7100','6,700','1953','66 LA branches'),
+ (2,'East West Bank','135 N. Los Robles Ave., 7th Floor, Pasadena 91101','eastwestbank.com','Dominic Ng','CEO & Chair','(626) 768-6000','3,700','1972','98 LA branches'),
+ (3,'Banc of California','11611 San Vicente Blvd., Suite 500, Los Angeles 90049','bancofcal.com','Jared M. Wolff','President & CEO','(310) 887-8500','1,800','1982','82 LA branches'),
+ (4,'Cathay Bank','777 N. Broadway, Los Angeles 90012','cathaybank.com','Chang Liu','President & CEO','(213) 625-4700','1,300','1962','62 LA branches'),
+ (5,'Bank of Hope','3200 Wilshire Blvd., Suite 1400, Los Angeles 90010','bankofhope.com','Kevin S. Kim','President, CEO & Chair','(213) 639-1700','1,000','1986','76 LA branches'),
+ (6,'Citizens Business Bank','16830 Ventura Blvd., Suite 310, Encino 91436','cbbank.com','David Brager','CEO','(909) 980-4030','1,000','1974','67 LA branches'),
+ (7,'Farmers and Merchants Bank of Long Beach','302 Pine Ave., Long Beach 90802','fmb.com','Daniel Walker','Executive Chair','(562) 437-0011','650','1907','27 LA branches'),
+ (8,'Mizrahi Tefahot Bank, Ltd.','633 W. 5th St., Los Angeles 90071','umtbusa.com','Moshe Larry','President & CEO','(213) 362-2999','7,200','1923','1 LA branch'),
+ (9,'Hanmi Bank','3660 Wilshire Blvd., Suite A, Los Angeles 90010','hanmi.com','Bonita Lee','President & CEO','(213) 382-2200','500','1982','33 LA branches'),
+ (10,'Preferred Bank','601 S. Figueroa St., Los Angeles 90017','preferredbank.com','Li Yu','CEO & Chair','(213) 891-1188','250','1991','16 LA branches'),
+ (11,'SMBC Manubank','515 S. Figueroa St., Plaza Level, Los Angeles 90071','smbcmanubank.com','Takeshi Okamoto','CEO & Chair','(213) 489-6200','600','1962','6 LA branches'),
+ (12,'CTBC Bank Corp. (USA)','801 S. Figueroa St., Suite 2300, Los Angeles 90017','ctbcbankusa.com','Noor Menai','President & CEO','(310) 791-2828','600','1965','20 LA branches'),
+ (13,'American Business Bank','400 S. Hope St., Suite 300, Los Angeles 90071','americanbb.bank','Leon Blankstein','President & CEO','(213) 430-4000','200','1998','1 LA branch'),
+ (14,'Royal Business Bank','1055 Wilshire Blvd., Suite 1200, Los Angeles 90017','royalbusinessbankusa.com','David Morris','CEO & Director','(213) 627-9888','250','2008','24 LA branches'),
+ (15,'PCB Bank','3701 Wilshire Blvd., Suite 900, Los Angeles 90010','mypcbbank.com','Henry Kim','President & CEO','(213) 210-2000','100','2003','19 LA branches'),
+ (16,'Open Bank','1000 Wilshire Blvd., Suite 500, Los Angeles 90017','myopenbank.com','Min Kim','President & CEO','(213) 892-9999','120','2005','11 LA branches'),
+ (17,'Commonwealth Business Bank','3435 Wilshire Blvd., Suite 700, Los Angeles 90010','cbb-bank.com','James Hong','CEO','(323) 988-3000','100','2005','11 LA branches'),
+ (18,'Malaga Bank','2514 Via Tejon, Palos Verdes Estates 90274','malagabank.com','Randy C. Bowers','President & CEO','(310) 375-9000','100','1985','5 LA branches'),
+ (19,'BNY Mellon Trust Co.','333 S. Hope St., Suite 2525, Los Angeles 90071','bny.com','Robin Vince','President & CEO','(213) 630-6400','54,000','1981','1 LA branch'),
+ (20,'State Bank of India (California)','707 Wilshire Blvd., Suite 2900, Los Angeles 90017','sbical.com','Prakash Paranthaman','President & CEO','(213) 623-7250','200','1982','8 LA branches'),
+]
+
+ENVIRON = [
+ (1,'Tetra Tech Inc.','3475 E. Foothill Blvd., Pasadena 91107','tetratech.com','Dan Batrack','CEO, Chair','(626) 351-4664','610','1966',''),
+ (2,'SCS Engineers','3900 Kilroy Airport Way, Suite 300, Long Beach 90806','scsengineers.com','Michelle Leonard','Senior VP & Project Director','(800) 767-4727','224','1970',''),
+ (3,'Stantec','801 S. Figueroa St., Suite 300, Los Angeles 90017','stantec.com','Amy Chang','Principal, Architecture','(213) 955-9775','200','1954',''),
+ (4,'Rincon Consultants, Inc.','250 E. 1st St., Suite 1400, Los Angeles 90012','rinconconsultants.com','John Dreher','CEO, President','(213) 788-4842','180','1994',''),
+ (5,'AECOM Technical Services Inc.','300 S. Grand Ave., Los Angeles 90071','aecom.com','Michael Arvidson','AVP, Operations Manager','(213) 593-8000','177','1990',''),
+ (6,'NV5','3777 Long Beach Blvd., Annex Building, Long Beach 90807','nv5.com','Lisa Kay','President','(954) 495-2112','160','1997',''),
+ (7,'Arcadis','445 S. Figueroa St., Suite 3650, Los Angeles 90071','arcadis.com','Macaria Flores','City Executive, Los Angeles','(213) 486-9884','150','1888',''),
+ (8,'Psomas','865 S. Figueroa St., Suite 3200, Los Angeles 90017','psomas.com','Ryan Lynch','VP, LA Office Manager','(213) 223-1400','150','1946',''),
+ (9,'Ramboll Americas Engineering Solutions, Inc.','350 S. Grand Ave., Suite 2800, Los Angeles 90071','americas.ramboll.com','Eric Lu','Regional Director','(213) 943-6300','122','1982',''),
+ (10,'Kimley-Horn and Associates Inc.','660 S. Figueroa St., Suite 2050, Los Angeles 90017','kimley-horn.com','Jason Matson','Senior VP','(213) 261-4040','118','1967',''),
+ (11,'Mott MacDonald','1000 Wilshire Blvd., Suite 400, Los Angeles 90017','mottmacamericas.com','Ernest Figueroa','Unit General Manager','(818) 506-8088','93','1972',''),
+ (12,'SWCA Environmental Consultants','51 W. Dayton St., Pasadena 91105','swca.com','John Dietler','VP, Southern California','(626) 240-0587','90','2005',''),
+ (13,'Environmental Science Associates','633 W. 5th St., Suite 830, Los Angeles 90071','esassoc.com','Ruta Thomas','SVP, SoCal Regional Director','(213) 599-4300','90','1969',''),
+ (14,'EFI Global Inc.','317 S. Isis Avenue, Suite 207, Inglewood 90301','efiglobal.com','Shayan Simantob','VP','(310) 854-6300','80','1971',''),
+ (15,'ICF','555 W. 5th St., Suite 3100, Los Angeles 90013','icf.com','Tony DeJulio','VP','(213) 627-5376','70','1969',''),
+ (16,'Partner Engineering and Science Inc.','2154 Torrance Blvd., Torrance 90501','partneresi.com','Joseph Derhake','CEO','(800) 419-4923','68','2007',''),
+ (17,'Citadel EHS','1725 Victory Blvd., Glendale 91201','citadelehs.com','Loren Witkin','Chair','(818) 246-2707','65','1993',''),
+ (18,'Dudek','225 S. Lake Ave., Suite 225-M210, Pasadena 91101','dudek.com','Eric Wilson','COO','(626) 204-9800','64','1980',''),
+ (19,'Jacobs Engineering Group Inc.','555 Flower St., Suite 3200, Los Angeles 90071','jacobs.com','','','','60','',''),
+ (20,'Geosyntec Consultants Inc.','1031 S. Broadway Suite 300, Los Angeles 90015','geosyntec.com','','','','60','1983',''),
+ (21,'Sapphos Environmental Inc.','430 N. Halstead St., Pasadena 91107','sapphosenvironmental.com','','','','40','1993',''),
+ (22,'AEI Consultants Inc.','2207 W. 190th St., Torrance 90504','aeiconsultants.com','','CEO','(940) 977-9967','37','1992',''),
+ (23,'Woodard & Curran','515 S. Flower St., 18th floor, Los Angeles 90071','woodardcurran.com','Alyson Watson','CEO','(213) 223-9460','95','1979',''),
+ (24,'Partner Energy Inc.','680 Knox St., Suite 150, Los Angeles 90502','ptrenergy.com','Tony Liou','President','(888) 826-1216','','2009',''),
+ (25,'Envicom Corp.','4165 E. Thousand Oaks Blvd., Suite 290, Thousand Oaks 91362','envicomcorporation.com','Joseph Johns','President','(818) 879-4700','','1972',''),
+ (26,'Davenport Engineering Inc.','23705 Crenshaw Blvd., Suite 101, Torrance 90505','davenport-co.com','Neal Davenport','Principal Engineer','(310) 787-4600','','1997',''),
+ (27,'Ship & Shore Environmental Inc.','2474 N. Palm Dr., Signal Hill 90755','shipandshore.com','Anoosheh Oskouian','CEO, President','(562) 997-0233','','2000',''),
+]
+
+WASTE = [
+ (1,'Athens Services','14048 E. Valley Blvd., City of Industry 91746','AthensServices.com','Gary Clifford','Senior EVP','(888) 336-6100','2,100','1957',''),
+ (2,'Waste Management','9081 Tujunga Ave., Sun Valley 91352','wm.com','James C. Fish, Jr.','President & CEO','(818) 767-5867','1,500','1969',''),
+ (3,'Ramboll Americas Engineering Solutions, Inc.','350 S. Grand Ave., Suite 2800, Los Angeles 90071','americas.ramboll.com','Eric Lu','Regional Director','(213) 943-6300','122','1982',''),
+ (4,'Los Angeles Fiber','4920 Boyle Ave., Vernon 90058','lafiber.com','Ronald Greitzer','President','(323) 589-5637','116','1983',''),
+ (5,'Universal Waste Systems Inc.','2460 E. 24th St., Los Angeles 90058','uwscompany.com','Mark Blackburn','President','(800) 631-7016','50','1986',''),
+ (6,'Homeboy Recycling','6433 Canning St., Commerce 90040','homeboyrecycling.com','Kabira Stokes','CEO','(323) 222-3322','30','2011',''),
+ (7,'Envicom Corp.','4165 E. Thousand Oaks Blvd., Suite 290, Thousand Oaks 91362','envicomcorporation.com','Joseph Johns','President','(818) 879-4700','30','1972',''),
+ (8,'Ware Disposal','4259 S. Central Ave., Los Angeles 90011','waredisposal.com','Judith Ware','CEO, President','(213) 275-1146','','1968',''),
+ (9,'California Waste Services','621 W. 152nd St., Gardena 90247','californiawasteservices.com','Eric Casper','President','(800) 839-5550','','1999',''),
+ (10,'Nasa Services Inc.','1100 S. Maple Ave., Montebello 90640','nasaservices.com','Arsen Sarkisian','CEO','(888) 888-0388','','1986',''),
+ (11,'Mott MacDonald','1000 Wilshire Blvd., Suite 400, Los Angeles 90017','mottmacamericas.com','Ernest Figueroa','Unit General Manager','(818) 506-8088','','1972',''),
+]
+
+records = []
+for r in BANKS: records.append(rec('Banks', r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9]))
+for r in ENVIRON: records.append(rec('Environmental Engineering & Consulting', r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9]))
+for r in WASTE: records.append(rec('Environmental Waste Management & Recycling', r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9]))
+
+# dedupe by id against any existing file
+existing = {}
+if os.path.exists(OUT):
+ for line in open(OUT):
+ line = line.strip()
+ if line:
+ try: existing[json.loads(line)['id']] = json.loads(line)
+ except: pass
+for r in records: existing[r['id']] = r
+with open(OUT, 'w') as f:
+ for r in sorted(existing.values(), key=lambda x: (x['list_category'], x['rank'])):
+ f.write(json.dumps(r) + '\n')
+print(f"wrote {len(existing)} contacts to {os.path.relpath(OUT)} ({len(records)} from this run)")
+by = {}
+for r in existing.values(): by[r['list_category']] = by.get(r['list_category'], 0) + 1
+for k, v in by.items(): print(f" {v:>3} {k}")
diff --git a/server.js b/server.js
index 4a8abceb..4b9f5341 100644
--- a/server.js
+++ b/server.js
@@ -2327,6 +2327,25 @@ function crmNormalizeCommercial(rows) {
listings_count: x.listings ?? null, created_at: x.created_at || null, segments: [], listings: [],
}));
}
+// Manually-imported contacts (scanned directories / Book-of-Lists / business cards). One JSONL line
+// per contact under data/crm-imported.jsonl; each already carries the CRM schema. INTERNAL admin use
+// (prospecting) only — do NOT republish this source on any public RENTV surface.
+function crmLoadImported() {
+ try {
+ return fs.readFileSync(path.join(DATA, 'crm-imported.jsonl'), 'utf8')
+ .split('\n').filter(Boolean)
+ .map((l) => { try { return JSON.parse(l); } catch { return null; } }).filter(Boolean)
+ .map((x, i) => ({
+ id: x.id || 'dir-' + i, type: 'directory', persona: x.list_category || 'Directory Contact',
+ name: x.name || x.firm || '(contact)', firm: x.firm || '', email: x.email || '', phone: x.phone || '',
+ city: x.city || '', state: x.state || 'CA', title: x.title || '', website: x.website || '',
+ address: x.address || '', list_category: x.list_category || '', rank: x.rank ?? null,
+ employees: x.employees || '', revenue: x.revenue || '', year_founded: x.year_founded || '',
+ hq: x.hq || '', interest: [x.list_category, x.title].filter(Boolean).join(' '),
+ source: x.source || 'imported-directory', created_at: x.created_at || null, segments: [], listings: [],
+ }));
+ } catch { return []; }
+}
app.get('/api/crm', adminOnly, async (req, res) => {
try {
let subs = [];
@@ -2341,10 +2360,11 @@ app.get('/api/crm', adminOnly, async (req, res) => {
const ownedContacts = owned.contacts.map((c) => ({ ...c, type: c.origin })); // origin: newsletter|sublease|crm
const owners = crmNormalizeOwners(readJSON('la-commercial.json', { marquee: [] }));
const commercial = crmNormalizeCommercial(commercialRows);
- const all = [...ownedContacts, ...commercial, ...owners].map((c) => ({
+ const directory = crmLoadImported(); // manually-imported contacts (scanned lists, business cards, etc.)
+ const all = [...ownedContacts, ...commercial, ...owners, ...directory].map((c) => ({
...c,
// one precomputed lowercase search blob per contact (no per-keystroke JSON.stringify).
- _s: [c.name, c.firm, c.email, c.phone, c.city, c.title, c.interest, c.source, c.dre_license, c.ain].filter(Boolean).join(' ').toLowerCase(),
+ _s: [c.name, c.firm, c.email, c.phone, c.city, c.title, c.interest, c.source, c.dre_license, c.ain, c.list_category, c.address].filter(Boolean).join(' ').toLowerCase(),
}));
const TYPES = [
{ key: 'newsletter', label: 'Subscribers', emoji: '📩' },
@@ -2352,6 +2372,7 @@ app.get('/api/crm', adminOnly, async (req, res) => {
{ key: 'crm', label: 'PR / CRE Contacts', emoji: '🏢' },
{ key: 'commercial', label: 'Commercial Brokers', emoji: '🏬' },
{ key: 'owner', label: 'Property Owners', emoji: '🏛️' },
+ { key: 'directory', label: 'Directory / Lists', emoji: '📇' },
];
const counts = { all: all.length };
TYPES.forEach((t) => { counts[t.key] = all.filter((c) => c.type === t.key).length; });
← ae9fe73c Fix /api/crm commercial fetch path (CRCP serves /api/brokers
·
back to Rentv
·
CRM directory: extract Doc A (22p LABJ lists) — 307 contacts 53f2b4ec →