What we learned building this.
Every one of these carries a number we measured ourselves against a public dataset, with the source named so you can re-run it. Nothing is gated, nothing is a PDF, and nothing here is a claim we could not defend in front of the city that published the data.
Why write these
Permit-based selling is full of received wisdom that falls apart the moment you count. The pool everyone chases is the smallest one. Half the public datasets are dead. These pieces exist because we had to establish each of those before the product could work.
Who they are for
People who sell into property work and are deciding whether public record is worth building a process around, and people evaluating a data source and wanting to know how it can be wrong.
How to check them
Each figure names its dataset and portal. The queries are aggregate Socrata calls, so you can reproduce any number here from a browser without an account or a key.
Why a roofing permit is a better solar lead than a solar permit
In San Francisco, roofing permits outnumber solar permits roughly six to one, and unlike a solar permit, a roofing permit means no installer has been chosen yet. The precursor pool is the larger, uncontested half of the market.
The obvious record is the contested one. The lead worth having is the record that comes immediately before it.
How to read a land-use agenda, and why it beats permit data
A rezoning case scheduled for a public hearing is intent that exists weeks before the decision and months before any permit. Most cities publish these agendas through an open API. Here is what is in them and which cities are worth reading.
A scheduled hearing is the earliest addressable signal in public record, but only in cities that legislate land use parcel by parcel.
Two of seven city permit datasets we tested had quietly died
Open-data portals abandon datasets without removing them. Two of seven candidate city permit feeds were still serving hundreds of thousands of rows years after they stopped updating. Here is how to check before you build on one.
A permit dataset that has stopped updating is worse than no dataset, because it looks like it is working.
Or just run the numbers yourself.
The ZIP checker runs the same pipeline these pieces describe, against live city data, with no account.