How this actually works.

01 · Data Sources

Every dataset, named and dated.

Nothing here is CivicByte's own data
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
Every dataset above is published by NYC Open Data or NYSED · CivicByte adds no records of its own NYC Open Data
02 · How A Lookup Runs

Your browser asks the city directly.

There is no CivicByte server
  1. 01 The page loads as static files Every page on this site is plain HTML, CSS and JavaScript served by GitHub Pages. There is no application server, no database, and no backend that could receive a search even in principle. Step ·
  2. 02 Your address is resolved to a BBL Your browser calls NYC Planning's GeoSearch to turn what you typed into the city's canonical parcel identifier. If GeoSearch can't resolve it, the tool falls back to matching the street name text — and says so rather than reporting a false all-clear. Step ·
  3. 03 The records are fetched from NYC Open Data Your browser queries the Socrata API for the relevant dataset. The request goes from your device to the city. It does not pass through CivicByte, because there is nothing in the middle to pass through. Step ·
  4. 04 Totals are counted, not estimated Result tables cap at 200 rows for speed. When a building has more than that, the tool issues a separate count() query so the headline numbers reflect the true total and the table is labelled as showing the latest 200. Step ·
  5. 05 School budgets never leave the page NYSED publishes no API, so a scheduled job downloads their annual Access database, reduces it to a single JSON file in this repository, and the tool searches that file in your browser. That lookup makes no network request at all. Step ·
03 · Retention

What is kept, and for how long.

Short list, on purpose

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.

04 · Accessibility

Built to be read by anyone.

Target · WCAG 2.1 AA

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.

05 · Limits & Corrections

What these tools cannot tell you.

Read before relying on a result
  • A clean result is not proof of a clean building. It means the city has no matching record in that dataset. Violations go unreported, complaints go unfiled, and addresses occasionally fail to match.
  • Eviction records show executed marshal evictions only. A building with no results may still have active housing-court cases, pending warrants, or informal displacement — none of which appear in this dataset.
  • Landlord Watch finds registered names, not true ownership. HPD registration reflects what an owner filed. Portfolios held across several LLCs will not group themselves under one search.
  • School spending is what NYSED reported for the year shown, on their definitions. It is not a live budget and lags the current school year.
  • Address matching can miss. When GeoSearch cannot resolve an address the tools fall back to text matching, which is less exact. Including the borough materially improves the match.
  • If the city's API fails, the tools say so. An outage or rate limit shows an error — never an empty result dressed up as good news.

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.