Public API for Developers
Every real dataset this site is built on, as JSON or CSV, at GET https://constructelnyc.com/api/v1 — reading the exact same live query (or nightly ranking cache) the site's own pages do. Nine resources covering filings, permits, contractors, developers, neighborhoods, monthly trends, contract awards, solicitations, and wages.
Not authenticated: everything served here is already public municipal data this site publishes on its own pages, so a key would only imply an exclusivity that doesn't exist. Requests are rate-limited at the edge instead — 20 requests per 60 seconds per IP at launch (see netlify.toml; raised over time as real usage patterns become clear). CORS is open on every resource. Add &format=csv to any request for a flat CSV instead of JSON — useful for pulling a range straight into Excel, pandas, or a spreadsheet without writing a parser.
Resources
DOB Job Application Filings
resource=filingsRecent real DOB job filings — new buildings, alterations, demolitions.
- Params
- limit (max 100), borough
- Array field
- filings
- Cache
- 120s
curl "https://constructelnyc.com/api/v1?resource=filings&limit=25&borough=BROOKLYN"curl "https://constructelnyc.com/api/v1?resource=filings&limit=25&borough=BROOKLYN&format=csv"DOB Permit Issuance
resource=permitsRecently issued real DOB permits.
- Params
- limit (max 100), borough
- Array field
- permits
- Cache
- 120s
curl "https://constructelnyc.com/api/v1?resource=permits&limit=25"curl "https://constructelnyc.com/api/v1?resource=permits&limit=25&format=csv"Contractor Rankings
resource=contractorsTop contractors citywide, ranked by total DOB permit volume on file.
- Params
- limit (max 100)
- Array field
- contractors
- Cache
- 900s
curl "https://constructelnyc.com/api/v1?resource=contractors&limit=25"curl "https://constructelnyc.com/api/v1?resource=contractors&limit=25&format=csv"Developer / Property-Owner Rankings
resource=developersTop property owners and developers, ranked by DOB filing count and filed cost.
- Params
- limit (max 100), borough
- Array field
- developers
- Cache
- 900s
curl "https://constructelnyc.com/api/v1?resource=developers&limit=25"curl "https://constructelnyc.com/api/v1?resource=developers&limit=25&format=csv"Neighborhood Leaderboard
resource=neighborhoodsThe busiest NYC Neighborhood Tabulation Areas citywide, by DOB filing count year-to-date.
- Params
- limit (max 100)
- Array field
- neighborhoods
- Cache
- 900s
curl "https://constructelnyc.com/api/v1?resource=neighborhoods&limit=10"curl "https://constructelnyc.com/api/v1?resource=neighborhoods&limit=10&format=csv"Monthly Trends & Activity Index
resource=trendsReal monthly filing/permit counts and the derived NYC Construction Activity Index — the only time-series resource in this API.
- Params
- months (max 36, default 12)
- Array field
- index
- Cache
- 900s
curl "https://constructelnyc.com/api/v1?resource=trends&months=24"curl "https://constructelnyc.com/api/v1?resource=trends&months=24&format=csv"Contract Awards
resource=awardsRegistered NYC construction contract awards — real money already committed.
- Params
- limit (max 100)
- Array field
- awards
- Cache
- 900s
curl "https://constructelnyc.com/api/v1?resource=awards&limit=25"curl "https://constructelnyc.com/api/v1?resource=awards&limit=25&format=csv"Open Solicitations
resource=solicitationsOpen construction bidding opportunities with live deadlines.
- Params
- limit (max 100)
- Array field
- solicitations
- Cache
- 900s
curl "https://constructelnyc.com/api/v1?resource=solicitations&limit=25"curl "https://constructelnyc.com/api/v1?resource=solicitations&limit=25&format=csv"Construction Wages
resource=wagesBLS OEWS annual mean wages by construction trade, NY metro area. Static, refreshed roughly annually.
- Params
- (none)
- Array field
- wages
- Cache
- 86400s
curl "https://constructelnyc.com/api/v1?resource=wages"curl "https://constructelnyc.com/api/v1?resource=wages&format=csv"Response Shape
Every JSON response shares this envelope — the array field name varies by resource (see the card above), butresource, generatedAt, and source are always present, so a caller can tell what it got and when without guessing.
{
"resource": "filings",
"count": 25,
"query": { "limit": 25, "borough": null },
"filings": [ { "jobNumber": "...", "address": "...", ... } ],
"generatedAt": "2026-08-31T12:00:00.000Z",
"source": "NYC Constructel — real DOB Job Application Filings ..."
}Errors
An unknown resource or an invalid limit returns HTTP 400 with an error message naming the valid values — never a bare "invalid request." A temporary upstream (NYC Open Data) outage returns HTTP 503 rather than a 500, so a client can tell "retry shortly" from "this endpoint is broken."
Stability & Versioning
This is v1. New resources and fields get added without notice (additive changes are always safe to build against); an existing field is never silently renamed or removed without a version bump to v2 living alongside v1 at a new path, not replacing it. Real changes are logged below.
- 2026-08-31Added developers, neighborhoods, and trends resources; added format=csv on every resource.
- 2026-08-05Expanded from 2 resources (awards, solicitations) to 6, adding filings, permits, contractors, wages.