← back to Rentv
pr-intelligence: Arizona Phase-2 seed (67 real AZ CRE orgs, gate-guarded) + pr:seed:az script
2ed7c872e0ccfff9ace13d3175ec6e693449dcba · 2026-07-30 21:42:57 -0700 · Steve Abrams
Files touched
M data/social-drafts.jsonM package.jsonA src/pr/seed/az-seed.js
Diff
commit 2ed7c872e0ccfff9ace13d3175ec6e693449dcba
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Jul 30 21:42:57 2026 -0700
pr-intelligence: Arizona Phase-2 seed (67 real AZ CRE orgs, gate-guarded) + pr:seed:az script
---
data/social-drafts.json | 11 +++-
package.json | 2 +-
src/pr/seed/az-seed.js | 131 ++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 142 insertions(+), 2 deletions(-)
diff --git a/data/social-drafts.json b/data/social-drafts.json
index 0637a088..7c4624b7 100644
--- a/data/social-drafts.json
+++ b/data/social-drafts.json
@@ -1 +1,10 @@
-[]
\ No newline at end of file
+[
+ {
+ "id": "sdms8ghyc8",
+ "platform": "LinkedIn",
+ "topic": "RENTV — Conference sponsorship · 10 Gauge Sheet Metal Inc",
+ "text": "Hi 10 Gauge Sheet Metal Inc team,\n\nI’m Steve Bloom with RENTV — now in our 25th year covering the deals that move Western U.S. commercial real estate, from Texas and Arizona to California and the Pacific NW. We’re home to CRE Talk, the State of the Market conferences, and The REview.\n\nGiven the projects breaking ground across the West, I wanted to reach out directly.\n\nI’d love to sponsor our next State of the Market conference — Inland Empire, May 2027 at the Embassy Suites Ontario, at $2,500/event (panels on office, industrial, multifamily, retail and finance).\n\nWorth a quick call? I’m at 310-213-6409 or sbloom@rentv.com.\n\nBest,\nSteve Bloom\nRENTV.com",
+ "status": "draft",
+ "created_at": "2026-07-31T04:42:36.440Z"
+ }
+]
\ No newline at end of file
diff --git a/package.json b/package.json
index ee9273bd..91ee2e69 100644
--- a/package.json
+++ b/package.json
@@ -1 +1 @@
-{"name":"rentv","version":"0.10.0","private":true,"main":"server.js","scripts":{"start":"node server.js","pull":"node scripts/pull-news.mjs","pr:migrate":"node -e \"require('./src/pr/db').runMigrations({log:console.log}).then(r=>console.log(JSON.stringify(r))).catch(e=>{console.error(e.message);process.exit(1)})\"","pr:worker":"node src/pr/worker.js","pr:seed:ca":"node src/pr/seed/ca-seed.js","test":"node --test test/pr/*.test.js"},"dependencies":{"express":"^4.21.2","pg":"^8.22.0"}}
\ No newline at end of file
+{"name":"rentv","version":"0.10.0","private":true,"main":"server.js","scripts":{"start":"node server.js","pull":"node scripts/pull-news.mjs","pr:migrate":"node -e \"require('./src/pr/db').runMigrations({log:console.log}).then(r=>console.log(JSON.stringify(r))).catch(e=>{console.error(e.message);process.exit(1)})\"","pr:worker":"node src/pr/worker.js","pr:seed:ca":"node src/pr/seed/ca-seed.js","test":"node --test test/pr/*.test.js","pr:seed:az":"node src/pr/seed/az-seed.js"},"dependencies":{"express":"^4.21.2","pg":"^8.22.0"}}
\ No newline at end of file
diff --git a/src/pr/seed/az-seed.js b/src/pr/seed/az-seed.js
new file mode 100644
index 00000000..4f562e49
--- /dev/null
+++ b/src/pr/seed/az-seed.js
@@ -0,0 +1,131 @@
+'use strict';
+// Arizona Phase-2 seed — HONEST BY CONSTRUCTION (same pattern as ca-seed.js).
+// Real, publicly-known Arizona CRE organizations (HQ or major AZ office) entered as
+// lifecycle_status='discovered' with a low-confidence seed source; a verify-organization
+// job then fetches the LIVE website to confirm each and extract public contacts. Nothing
+// is treated as verified until the pipeline confirms it against a primary source.
+//
+// Runs only after the California quality gate (Phase-2 gate is enforced at the job layer).
+// Usage: node src/pr/seed/az-seed.js
+const db = require('../db');
+const organizations = require('../services/organizations');
+const jobs = require('../jobs');
+const settings = require('../services/settings');
+
+// [name, domain, type, metro, county] — metro keys from lib/geo.js AZ_METROS
+const C = [
+ // ── Brokerage & advisory ──
+ ['CBRE Phoenix', 'cbre.com', 'brokerage', 'phoenix', 'Maricopa'],
+ ['Cushman & Wakefield Phoenix', 'cushmanwakefield.com', 'brokerage', 'phoenix', 'Maricopa'],
+ ['Colliers Arizona', 'colliers.com', 'brokerage', 'phoenix', 'Maricopa'],
+ ['JLL Phoenix', 'jll.com', 'brokerage', 'phoenix', 'Maricopa'],
+ ['Kidder Mathews Phoenix', 'kidder.com', 'brokerage', 'phoenix', 'Maricopa'],
+ ['NAI Horizon', 'naihorizon.com', 'brokerage', 'phoenix', 'Maricopa'],
+ ['ORION Investment Real Estate', 'orionprop.com', 'brokerage', 'scottsdale', 'Maricopa'],
+ ['SVN Desert Commercial Advisors', 'svndesert.com', 'brokerage', 'tempe', 'Maricopa'],
+ ['Commercial Properties Inc.', 'cpiaz.com', 'brokerage', 'scottsdale', 'Maricopa'],
+ ['Velocity Retail Group', 'velocityretail.com', 'brokerage', 'phoenix', 'Maricopa'],
+ ['Menlo Group Commercial Real Estate', 'menlocre.com', 'brokerage', 'tempe', 'Maricopa'],
+ ['Cutler Commercial', 'cutlercommercial.com', 'brokerage', 'scottsdale', 'Maricopa'],
+ ['Marcus & Millichap Phoenix', 'marcusmillichap.com', 'brokerage', 'phoenix', 'Maricopa'],
+ ['Lee & Associates Arizona', 'lee-associates.com', 'brokerage', 'phoenix', 'Maricopa'],
+ ['PICOR Commercial Real Estate (Tucson)', 'picor.com', 'brokerage', 'tucson', 'Pima'],
+ ['Tucson Realty & Trust Co.', 'tucsonrealty.com', 'brokerage', 'tucson', 'Pima'],
+ // ── Owners / operators / developers / REITs ──
+ ['Vestar', 'vestar.com', 'developer_owner', 'phoenix', 'Maricopa'],
+ ['DMB Associates', 'dmbinc.com', 'developer_owner', 'scottsdale', 'Maricopa'],
+ ['Sunbelt Holdings', 'sunbeltholdings.com', 'developer_owner', 'scottsdale', 'Maricopa'],
+ ['Holualoa Companies', 'holualoa.com', 'developer_owner', 'tucson', 'Pima'],
+ ['ViaWest Group', 'viawestgroup.com', 'developer_owner', 'phoenix', 'Maricopa'],
+ ['George Oliver', 'georgeoliver.com', 'developer_owner', 'tempe', 'Maricopa'],
+ ['Creation', 'creationnow.com', 'developer_owner', 'phoenix', 'Maricopa'],
+ ['Wentworth Property Company', 'wentworthproperty.com', 'developer_owner', 'phoenix', 'Maricopa'],
+ ['Common Bond Development Group', 'commonbonddev.com', 'developer_owner', 'phoenix', 'Maricopa'],
+ ['STORE Capital', 'storecapital.com', 'reit', 'scottsdale', 'Maricopa'],
+ ['Trammell Crow Company Phoenix', 'trammellcrow.com', 'developer_owner', 'phoenix', 'Maricopa'],
+ ['Ryan Companies US Southwest', 'ryancompanies.com', 'developer_owner', 'tempe', 'Maricopa'],
+ // ── Title / escrow / 1031 ──
+ ['Thomas Title & Escrow', 'thomastitle.com', 'title_insurer', 'scottsdale', 'Maricopa'],
+ ['Pioneer Title Agency', 'ptaaz.com', 'title_agency', 'phoenix', 'Maricopa'],
+ ['Magnus Title Agency', 'magnustitle.com', 'title_agency', 'gilbert', 'Maricopa'],
+ ['Capital Title of Arizona', 'capitaltitleaz.com', 'title_agency', 'scottsdale', 'Maricopa'],
+ ['Grand Canyon Title Agency', 'gctitle.com', 'title_agency', 'phoenix', 'Maricopa'],
+ ['Driggs Title Agency', 'driggstitle.com', 'title_agency', 'mesa', 'Maricopa'],
+ // ── Law / accounting / valuation ──
+ ['Snell & Wilmer', 'swlaw.com', 'law_firm', 'phoenix', 'Maricopa'],
+ ['Gallagher & Kennedy', 'gknet.com', 'law_firm', 'phoenix', 'Maricopa'],
+ ['Fennemore', 'fennemorelaw.com', 'law_firm', 'phoenix', 'Maricopa'],
+ ['Quarles & Brady Phoenix', 'quarles.com', 'law_firm', 'phoenix', 'Maricopa'],
+ ['Ryley Carlock & Applewhite', 'rcalaw.com', 'law_firm', 'phoenix', 'Maricopa'],
+ ['Henry+Horne', 'hhcpa.com', 'accounting_consulting', 'tempe', 'Maricopa'],
+ // ── Architecture / engineering / construction ──
+ ['Sundt Construction', 'sundt.com', 'general_contractor', 'tempe', 'Maricopa'],
+ ['Kitchell', 'kitchell.com', 'general_contractor', 'phoenix', 'Maricopa'],
+ ['Willmeng Construction', 'willmeng.com', 'general_contractor', 'tempe', 'Maricopa'],
+ ['McCarthy Building Companies Southwest', 'mccarthy.com', 'general_contractor', 'phoenix', 'Maricopa'],
+ ['Layton Construction Arizona', 'laytonconstruction.com', 'general_contractor', 'phoenix', 'Maricopa'],
+ ['DAVIS', 'thinkdavis.com', 'architecture_firm', 'phoenix', 'Maricopa'],
+ ['Butler Design Group', 'butlerdesigngroup.com', 'architecture_firm', 'phoenix', 'Maricopa'],
+ ['Dibble', 'dibblecorp.com', 'engineering_firm', 'phoenix', 'Maricopa'],
+ ['Kimley-Horn Phoenix', 'kimley-horn.com', 'engineering_firm', 'phoenix', 'Maricopa'],
+ // ── Economic development / municipal ──
+ ['Greater Phoenix Economic Council', 'gpec.org', 'economic_development', 'phoenix', 'Maricopa'],
+ ['Arizona Commerce Authority', 'azcommerce.com', 'economic_development', 'phoenix', 'Maricopa'],
+ ['Sun Corridor Inc.', 'suncorridorinc.com', 'economic_development', 'tucson', 'Pima'],
+ ['Pinal Alliance for Economic Growth', 'pinalalliance.org', 'economic_development', 'pinal', 'Pinal'],
+ ['Choose Flagstaff / ECoNA', 'econaz.org', 'economic_development', 'flagstaff', 'Coconino'],
+ // ── Associations ──
+ ['NAIOP Arizona', 'naiopaz.org', 'association', 'phoenix', 'Maricopa'],
+ ['ULI Arizona', 'arizona.uli.org', 'association', 'phoenix', 'Maricopa'],
+ ['AZCREW', 'azcrew.org', 'association', 'phoenix', 'Maricopa'],
+ ['BOMA Greater Phoenix', 'bomaphoenix.org', 'association', 'phoenix', 'Maricopa'],
+ ['Arizona Multihousing Association', 'azmultihousing.org', 'association', 'phoenix', 'Maricopa'],
+ ['Arizona Association for Economic Development', 'aaed.com', 'association', 'phoenix', 'Maricopa'],
+ // ── Proptech / PR / marketing / trade pubs ──
+ ['OfferMarket', 'offermarket.us', 'proptech', 'phoenix', 'Maricopa'],
+ ['LAVIDGE', 'lavidge.com', 'marketing_agency', 'phoenix', 'Maricopa'],
+ ['HMA Public Relations', 'hmapr.com', 'pr_agency', 'phoenix', 'Maricopa'],
+ ['Serendipit Consulting', 'serendipitconsulting.com', 'pr_agency', 'phoenix', 'Maricopa'],
+ ['Owens Harkey Advertising', 'owensharkey.com', 'marketing_agency', 'scottsdale', 'Maricopa'],
+ ['AZ Big Media (AZRE)', 'azbigmedia.com', 'trade_publication', 'phoenix', 'Maricopa'],
+ ['Phoenix Business Journal', 'bizjournals.com', 'trade_publication', 'phoenix', 'Maricopa'],
+];
+
+async function main() {
+ const h = await db.health();
+ if (!h.ok) { console.error('DB unavailable: ' + h.reason); process.exit(1); }
+ await db.runMigrations({});
+ if (!(await settings.arizonaUnlocked())) {
+ console.error('Arizona is LOCKED — pass the California quality gate (or override) before seeding AZ.');
+ process.exit(2);
+ }
+ let created = 0, matched = 0, verifyJobs = 0;
+ for (const [name, domain, type, metro, county] of C) {
+ const r = await organizations.create({
+ display_name: name, website_url: 'https://www.' + domain, organization_type: type,
+ state_presence: ['AZ'], metros: [metro], counties: [county],
+ lifecycle_status: 'discovered', tags: ['phase-2-az'],
+ }, {
+ evidence: {
+ source: {
+ source_type: 'manual', source_name: 'AZ Phase-2 curated seed list', url: 'https://www.' + domain,
+ short_excerpt: 'Curated candidate — real Arizona CRE organization pending live-website verification by the pipeline.',
+ is_primary_source: false, license_or_usage_note: 'Candidate list only; re-verify against primary sources before outreach.', adapter: 'seed',
+ },
+ fields: { organization: 45 },
+ },
+ actor: 'system:az-seed',
+ });
+ if (r.created) created++; else matched++;
+ const j = await jobs.enqueue('verify-organization', { organization_id: r.org.id }, { priority: 5, actor: 'system:az-seed' });
+ if (!j.deduped) verifyJobs++;
+ }
+ await jobs.enqueue('detect-duplicates', {}, { priority: 8, actor: 'system:az-seed' });
+ await jobs.enqueue('calculate-scores', {}, { priority: 9, actor: 'system:az-seed' });
+ await jobs.enqueue('generate-coverage-report', { state: 'AZ' }, { priority: 9, actor: 'system:az-seed' });
+ console.log(`[az-seed] curated candidates: ${C.length} (created ${created}, matched ${matched}) · verify jobs ${verifyJobs}`);
+ console.log('[az-seed] start the worker + run the headless extractor for AZ.');
+ process.exit(0);
+}
+
+main().catch((e) => { console.error(e); process.exit(1); });
← 13b6880c console: /api/summit/licensed (realestate DB) + facet wiring
·
back to Rentv
·
pr-intelligence: headless tool state-parametrized (PR_STATE, 9166e347 →