A reproducible portfolio piece · Memory Hole / Hesitation Media

The units nobody counted

Pittsburgh has argued about inclusionary zoning for six years without agreeing on how many affordable units it has produced. This is the record, rebuilt so anyone can check it.

Reporting by Brian Nuckols for Public Source. Story published September 10, 2025. Dataset, archive, and code released here under CC BY 4.0 and MIT.

Read the published story at Public Source ↗

Seventy people testified for four hours the Wednesday Pittsburgh City Council took up Mayor Ed Gainey's plan to require affordable apartments in new buildings across the city. Forty spoke for it, thirty against, and both sides told council the data was on their side. Six years into the experiment they were arguing about, the city had never published the one number that would settle it: how many affordable units inclusionary zoning has actually built.

That absence is the story. It is also what this piece repairs. Where the hearing produced a claim and its opposite, the record below produces a project-by-project ledger, each row traced to a document a reader can open and a hash a reader can check.

The dispute is not arithmetic. It is which units count.

What the mandate has delivered

The policy requires developments of 20 or more units to set aside 10% as affordable, held there for 35 years, for households at half the area median income, about $37,600 for an individual. It covers four neighborhoods now. The proposal would extend it to ninety.

Counting the affordable units it has produced depends entirely on where the counting stops. One completed market-rate project in Lawrenceville, Arsenal 201 Phase II, set aside 35 units. The Caroline, rising in Oakland, will add 16 more when it opens. Advocates point past both figures to a pipeline of a hundred or more. Opponents point at three projects quietly redrawn to 19 units, one below the line that would have triggered the rule at all.

0 50 100 Completed 35 Under construction 16 Proposed pipeline 100+ Downsized to dodge 0 (3 projects at 19 units)
Affordable units the mandate has produced, by stage. Only the first bar can be lived in today. Compiled in 02-data/iz_projects.csv from the Pro-Housing Pittsburgh study, Walnut Capital materials, and hearing testimony. Full charts in the data appendix.

Thirty-five built, a hundred promised, three downsized below the line. The distance between those numbers is the argument, and no official count spans it.

The evidence both sides brought

Pro-Housing Pittsburgh, the group leading the opposition, ran a difference-in-differences study of building permits and found construction in Lawrenceville falling 30% after the rule took effect while two comparison neighborhoods rose. The study says, in its own text, that the result is not statistically significant; the citywide sample is 103 completed projects since 2012. Its author, David Vatz, told council the program had produced "less than 40 units." The ledger puts the completed, mandate-attributable figure at 35, which is accurate, and which counts only what is finished.

Lawrenceville United and the Pittsburgh Community Reinvestment Group answered that a five-year-old policy shows only two years of completions, because large buildings take two to three years to open. Measured at the zoning application instead of the ribbon-cutting, they argued, the pipeline is real. Oakland's development director, Andrea Boykowycz, named five projects she said would deliver more than a hundred affordable units. Two are named in the record; three are not.

City Controller Rachael Heisler had already told council what the reporting confirms: with the data this thin, neither side has definitive proof. The opposition's own study concedes as much in its caveats. Each claim in the story, and the document behind it, is laid out in the interactive fact-check ledger.

How this was reported

Eight people sat for recorded interviews, from the YIMBY founder to the swing-vote councilmember to the Oakland development director, and their positions are mapped in the source index. Four studies and memos, the ones both sides cite, are archived here as captured files, each fixed by a SHA-256 fingerprint so a later reader can prove the document has not moved under the citation.

Data appendix →
Six charts: the units delivered, the 4-to-90 expansion, the dueling evidence, the hearing tally.
Source index →
Eight interviews, four hearing voices, the documentary bench, each with the claim it carries.
Fact-check ledger →
Interactive: every contested figure, filterable, traced to what its source actually says.
The spreadsheet →
The whole dataset in one workbook: projects, parameters, claims, sources.

Check it yourself

Nothing here asks for trust. Clone the repository and run one command; it re-hashes every archived source, confirms every claim resolves to one of them, and recomputes the affordable-units tally from the ledger. No network, no credentials.

python 03-harness/check.py

If it prints TRUSTED, the numbers in this piece are the numbers in the documents. The reporter is not part of the guarantee.

A city that cannot say how much housing its housing policy built will vote on expanding it anyway, and the vote will turn on a councilmember's read of a financing gap no one has measured either.

Portfolio piece for the Newsworks Lab enterprise-journalist application and a reusable template for building a project-level accountability dataset when the agency will not. Repository: pittsburgh-inclusionary-zoning-record. Reporter: Brian Nuckols · Public Source. See PORTABILITY.md to re-run the method on another policy.