NYC DOB Permits, Violations & Complaints Scraper avatar

NYC DOB Permits, Violations & Complaints Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
NYC DOB Permits, Violations & Complaints Scraper

NYC DOB Permits, Violations & Complaints Scraper

Pulls NYC Department of Buildings permits, violations, job filings and complaints, filterable by borough, block or contractor, priced per result.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

M Usama

M Usama

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Categories

Share

What does NYC DOB Permits, Violations & Complaints Scraper do?

It pulls building permits, DOB violations, job application filings and complaints from the NYC Department of Buildings, filtered by borough, tax block or contractor business name. Every record carries the address, block, lot, BIN, status and date up front, plus dataset specific fields like job type, business name, violation type or complaint category. Pricing is per result returned.

Data source

Public JSON APIs on the NYC Open Data Socrata portal (data.cityofnewyork.us): DOB NOW Approved Permits, DOB Violations, DOB NOW Job Application Filings and DOB Complaints Received, updated by the city on an ongoing basis, no login required.

Why use it?

  • Lead generation: find recently permitted construction jobs and the contractors filing them, by borough or block.
  • Due diligence: check open violations and complaints on a building before a purchase or lease.
  • Compliance monitoring: track a contractor's active permits and violation history across boroughs.
  • Replaces manually paging through the NYC Building Information System or Socrata's raw dataset browser.

How to use it

  1. Open the Actor and pick a record type: permits, violations, job filings or complaints.
  2. Set a borough, tax block or contractor name to narrow the results, and a max results cap.
  3. Click Start. Download results as JSON, CSV or Excel, or read them through the API.
  4. Add a Schedule and an Integration (Slack, Google Sheets, webhook) to get new records automatically.

Input

FieldDescription
recordTypeWhich dataset to pull: permits, violations, jobFilings or complaints. Default permits.
boroughManhattan, Bronx, Brooklyn, Queens or Staten Island. Leave blank for all boroughs.
blockTax block number. Matches with or without leading zeros. Not used for complaints.
contractorNameFilter by applicant, filing representative or owner business name. Permits and job filings only.
maxResultsHard stop for the run. You are billed per result, so this caps the cost.
proxyConfigurationApify proxy is recommended for larger runs.

Example input:

{
"recordType": "permits",
"borough": "Manhattan",
"block": "",
"contractorName": "",
"maxResults": 50
}

Output

Every record has a recordType, id and the fields for that dataset. A permit record looks like:

{
"id": "permit:M01248246-I1:M01248246-I1-EW-SP",
"recordType": "permit",
"borough": "Manhattan",
"address": "12 EAST 52 STREET",
"block": "1287",
"lot": "62",
"bin": "1035477",
"status": "Signed-off",
"date": "2025-09-19T00:00:00",
"jobType": "Sprinklers",
"businessName": "STALWART PLUMBING CORP",
"ownerBusinessName": "PR",
"jobDescription": "REMOVAL OF SPRINKLER HEADS AND RELATED PIPING AS SHOWN ON DRAWINGS. NO CHANGE TO USE, EGRESS OR OCCUANCY.",
"filingReason": "Initial Permit",
"estimatedJobCosts": 20000,
"expirationDate": "2026-06-06T00:00:00",
"jobFilingNumber": "M01248246-I1",
"workPermit": "M01248246-I1-EW-SP",
"trackingNumber": "912522473",
"latitude": 40.759481,
"longitude": -73.975581,
"scrapedAt": "2026-09-30T09:01:39.959Z"
}
FieldMeaning
idStable key, safe for deduplication between runs
recordTypepermit, violation, jobFiling or complaint
boroughManhattan, Bronx, Brooklyn, Queens or Staten Island
addressHouse number and street
block / lot / binNYC tax block, lot and building identification number
statusPermit, violation, filing or complaint status as published by DOB
dateMain date for the record, in ISO format
businessNameApplicant, filing representative or contractor firm (permits and job filings)
violationType, complaintCategory, ...Extra fields specific to the chosen record type

Pricing

Pay per event: a small fee when a run starts, then a fixed price per result returned. You only pay for records that pass your filters. Set maxResults to cap any run.

Limitations

  • Older BIS era permits are not included; permits come from the current DOB NOW system.
  • Some fields are occasionally blank or inconsistent in the source data (DOB is the publisher, not this Actor).
  • block filtering is not available for the complaints dataset, which the city does not publish with a block field.
  • contractorName filtering only applies where DOB publishes a business name (permits and job filings).

FAQ

Is this legal? The Actor reads NYC Open Data's public Socrata API, the same data anyone can browse or download for free without a login, and stores only business information the city publishes for that purpose. You are responsible for how you use the data.

Something is missing or broken? Open an issue in the Issues tab; response time is usually under a day.