NYC DOB Building Permits Scraper: Contractors & Owners
Pricing
from $9.23 / 1,000 results
NYC DOB Building Permits Scraper: Contractors & Owners
Scrape NYC Department of Buildings permits from DOB NOW across all five boroughs. Extract address, BIN, BBL, work type, job cost, contractor license, filing rep and property owner contacts. Export to JSON, CSV or Excel.
Pricing
from $9.23 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
NYC DOB Building Permits Scraper: Contractors & Owners
Here is one real result, with every field the actor returns (the workOnFloor value is trimmed for length with an ellipsis; the actor returns the full source string):
{"permitNumber": "Q08020327-I1-GC","jobFilingNumber": "Q08020327-I1","permitType": "GC","workType": "General Construction","permitStatus": "Permit Issued","filingReason": "Renewal Permit Without Changes","sequenceNumber": "3","trackingNumber": "100123086","buildingProfileUrl": "https://a810-bisweb.nyc.gov/bisweb/PropertyProfileOverviewServlet?bin=4625499","bin": "4625499","borough": "Queens","address": "86-53 GRAND AVENUE, Queens, NY 11373","houseNumber": "86-53","street": "GRAND AVENUE","zip": "11373","block": "2477","lot": "26","bbl": "4024770026","workOnFloor": "Cellar, Cellar, Cellar, Floor Number(s) 1, Floor Number(s) 1, Mezzanine 1, Floor Number(s) 2 ...","approvedDate": "2023-06-29","issuedDate": "2026-08-07","expiredDate": "2027-01-04","jobDescription": "NEW 5-STORY FIRE STATION BUILDING WITH CELLAR AS PER PLANS FILED HEREWITH. HUB CONSULTATION ACCEPTED ON 8/31.","estimatedJobCost": 8549501,"applicantBusinessName": "ZHL GROUP INC","applicantName": "YEVGENIY LVOVSKIY","applicantBusinessAddress": "2383 MCDONALD AVENUE","applicantLicenseType": "GC","applicantLicenseNumber": "031001","filingRepresentativeName": "YAN BIN LI","filingRepresentativeBusinessName": "YBL NY INC","ownerName": "IRMA FONTAINE","ownerBusinessName": "FDNY","communityBoard": "404","councilDistrict": "30","censusTract": "475","neighborhood": "Elmhurst","latitude": "40.736156","longitude": "-73.87905","observedAt": "2026-08-10T14:18:18.771Z","error": null}
The most complete NYC DOB building permit scraper available. It returns every field the NYC Department of Buildings permit-issuance dataset exposes for each permit, including the contractor (permittee) business and license, the property owner, the estimated job cost, geocoded location and full address, and gives you borough, work-type, license, date and building/contractor/owner filters to target exactly the permits you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor queries the NYC Department of Buildings (DOB) permit-issuance dataset on NYC Open Data, applies the filters you pass as input, paginates through the matching permits (newest issued first), and writes one normalized record per permit to the run's dataset. You can filter by borough, work type, filing reason, permittee license type, permit status and issuance date range, and target a specific building (BIN), street, ZIP, contractor or owner.
Each record carries the permit and job filing numbers, the property address split into components plus the BBL and geocoded lat/long, the estimated job cost and job description, and full contact detail for the permittee (contractor) and the property owner. Missing source values are returned as null, never invented.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the 10 most recently issued permits across all five boroughs.
{"maxPermits": 10}
Add filters to narrow: set borough to BROOKLYN, workType to Plumbing, contractorName to a business name, or bin to a specific building. Every input field is optional.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxPermits | integer | no | 10 | Maximum permit records to collect. Results are newest issued first. |
borough | enum | no | (any) | One NYC borough: MANHATTAN, BRONX, BROOKLYN, QUEENS, STATEN ISLAND. |
workType | enum | no | (any) | Type of work, for example General Construction, Plumbing, Sidewalk Shed, Solar, Full Demolition. |
filingReason | enum | no | (any) | Initial Permit, Renewal Permit Without Changes, Renewal Permit with Changes, No Work Permit. |
licenseType | enum | no | (any) | Permittee license class: GC, P, F, S, R, PE, RA, O, PR. |
permitStatus | enum | no | (issued or signed-off) | Permit Issued or Signed-off. Default returns permits that have actually been issued. |
issuedFrom | string | no | (empty) | Only permits issued on or after this date (YYYY-MM-DD). |
issuedTo | string | no | (empty) | Only permits issued on or before this date (YYYY-MM-DD). |
bin | string | no | (empty) | All permits for a specific 7-digit NYC Building Identification Number (BIN). |
street | string | no | (empty) | Match a street name, for example BROADWAY, PARK AVENUE. |
zip | string | no | (empty) | Match a 5-digit property ZIP code, for example 10022. |
contractorName | string | no | (empty) | Match the permittee (contractor) business name. |
ownerName | string | no | (empty) | Match the property owner name or owner business name. |
searchText | string | no | (empty) | Full-text search across the whole permit record. |
appToken | string | no | (empty) | Optional free Socrata app token to raise the rate limit for very large pulls. The dataset is keyless without it. |
Filters combine with logical AND. Text matches are case-insensitive and match anywhere in the field.
Output reference
One dataset item per permit. Types: string, number, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
permitNumber | string | Permit number (unique per permit), for example Q08020327-I1-GC. |
jobFilingNumber | string | DOB NOW job filing number. |
permitType | string | Permit type code, for example GC, PL, SH. |
workType | string | Work type description. |
permitStatus | string | Permit status, for example Permit Issued, Signed-off. |
filingReason | string | Reason the permit was filed. |
sequenceNumber | string | Permit sequence number. |
trackingNumber | string | DOB tracking number. |
buildingProfileUrl | string | Public NYC building profile (BIS) URL. |
bin | string | Building Identification Number. |
borough | string | Borough name. |
address | string | Full single-line property address. |
houseNumber / street / zip | string | Address components. |
block / lot | string | Tax block and lot. |
bbl | string | Borough-block-lot identifier, or null. |
workOnFloor | string | Floors covered by the work. |
approvedDate | string | Date the permit was approved (YYYY-MM-DD). |
issuedDate | string | Date the permit was issued (YYYY-MM-DD). |
expiredDate | string | Permit expiration date (YYYY-MM-DD), or null. |
jobDescription | string | Narrative description of the work. |
estimatedJobCost | number | Estimated job cost in USD, or null. |
applicantBusinessName | string | Permittee (contractor) business name. |
applicantName | string | Permittee individual name. |
applicantBusinessAddress | string | Permittee business address. |
applicantLicenseType | string | Permittee license class. |
applicantLicenseNumber | string | Permittee license number. |
filingRepresentativeName | string | Filing representative name, or null. |
filingRepresentativeBusinessName | string | Filing representative business name, or null. |
ownerName | string | Property owner name. |
ownerBusinessName | string | Property owner business name, or null. |
communityBoard / councilDistrict / censusTract | string | Civic geography identifiers. |
neighborhood | string | Neighborhood name. |
latitude / longitude | string | Geocoded coordinates, or null. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"maxPermits": 10}). This is a sidewalk-shed permit with a scaffold contractor:
{"permitNumber": "B01440238-I1-SH","jobFilingNumber": "B01440238-I1","permitType": "SH","workType": "Sidewalk Shed","permitStatus": "Permit Issued","filingReason": "Initial Permit","sequenceNumber": "1","trackingNumber": "558957265","buildingProfileUrl": "https://a810-bisweb.nyc.gov/bisweb/PropertyProfileOverviewServlet?bin=3430329","bin": "3430329","borough": "Brooklyn","address": "24 SKILLMAN STREET, Brooklyn, NY 11205","houseNumber": "24","street": "SKILLMAN STREET","zip": "11205","block": "1885","lot": "16","bbl": null,"workOnFloor": "Open Space","approvedDate": "2026-08-04","issuedDate": "2026-08-07","expiredDate": "2026-11-05","jobDescription": "INSTALLATION OF TEMPORARY SIDEWALK SHED AS PER PLANS. NO CHANGE IN USE, EGRESS OR OCCUPANCY.","estimatedJobCost": 1,"applicantBusinessName": "CORE SCAFFOLD SYSTEMS INC","applicantName": "ERIND GAZHELI","applicantBusinessAddress": "417 MYRTLE AVE SUITE 14","applicantLicenseType": "GC","applicantLicenseNumber": "617232","filingRepresentativeName": "ELY SEPULVEDA","filingRepresentativeBusinessName": "AE DESIGN SOLUTION INC.","ownerName": "EDDIE GAZHELI","ownerBusinessName": "OWNERS REP","communityBoard": "303","councilDistrict": "33","censusTract": "1237","neighborhood": "Bedford-Stuyvesant (West)","latitude": "40.697947","longitude": "-73.957795","observedAt": "2026-08-10T14:18:18.771Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~nyc-dob-permits-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"borough":"BROOKLYN","workType":"Plumbing","maxPermits":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~nyc-dob-permits-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"contractorName":"ADVANCED PLUMBING","issuedFrom":"2026-01-01","maxPermits":100}'
Apify CLI:
apify call scrapers_lat/nyc-dob-permits-scraper \--input '{"bin":"4625499"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per permit record returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run. Upgrade for higher
maxPermits.
FAQ and troubleshooting
A run returned 0 records. Why?
The filter combination matched nothing. Loosen filters (remove workType or widen the date range). Zero-result runs are not charged.
How do I find all permits for one building?
Set bin to the 7-digit Building Identification Number. To search by address instead, use street and zip.
How do I find a contractor's recent jobs?
Set contractorName to the permittee business name and optionally issuedFrom to a start date. Results are newest issued first.
What does estimatedJobCost of 1 mean?
Some permit types (for example sidewalk sheds) carry a nominal cost of 1 in the source. The value is the real filed figure, never invented.
Do I need the Socrata app token?
No. The NYC Open Data dataset is keyless. A free appToken only raises the rate limit for very large pulls.
Is this an official NYC tool? No. This actor is independent and has no affiliation with the NYC Department of Buildings or NYC Open Data. It reads only data that is publicly available through NYC Open Data.
Related scrapers
- Chicago Building Permits Scraper: Chicago building permits with contractors.
- NY DOS Business Scraper: New York registered business entities.
- NY Cannabis Licenses Scraper: New York cannabis business licenses.
- LA Business Registrations Scraper: Los Angeles registered businesses.
- California CSLB Scraper: California licensed contractors.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the NYC Department of Buildings or NYC Open Data. Accesses only publicly available data from NYC Open Data.
