From 00-due-diligence
Generates combined NYC property reports from open data: landmarks, DOB permits/violations, ACRIS records, HPD complaints/registration, BSA variances. Input address, BBL, or BIN.
npx claudepluginhub alpacalabsllc/skills-for-architects --plugin 00-due-diligenceThis skill is limited to using the following tools:
Runs all 6 NYC property data lookups and produces a combined report. For individual lookups, use the standalone skills:
Looks up NYC HPD violations, complaints, and building registration for residential buildings using address, BBL, or BIN from public PLUTO and HPD datasets.
Analyzes zoning envelope rules for NYC lots using PLUTO data and Zoning Resolution. Input address, BBL, or BIN to fetch zoning districts, FAR limits, lot area, and polygon geometry.
Researches neighborhood context and history from an address: adjacent land uses, architectural character, landmarks, commercial activity, planned developments. Outputs markdown analysis.
Share bugs, ideas, or general feedback.
Runs all 6 NYC property data lookups and produces a combined report. For individual lookups, use the standalone skills:
/nyc-landmarks — LPC landmark & historic district check/nyc-dob-permits — DOB permit & filing history/nyc-dob-violations — DOB & ECB violations/nyc-acris — ACRIS property transaction records/nyc-hpd — HPD violations, complaints & registration/nyc-bsa — BSA variances & special permitsNo API key required — all queries use NYC Open Data (Socrata) with PLUTO for address resolution.
/nyc-property-report 120 Broadway, Manhattan
/nyc-property-report 1000770001 (BBL)
/nyc-property-report 1001389 (BIN)
Accept one of:
Borough codes: Manhattan=1/MN, Bronx=2/BX, Brooklyn=3/BK, Queens=4/QN, Staten Island=5/SI
Strip apartment/unit/floor suffixes. Handle hyphenated Queens addresses.
By BBL:
https://data.cityofnewyork.us/resource/64uk-42ks.json?bbl={BBL}
By address:
https://data.cityofnewyork.us/resource/64uk-42ks.json?$where=upper(address) LIKE '%{STREET}%'&borough='{BORO_CODE}'&$limit=5
Address normalization: Uppercase, strip unit/apt. Borough names to codes: Manhattan=MN, Bronx=BX, Brooklyn=BK, Queens=QN, Staten Island=SI. If multiple results, ask user to pick. If zero, try variations or suggest BBL.
Store: bbl, bin/bldgbin, address, borough, zipcode, cd, bldgclass, zonedist1, yearbuilt, ownername, numfloors, lotarea, bldgarea, unitstotal, histdist, latitude, longitude.
Parse BBL: boro (1 digit), block (5 digits zero-padded), lot (4 digits zero-padded).
Query each domain in sequence. If any query fails, note the error and continue with the next domain.
Read socrata-reference.md (in this skill's directory) for the full API reference with field names and SoQL patterns.
By BIN: https://data.cityofnewyork.us/resource/7mgd-s57w.json?bin_number={BIN}
Fallback by BBL: https://data.cityofnewyork.us/resource/7mgd-s57w.json?bbl={BBL}
Also check PLUTO histdist field — if set, property is in a historic district.
Key fields: lpc_name, lpc_number, date_designated, building_type, style, architect, historic_district_name, status
IMPORTANT: Legacy datasets use bin__ (double underscore). DOB NOW uses bin.
Legacy permits: https://data.cityofnewyork.us/resource/ipu4-2q9a.json?$where=bin__='{BIN}'&$order=issuance_date DESC&$limit=30
Legacy filings: https://data.cityofnewyork.us/resource/ic3t-wcy2.json?$where=bin__='{BIN}'&$order=latest_action_date DESC&$limit=30
DOB NOW permits: https://data.cityofnewyork.us/resource/rbx6-tga4.json?$where=bin='{BIN}'&$order=approved_date DESC&$limit=30
DOB NOW filings: https://data.cityofnewyork.us/resource/w9ak-ipjd.json?$where=bin='{BIN}'&$order=filing_date DESC&$limit=30
Merge, sort by date DESC, group by job type (NB, A1, A2, A3, DM, Other).
DOB violations: https://data.cityofnewyork.us/resource/3h2n-5cm9.json?$where=bin='{BIN}'&$order=issue_date DESC&$limit=50
ECB violations: https://data.cityofnewyork.us/resource/6bgk-3dad.json?$where=bin='{BIN}'&$order=violation_date DESC&$limit=50
Active violations: https://data.cityofnewyork.us/resource/sjhj-bc8q.json?$where=bin='{BIN}'
Flag open violations with ⚠. Show ECB penalties.
Requires BBL (not BIN). Uses separate borough/block/lot fields.
Step A — Legals: https://data.cityofnewyork.us/resource/8h5j-fqxa.json?borough={boro}&block={block}&lot={lot}&$order=good_through_date DESC&$limit=20
Step B — Master: https://data.cityofnewyork.us/resource/bnx9-e6tj.json?$where=document_id IN ('{id1}','{id2}',...)&$order=doc_date DESC
Step C — Parties: https://data.cityofnewyork.us/resource/636b-3b5g.json?$where=document_id IN ('{id1}','{id2}',...)
Step D — Doc codes: https://data.cityofnewyork.us/resource/7isb-wh4c.json?$limit=200
Join by document_id. Party type 1=Grantor, 2=Grantee. Group by doc type (Deeds, Mortgages, Other).
First check bldgclass — HPD only applies to residential (classes starting with A, B, C, D, R, S). If non-residential, skip with note.
Uses boroid (not borough) and separate block/lot fields.
Violations: https://data.cityofnewyork.us/resource/wvxf-dwi5.json?$where=boroid='{boro}' AND block='{block}' AND lot='{lot}'&$order=inspectiondate DESC&$limit=50
Open violations: https://data.cityofnewyork.us/resource/csn4-vhvf.json?$where=boroid='{boro}' AND block='{block}' AND lot='{lot}'
Complaints: https://data.cityofnewyork.us/resource/ygpa-z7cr.json?$where=boroid='{boro}' AND block='{block}' AND lot='{lot}'&$order=receiveddate DESC&$limit=30
Registrations: https://data.cityofnewyork.us/resource/tesw-yqqr.json?$where=boroid='{boro}' AND block='{block}' AND lot='{lot}'
Flag Class C violations with ⚠ (immediately hazardous).
By BBL: https://data.cityofnewyork.us/resource/yvxd-uipr.json?$where=bbl='{BBL}'&$order=calendar_date DESC
Address fallback: https://data.cityofnewyork.us/resource/yvxd-uipr.json?$where=upper(premises_address) LIKE '%{STREET}%' AND borough='{BOROUGH}'&$order=calendar_date DESC
Write to working directory as property-{address-slug}.md.
# NYC Property Report — {Address}
**Generated:** {date}
**BBL:** {bbl} | **BIN:** {bin}
**Source:** NYC Open Data (Socrata)
---
## 1. Property Identification
| Field | Value |
|-------|-------|
| BBL | {bbl} |
| BIN | {bin} |
| Borough | {borough} |
| Block | {block} |
| Lot | {lot} |
| ZIP | {zip} |
| Community District | {cd} |
| Building Class | {bldgclass} |
| Zoning | {zonedist1} |
| Year Built | {yearbuilt} |
| Floors | {numfloors} |
| Lot Area | {lotarea} SF |
| Building Area | {bldgarea} SF |
| Owner | {ownername} |
| Coordinates | {lat}, {lon} |
---
## 2. Landmark Status
{LANDMARKED / IN HISTORIC DISTRICT / NOT DESIGNATED}
{If landmarked: LP number, name, date, district, architect, style}
{Implications note if designated}
---
## 3. DOB Permits & Filings
**Total found:** {count} ({x} legacy, {y} DOB NOW)
{Tables grouped by NB, A1, A2/A3, DM, Other}
---
## 4. DOB Violations
### ⚠ Open Violations: {count}
{Open violations table}
### All DOB Violations
{Table}
### ECB Violations
{Table with penalties}
**Total penalties assessed:** ${amount}
---
## 5. Property Records (ACRIS)
### Deeds (Ownership)
{Table — current owner from most recent deed}
### Mortgages
{Table}
### Other Documents
{Table}
---
## 6. HPD — Housing Preservation & Development
{If non-residential: "Building class {X} — HPD records not applicable."}
{If residential: Registration, open violations by class, complaints}
---
## 7. BSA — Board of Standards and Appeals
{Applications table or "No BSA applications found (records from 1998-present)."}
---
*Generated by /nyc-property-report — NYC Open Data*
*Data currency varies by dataset. Verify critical findings with source agencies.*
After writing the file, print a brief inline summary:
Property report written: property-120-broadway.md
Key findings:
- Landmark: Not designated
- DOB Permits: 47 found (3 active filings)
- Open Violations: 2 (1 ECB with $25,000 penalty)
- Owner: {name} (per ACRIS deed YYYY-MM-DD)
- HPD: N/A (commercial building)
- BSA: 1 approved variance (2004)
Run /zoning-analysis-nyc for zoning envelope data.
NYC_SOCRATA_TOKEN.numbldgs > 1, note that lot has multiple buildings.