NYC DOB NOW Building Permits Scraper avatar

NYC DOB NOW Building Permits Scraper

Pricing

Pay per event + usage

Go to Apify Store
NYC DOB NOW Building Permits Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

GroupExample fields
Permit identityjob filing number, work permit, sequence, tracking number
Statuspermit status, filing reason
Datesapproved date, issued date, expiry date
Sitehouse number, street, full address, borough, ZIP
Propertyblock, lot, BIN, BBL
Workwork type, floor, apartment/condo, job description
Valueestimated job cost
Applicantname, business, license, license type, address
Ownername, business, street, city, state, ZIP
Geographycommunity board, council district, census tract, NTA
Coordinateslatitude, longitude
Provenanceapplied 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

  1. Open the Actor input page.
  2. Choose an issue-date range or keep the rolling 30-day default.
  3. Add borough, ZIP, work type, status, or filing-reason filters.
  4. Optionally add project-value, applicant, or owner filters.
  5. Set a small maxItems for a first run.
  6. Click Start.
  7. Review results in the Dataset tab.
  8. 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, formatted YYYY-MM-DD.
  • issuedTo: last issue date, formatted YYYY-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 as MANHATTAN, BROOKLYN, or QUEENS.
  • 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 tierPrice 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 maxItems only 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:

  1. save an input for your territory and trade;
  2. schedule it daily in Apify;
  3. use a narrow rolling issue-date window;
  4. export results to a named dataset or integration;
  5. deduplicate on jobFilingNumber, workPermit, sequenceNumber, and workType;
  6. 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 os
from apify_client import ApifyClient
client = 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().items
print(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-DD dates.
  • Keep issuedFrom before or equal to issuedTo.
  • 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.

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.

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.