| Tool | Dataset & ID | Coverage | Refresh |
|---|---|---|---|
| Building Report | HPD Housing Maintenance Code Violations · wvxf-dwi5 | Violations issued by HPD against residential buildings. Queried live by BBL. Class A/B/C severity and open/closed status come from the city's own violationstatus field. | Daily, at the source |
| Landlord Watch | HPD Registration Contacts · feu5-w2e2 HPD Registrations · tesw-yqqr |
Owners, head officers and agents who registered a building with HPD, joined to the buildings under that registration. Only buildings legally required to register appear — roughly 170,000 citywide. | Ongoing, at the source |
| School Budgets | NYSED ESSA school-level expenditure report (SRC) · SRC2025 | Per-school reported spending — total, per-pupil, and the federal vs. state & local split — for 1,871 NYC schools, school year 2024–25. NYSED publishes this once a year as an Access database, not an API. | Annual release checked monthly |
| Eviction Records | DOI Evictions · 6z8x-wfk4 | Marshal evictions actually executed, 2017 to present. Every query filters to rows with an executed_date, so scheduled and pending cases are deliberately excluded. | Daily, at the source |
| 311 Lookup | 311 Service Requests 2020–present · erm2-nwe9 311 archive 2010–2019 · 76ig-c548 |
NYC split the 311 data in late 2025. Both datasets are queried together so an address returns its full record since 2010, not just the recent slice. | Daily, at the source |
| All address tools | NYC Planning GeoSearch | Turns a typed address into a canonical BBL (borough-block-lot) so lookups match the city's own key rather than a spelling of a street name. | Live |
Searches: retained for zero seconds. Addresses and school names you type are used to build a query in your browser and are then discarded when the page is closed. They are never transmitted to CivicByte, so there is no log to keep, subpoena, or leak.
Traffic measurement: aggregate only. The site counts page views through a standard analytics service so I can see which tools get used. It records no identity and is never joined to a search. The hourly job that reads those totals writes only summary numbers — views, sessions, and which pages were popular — into a public file in this repository.
Email: kept until it's resolved. Messages sent to the address below live in an ordinary mailbox. The submission form doesn't post anywhere — it opens your own mail client with the text pre-filled, and your browser keeps a draft on your device that is never sent to me.
Third-party requests. Loading a page requests fonts from Google Fonts and, on the tool pages, data from NYC Open Data and NYC Planning. Those parties see the request your browser makes to them, under their own policies.
The target is WCAG 2.1 Level AA. This is a self-assessment, not a third-party audit, and it is written to be checked rather than taken on faith.
What is in place. Every page opens with a skip-to-content link and uses real landmarks — one h1, a labelled nav, headings in order. Every input has a programmatic label. Tool results render into aria-live regions, so a screen reader announces a result instead of leaving the user to hunt for it. Pages are fully operable by keyboard, and no page traps focus. Wide tables scroll in their own container rather than forcing the page sideways. Text uses relative units and reflows to a 390 px viewport with no horizontal scrolling.
Motion. The scroll animations and the animated skyline are decorative. When your system asks for reduced motion, every reveal resolves immediately and the hero parallax is disabled — the content is identical either way. Content is never hidden behind an animation that must play first: printing a page shows everything.
Known gaps, stated plainly. Colour contrast has not been machine-verified on every surface, particularly muted metadata text on the cream background. No audit with a screen reader by a daily screen-reader user has happened yet. The animated skyline on the homepage is aria-hidden and decorative, but it is heavy on very old devices.
If any part of this site blocks you, email me and I will fix it. That is a commitment with a person attached to it, not a form.
How the condition score is calculated. Every open HPD violation in the portfolio is weighted by HPD's own severity class — A×1 (non-hazardous), B×2 (hazardous), C×5 (immediately hazardous: no heat, no hot water, lead, vermin). The weighted total is divided by the number of buildings queried. That figure — weighted open violations per building — is then mapped to a score out of 10, where 10 is best:
Those are anchor points, and the score moves smoothly between them rather than jumping in steps — two landlords in roughly the same condition still separate instead of collapsing onto the same number. A portfolio carrying any open violation at all rounds down, so nothing but a genuinely clean record displays as a flat 10.
Two things about that are worth saying plainly. The weights and the bands are mine, not the city's — HPD publishes the violations and their classes, and nothing else here. They are written down so you can disagree with them and recompute from the same records. And the score is not adjusted for building size, because HPD's registration data carries no reliable unit count; a 200-unit building and a six-unit building count the same, which flatters small landlords and penalises large ones. Any open Class C violations are shown in the score block regardless of the score, because a number should never read as reassurance while an immediately hazardous condition is open.
If a record here contradicts a document in your hand, the city's record is the one to challenge, and the dataset link on each tool page is where to start. Tell me and I will look at whether the tool read it wrong.
Harry Honig · NYC, 2026
Read the privacy note, or check the code yourself.