Methodology
How every figure on this site is derived.
Every figure on this site is a copy of a record HPD, DOB, or OATH already published, read on a stated date, with the definitions on this page applied to it. Nothing here is estimated or modeled. This page holds the definitions. /evidence holds the grading, /codes/ decodes the statuses, and /editorial says what we never publish at all.
Sources
Four sources, three agencies. We copy their records; we do not create any.
We read four sources. Three are agencies that issue violations: HPD, DOB, and OATH/ECB. The fourth is 311, and it works differently. Every figure from the three traces back to one agency's published record. The agency decided what the violation was and what state it is in today. We copy that decision, print the date we read it, and link back so you can check it against the original. No figure here is our own assessment of a building. How they fit together: /agencies/.
HPD
HPD inspects residential buildings and writes housing maintenance code violations. We read three years back by inspection date and keep every status, not only the open ones, so we can watch a violation close instead of watching it disappear. Eleven fields come across. There is no owner name on an HPD violation and no dollar amount, because HPD does not publish either one on the row.
Dataset: Housing Maintenance Code Violations (NYC Open Data).
Check the record: hpdonline.nyc.gov. Explainer: /agencies/hpd.
DOB
We hold no standalone DOB violations table. DOB's enforcement record reaches this site through the ECB docket, which is DOB's own notices once they have been queued for a hearing: construction, permits, equipment, zoning, occupancy. Anything DOB does that never reaches that queue is not visible here.
Dataset: DOB ECB Violations (NYC Open Data). One file, named for the hearing venue rather than the agency that issued the notice. It is the same file the OATH/ECB panel reads.
Check the record: a810-bisweb.nyc.gov. Explainer: /agencies/dob.
OATH / ECB
OATH sitting as the Environmental Control Board is where a violation another agency wrote gets heard. It sends no inspectors and it decides no violations. One row on our copy is one summons on that docket, with its hearing state and its money. The party named on it is the respondent, who is not necessarily the owner, and the row carries no HPD class letter.
Dataset: DOB ECB Violations (NYC Open Data), three years back by issue date, every status. There is one docket, not two, which is why the DOB panel names the same file.
Explainer: /agencies/oath-ecb.
A 311 call is a request, not a finding. Someone reported a condition; nobody has yet inspected it, cited it, or determined that anything is wrong. So 311 gets no open rule, because there is nothing to be open about, and a 311 call by itself never puts anything on a building's violation record. Where we show 311 figures we show them as what they are: how often a property was reported, not what was found. The breakdown: /agencies/311.
We use 311 for two things beyond that. Its as-of date is one of the three that set the freshness floor on this site. The floor is whichever of the three is oldest, and right now that is 311, read August 30, 2026. And its row count is part of the total records read that appears on the home page.
This is the same line we draw on OATH. OATH hears cases; it does not inspect buildings. We do not count it as a third agency when we say a building has trouble across more than one agency, and we do not count 311 as an agency at all.
Definition
What "open" means here.
"Open" here is a status test run against the agency's own record. It is not a judgement about whether the condition still exists in the building, and it is not one test. The three sources use three different fields and three different comparisons, so the word means three slightly different things depending on which agency wrote the record. Here is each one.
- HPD violations
- We read one field, the status HPD publishes on the violation, which HPD calls current status, and we exclude two values from it. A violation counts as open unless that status reads Violation Dismissed or Violation Closed. Everything else counts, which is 19 of the 21 statuses HPD uses, and it includes a violation whose correction has already been certified and not yet dismissed. Open is not the same word as uncorrected. Every status, decoded: /codes/.
- DOB matters
- DOB has no test of its own here, because a DOB matter reaches this site as an ECB row. There is no separate DOB violations table for us to test. The rule below is the one that applies.
- OATH / ECB matters
- We read one field, the status on the ECB docket, published as the ECB violation status, and we require it to equal one word exactly: ACTIVE. Nothing is excluded and nothing is matched loosely, so a summons is either active on the docket or it is not. The hearing state is a separate field on the same row, and we report it as a hearing outcome rather than folding it into this test.
One thing about that HPD rule should be said out loud: it is written down twice. The pages you are reading and the case files we ship are built by two separate programs, and each one carries its own version of the test. One of them excludes any status containing the word closed or the word dismissed. The other excludes the two statuses by name. On September 3, 2026 we checked every status HPD uses, and exactly 2 of the 21 contain either word: the same two this page names. So the two rules select the same violations today. They agree by arithmetic rather than by construction, and nothing in the build asserts they will keep agreeing. It is written up as an open finding on our side, and until it is one rule in one place we would rather you knew.
Definition
What a class means.
HPD assigns the class when the inspector writes the violation, and we copy the letter as written. We never re-grade a violation and we never move one between classes. The class sets HPD's correction window, and where HPD publishes a correct-by date on the violation itself, that is the date we use. We do not compute deadlines. A class is also not a status: the class is how serious HPD called the condition, the status is where the paperwork on it stands, and they are two separate fields that move independently. Statuses are decoded on /codes/.
| HPD class | What HPD means by it |
|---|---|
| Class A | Not hazardous, correct within 90 days. |
| Class B | Hazardous, correct within 30 days. |
| Class C | Immediately hazardous, correct within 24 hours. |
DOB and OATH/ECB matters do not carry HPD's letters. The ECB record has a severity field of its own, graded Class 1, Class 2 and Class 3, on a scale HPD's A, B and C have nothing to do with. We store that field, we do not render it anywhere on this site, and we do not translate it into a letter. What an ECB row carries that we do report is DOB's own violation type, the hearing state, and the penalty on the record. How the sources differ: /agencies/.
Dating
Why every figure is point-in-time.
- When we read the record
- We read each source on a schedule, once a day, and that read stops inside our own database. It does not publish anything. These pages are static files, so what you are looking at changes when a person publishes it, which is why every page prints the date its figures came from instead of a claim about how fresh they are. A page can be older than our own copy of the record, and the date on the page is how you tell. Before any of that, the city's own published data already trails the city's internal systems by about three days, the same figure /editorial gives.
- What date a figure carries
- The date beside a figure is the date of the newest record in the source that figure came from, not the time our read ran. Each source gets its own date. A page carrying both HPD and OATH/ECB figures carries two dates, never one, because a single date would be wrong for at least one of them.
- Windows
- HPD violations reach back three years by inspection date, and ECB summonses three years by issue date. The citywide Class C figures on /record and on the borough pages count what was issued inside that window, which is a different question from what is open today, and that page says so in its own copy. A windowed count reads lower than the city's all-dates total for the same category. That is scope, not disagreement.
- Lower, never higher
- A figure here can be lower than what the city shows for the same building, and by design it never runs higher. Our HPD counts are bounded to three years while the city's page shows every date it holds, so the city's number should be the larger one. The check that watches this points one way on purpose: it fails the run when our number exceeds the city's, and it never fails when ours falls short. If ours is higher, that is a fault on our side, and /removal-request is the route.
- When the record changes
- Nothing on a page changes between reads. The figures are stamped into the file when the page is built and they sit there until it is built again. There are two exceptions: the homepage and /record ask the city's data API from your browser and replace the stamped citywide number with the answer. Otherwise, when the agency's record changes, our copy picks it up on the next read, and the page picks it up when someone publishes.
Limits
What a figure here cannot tell you.
The record is what the city wrote down on the date shown. These are the five places where that gets a reader into trouble, ordered by how often it does.
- Whether the work has already been done. Open counts include violations the owner certified as corrected, because HPD has not dismissed them yet. A building can read as having open Class C violations with every one of them fixed.
- The city's canonical address for the building. What we print is the address written on the violation itself, and the two can differ for the same building. A correct borough-block-lot number does not vouch for the address printed beside it.
- Who owns it now. The deed record behind this site is not part of the daily read and stops in April 2026, so a sale since then is invisible to us. Ownership is the weakest thing we hold.
- Everything the city has. Our HPD figures are bounded to three years and the city's own page is not, so the city will usually show more than we do. Less is expected here. More is a fault on our side.
- Anything nobody wrote down. Work underway that has not been certified is not here, and neither is a condition nobody reported to the city. A violation that arrives with no borough-block-lot number on it is dropped rather than attached to a guess. No figure on a public page is estimated or modeled.
When our number and the city's disagree, check the city record first. HPD Online covers housing violations and DOB BIS covers the buildings side, both free. If the city shows more than we do, that is the windowing above and it is expected. If the city shows fewer, that is ours to fix, and /removal-request is where it goes. The full list of claims a file refuses to make is on /evidence, and what never gets published at all is on /editorial.
Read next.
Grading
/evidence: the four confidence grades and the list of refused claims.
Statuses
/codes/: every HPD status on the record, decoded one page each.
Agencies
/agencies/: how HPD, DOB, and OATH/ECB fit together.
Pipeline
/method: the five steps a case file passes before it ships.
Corrections
/removal-request: ask for a figure to be re-checked. Three outcomes.