NYC DOB NOW Building Permits Scraper
Pricing
Pay per event + usage
NYC DOB NOW Building Permits Scraper
🏗️ Search official NYC DOB NOW approved permits and export project, contractor, owner, location, cost, and status data for construction leads and market intelligence.
Pricing
Pay per event + usage
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Turn official New York City building permits into fresh construction leads and market intelligence.
The NYC DOB NOW Building Permits Scraper searches the official DOB NOW: Build – Approved Permits dataset and exports clean permit, project, applicant, contractor, owner, address, cost, and location data.
Use it for daily territory monitoring, contractor prospecting, project research, underwriting signals, supplier outreach, and construction analytics.
No NYC account, browser, proxy, cookies, or API token is required.
What does NYC DOB NOW Building Permits Scraper do?
This Actor queries NYC Open Data's official approved-permits dataset.
It can:
- 📅 find newly issued permits in a date range;
- 🗺️ focus on one or more boroughs or ZIP codes;
- 🏗️ filter by trade, permit status, or filing reason;
- 💰 select projects by estimated job cost;
- 👷 search applicant names, businesses, and license numbers;
- 🏢 search owner names and owner businesses;
- 📍 export coordinates and administrative geographies;
- 🔄 support scheduled permit monitoring;
- 📦 deliver JSON, CSV, Excel, XML, RSS, or API output through Apify datasets.
Every result represents one approved DOB NOW work permit.
Who is this NYC permit scraper for?
Contractors and subcontractors
Monitor projects in your boroughs and trades before competitors find them.
Building-material suppliers
Identify recently permitted work that may need equipment, fixtures, finishes, or materials.
Insurers and lenders
Use permit activity, scope, ownership, and project value as underwriting or monitoring signals.
Developers and brokers
Track construction activity by owner, neighborhood, work type, and estimated cost.
Construction-intelligence teams
Feed normalized official permit records into CRM, BI, warehouse, or lead-scoring systems.
Researchers and journalists
Analyze where NYC construction is occurring and who is responsible for permitted work.
Why use this Actor?
NYC Open Data is authoritative, but operational lead workflows require repeatable filters, normalized types, pagination, exports, and scheduling.
This Actor handles those details for you.
Benefits include:
- official public source data;
- no screen scraping or browser overhead;
- server-side filtering for efficient runs;
- numbers emitted as numbers;
- dates emitted as ISO timestamps;
- stable field names for automation;
- source links and query provenance on every row;
- automatic bounded retries for temporary API errors;
- pay-per-event billing tied to delivered records.
What NYC permit data can I extract?
| Group | Example fields |
|---|---|
| Permit identity | job filing number, work permit, sequence, tracking number |
| Status | permit status, filing reason |
| Dates | approved date, issued date, expiry date |
| Site | house number, street, full address, borough, ZIP |
| Property | block, lot, BIN, BBL |
| Work | work type, floor, apartment/condo, job description |
| Value | estimated job cost |
| Applicant | name, business, license, license type, address |
| Owner | name, business, street, city, state, ZIP |
| Geography | community board, council district, census tract, NTA |
| Coordinates | latitude, longitude |
| Provenance | applied query, dataset ID, source URL, retrieval time |
Blank source values are omitted rather than converted into misleading empty strings.
How to scrape NYC building permits
- Open the Actor input page.
- Choose an issue-date range or keep the rolling 30-day default.
- Add borough, ZIP, work type, status, or filing-reason filters.
- Optionally add project-value, applicant, or owner filters.
- Set a small
maxItemsfor a first run. - Click Start.
- Review results in the Dataset tab.
- Export them or connect the dataset to your workflow.
Start broad, inspect the source values returned, then reuse exact values in narrower filters.
Input options
Permit dates
issuedFrom: first issue date, formattedYYYY-MM-DD.issuedTo: last issue date, formattedYYYY-MM-DD.approvedFrom: optional first approval date.approvedTo: optional last approval date.
If issue dates are blank, the Actor searches the most recent 30 days through today.
Territory
boroughs: exact borough names such asMANHATTAN,BROOKLYN, orQUEENS.zipCodes: one or more site ZIP codes.
Permit and work
workTypes: exact official work-type values.permitStatuses: exact official permit statuses.filingReasons: exact official filing reasons.
Lead filters
applicantQuery: searches applicant name, business, license number, and related applicant fields.ownerQuery: searches owner name and owner business.minEstimatedCost: minimum project estimate.maxEstimatedCost: maximum project estimate.
Run limit
maxItems: maximum records saved, from 1 to 50,000.
All filter groups are combined with AND.
Values inside one list are combined as alternatives.
Input example
{"issuedFrom": "2026-07-01","issuedTo": "2026-07-31","boroughs": ["BROOKLYN", "QUEENS"],"minEstimatedCost": 250000,"maxItems": 100}
This finds recently issued, higher-value projects in Brooklyn or Queens.
Output example
{"jobFilingNumber": "B01234567-I1","workPermit": "B01234567-I1-GC","filingReason": "Initial","permitStatus": "ISSUED","issuedDate": "2026-07-16T00:00:00.000Z","address": "123 EXAMPLE STREET","borough": "BROOKLYN","zipCode": "11201","workType": "General Construction","estimatedJobCost": 750000,"applicantName": "JANE CONTRACTOR","applicantBusinessName": "EXAMPLE BUILDERS LLC","ownerName": "SAMPLE OWNER","latitude": 40.693,"longitude": -73.99,"sourceDatasetId": "rbx6-tga4","sourceUrl": "https://data.cityofnewyork.us/resource/rbx6-tga4.json?...","retrievedAt": "2026-07-19T12:00:00.000Z"}
The example illustrates the shape; actual values come directly from NYC Open Data.
How much does it cost to scrape NYC building permits?
This Actor uses pay-per-event pricing.
You pay a small run-start charge plus a charge for each permit record saved.
Your Apify plan determines the applicable price tier.
Higher tiers receive lower per-record prices.
| Plan tier | Price per permit record |
|---|---|
| Free | $0.000039882 |
| Bronze | $0.00003468 |
| Silver | $0.00002705 |
| Gold | $0.000020808 |
| Platinum | $0.000013872 |
| Diamond | $0.00001 |
Every run also has a $0.005 start event. At the Bronze tier, 1,000 permit records cost about $0.040 including the start event.
Before a large export:
- run 10–25 records;
- review the output fields;
- verify your filters;
- estimate the full result count;
- increase
maxItemsonly when ready.
The Actor uses an HTTP API rather than a browser or paid proxy, keeping compute costs low.
Daily NYC permit lead monitoring
A strong recurring workflow is:
- save an input for your territory and trade;
- schedule it daily in Apify;
- use a narrow rolling issue-date window;
- export results to a named dataset or integration;
- deduplicate on
jobFilingNumber,workPermit,sequenceNumber, andworkType; - score leads using estimated cost, work type, and owner or applicant attributes.
For multiple sales territories, create separate tasks with different borough or ZIP filters.
Contractor and applicant research
Use applicantQuery to search:
- first, middle, or last name;
- applicant business name;
- applicant license number.
The match is case-insensitive and runs against the official source fields.
For a company-focused workflow, search a distinctive business-name fragment.
For license monitoring, provide the complete license number when available.
Owner and developer research
Use ownerQuery to search both owner name and owner business name.
Returned owner attributes can include street address, city, state, and ZIP.
Possible workflows include:
- tracking a developer's active construction pipeline;
- finding repeat property owners;
- monitoring work by portfolio or lender territory;
- joining permits to internal account records;
- identifying projects for outreach.
Always verify current contact details independently before outreach.
Borough, ZIP, and trade segmentation
Borough filters are useful for territory assignment.
ZIP filters provide more granular routing.
Work-type filters can separate general construction, plumbing, mechanical, structural, and other official categories.
For reliable matches, copy exact source values from a broad sample run.
Do not guess punctuation or abbreviations when an exact value is available.
Integrations
Google Sheets
Send new permit rows to a shared prospecting sheet.
Airtable
Create a permit table linked to owners, contractors, and sales territories.
Zapier or Make
Trigger CRM creation or notifications when a high-value project appears.
Slack or email
Send daily summaries for specific boroughs, ZIPs, trades, or owners.
Data warehouses
Load the dataset into BigQuery, Snowflake, Redshift, or PostgreSQL for longitudinal analysis.
Webhooks
Trigger a downstream service when the Actor run finishes.
API access with cURL
curl "https://api.apify.com/v2/acts/automation-lab~nyc-dob-now-building-permits-scraper/runs?token=$APIFY_TOKEN" \-X POST \-H "Content-Type: application/json" \-d '{"boroughs":["MANHATTAN"],"maxItems":25}'
Store tokens in environment variables, not source code.
API access with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/nyc-dob-now-building-permits-scraper').call({boroughs: ['BROOKLYN'],minEstimatedCost: 500000,maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use the dataset ID from the completed run.
API access with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/nyc-dob-now-building-permits-scraper').call(run_input={'boroughs': ['QUEENS'],'maxItems': 50,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
The Python client can also start runs asynchronously.
Use with Apify MCP
Connect AI assistants through:
https://mcp.apify.com/?tools=automation-lab/nyc-dob-now-building-permits-scraper
Example prompts:
- “Find 25 recently issued Manhattan building permits.”
- “Extract high-value Brooklyn and Queens construction permits.”
- “Monitor permits associated with this applicant business.”
- “Summarize work types and estimated costs in the returned dataset.”
Claude Code setup
$claude mcp add --transport http apify https://mcp.apify.com/?tools=automation-lab/nyc-dob-now-building-permits-scraper
Claude Desktop setup
Add this server configuration to Claude Desktop:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=automation-lab/nyc-dob-now-building-permits-scraper"}}}
Cursor setup
Add the same mcpServers JSON to Cursor's MCP settings.
VS Code setup
Add the Apify HTTP MCP URL in VS Code's MCP server settings, then select this Actor tool.
Tips for reliable results
- Use strict
YYYY-MM-DDdates. - Keep
issuedFrombefore or equal toissuedTo. - Copy exact borough, status, reason, and work-type values from source output.
- Start with a low
maxItems. - Use narrower date windows for scheduled monitors.
- Combine borough and value filters for sales territories.
- Deduplicate across scheduled runs using permit identity fields.
- Keep source URLs for auditability.
- Expect optional fields to vary by permit.
Troubleshooting
Why did my run return no permits?
The selected filters may have no intersection.
Remove filters one group at a time, broaden the dates, and try again.
Check spelling against a broad sample run.
Why was my date rejected?
Dates must use YYYY-MM-DD and the start cannot be later than the end.
Why is a field missing from one row?
NYC records do not populate every optional field for every filing.
The Actor omits empty values.
Why is my applicant search too broad?
Use a longer company fragment or a full license number.
Data source and coverage
The source is NYC Open Data dataset rbx6-tga4, DOB NOW: Build – Approved Permits.
The Actor covers that dataset only.
It does not claim to combine:
- DOB NOW Electrical permits;
- Elevator records;
- Limited Alteration Application records;
- legacy BIS permits;
- private phone or email enrichment;
- property ownership enrichment from third-party sources.
This explicit scope keeps the product reliable and understandable.
Is scraping NYC building permit data legal?
The Actor accesses a public government open-data API without login or circumvention.
Public availability does not remove every legal or compliance obligation.
You are responsible for your use of the data, including outreach, privacy, licensing, retention, and sector-specific rules.
Do not use the output for harassment, discrimination, or unlawful decisions.
Consult qualified counsel for your use case when necessary.
FAQ
Does the Actor need a proxy?
No. It uses the anonymous official NYC Open Data API.
Does it need an NYC account?
No.
Can I schedule daily runs?
Yes. Save the input as an Apify task and add a schedule.
Can I export CSV or Excel?
Yes. Apify datasets support CSV, Excel, JSON, XML, RSS, and API access.
Can I search by contractor?
Use applicantQuery for applicant names, businesses, and licenses.
Can I search by owner?
Yes, with ownerQuery.
Are costs numeric?
Yes. Valid estimated job costs are emitted as JSON numbers.
Are dates normalized?
Yes. Source dates are emitted as ISO timestamps.
How many records can one run save?
Up to 50,000, controlled by maxItems.
Does it enrich emails or phone numbers?
No. It preserves official permit fields only.
Related scrapers
Combine this Actor with other automation-lab tools when your workflow needs additional public construction or business intelligence.
Browse the automation-lab profile:
https://apify.com/automation-lab
A common portfolio workflow is to combine permit monitoring with official business registries, property records, or contact-validation Actors while preserving source lineage.
Build a repeatable NYC construction data pipeline
Start with a 25-record run.
Validate the fields and exact source values.
Save your input as a task.
Schedule the task for the cadence your team needs.
Connect the output dataset to CRM, spreadsheets, alerts, or analytics.
The result is a focused, auditable pipeline for newly approved NYC construction work.