NYC Landlord Registry Lead List — HPD Portfolio Contacts
Pricing
from $8.25 / 1,000 results
NYC Landlord Registry Lead List — HPD Portfolio Contacts
Bulk NYC landlord & managing-agent contact lead lists from HPD building registrations. Killer filter: portfolio size — target owners of 5-50 Bronx buildings. Rolls up buildings per contact with business address, boroughs, ZIPs & samples. For prop-mgmt, insurance, lender & proptech sales.
Pricing
from $8.25 / 1,000 results
Rating
0.0
(0)
Developer
Kyle Maloney
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Build bulk landlord and managing-agent contact lead lists from New York City's legally mandated HPD (Housing Preservation & Development) registration data — with the one filter no flat data dump gives you: portfolio size per landlord. Ask for "owners of 5–50 Bronx buildings" and get one clean lead record per unique contact, with their filed business address and a rollup of every building they're registered on.
Every residential building with 3+ units (and many 1–2 unit non-owner-occupied buildings) in NYC must register annually with HPD and name an owner, head officer, and managing agent. That makes this the most complete, legally mandated landlord contact registry in the United States — refreshed continuously on NYC Open Data.
Who it's for
- Property-management companies prospecting owners in a target borough / portfolio band
- Insurance brokers (landlord policies, umbrella, builders risk) building call lists
- Lenders & mortgage brokers targeting multi-building owners for refi outreach
- Contractors, roofers, boiler/elevator service companies selling to building operators
- Proptech sales teams who need decision-maker (HeadOfficer / Agent) leads, not LLC shells
- Real-estate investors & brokers mapping who actually controls a neighborhood
What it does (the transform)
- Pulls HPD Multiple Dwelling Registrations for your borough/ZIP (dataset
tesw-yqqr). - Filters to current registrations only — registration end date on/after the
dataset's own latest filing date (anchored to the data, not the wall clock; NYC
registrations run in annual cycles ending September 1). Set
includeExpired: trueto keep lapsed registrations too. - Pulls the matching HPD Registration Contacts (dataset
feu5-w2e2) in batched SoQLIN (...)queries, joined onregistrationid. - Groups by normalized contact identity — corporation name (case/punctuation
normalized) or person first+last name, plus filed business address — so the same
management company across 40 buildings becomes ONE lead with
buildings_count: 40. - Applies your lead filters: contact types, min/max portfolio size, entities only.
- Outputs leads sorted by portfolio size (largest first), capped at
maxResults.
Example input
{"borough": "BRONX","contactTypes": ["HeadOfficer", "Agent"],"minPortfolioBuildings": 5,"maxPortfolioBuildings": 50,"entityOnly": false,"maxResults": 500}
How complete is the contact data? (measured, not claimed)
Measured on the actor's own prefill (Bronx, HeadOfficer + Agent, 200 results) against the live datasets on 2026-08-01, n = 200 leads:
| Contact / identity field | Populated |
|---|---|
contact_name | 100.0% |
business_address / business_city / business_state / business_zip | 100.0% |
contact_type / contact_types | 100.0% |
corporation (the identity is itself an LLC) | 38.5% |
affiliated_corporations (the LLC behind a person-named lead) | 41.5% |
| entity identifiable, either way | 80.0% |
contact_title | 43.5% |
contact_middle_initial | 14.0% |
contact_descriptions | 100.0% |
building_bbls / building_bins / buildings | 100.0% |
Mean portfolio: 35.3 buildings per lead. Mean HPD contact rows per lead: see
contact_records_count.
There are no phone numbers or email addresses in this data. HPD publishes name, role, title and a filed business mailing address only, and this actor republishes exactly that - nothing is inferred or appended. If you need a phone, this is the list you feed to a skip-trace, not a replacement for one.
corporation is null on 61.5% of leads because a HeadOfficer row is a natural
person and carries no corporation name. The owning entity is on a different
contact row of the same registration, which v1.0 fetched and discarded. v1.1
publishes it as affiliated_corporations, which is how entity coverage goes from
38.5% to 80.0%. corporation and is_entity keep their exact v1.0 meaning.
Output fields
Lead identity
| Field | Meaning |
|---|---|
contact_name | Person name; falls back to the corporation for pure entity records |
contact_full_name | First, middle initial and last name |
contact_first_name | First name as filed |
contact_middle_initial | Middle initial as filed |
contact_last_name | Last name as filed |
corporation | Corporation/LLC name as filed on THIS identity, or null for an individual |
affiliated_corporations | Corporation names filed on other contact rows of the same registrations - this is how the owning LLC is recovered for a person-named lead |
has_corporate_affiliate | True when at least one affiliated corporation was found |
is_entity | True when the identity itself is a corporation/LLC |
contact_type | Most frequent role: HeadOfficer, Agent, CorporateOwner, IndividualOwner, Officer, SiteManager, JointOwner, Shareholder, Lessee |
contact_types | Every role this identity appears under |
contact_title | Most frequent filed title (MEMBER, PRINCIPAL, TREASURER, PRESIDENT) |
contact_titles | Every distinct filed title |
contact_descriptions | HPD contactdescription values (CORP, GEN.PART, INDIVIDUAL) |
contact_records_count | How many HPD contact rows rolled up into this lead |
business_address | Filed business street address |
business_city | Filed business city |
business_state | Filed business state |
business_zip | Filed business ZIP |
Portfolio
| Field | Meaning |
|---|---|
buildings_count | Portfolio size - distinct registered buildings linked to this contact in the scanned area |
registration_rows_count | HPD registration rows (one per building) behind the portfolio |
registration_ids_count | Distinct HPD registrations this contact appears on. One registration can cover hundreds of buildings |
buildings | Up to 25 buildings, each with address, zip, bbl, bin, building_id, registration_id and registration_end_date |
building_bbls | Up to 25 10-digit Borough-Block-Lot ids, so this joins directly to the rest of the NYC shelf |
building_bins | Up to 25 NYC Building Identification Numbers |
sample_buildings | Up to 5 buildings as "housenumber streetname, borough" |
boroughs | Boroughs the portfolio touches |
borough_count | How many boroughs |
zips | ZIP codes the portfolio touches |
zip_count | How many ZIPs |
community_boards | Community boards the portfolio touches |
newest_registration_date | Most recent lastregistrationdate across the portfolio |
earliest_registration_end_date | Earliest registrationenddate across the portfolio |
latest_registration_end_date | Latest registrationenddate; beyond the next September 1 means an early renewal |
Run provenance and source health
| Field | Meaning |
|---|---|
registrations_status | ok / unavailable for the HPD registration read |
contacts_status | ok / unavailable for the HPD contact join |
anchor_status | ok / not_applicable for the current-registration anchor |
sources_failed | Dataset URLs that did not answer. Empty on a healthy run |
partial_run | True when a contributing source did not fully answer |
current_registrations_only | True when portfolios count only currently registered buildings; false under includeExpired |
anchor_date | The max(lastregistrationdate) the currency filter was anchored to |
registration_rows_scanned | Total HPD registration rows read this run |
contact_rows_scanned | Total HPD contact rows read this run |
data_as_of | UTC date the run executed |
source_url | NYC Open Data page for the contacts dataset |
registrations_source_url | NYC Open Data page for the registrations dataset |
What v1.1 fixed (2026-08-01)
Both sources were re-probed live and the actor was rebuilt around what they actually return. Nothing was removed or renamed.
buildings_count- the entire product - was wrong for the largest portfolios.tesw-yqqris one row per building, not per registration; a single registration id can cover hundreds of buildings. v1.0 indexed by registration id and kept only the first row. Live on 2026-08-01 there are 151,523 current registration rows across only 142,280 distinct ids, so 9,243 rows were being discarded city-wide - 8,999 of Queens' 41,808 rows, 21.5%. Concretely: registration 911741 (a Queens co-op) covers 1,448 buildings; v1.0 published its head officer and its agent as landlords of 1 building each.minPortfolioBuildings/maxPortfolioBuildingswere therefore filtering on a number that could be off by 1,447.- Contact batches truncated silently. v1.0 sent 50 registration ids with a
flat
$limit=5000, no$orderand no paging. Registration 911741 alone carries 8,688 contact rows and 912547 carries 5,352, so a batch containing either lost rows - and with no$order, which rows survived was arbitrary, so the other 49 registrations in that batch could contribute nothing. - Registration paging used a non-total sort key.
$order=registrationidover 9,243 duplicate ids lets Socrata skip or repeat rows across page boundaries. It is nowregistrationid,buildingidand reconciled against thecount(*)the service itself reports. - A failed anchor query silently changed the answer. v1.0 warned and carried
on without the currency filter, turning
buildings_countfrom a current portfolio into a lifetime one. That now fails the run unless you asked forincludeExpired. - A misspelled borough produced a green, zero-row run that reads exactly like "no landlords here". Borough, contact type and ZIP are now validated against the live vocabularies before anything runs.
- The owning LLC, the title and the middle initial were fetched and
discarded. See
affiliated_corporations,contact_title,contact_middle_initial. - Block, lot and BIN were never requested, so the leads could not be joined
to the rest of the NYC shelf. See
building_bbls/building_bins.
Use as an MCP tool
This actor is callable by AI agents (Claude, Cursor, custom agents) via
mcp.apify.com — the described input schema and field-level output docs make it a
clean chainable tool for "find me NYC landlord leads" workflows.
FAQ
How do I get a list of NYC landlords by portfolio size?
Set minPortfolioBuildings / maxPortfolioBuildings (e.g. 5–50) and a borough.
Portfolio size is computed within the scanned area, so a Bronx run counts Bronx buildings.
Is this data legal to use for outreach? The addresses are business addresses filed under NYC Housing Maintenance Code §27-2097, published as public open data by the City of New York precisely so the public can identify who is responsible for a building. No phone numbers or emails are in the source; this actor republishes only what the city publishes.
Which contact type should I target?
HeadOfficer (the decision-maker behind the owning entity) and Agent (the managing
agent who buys services day-to-day) are the highest-value roles. CorporateOwner
rows give you the owning LLC itself.
Does it include expired registrations?
No — by default only current-cycle registrations (end date on/after the dataset's
latest filing date). Set includeExpired: true to include lapsed ones, e.g. to
prospect owners who fell out of compliance.
Can I run it city-wide?
Yes — leave borough empty. Expect a much longer run (~165k current registrations
across all five boroughs); borough-by-borough runs are faster and cheaper.
What about new-landlord alerts? A delta mode (only contacts on registrations filed since your last run) is planned for v1.1.
Pricing
Pay-per-result: you're charged only for the lead records actually pushed to the dataset. Runs that match nothing cost only the minimal actor start.
Data sources
Both are keyless, public NYC Open Data (Socrata) endpoints maintained by the NYC Department of Housing Preservation & Development.
Related actors — the NYC investor shelf
| Actor | What it adds |
|---|---|
| NYC Distressed Property Leads | Which of those buildings are actually under pressure (violations, liens, evictions) |
| NYC ACRIS Deed Transfer Intel | Whether the owner has been buying or selling, with price and cash/LLC flags |
| Parcel Owner Lookup | Address → owner of record for one-off checks |
Typical play: build a portfolio-banded contact list here → screen those BBLs for distress → time the outreach against recent ACRIS activity.