← back to La Socrata Ingester
yoloforever c4 FIX (Cody): deals feed ranks by lead_score, dedups address, flags outliers
60f88517a801909d116970613ba571ad2aada2ef · 2026-08-12 06:59:11 -0700 · steve
Cody c4 (verified): raw-max-valuation surfaced LAX 3x + a $375M 'addition'. Now:
(1) DISTINCT ON (address,zip) dedups same-project permits; (2) ORDER BY lead_score
then valuation = newsworthiness not brute dollars (ground-up dev now leads, airport
gone); (3) valuation_outlier flag (>$100M or >150x parcel assessed) tags data
artifacts for editorial verify. Now publishable as RE-news leads.
Files touched
Diff
commit 60f88517a801909d116970613ba571ad2aada2ef
Author: steve <steve@designerwallcoverings.com>
Date: Wed Aug 12 06:59:11 2026 -0700
yoloforever c4 FIX (Cody): deals feed ranks by lead_score, dedups address, flags outliers
Cody c4 (verified): raw-max-valuation surfaced LAX 3x + a $375M 'addition'. Now:
(1) DISTINCT ON (address,zip) dedups same-project permits; (2) ORDER BY lead_score
then valuation = newsworthiness not brute dollars (ground-up dev now leads, airport
gone); (3) valuation_outlier flag (>$100M or >150x parcel assessed) tags data
artifacts for editorial verify. Now publishable as RE-news leads.
---
scripts/deals-feed.js | 42 +++++++++++++++++++++++++++---------------
1 file changed, 27 insertions(+), 15 deletions(-)
diff --git a/scripts/deals-feed.js b/scripts/deals-feed.js
index b60ed12..211145a 100644
--- a/scripts/deals-feed.js
+++ b/scripts/deals-feed.js
@@ -37,29 +37,41 @@ async function main() {
const names = await cdNames();
fs.mkdirSync(OUT, { recursive: true });
+ // Dedup to one permit per address+zip (highest valuation), then rank by lead_score
+ // (encodes recency/type/status newsworthiness), valuation as tiebreak (Cody c4:
+ // raw-max-valuation surfaces the same airport 3x + institutional infra, not deals).
const rows = (await q(`
- SELECT p.permit_nbr, to_char(p.issue_date,'YYYY-MM-DD') AS issued, p.primary_address AS address, p.zip_code AS zip,
- p.council_district AS cd, p.permit_type AS work_type, p.permit_sub_type AS building_type,
- p.use_desc, p.valuation AS project_value, p.work_desc AS scope, p.lat, p.lon,
- a.total_value AS assessed_value, a.year_built, a.sqft_main AS sqft,
- permit_lead_score(p.issue_date,p.valuation,p.permit_type,p.permit_sub_type,p.status_desc) AS lead_score
- FROM la_building_permits_raw p
- LEFT JOIN la_assessor_parcels_raw a ON a.ain=p.apn AND a.roll_year='2025'
- WHERE p.dataset_id='pi9x-tg5x' AND p.status_desc='Issued'
- AND p.issue_date >= now() - ($1||' days')::interval
- AND p.valuation >= $2 AND p.primary_address IS NOT NULL
- ORDER BY p.valuation DESC NULLS LAST
- LIMIT 60`, [DAYS, MIN_VALUE])).rows;
+ WITH ranked AS (
+ SELECT DISTINCT ON (p.primary_address, p.zip_code)
+ p.permit_nbr, to_char(p.issue_date,'YYYY-MM-DD') AS issued, p.primary_address AS address, p.zip_code AS zip,
+ p.council_district AS cd, p.permit_type AS work_type, p.permit_sub_type AS building_type,
+ p.use_desc, p.valuation AS project_value, p.work_desc AS scope, p.lat, p.lon,
+ a.total_value AS assessed_value, a.year_built, a.sqft_main AS sqft,
+ permit_lead_score(p.issue_date,p.valuation,p.permit_type,p.permit_sub_type,p.status_desc) AS lead_score
+ FROM la_building_permits_raw p
+ LEFT JOIN la_assessor_parcels_raw a ON a.ain=p.apn AND a.roll_year='2025'
+ WHERE p.dataset_id='pi9x-tg5x' AND p.status_desc='Issued'
+ AND p.issue_date >= now() - ($1||' days')::interval
+ AND p.valuation >= $2 AND p.primary_address IS NOT NULL
+ ORDER BY p.primary_address, p.zip_code, p.valuation DESC
+ )
+ SELECT * FROM ranked ORDER BY lead_score DESC, project_value DESC LIMIT 60
+ `, [DAYS, MIN_VALUE])).rows;
const deals = rows.map(r => {
const member = names[r.cd];
const cdTag = r.cd ? `CD ${r.cd}${member ? ' · ' + member : ''}` : '';
- const headline = `${millions(r.project_value)} ${useKind(r.work_type)} — ${r.address}${r.zip ? ', ' + r.zip : ''}${cdTag ? ' (' + cdTag + ')' : ''}`;
+ const pv = Number(r.project_value);
+ const assessed = r.assessed_value == null ? null : Number(r.assessed_value);
+ // Flag suspicious valuations for editorial verification (Cody c4: LADBS valuation is
+ // self-reported): institutional-scale (>$100M) or wildly > parcel assessed value.
+ const outlier = pv > 100e6 || (assessed && assessed > 0 && pv / assessed > 150);
+ const headline = `${millions(pv)} ${useKind(r.work_type)} — ${r.address}${r.zip ? ', ' + r.zip : ''}${cdTag ? ' (' + cdTag + ')' : ''}${outlier ? ' ⚠verify' : ''}`;
return {
headline, permit_nbr: r.permit_nbr, issued: r.issued, address: r.address, zip: r.zip,
council_district: r.cd, council_member: member || null, kind: useKind(r.work_type),
- work_type: r.work_type, building_type: r.building_type, project_value: Number(r.project_value),
- assessed_value: r.assessed_value == null ? null : Number(r.assessed_value),
+ work_type: r.work_type, building_type: r.building_type, project_value: pv,
+ assessed_value: assessed, valuation_outlier: outlier,
year_built: (r.year_built && String(r.year_built) !== '0') ? r.year_built : null,
sqft: r.sqft == null ? null : Number(r.sqft),
lead_score: r.lead_score, scope: r.scope,
← 909b171 yoloforever c4: newsworthy permit deals feed (scripts/deals-
·
back to La Socrata Ingester
·
yoloforever c5: permit_lead_score_v2 — parcel-signal teardow 48faabe →