How to read the score

A score is not a prediction about a specific tenant or building. It shows where multiple displacement-pressure signals appear together at the ZIP code level. A high score means a neighborhood has more public-record indicators associated with housing pressure. A low score does not mean no risk exists.

What this shows

A nightly pipeline that pulls public data from New York City, joins it by Borough Block Lot (BBL), and produces a displacement risk score for every ZIP code in the city. Select a neighborhood to see the score, the signals driving it, and what has been recorded on the ground.

You can also search any landlord or LLC name to see their full NYC portfolio: how many entities they use, which buildings they own, and what violations or evictions are connected to them.

Data sources

Every dataset is public record. Dataset IDs link to the underlying public records where available.

Deed transfers in NYC: document master, buyer/seller parties, and BBL legals. Three joined tables. ACRIS data has a city-side reporting lag of approximately two weeks.

Permit filings from the Department of Buildings. The scorer counts alteration permits (type AL) on residential buildings with 3+ units. Updated daily.

Housing-related complaints including heat, hot water, pests, mold, and maintenance issues. Filtered to displacement-relevant complaint types. Updated daily.

Residential evictions executed by NYC marshals. The scorer uses executed evictions only, not filings. OCA data typically lags 2 to 4 weeks. Updated daily.

Class B and C violations on 3+ unit residential buildings. The scorer uses a 90-day inspection window. Updated daily.

Annual rent-stabilized unit counts per building from DHCR. Used to measure year-over-year RS unit loss. Updated annually.

NYC Dept of City Planning parcel reference data. Used to normalize all signals per residential unit and to join records by BBL. Updated annually.

How scoring works

The score runs from 0 to 100. Higher numbers mean more displacement-pressure signals in the public record.

All displacement signals are measured over the past 365 days (HPD violations use a 90-day window), normalized per residential unit.

Six signals

Signal Weight Window
LLC acquisitions
Residential deed transfers to LLC buyers. LLC-to-LLC transfers (where both buyer and seller are LLCs) and mortgage servicers are excluded.
26% 365 days
Permit filings
Alteration permits (type AL) on 3+ unit residential buildings. Can signal reinvestment, turnover pressure, or building changes.
21% 365 days
311 complaint rate
Housing-related complaints including heat, hot water, pests, mold, and maintenance issues.
17% 365 days
Evictions
Executed residential evictions by NYC marshals. Filed cases that resolved without execution are not counted. OCA data typically lags 2 to 4 weeks.
13% 365 days
HPD violations
Class B and C violations on 3+ unit buildings. Clusters of serious violations can indicate building distress, neglect, or pressure on tenants.
8% 90 days
Rent-stabilized unit loss
Year-over-year loss in registered rent-stabilized units per building. A direct signal of rent-stabilized housing loss when annual comparisons are available.
Dormant until 2027. Requires two consecutive DHCR annual snapshots.
15% Annual

When a signal is dormant, its weight is redistributed proportionally to the active signals so the composite always sums to 100%.

Score ranges

0 – 25 Low pressure
26 – 50 Moderate pressure
51 – 80 High pressure
81 – 100 Critical (alert flag shown)

Bonus signals

These adjust the composite score upward independent of the six weighted signals.

  • +8 pts Building appears on HPD Speculation Watch List
  • +4 pts Owner portfolio over 20 properties citywide
  • +3 pts HPD building registration lapsed

Why scores are normalized

Raw event counts favor dense neighborhoods simply because they have more buildings and residents. PulseCities normalizes all signals per residential unit using MapPLUTO unit counts so the score reflects signal intensity, not neighborhood size.

ZIP codes with zero or null unit counts fall back to the borough median residential unit count to prevent division-by-zero artifacts in lower-density areas.

Methodology reference

PulseCities is inspired by displacement-risk indicator work from the Association for Neighborhood and Housing Development (ANHD), which has been scoring NYC buildings for displacement risk since 2016 using rent-stabilized unit loss, tenant turnover, and sale prices.

PulseCities uses its own scoring model, live data pipeline, and public-record normalization. It is not affiliated with ANHD or the NYC Equitable Development Data Explorer.

Limitations

  • A score is not evidence that a specific landlord is breaking the law. Displacement pressure is not the same as illegal behavior.
  • The score describes current conditions, not predictions. Whether pressure translates to displacement depends on factors outside the data.
  • A high-score neighborhood does not mean every tenant is at risk. A low score does not mean no displacement pressure exists.
  • Public records can lag. ACRIS data typically lags two weeks. Eviction data typically lags two to four weeks.
  • Source data can contain address or entity inconsistencies that affect matching accuracy.
  • Operator matching is conservative and based on public records. Some related entities may not be connected.
The rent stabilization signal is dormant until 2027, when a second consecutive DHCR annual snapshot becomes available. Its 15% weight is redistributed proportionally to the five active signals in the interim. The rent stabilization dataset used for the operator detail view is historical through 2023.

How data updates

Scrapers run every night at 2am UTC. Most datasets refresh daily. ACRIS data has a 2-week reporting lag from the city. Eviction data has a 2 to 4 week reporting lag. The site shows the timestamp of the most recent successful scraper run at the bottom of every page.

Stack

FastAPI PostgreSQL + PostGIS MapLibre GL JS Python scrapers APScheduler Pydantic

Frequently asked questions

What does the score mean?

The score shows how many displacement-pressure signals appear in public records for a ZIP code. A higher number means more indicators are present. It does not predict what will happen to any specific tenant or building.

Does this predict eviction?

No. PulseCities shows where public-record pressure is building, not where evictions will occur. The score reflects activity in the record, not outcomes.

Where does the data come from?

All data is from NYC Open Data: ACRIS deed records, DOB permits, HPD violations, 311 complaints, eviction records, and DHCR rent-stabilized building registrations. Every dataset is public record.

How often is it updated?

Scrapers run nightly at 2am UTC. Most datasets refresh daily. ACRIS data lags approximately two weeks; eviction data lags two to four weeks.

Contact

Questions, corrections, or story tips.

nycdisplacement@gmail.com

Last updated: April 2026