[object Object]

← back to Nationalrealestate

Add Santa Clara County CA parcel source (493k, San Jose) — 2nd West Coast county via config-only extension. Public layer is address+APN only (no value/use — most CA counties expose only this; LA's full roll is an outlier)

1c2a95fb81745da1700d0ac2dda5eabb450cc795 · 2026-07-30 20:48:54 -0700 · steve@designerwallcoverings.com

Files touched

Diff

commit 1c2a95fb81745da1700d0ac2dda5eabb450cc795
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date:   Thu Jul 30 20:48:54 2026 -0700

    Add Santa Clara County CA parcel source (493k, San Jose) — 2nd West Coast county via config-only extension. Public layer is address+APN only (no value/use — most CA counties expose only this; LA's full roll is an outlier)
---
 src/ingest/parcels/arcgis_sales.ts | 12 ++++++++++++
 src/ingest/parcels/engine.ts       |  1 +
 2 files changed, 13 insertions(+)

diff --git a/src/ingest/parcels/arcgis_sales.ts b/src/ingest/parcels/arcgis_sales.ts
index c5782c0..69d166a 100644
--- a/src/ingest/parcels/arcgis_sales.ts
+++ b/src/ingest/parcels/arcgis_sales.ts
@@ -214,6 +214,18 @@ const SOURCES: Record<string, Source> = {
         use: clean(a.UseDescription), year: num(a.YearBuilt1), beds: num(a.Bedrooms1), baths: num(a.Bathrooms1),
         sqft: num(a.SQFTmain1), totalValue: (land || imp) ? (land || 0) + (imp || 0) : null, raw: a } as Rec; }).filter(Boolean) as Rec[],
   },
+  'santa-clara': {
+    // Santa Clara County (San Jose) — public layer is address+APN only (no value/use),
+    // maxRecordCount=2000. Parcels key on county_fips so no region-resolve needed.
+    key: 'santa-clara', label: 'Santa Clara County CA (San Jose)', cursorKey: 'santa_clara', geometry: false, orderBy: 'FID', pageSize: 2000,
+    layer: 'https://services8.arcgis.com/fpjs8A5Vtkshblnd/arcgis/rest/services/Santa_Clara_County_Parcels/FeatureServer/0',
+    where: 'apn IS NOT NULL',
+    outFields: 'apn,situs_hous,situs_stre,situs_st_1,situs_st_2,situs_city,situs_zip_',
+    fieldMap: { source_id: 'apn', address: 'situs_hous+situs_stre+situs_st_1+situs_st_2', city: 'situs_city', zip: 'situs_zip_' },
+    toRecords: (fs) => fs.map(f => { const a = f.attributes; const apn = s(a.apn); if (!apn) return null;
+      const addr = [s(a.situs_hous), s(a.situs_stre), clean(a.situs_st_1), s(a.situs_st_2)].filter(Boolean).join(' ').trim() || null;
+      return { fips: '06085', apn, address: addr, city: clean(a.situs_city), zip: s(a.situs_zip_), raw: a } as Rec; }).filter(Boolean) as Rec[],
+  },
   thurston: {
     key: 'thurston', label: 'Thurston County WA (Olympia)', cursorKey: 'thurston', geometry: false, orderBy: 'OBJECTID', pageSize: 1000,
     layer: 'https://map.co.thurston.wa.us/arcgis/rest/services/Thurston/Thurston_Parcels/FeatureServer/0',
diff --git a/src/ingest/parcels/engine.ts b/src/ingest/parcels/engine.ts
index 00dc87f..310abcc 100644
--- a/src/ingest/parcels/engine.ts
+++ b/src/ingest/parcels/engine.ts
@@ -29,6 +29,7 @@ const ADAPTERS: Record<string, () => Promise<{ run: () => Promise<{ upserted: nu
   colorado: async () => { const m = await import('./arcgis_sales.ts'); return { run: m.ingestArcgisSales('colorado') }; },
   maricopa: async () => { const m = await import('./arcgis_sales.ts'); return { run: m.ingestArcgisSales('maricopa') }; },
   'la-county': async () => { const m = await import('./arcgis_sales.ts'); return { run: m.ingestArcgisSales('la-county') }; },
+  'santa-clara': async () => { const m = await import('./arcgis_sales.ts'); return { run: m.ingestArcgisSales('santa-clara') }; },
   thurston: async () => { const m = await import('./arcgis_sales.ts'); return { run: m.ingestArcgisSales('thurston') }; },
   'palm-beach': async () => { const m = await import('./arcgis_sales.ts'); return { run: m.ingestArcgisSales('palm-beach') }; },
   klamath: async () => { const m = await import('./arcgis_sales.ts'); return { run: m.ingestArcgisSales('klamath') }; },

← 92ca742 Generalize commercial ETL for multi-county (Cody prereq): pe  ·  back to Nationalrealestate  ·  Add classifyCommercialByDesc + from_parcel materializer: ext d55600a →