ParseForge Scrapers

NYC Building Permits Scraper

parseforge/nyc-building-permits-scraper

Real estateBusiness

Collects NYC building permits from the Department of Buildings public feeds. Each row returns job number, address, owner, filing date, and work description, filtered by borough, ZIP code, job type, or date range.

Run this scraper See the API call
Total users
6
Monthly active
0
Total runs
206
Bookmarked
1
Rating
Not rated yet
Last modified
9 days ago

Overview

ParseForge

NYC Building Permits Scraper

Scrape NYC building permits from the Department of Buildings, filtered by borough, ZIP code, job type, or date range. Each permit includes job number, address, owner, filing date, and work description. Export to CSV, JSON, Excel, or XML.

The NYC Department of Buildings public dataset holds millions of permits, but querying it manually means clicking through a web portal one page at a time. This Actor reads the DOB NOW and historical permit feeds directly, applies your filters as it goes, and returns every matching record in a flat, consistent schema. No API key, no browser automation, no manual downloads.

Who uses it What they scrape NYC Department of Buildings for
Contractors and subcontractors Find new construction and alteration jobs filed in their service ZIP codes this week.
Real estate developers Track demolition and new building filings across a borough to spot development hot spots.
Building material suppliers Identify active job sites by permit type and filing date to target sales outreach.
Insurance underwriters Audit recent major alteration permits for a portfolio of addresses to assess risk.

What it does

This Actor collects NYC building permits from the DOB NOW and historical datasets and returns each permit as a flat row with job number, address, owner, filing date, and work description.

  • ๐Ÿ—๏ธ Borough and ZIP filters: narrow results to a single borough, a ZIP code, or both together.
  • ๐Ÿ“‹ Job type selection: isolate New Buildings (NB), Major Alterations (A1), Minor Alterations (A2/A3), or Demolitions (DM).
  • ๐Ÿ“… Date range control: pull only permits filed between two dates, so you get fresh leads or a historical snapshot.
  • ๐Ÿ—„๏ธ Dual dataset support: query the active DOB NOW permits, the historical archive, or both in one run.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

What you can do with NYC Department of Buildings data

๐Ÿ“ฌ Build a contractor lead list.

A construction lead service runs the Actor weekly for all five boroughs, filters to NB and A1 job types filed in the last seven days, and delivers fresh permit leads to subscribers.

๐Ÿ˜๏ธ Monitor a neighborhood for new development.

A community board pulls all New Building and Demolition permits in their ZIP codes each month to track changing land use before public hearings.

๐Ÿ“Š Analyze alteration activity by borough.

A market analyst collects a full year of A1 permits across Brooklyn and Queens, groups them by ZIP code, and ranks neighborhoods by renovation investment.

๐Ÿšš Find active job sites for material delivery.

A lumber supplier filters for New Building permits filed in the last 90 days in Staten Island and uses the address list to plan delivery routes.

Why choose this scraper

What you get
No API key or registration Reads the public DOB feeds directly, no account needed.
Fixed flat schema Every permit lands as the same columns, ready for a spreadsheet or database.
Up to 1,000,000 permits per run One click pulls a full borough year without pagination scripts.
CSV, JSON, Excel, XML export Drop the dataset into your existing lead list or GIS tool.

How it compares

No other Store actor targets NYC Department of Buildings the same way, so the honest comparison is with the alternatives teams actually weigh.

NYC Building Permits Scraper Build it in-house By hand
Setup Run it now, zero config Days of engineering None, but hours per pull
When NYC Department of Buildings changes Maintained for you You fix it You re-learn the page
Proxies, retries, anti-bot Built in Your problem Browser only
Output Fixed JSON schema, CSV/Excel export Whatever you build Copy-paste
Cost Pay per result Engineering time Analyst hours

Configure the run

Drive the Actor with borough, ZIP code, job type, and a date range, alone or in combination, and filters run as each permit is read so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

{
  "maxItems": 10
}

A larger pull:

{
  "maxItems": 200
}

Pricing

Pay-per-result: $0.01 per result collected. You pay only for the results written to your dataset.

Results collected Approximate cost
100 results $1.00
1,000 results $10.00
10,000 results $100.00

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the NYC Building Permits Scraper.
  3. Set your inputs and any filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to NYC Department of Buildings through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/nyc-building-permits-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting no results?

Check that your date range and filters are not too narrow. Try widening the date range, removing the ZIP code filter, or setting the dataset to 'both'. Also confirm the borough name is spelled exactly as shown in the dropdown.

The run stopped before collecting all permits I expected.

Check the 'Maximum permits' setting. If it is set to a number lower than the total matching permits, the Actor stops early. Increase the maxItems value and rerun.

Some permits are missing from my results.

If you set the dataset to 'dob_now' only, older permits will not appear. Switch to 'historical' or 'both'. Also verify that your date range covers the filing dates of the permits you expect.

The date filter is not working as I expected.

Use the YYYY-MM-DD format exactly. The dateFrom and dateTo fields compare against the permit filing date. If a permit was filed on the boundary date, it is included.

Can I get the full plan or document for a permit?

This Actor returns the permit metadata only. Full plan documents and filings are not included in the public data feed and must be requested separately from the NYC Department of Buildings.

FAQ

Question Answer
What data does each permit row contain? Each row includes the job number, filing date, work type, job description, owner name, address, borough, ZIP code, and the dataset source (DOB NOW or historical). The exact field list is shown in the sample output on the Actor's page.
Can I filter by a specific address? The input schema supports borough, ZIP code, job type, and date range filters. Address-level filtering is not a direct input, but you can filter the exported dataset by the address column after the run completes.
What is the difference between DOB NOW and historical datasets? DOB NOW contains active and recently filed permits. The historical dataset covers older records. Setting the dataset input to 'both' merges the two sources into one output.
How far back do the historical permits go? The NYC Department of Buildings historical dataset includes permits filed over many years. The exact start date varies by borough and job type, but records often reach back decades.
Does this Actor require a login or API key? No. It reads the public NYC Open Data feeds directly. You do not need a DOB account, an API key, or any registration.
Can I run this on a schedule? Yes. You can set the Actor to run daily or weekly on Apify. Each run will collect permits filed within your chosen date range, so a weekly run with a rolling seven-day window keeps your dataset fresh.
What export formats are supported? You can export the results as CSV, JSON, Excel, or XML from the Apify dataset tab.
Is there a limit on how many permits I can collect? You set the maximum permits per run, up to 1,000,000. The Actor stops when it reaches that count or when no more permits match your filters.
Which NYC boroughs are supported? All five: Manhattan, Brooklyn, Queens, Bronx, and Staten Island. You can select one borough or leave the field empty to search across all five.
What job types can I filter by? NB (New Building), A1 (Major Alteration), A2 and A3 (Minor Alterations), and DM (Demolition). Leave the field empty to include all job types.

Related actors

Browse the full ParseForge collection for more scrapers.

๐Ÿ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

โš ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by City of New York. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

Input

FieldTypeWhat it doesDefault
borough string (5 options) Filter permits by NYC borough. Leave empty for all boroughs. not set
zipCode string Filter permits by ZIP code (e.g. 10001). not set
jobType string (5 options) Filter by job type: NB=New Building, A1=Major Alteration, A2/A3=Minor, DM=Demolition. not set
dateFrom string Only include permits filed on or after this date (YYYY-MM-DD). not set
dateTo string Only include permits filed on or before this date (YYYY-MM-DD). not set
dataset string (3 options) Which dataset to query: dob_now (active), historical, or both (default). both
maxItems integer Maximum number of building permits to collect per run. 10

Pricing

from $3.00 per 1,000 results

Charged forWhat it isPrice each
Actor Start Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). $0.01
result Single result in the default dataset. $0.003

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

API

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~nyc-building-permits-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "helloWorld": 123
  }'

Examples

Input that runs as-is.

input.json
{
  "helloWorld": 123
}

Reviews

No reviews yet. Be the first.

Issues

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

Related scrapers

Run NYC Building Permits Scraper on Apify All scrapers