Methodology← Back to the map

How this was built

What counts as a signal, how records were tied to a tax lot, what the scores mean and what was left out. Every number on the map is produced by scripts/build_data.py from files pulled by scripts/fetch_raw.py; scripts/verify.py re-queries the sources and checks the totals.

The question

New York City publishes no dataset of blighted or neglected property. What it publishes is about a dozen datasets, each from a different agency, that record one symptom of neglect at one address. This map ties them to the tax lot and asks a narrow question of each lot: how many separate agencies have a record of neglect here?

The unit is the tax lot, identified by its borough-block-lot number (BBL), with parks handled separately below. The window is 24 months, through , the last date in the 311 feed on the day this was built (). The one exception is the sanitation department's lot-cleaning history, which runs 2010 to 2021 and is shown as history, never counted in the score.

Which lots are on the map

The six agencies and what counts

AgencyDatasetWhat counts as a record
Neighbors, through 311311 Service Requests erm2-nwe9Any complaint of type Dirty Condition, Illegal Dumping, Lot Condition, Graffiti, Derelict Vehicles or Rodent whose 311 record carries a BBL. such complaints fell in the window; had no BBL (a street corner, a park, a highway) and could not be tied to a lot. Abandoned Vehicle (a plated car, usually a parking dispute), Encampment and Homeless Person Assistance are excluded: they are about people or parking, not the condition of a place.
Sanitation inspectorsOATH Hearings Division Case Status jz4z-kudiSummonses issued by the Department of Sanitation (issuing agency Sanitation Others, DOS Enforcement Agents or Sanitation Police) whose first charge is a dirty-area charge: dirty sidewalk, dirty area, loose rubbish, failure to clean 18 inches into the street, the vacant-lot variants of those, illegal dumping or improper disposal. Recycling, receptacle, set-out-time and snow charges are excluded. summonses in the window; lacked a block and lot. Block and lot are as written on the ticket.
Health inspectorsRodent Inspection p937-wjvjInitial inspections with a result of failed for rat activity. Compliance re-inspections are excluded so one problem is not counted several times. in the window.
Housing Preservation and DevelopmentAEP hcir-3275, Underlying Conditions xpbf-ithr, Order to Repair/Vacate tb8q-a3arBuildings currently active in the Alternative Enforcement Program () or the Underlying Conditions Program (), and whole-building vacate orders with no rescind date (). Partial vacates are excluded.
Department of BuildingsStalled Construction Sites i296-73x5, Facades Compliance Filings xubg-57siSites on the most recent daily stalled-sites run ( sites on ; could not be tied to a lot because a stalled site often has no building footprint and its address did not match the property file). Facade filings: a building counts if its latest cycle 9 filing is rated unsafe ( buildings). Buildings that never filed are not counted.
Department of FinanceTax Lien Sale Lists 9rz4-mjekProperties on the final sale list of the 2025 lien sale (). The 2026 cycle was not on Open Data when this was built. Water-only liens are included and labeled.

The score

A lot's score is the number of distinct agencies, out of six, with at least one record at that lot in the window. Complaint volume is not summed. 311 has super-callers: one address on Schroeders Avenue in Brooklyn logged over 900 neglect complaints in twelve months. Counting agencies instead of calls means one determined caller can move a lot from zero to one, and no further.

Alongside the score is persistence: the number of distinct calendar quarters, out of nine in the window, in which a 311 complaint, a sanitation summons or a failed rat inspection was recorded at the lot. The first and last quarters are partial (September 2024 only; July and August 2026).

Three of the six sources record events (311, sanitation summonses, rat inspections) and three record status (a program listing, a stalled site or unsafe facade, a lien). The same window applies to both. A status counts only if it was issued inside the window: the Alternative Enforcement start date, the Underlying Conditions order date, the vacate order's effective date, the date the stalled-site complaint was received, the facade filing date. A listing that is still in force but was issued earlier is shown in the lot file, marked "issued before the window, still listed, not counted," and contributes nothing to the score. The Alternative Enforcement Program's active list reaches back to 2007, whole-building vacate orders still in force reach back to 2012 and every one of the 148 sites on the stalled construction list entered it between 2009 and 2013. In-window counts: AEP of ; Underlying Conditions of ; vacate orders of ; stalled sites of ; unsafe facades of . The 2025 lien sale (May 2025) falls inside the window.

The sanitation history layer

The sanitation department's Lot Cleaning Division logged every request to inspect and clean a vacant lot in a system called LotSmart, with an inspector's note on what was found. The city published the file as Lot Cleaning Dispositions (r4c5-ndkx) and now labels it no longer maintained. It holds 844,435 activity rows; the structured lot records, the ones with an entry date, an address and a block, run from October 2010 to September 2021, and new requests stop at December 31, 2020. A handful of text request dates go back to 2004 but carry no usable lot record. Two comptroller audits, in 2008 and 2021, describe the program and the system.

Tying those rows to today's lots took some work. The file carries a borough code, a tax block, a house number and street, and a coordinate, but the coordinate is shared by many records, so it is a block-face geocode rather than a lot. Today's vacant lots mostly have no house number in PLUTO. The join rule: same borough and tax block, and the vacant lot's street name equals the row's street name. If that leaves one lot, it matches. If several, the nearest to the row's coordinate is taken and the match is flagged as approximate; the lot file shows how many of a lot's matches were approximate. Rows were first reduced to one per lot record, since the file repeats a record for each activity logged against it; a record is one inspection request for one lot.

Result: of distinct lot records, tie to a lot that is still vacant land in 2026, on lots. records sit on a block that has no vacant lot today (the lot was built on, or became a park or garden), and on a block whose remaining vacant lots front a different street. Both are dropped. The borough codes in the file (6, 7, 8, 9, 10) are not documented; they were mapped to Manhattan, Brooklyn, Queens, Bronx and Staten Island by testing which borough's blocks and addresses each code matched, and the evidence was one-sided in every case.

The history does not count toward the score. A lot cleaned a hundred times a decade ago and quiet since scores zero today.

Parks and playgrounds

Public space is scored separately, because a park is not a tax lot and because the city inspects its own parks in a way it inspects nothing else. The unit is the Parks Department property (dataset enfh-gkve, properties with a boundary, retired ones dropped). Three eyes:

Encampment and homeless-assistance complaints in parks are excluded for the same reason as elsewhere. Park size confounds complaint counts, so the parks tab ranks by the share of inspections failed rather than by volume. Parks properties are drawn as dashed outlines at every zoom; the fill colour follows the score.

Ownership

Owner type comes from PLUTO. The field is blank for most privately held lots, C for city agencies, X for mixed city and private, O for other public authorities and M for mixed public. Blank is read as private. Owner names are as the Department of Finance records them and can lag a sale. The ownership tab reports the split among all vacant lots, among those with any signal, among those flagged by two or more agencies and among those the sanitation department cleaned between 2004 and 2020.

Residents versus inspectors

For each community district with at least 40 vacant lots, the table shows the share of its vacant lots that drew a 311 complaint, the share that drew a sanitation summons or a failed rat inspection and the share that drew both. A gap between the two is a fact about attention. It says who calls and where enforcement agents are sent; it does not say whose eyes are right.

What was left out, and why

Known limits

Refreshing

Delete build/raw/, run scripts/fetch_raw.py, then scripts/build_data.py, then scripts/verify.py. Update the window constants at the top of both scripts first. The fetch takes a few minutes and fails loudly if any source returns nothing.

AI caution

The concept, the choice of sources and the layout are the author's, a human. The code, the data pulls and the file handling were done by Anthropic's Claude Code under close direction. Quality control done on this project: every source count was re-queried directly against the New York City Open Data API and compared with the built files (scripts/verify.py); the join keys were spot-checked by hand against the city's property records; the sanitation history join was checked by reading raw inspector notes and addresses for sampled lots and by measuring how many matches were exact versus approximate. The risks of using AI remain, and red flags in what you see here are welcome.