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.
- Total users
- 6
- Monthly active
- 0
- Total runs
- 206
- Bookmarked
- 1
- Rating
- Not rated yet
- Last modified
- 9 days ago
Overview
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
- Create a free Apify account with $5 in credit.
- Open the NYC Building Permits Scraper.
- Set your inputs and any filters, then click Start.
- 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
| Field | Type | What it does | Default |
|---|---|---|---|
| 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 for | What it is | Price 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.
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.
{
"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.
