Research plan: New York data portal registry

Report generated: 2026-11-05 Status: completed 2026-11-05. Output: ny-data-portal-registry.md and portals/. Last revised: 2026-11-05 — added the two parallel workstreams and applied recommended answers to the open questions. Builds on: ny-open-data-portals.md (county and city directory, URL-audited 2026-11-05) and research-plan-ny-open-data-portals.md (the plan behind it).

Why

No state dataset or page lists New York’s data portals. A check on 2026-11-05 found:

BetaNYC’s county and city directory is the most complete list we found. This plan grows it into one registry for the whole state, layered by who runs each source.

Goals

  1. List every public source of New York civic data that a person or a tool can query, in four tiers (below).
  2. For each one, record what it is, who runs it, what platform it uses, and whether it has an API, and how to reach it.
  3. Verify every entry live, using the same jurisdiction check as the 2026-11-05 URL audit.
  4. Publish it as a readable Markdown page plus a machine-readable file, so the registry can feed tools such as a harvester, an MCP or a Scout successor.

Tiers

Tier What belongs Examples to check (none verified yet)
1. State data portals Statewide catalogs run by NYS government, including GIS clearinghouses data.ny.gov (Open NY), health.data.ny.gov, NYS GIS Clearinghouse (gis.ny.gov / data.gis.ny.gov)
2. State APIs and data services State bodies with a query API or bulk data that is not a general catalog: the Legislature, the Comptroller, single agencies, public authorities NYS Senate Open Legislation API (legislation.nysenate.gov), NYS Assembly data, Comptroller’s Open Book NY, Board of Elections, DEC and DOH data services, MTA and other public authorities
3. County and municipal portals The existing directory, including New York City The 57 non-NYC counties, the cities over ~50,000, NYC Open Data, NYC agency GIS sites (e.g. NYC Planning), and NYC’s own APIs (e.g. Legistar for the Council)
4. Academic and institutional portals Universities, libraries, research centers and nonprofits that publish or curate New York civic data Cornell CUGIR, Lehman College’s Socrata portal, CUNY and SUNY data centers, the University at Albany Center for Technology in Government, library GIS repositories

Edge cases. Some bodies don’t fit neatly, such as bi-state agencies (Port Authority) and regional councils. Each goes in the tier that matches who runs it, and gets flagged.

Scope

In:

Out:

Sources

Method

  1. Find candidates per tier from the discovery sources.
  2. Verify each one with read-only public requests:
    • Liveness: the HTTP status and the final URL after redirects.
    • Jurisdiction: for ArcGIS, the DCAT feed’s publisher, contact email domain and spatial bounding box. New York is roughly longitude −79.8 to −71.8 and latitude 40.5 to 45.0. For Socrata, the domain metadata. For anything else, the page title and owner. Never trust a subdomain or slug alone. That is how 8 out-of-state rows got into the first directory.
    • API: the type (SODA, ArcGIS REST/Hub, OGC, CKAN, REST/JSON, bulk download), the base endpoint, and whether it needs a key.
    • Size: the dataset count where the API reports one.
  3. Mark anything unclear as UNCONFIRMED and say what was tried. Never guess.
  4. QA pass: an independent re-check of a sample, plus every removal and every “dead” verdict, before publishing.

Calls stay light: a few per portal, public endpoints only, nothing that needs a login.

Output

Fields per entry: tier, entity name, entity type (agency, legislature, authority, county, city, university, nonprofit), portal or service name, URL, platform, API type, API endpoint, key required (Y/N), dataset count, status (live, dead, UNCONFIRMED), last verified date, verification evidence, notes, and, where one exists, the matching ny-gov-web-registry entity ID.

Files:

Two parallel workstreams (added 2026-11-05)

The work ran as two streams at the same time. Live checks used a browser where needed, so JavaScript-only portal pages (most ArcGIS Hubs) can be read. Plain HTTP and API calls are still used wherever they answer the question.

Stream A: one page per source we already have

Stream B: the registry page with all the tables

Shared data file and merge

Decisions

  1. One registry. ny-data-portal-registry.md becomes the main page; ny-open-data-portals.md gets a line pointing to it and stays for history.
  2. NYC depth. One row per city agency data service in tier 3.
  3. Public authorities go in tier 2, with entity type authority.
  4. Formats: CSV and JSON. The JSON uses ny-gov-web-registry entity IDs where a match exists.
  5. Upkeep: a one-time pass now. A monthly link-check GitHub Action is a separate follow-up, not part of this run.

Effort

About 3–5 hours of wall-clock time with the two streams running in parallel, plus merge and one QA pass:

Open questions

These were answered; see “Decisions” above.

  1. One file or two? Should the registry absorb the county and city directory, or link to it?
  2. NYC depth. Is NYC one row (NYC Open Data), or should each city agency’s own data service get a row (Planning, the Council’s Legistar, the Checkbook)?
  3. Public authorities (MTA, Port Authority, NYPA, and others): count them in tier 2, or give them their own tier?
  4. Machine-readable format: is CSV enough, or should there also be JSON shaped like ny-gov-web-registry, so the two can merge later?
  5. Upkeep: a one-time pass, or a scheduled re-check (for example, a GitHub Action that tests each URL monthly)?