# NYC Building Violations & Compliance Lookup (`angelic_hideout/nyc-building-compliance-lookup`) Actor

One compliance record per NYC building from official NYC Open Data: DOB, ECB and HPD violations, FISP/LL11 facade cycle, LL152 gas cycle, boiler, cooling towers and permits. For property managers, contractors, lenders and due diligence.

- **URL**: https://apify.com/angelic_hideout/nyc-building-compliance-lookup.md
- **Developed by:** [Lead Radar NYC](https://apify.com/angelic_hideout) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 building looked ups

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## NYC Building Violations & Compliance Lookup (DOB, HPD, ECB, FISP, LL152)

Paste a list of NYC addresses and get **one compliance snapshot per building** in seconds, built from official NYC Open Data.

### Use cases

- **Property managers:** check a whole portfolio for open DOB, ECB and HPD violations, unpaid ECB balances, and upcoming facade (Local Law 11 / FISP) and gas-piping (Local Law 152) cycles.
- **Contractors** (facade, boiler, gas piping, cooling tower): qualify buildings that face a deadline or have open safety violations before you reach out.
- **Lenders and insurers:** flag compliance risk on collateral or insured buildings before closing or renewal.
- **Due diligence** (buyers, brokers, attorneys): a fast first-pass building record to go alongside title and engineering reports.

No login and no scraping of protected sites. It calls the public NYC Open Data (Socrata) APIs and NYC Planning GeoSearch directly.

### What each record contains

- Building facts from PLUTO: class, floors, units, year built and community district
- Counts of open DOB safety violations (FISP, LL152, boiler and elevator), active DOB/BIS violations, unresolved ECB/OATH violations and the ECB balance on record
- Open HPD violations by class (A/B/C) for buildings with 3 or more residential units
- **Upcoming local-law cycles**: Facade (LL11/FISP) sub-cycle and due date, Local Law 152 gas-piping cycle year, latest boiler inspection filing, and the number of registered cooling towers
- The 10 most recent DOB safety violations, ECB violations and DOB NOW permits
- Source dataset links and a `dataGaps` list showing any dataset that failed to load

Personal names, phone numbers and apartment numbers are deliberately left out.

### Who it's for

Property managers, buyers' due-diligence teams, lenders, brokers, insurers, and contractors (facade, boiler, gas piping) who want a quick compliance snapshot of a list of buildings.

### Input

```json
{ "addresses": ["350 5th Ave, Manhattan", "1 Fordham Plaza, Bronx"], "bins": [], "maxBuildings": 100 }
```

### Example output (trimmed, real run Oct 20, 2026)

```json
{
  "address": "350 5 AVENUE, New York, NY", "bin": "1015862", "bbl": "1008350041",
  "buildingClass": "O4", "floors": 102, "yearBuilt": "1931", "communityDistrict": "105",
  "openDobSafetyViolations": 2, "activeDobBisViolations": 7, "unresolvedEcbViolations": 0,
  "fispRequired": true, "fisp": { "subCycle": "10A", "reportDue": "Feb 21, 2027", "latestFilingCycle": "9" },
  "ll152CycleYear": 2025, "coolingTowerSystems": 2, "dataGaps": [],
  "recentDobSafetyViolations": [ ... ], "recentEcbViolations": [ ... ], "recentPermits": [ ... ],
  "sources": { ... }
}
```

### Pricing

Pay per event: **$0.005 per building looked up** ($5 per 1,000 buildings), plus the standard Apify platform usage. Addresses that can't be resolved return an `error` row and are **not charged**. Each building takes roughly 10–30 seconds because about 12 city datasets are queried.

### Limitations (please read)

City datasets can lag, contain errors or omit records, and a violation shown as open may already be resolved. FISP and LL152 cycles are derived from published rules (block-number digit and community district), so confirm them with DOB. This tool is a public-data summary. It is not legal advice, an inspection or a guarantee of compliance.

Built by Lead Radar NYC (leadradarnyc.com). For questions or custom fields, open an issue on the Actor page.

# Actor input Schema

## `addresses` (type: `array`):

NYC street addresses incl. borough, e.g. '350 5th Ave, Manhattan'

## `bins` (type: `array`):

DOB Building Identification Numbers (optional)

## `maxBuildings` (type: `integer`):

Cap on buildings processed per run

## Actor input object example

```json
{
  "addresses": [
    "350 5th Ave, Manhattan"
  ],
  "maxBuildings": 100
}
```

# Actor output Schema

## `results` (type: `string`):

One record per building

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "addresses": [
        "350 5th Ave, Manhattan"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("angelic_hideout/nyc-building-compliance-lookup").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "addresses": ["350 5th Ave, Manhattan"] }

# Run the Actor and wait for it to finish
run = client.actor("angelic_hideout/nyc-building-compliance-lookup").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "addresses": [
    "350 5th Ave, Manhattan"
  ]
}' |
apify call angelic_hideout/nyc-building-compliance-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,angelic_hideout/nyc-building-compliance-lookup"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/YLeVbOFEagD6srkSw/builds/vqBVdRG9uri3YuNq9/openapi.json
