muni-intel

NYC government procurement intelligence — stitching data across public sources to build a unified vendor/entity view.

Project Roadmap

#PhaseStatusDetails
1Postgres + schemaDoneNeon DB, Drizzle ORM, pg_trgm indexes
2Checkbook NYC ingestionDoneXML API, contracts + spending, rate-limited pagination
3MWBE Directory ingestionDoneSocrata API, certified firm list with ethnicity/industry
4Entity resolution v1DoneNormalization-key exact + trigram fuzzy matching
5Full multi-agency Checkbook pullDone1.108M contracts across 69 agencies (API baseline 5.67M was misleading — real dataset ~1.1M)
6Web explorer frontendDoneNext.js on Vercel, 5 explorer pages
7City Record procurement noticesDoneSocrata API, solicitations + awards + intents
8Resolution candidate review UIDoneWeb tab to approve/reject fuzzy-match candidates; approvals merge entities live
9Idempotent upserts + 3x/day cronDoneNatural-key unique indexes, upsert on conflict; cron-refresh runs at 06/14/22 UTC
10NYC Campaign Finance ingestionDoneNYCCFB Follow-the-Money CSV — donors to NYC candidates, joins the entity graph
11Persistent review decisionsDoneentity_review_decisions table — approve/reject/revert survive re-resolve; replayed at end of each run
12Four-way entity resolutionDoneCheckbook + MWBE + City Record + Campaign Finance (org-only donors) merged by normalization key; trigram fallback for Checkbook & City Record
13Nightly Checkbook + resolve in cronDone02:00 UTC full Checkbook pull; 06/14/22 UTC light refresh (MWBE + City Record + CFB) + resolve replay
14Resolution — Checkbook↔City Record fuzzy + auto-approveDoneStage 2b extends trigram across the two NYC sources; unambiguous pairs ≥0.96 auto-approve and persist as decisions
15PASSPort ingestionSkippedNYC PASSPort has no public API; ASP.NET WebForms + auth required for the useful data. Skipped for now — duplicates City Record on the unauthenticated side, and VENDEX is a better direct target.
16LLM-assisted disambiguation (Stage 4)DoneClaude Haiku 4.5 classifies uncertain fuzzy pairs → match/no_match/uncertain. 1,778 classified at $1.88 total; ~76% of pairs auto-resolved.
17Additional data sourcesNot StartedVENDEX responsibility filings, lobbyist disclosures, subcontractor data

Data Sources

Checkbook NYCDone

NYC Comptroller financial transparency — registered expense contracts and spending transactions via XML API.

Contracts
2,031,955
Spending records
15,406
Agencies
69
Distinct vendors
5,523
Explore data →
MWBE DirectoryDone

NYC SBS certified M/WBE, EBE, and LBE firms — ground-truth firm list for entity resolution.

Certified firms
11,914
Explore data →
City Record OnlineDone

Official NYC procurement notices — solicitations, awards, and intents published in the City Record.

Total notices
103,898
Awards
52,166
Solicitations
44,968
Distinct vendors
20,359
Agencies
104
Explore data →
Campaign FinanceDone

NYCCFB itemized contributions — donors to NYC candidates and committees, from the Follow-the-Money bulk CSV archive.

Contributions
117,332
Distinct donors
82,576
Recipients
255
Latest cycle
117,332
Explore data →
PASSPortNot Started

NYC Procurement and Sourcing Solutions Portal — solicitation details, vendor registrations, award history. Requires scraper.

Entity Resolution

Four-way resolution across Checkbook, MWBE, City Record, and Campaign Finance (org donors). Stage 1: normalization-key exact match. Stage 2: trigram fuzzy. Stage 3: replays persisted review decisions.

CFB individual donors (c_code=IND) are excluded from the entity graph — only org donors (LLC, Corp, PAC, Union, etc.) participate in matching.

Resolved entities
26,817
Cross-source merges
5,427
MWBE-certified entities
11,914
3+ source entities
322
4-source entities
1
Donor ↔ contractor overlap
4
Source links
2,095,512
LLM decisions
1,723
Auto decisions
719
Human decisions
0
Uncertain candidates
774
Browse entities →Review uncertain candidates →

Latest Ingestion Runs

SourceStatusFetchedInsertedStartedCompleted
checkbook contractscompleted640,000640,00018h ago16h ago
checkbook spendingcompleted15,38615,38661d ago61d ago
mwbe directorycompleted11,55611,5566h ago6h ago
city recordcompleted103,892103,8926h ago6h ago
campaign financecompleted259,967259,9676h ago6h ago

Top Agencies by Contract Value

AgencyContractsTotal Value
Department of Education1,688,719$56.1B
Department of Small Business Services236$33.0B
DCASDIVISION OF MUNICIPAL SUPPLY SERVICE141,195$23.8B
Department of Design and Construction1,050$11.3B
Department of Information Technology and Telecommunications3,152$9.3B
Housing Preservation and Development3,310$5.1B
Department of Parks and Recreation24,604$2.3B
Department of Citywide Administrative Services31,491$1.3B
Department of Environmental Protection21,762$1.2B
Health and Hospitals Corporation184$606.1M