$npx -y skills add AlpacaLabsLLC/skills-for-architects --skill nyc-acrisLook up ACRIS property transaction records for any NYC property — deeds, mortgages, satisfactions, liens, and ownership history. Use when the user asks who owns a building, when it last sold or for how much, or whether there are mortgages or liens against it. NYC only; for permit
| 1 | # /nyc-acris — ACRIS Property Transaction Records |
| 2 | |
| 3 | Look up ACRIS (Automated City Register Information System) property records — deeds, mortgages, liens, and other recorded documents. Uses a 3-table join across Legals, Master, and Parties datasets. No API key required. |
| 4 | |
| 5 | ## Usage |
| 6 | |
| 7 | ``` |
| 8 | /nyc-acris 120 Broadway, Manhattan |
| 9 | /nyc-acris 1000770001 (BBL) |
| 10 | /nyc-acris 1001389 (BIN) |
| 11 | ``` |
| 12 | |
| 13 | ## Steps 1–2: Parse Input & Resolve BBL |
| 14 | |
| 15 | Read `../nyc-property-report/pluto-resolution.md` (shared by all 7 NYC due-diligence skills) and follow it: parse the input (address, BBL, or BIN) and resolve via PLUTO. |
| 16 | |
| 17 | **This skill's delta:** parsing the BBL into separate boro/block/lot components (per the shared file) is REQUIRED — the ACRIS Legals table has no combined BBL field. BIN resolution is only needed when the user's input was a BIN. |
| 18 | |
| 19 | ## Step 3: Query ACRIS (3-Table Join) |
| 20 | |
| 21 | Dataset IDs and field names are canonical in `../nyc-property-report/socrata-reference.md` — on any disagreement, the reference wins. |
| 22 | |
| 23 | **IMPORTANT:** ACRIS requires BBL (not BIN). The Legals table uses separate `borough`, `block`, `lot` fields — not a combined BBL field. |
| 24 | |
| 25 | ### Step 3a: Get Document IDs from Legals Table |
| 26 | ``` |
| 27 | https://data.cityofnewyork.us/resource/8h5j-fqxa.json?borough={boro}&block={block}&lot={lot}&$order=good_through_date DESC&$limit=20 |
| 28 | ``` |
| 29 | Extract `document_id` from each row. These are the join keys for the next two queries. |
| 30 | |
| 31 | ### Step 3b: Get Document Details from Master Table |
| 32 | Build a `$where` clause with the document_ids from Step 3a: |
| 33 | ``` |
| 34 | https://data.cityofnewyork.us/resource/bnx9-e6tj.json?$where=document_id IN ('{id1}','{id2}','{id3}',...)&$order=document_date DESC |
| 35 | ``` |
| 36 | Key fields: `document_id`, `record_type`, `crfn`, `doc_type`, `document_date`, `document_amt`, `recorded_datetime` (NOT `doc_date`/`doc_amount`/`recorded_filed` — those fields don't exist and 400) |
| 37 | |
| 38 | ### Step 3c: Get Parties from Parties Table |
| 39 | Same document_ids: |
| 40 | ``` |
| 41 | https://data.cityofnewyork.us/resource/636b-3b5g.json?$where=document_id IN ('{id1}','{id2}','{id3}',...) |
| 42 | ``` |
| 43 | Key fields: `document_id`, `party_type`, `name`, `address_1`, `city`, `state`, `zip` |
| 44 | |
| 45 | Party types: `1` = Grantor (seller/borrower/assignor), `2` = Grantee (buyer/lender/assignee) |
| 46 | |
| 47 | ### Step 3d: Look Up Document Type Codes |
| 48 | Fetch once to translate `doc_type` codes to descriptions: |
| 49 | ``` |
| 50 | https://data.cityofnewyork.us/resource/7isb-wh4c.json?$limit=200 |
| 51 | ``` |
| 52 | Common codes: DEED, MTGE (Mortgage), AGMT (Agreement), ASST (Assignment), SAT (Satisfaction), RPTT (Transfer Tax), ALIS (Assignment of Leases), UCC1 (UCC Filing), MCON (Mortgage Consolidation) |
| 53 | |
| 54 | ### Joining the Data |
| 55 | |
| 56 | For each document_id: |
| 57 | 1. Get date, type, and amount from Master |
| 58 | 2. Get grantor(s) and grantee(s) from Parties |
| 59 | 3. Translate doc_type code using the codes table |
| 60 | 4. Group by document type category |
| 61 | |
| 62 | ## Step 4: Print Results |
| 63 | |
| 64 | ```markdown |
| 65 | ## Property Records (ACRIS) — {Address} |
| 66 | |
| 67 | **BBL:** {bbl} (Borough {boro}, Block {block}, Lot {lot}) |
| 68 | **Documents found:** {count} (showing 20 most recent) |
| 69 | |
| 70 | ### Deeds (Ownership) |
| 71 | | Date | Doc Type | Amount | From (Grantor) | To (Grantee) | |
| 72 | |------|----------|--------|----------------|--------------| |
| 73 | | YYYY-MM-DD | Deed | $X,XXX,XXX | ... | ... | |
| 74 | |
| 75 | **Current owner (per most recent deed):** {grantee name} |
| 76 | |
| 77 | ### Mortgages |
| 78 | | Date | Amount | Lender (Grantee) | Borrower (Grantor) | |
| 79 | |------|--------|-------------------|---------------------| |
| 80 | | YYYY-MM-DD | $X,XXX,XXX | ... | ... | |
| 81 | |
| 82 | ### Other Documents |
| 83 | | Date | Doc Type | Amount | Grantor | Grantee | |
| 84 | |------|----------|--------|---------|---------| |
| 85 | | ... | Assignment | ... | ... | ... | |
| 86 | |
| 87 | **Note:** Condo units may have records on both the unit lot and the parent condo lot. If results seem incomplete, try querying the main condo lot as well. |
| 88 | |
| 89 | Source: [ACRIS Real Property](https://data.cityofnewyork.us/City-Government/ACRIS-Real-Property-Master/bnx9-e6tj) |
| 90 | ``` |
| 91 | |
| 92 | If no documents found: "No ACRIS records found for this property." |
| 93 | |
| 94 | ### Conventions |
| 95 | - All dates: YYYY-MM-DD |
| 96 | - Dollar amounts: comma-separated ($1,234,567) |
| 97 | - Limit to 20 most recent documents. Note if truncated. |
| 98 | - If Socrata returns empty array: "No results found" |
| 99 | - If HTTP error: note it and suggest checking the address |
| 100 | - If the user requests, write results to a file |
| 101 | |
| 102 | ## Final Step: Disclaimer + Marker (required) |
| 103 | |
| 104 | This skill produces regulatory output. End every report this skill produces — printed in chat or saved to a file — with the canonical disclaimer block from `rules/professional-disclaimer.md`, followed by one blank line and the machine-readable marker, exactly as shown: |
| 105 | |
| 106 | ```markdown |
| 107 | > **Disclaimer:** Thi |