How every figure on this site is derived.
Every figure on this site copies something 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.
Four sources, three agencies. We copy what they publish and create none of it.
We read four sources. Three are city agencies: HPD and DOB, which write violations, and OATH/ECB, where DOB's violations are heard. The fourth is 311, and it works differently. Every figure from the three traces back to what one agency published. The agency decided what the violation was and where it stands 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 judgment 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 and no dollar amount on an HPD violation, because HPD publishes neither.
Dataset: Housing Maintenance Code Violations (NYC Open Data).
Look a building up: hpdonline.nyc.gov. Explainer: /agencies/hpd.
DOB
We hold no separate DOB violations table. DOB's enforcement reaches this site through the ECB docket, which holds DOB's own notices once they are queued for a hearing: construction, permits, equipment, zoning, occupancy. Anything DOB does that never reaches that queue does not show up 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.
Look a building up: 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 writes no violations of its own. Each entry in our copy is one summons on that docket, with its hearing status and its dollar amounts. The person or company the summons names is not necessarily the owner, and a summons 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 adds a violation to a building. 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 more things. Its newest date is one of the three that decide how current this site says it is: we go by whichever of the three is oldest, and right now that is OATH/ECB, read September 24, 2026. And its complaints are part of the home page's count of city records we read.
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.
What "open" means here.
"Open" here is a status check against the agency's own data. It says nothing about whether the condition is still in the building, and it is not one check. Each source has its own field and its own comparison, so the word means something slightly different depending on which agency wrote the violation. Here is each one.
- HPD violations
- We read one field, the open or closed flag HPD publishes on every violation, which HPD calls violation status. A violation counts as open when HPD marks it Open. HPD also publishes a longer status in words, which each building page shows, and the two can disagree: a violation can read Violation Will Be Reinspected after HPD has already marked it closed, and we follow the flag. A violation whose correction has been certified can still be marked open. 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 summons. 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 status is a separate field on the same summons, 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 copy of the test. Since September 26, 2026 both copies read the same flag for the same value, and a check refuses any change that makes the two copies differ. It stays an open finding on our side until it is one rule in one place.
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. An ECB summons has a severity field of its own, graded Class 1, Class 2 and Class 3, on a scale that has nothing to do with HPD's A, B and C. We store that field, we do not show it anywhere on this site, and we do not translate it into a letter. What we do report from an ECB summons is DOB's own violation type, the hearing status and the penalty imposed. How the sources differ: /agencies/.
Why every figure carries a date.
- When we read the data
- We read each source on a schedule, once a day, and that read stops inside our own database. It publishes nothing. These pages are static files, so what you see changes only when a person publishes the site, which is why every page prints the date its figures came from instead of claiming to be fresh. A page can be older than our own copy of the data, and the date on the page is how you tell. And before any of that, the city's published data already runs about three days behind the city's own systems, the same figure /editorial gives.
- What date a figure carries
- A figure's date is the date of the newest entry 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 count over a window reads lower than the city's total for every date it holds in 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 city's data changes
- Nothing on a page changes between reads. The figures are written into the file when the page is built, and they stay there until it is built again. There are two exceptions: the home page and /record ask the city's data API from your browser and replace the built-in citywide number with the answer. Otherwise, when an agency changes its data, our copy picks it up on the next read, and the page picks it up when someone publishes.
What a figure here cannot tell you.
Our figures are what the city wrote down, through the date shown. These are the five places where that gets a reader into trouble, most common first.
- Whether the work has already been done. Open counts include violations the owner certified as corrected, because HPD has not marked them closed yet. A building can read as having open Class C violations with every one of them fixed.
- The city's official 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 data 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, look at the city's page 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 three-year window 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 grades a claim can carry, and the list of claims a file refuses to make.
Statuses
/codes/: every HPD status, 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.