ReRentalAlert
Checking 12 sources. Last check just now.

Browse re-rentals

Browse the map

Listings

Browse re-rentals

About listing data

Some landlords don't publish income limits. We show those listings instead of hiding them, so check the flyer before ruling yourself out. Reside listings come from their application board, which doesn't include rent or unit details.

Bedrooms
Status
Borough
More
More filters

Shows listings at or below this share of area median income.

309 listings match

Found today

Yesterday

$795 to $3,352 New per month Building rent range
Studio
Studio in Bronx
1115 Commonwealth Ave (100% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 22h ago
Email
$1,602 per month
Studio
Studio in Bronx
1115 Commonwealth Ave (60% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$1,713 per month
1BR
1 bedroom in Bronx
1115 Commonwealth Ave (60% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$2,231 per month
1BR
1 bedroom in Bronx
1115 Commonwealth Ave (100% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$795 to $3,352 per month Building rent range
2BR
2 bedrooms in Bronx
1115 Commonwealth Ave (100% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$2,859 per month
Studio
Studio in Jamaica
147-36 94TH AVENUE (120% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$3,574 per month
Studio
Studio in Jamaica
147-36 94TH AVENUE (165% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$2,910 per month
1BR
1 bedroom in Jamaica
147-36 94TH AVENUE (120% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$3,821 per month
1BR
1 bedroom in Jamaica
147-36 94TH AVENUE (165% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$3,475 per month
2BR
2 bedrooms in Jamaica
147-36 94TH AVENUE (120% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$4,568 per month
2BR
2 bedrooms in Jamaica
147-36 94TH AVENUE (165% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 1d ago
Email
$795 to $1,003 per month
Studios to 2 bedrooms
Studios to 2 bedrooms in Mount Hope
2028 CRESTON AVENUE (30% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 1d ago
Waitlist
$3,220 per month
not published
Apartment in Melrose
1135 Teller Ave #Apt 3E
Available unit
Listed by Reside New York, Found 1d ago
Online form
$1,601 per month
not published
Apartment in Crotona Park East
1281 Hoe Ave #Apt 7E
Available unit
Listed by Reside New York, Found 1d ago
Online form
$1,601 per month
not published
Apartment in Crotona Park East
1281 Hoe Ave #Apt 8A
Available unit
Listed by Reside New York, Found 1d ago
Online form
$3,397 per month
not published
Apartment in Bronx
138 Bruckner Blvd #Apt 522
Available unit
Listed by Reside New York, Found 1d ago
Online form
$3,323 per month
not published
Apartment in Bronx
1433 Teller Ave #Apt 3D
Available unit
Listed by Reside New York, Found 1d ago
Online form
$3,862 per month
not published
Apartment in Brooklyn
1718 President Street #Apt 6D
Available unit
Listed by Reside New York, Found 1d ago
Online form
$3,261 per month
not published
Apartment (location not listed)
20 & 30 Halletts Point
Available unit Location couldn't be verified
Listed by Reside New York, Found 1d ago
Online form
$3,128 per month
not published
Apartment in Bronx
2180 Walton Avenue #Apt 10B
Available unit
Listed by Reside New York, Found 1d ago
Online form
$2,883 per month
not published
Apartment in Brownsville
254 Amboy Street #Apt 2B
Available unit
Listed by Reside New York, Found 1d ago
Online form
$3,222 per month
not published
Apartment in Bedford Park
3001 Grand Concourse #Apt 6D
Available unit
Listed by Reside New York, Found 1d ago
Online form
$2,705 per month
not published
Apartment in Bronx
3923 Carpenter Ave #Apt 3C
Available unit
Listed by Reside New York, Found 1d ago
Online form
$2,800 per month
not published
Apartment in East New York-New Lots
647 Sheffield Ave #Apt 1A
Available unit
Listed by Reside New York, Found 1d ago
Online form
$1,608 per month
not published
Apartment in Hunts Point
661 Manida Street #Apt 3C
Available unit
Listed by Reside New York, Found 1d ago
Online form
$1,802 per month
not published
Apartment in Hunts Point
661 Manida Street #Apt 4A
Available unit
Listed by Reside New York, Found 1d ago
Online form
$3,037 per month
not published
Apartment in Williamsbridge-Olinville
765 East 214 #Apt 302
Available unit Location couldn't be verified
Listed by Reside New York, Found 1d ago
Online form
$2,158 per month
not published
Apartment in Brooklyn
875 4th Avenue #Apt 302
Available unit
Listed by Reside New York, Found 1d ago
Online form

Earlier this week

$3,434 per month
not published
Apartment in Highbridge
1000 Woodycrest Ave #Apt 6A
Available unit
Listed by Reside New York, Found 2d ago
Online form
$5,002 per month
not published
Apartment in Bronx
1010 Washington Avenue #Apt 1016
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,747 per month
not published
Apartment in Tremont
106 Mt. Hope Place #Apt 3D
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,749 per month
not published
Apartment in Tremont
106 Mt. Hope Place #Apt 7E
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,727 per month
not published
Apartment in Tremont
106 Mt. Hope Place #Apt 6C
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,466 per month
not published
Apartment in Bronx
1169 Hoe Ave #Apt 3E
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,095 per month
not published
Apartment in Highbridge
128 West 167 Street #Apt 7C
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$3,001 per month
not published
Apartment in Bronx
1315 Findlay Avenue #Apt 3C
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,851 per month
not published
Apartment in Bronx
1315 Findlay Avenue #Apt 4C
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,405 per month
not published
Apartment in Bronx
1351 Jerome Avenue #Apt 608
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,824 per month
not published
Apartment in Morrisania
1361 Teller Ave #Apt 3E
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,889 per month
not published
Apartment in Queens
137-20 45th Ave #Apt 5L
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,855 per month
not published
Apartment in Queens
137-20 Colden Street #Apt 2N
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,042 per month
not published
Apartment in Bronx
1433 Teller Ave #Apt CA
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,323 per month
not published
Apartment in Bronx
1433 Teller Avenue #Apt 3D
Available unit
Listed by Reside New York, Found 2d ago
Online form
$4,568 per month
not published
Apartment in Manhattanville-West Harlem
1440 Amsterdam Avenue #Apt 2 bedroom
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,195 per month
not published
Apartment in Manhattanville-West Harlem
1440 Amsterdam Avenue #Apt 702
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,595 per month
not published
Apartment in Manhattanville-West Harlem
1440 Amsterdam Avenue #Apt : 1 Bedroom
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,195 per month
not published
Apartment in Manhattanville-West Harlem
1440 Amsterdam Avenue #Apt Studio
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,128 per month
not published
Apartment in Greenpoint
16 Dupont Street #Apt 30A
Available unit
Listed by Reside New York, Found 2d ago
Online form
$4,367 per month
not published
Apartment in Bronx
1677 Townsend Ave #Apt 7A
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,412 per month
not published
Apartment in Brooklyn
1718 President Street #Apt 10B
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,455 per month
not published
Apartment (location not listed)
1847 Cross Brox #Apt 4B
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$3,237 per month
not published
Apartment in Tremont
2061 Crotona Ave #Apt 2C
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,788 per month
not published
Apartment in Tremont
2061 Crotona #Apt 4B
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,037 per month
not published
Apartment in Tremont
2072 Anthony Ave #Apt 4J
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,941 per month
not published
Apartment in Pelham Parkway-Van Nest
2140 Matthews Ave #Apt 4A
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,128 per month
not published
Apartment in Bronx
2180 Walton Avenue #Apt 4C
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,351 per month
not published
Apartment in Kingsbridge-Marble Hill
230 w 150 St #Apt 4F
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$3,072 per month
not published
Apartment in Highbridge
237 West 167th Street #Apt 4E
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,653 per month
not published
Apartment in Long Island City-Hunters Point
25-01 Queens Plaza North #Apt 1019
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,299 per month
not published
Apartment in Long Island City-Hunters Point
25-01 Queens Plaza North #Apt 325
Available unit
Listed by Reside New York, Found 2d ago
Online form
$4,316 per month
not published
Apartment in Long Island City-Hunters Point
25-01 Queens Plaza North #Apt 503
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,500 per month
not published
Apartment in Long Island City-Hunters Point
25-01 Queens Plaza North #Apt 619
Available unit
Listed by Reside New York, Found 2d ago
Online form
$4,366 per month
not published
Apartment in Long Island City-Hunters Point
25-01 Queens Plaza North #Apt 903
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,653 per month
not published
Apartment in Long Island City-Hunters Point
25-01 Queens Plaza North #Apt 905
Available unit
Listed by Reside New York, Found 2d ago
Online form
$4,349 per month
not published
Apartment in Manhattan
250 West 49th Street #Apt 406
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,595 per month
not published
Apartment in Tremont
256 Mount Hope Place #Apt 7B
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,593 per month
not published
Apartment in Chelsea-Hudson Yards
2588 7 Ave #Apt 2K
Available unit
Listed by Reside New York, Found 2d ago
Online form
$1,437 per month
not published
Apartment in Manhattan
2588 7th Ave #Apt 6F
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$1,221 per month
not published
Apartment in Midtown-Times Square
2816 8th Ave #Apt 4H
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,819 per month
not published
Apartment in Cypress Hills
2817 Atlantic Ave #Apt 7C
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,778 per month
not published
Apartment in Melrose
378 East 165 Street #Apt 202
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$2,593 per month
not published
Apartment in Queens
44-15 Colden Street #Apt 1S
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,593 per month
not published
Apartment in Queens
44-15 Colden Street #Apt 2E
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,816 per month
not published
Apartment in Queens
44-35 Colden Street #Apt 1L
Available unit
Listed by Reside New York, Found 2d ago
Online form
$830 per month
not published
Apartment in Park Slope
44-72 11th Street #Apt A503
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$815 per month
not published
Apartment in Park Slope
44-72 11th Street #Apt B503
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$2,593 per month
not published
Apartment in Queens
45-15 Colden Street #Apt 1B
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,593 per month
not published
Apartment in Queens
45-15 Colden Street #Apt 1C
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,165 per month
not published
Apartment in Bronx
510 East 148 #Apt 3B
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$3,835 per month
not published
Apartment in Bronx
633 East 230th Street #Apt 7D
Available unit
Listed by Reside New York, Found 2d ago
Online form
$1,929 per month
not published
Apartment in Bronx
65 Buchanan Place #Apt 3B-07
Available unit
Listed by Reside New York, Found 2d ago
Online form
$4,341 per month
not published
Apartment in Bronx
689 East 223rd #Apt 5D
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,020 per month
not published
Apartment in Williamsbridge-Olinville
765 East 214 Street #Apt 703
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$3,950 per month
not published
Apartment in University Heights (South)-Morris Heights
86 West 174 St #Apt 3B
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$3,698 per month
not published
Apartment in Bronx
873 E 228th Street #Apt 1A
Available unit
Listed by Reside New York, Found 2d ago
Online form
$2,591 per month
not published
Apartment in Brooklyn
885 Rogers Avenue #Apt 407
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,142 per month
not published
Apartment in Norwood
94 East 208th Street #Apt 1B
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,222 per month
not published
Apartment in Brooklyn
947 Sheridan Ave. #Apt 3C
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,290 per month
not published
Apartment in Rego Park
99-49 66th Ave #Apt 4C
Available unit
Listed by Reside New York, Found 2d ago
Online form
$3,495 per month
not published
Apartment (location not listed)
Douglass Street Apartments #Apt 8L
Available unit Location couldn't be verified
Listed by Reside New York, Found 2d ago
Online form
$1,470 per month
Studio
Studio in Queens
62-41 Forest Ave, Ridgewood (130% AMI)
Available unit
Listed by MGNY Consulting, Found 2d ago
Online form
$1,482 to $2,029 per month
1 to 3 bedrooms
1 to 3 bedrooms in Brownsville
1740 - 1760 PROSPECT PLACE & 396 SARATOGA AVENUE (50% AMI)
Waitlist open Location couldn't be verified
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,800 to $2,470 per month
1 to 3 bedrooms
1 to 3 bedrooms in Brownsville
1740 - 1760 PROSPECT PLACE & 396 SARATOGA AVENUE (60% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,482 to $2,029 per month
1 to 3 bedrooms
1 to 3 bedrooms in Brownsville
1743 - 1765 PROSPECT PLACE (50% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,800 to $2,470 per month
1 to 3 bedrooms
1 to 3 bedrooms in Brownsville
1743 - 1765 PROSPECT PLACE (60% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$2,437 to $3,352 per month
1 to 3 bedrooms
1 to 3 bedrooms in Mott Haven-Port Morris
255 E 138TH STREET (100% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$3,293 to $3,793 per month
2 to 3 bedrooms
2 to 3 bedrooms in Mount Hope
2028 CRESTON AVENUE (120% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$2,489 per month
Studio
Studio in Queens
5203 CENTER BLVD (130% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$3,286 to $3,478 per month
1BR
1 bedroom in Queens
5203 CENTER BLVD (165% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$4,052 to $4,163 per month
2BR
2 bedrooms in Queens
5203 CENTER BLVD (165% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist

Earlier listings

$1,260 per month
Studio
Studio in Lower East Side
#Lower East Side - Studio - 80% (80% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,519 per month
1BR
1 bedroom in Lower East Side
#Lower East Side - 1 bedroom - 80% (80% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,955 per month
2BR
2 bedrooms in Lower East Side
#Lower East Side - 2 bedrooms - 80% (80% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,013 per month
Studio
Studio in Chinatown-Two Bridges
#Chinatown - Studio - 50% (50% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,285 per month
Studio
Studio in Chinatown-Two Bridges
#Chinatown - Studio - 60% (60% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,519 per month
1BR
1 bedroom in Chinatown-Two Bridges
#Chinatown - 1 bedroom - 60% (60% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,955 per month
2BR
2 bedrooms in Chinatown-Two Bridges
#Chinatown - 2 bedrooms - 60% (60% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,013 per month
Studio
Studio in Manhattan
#Harlem - Studio - 50% (50% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,081 per month
1BR
1 bedroom in Manhattan
#Harlem - 1 bedroom - 50% (50% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,289 per month
2BR
2 bedrooms in Manhattan
#Harlem - 2 bedrooms - 50% (50% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,285 per month
Studio
Studio in Manhattan
#Harlem - Studio - 60% (60% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,372 per month
1BR
1 bedroom in Manhattan
#Harlem - 1 bedroom - 60% (60% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$1,639 per month
2BR
2 bedrooms in Manhattan
#Harlem - 2 bedrooms - 60% (60% AMI)
Available unit
Listed by Stanton Norfolk Inc., Found 17h ago
Online form
$2,214 per month
2BR
2 bedrooms in Brooklyn
500 Vandalia Ave (90% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Online form
$1,485 per month
Studio
Studio in Brooklyn
250 Euclid Ave (80% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$1,500 per month
1BR
1 bedroom in Brooklyn
250 Euclid Ave (80% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$2,292 per month
2BR
2 bedrooms in Brooklyn
250 Euclid Ave (80% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$2,265 per month
Studio
Studio in Far Rockaway-Bayswater
3-31 Beach 35th St (80% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$3,684 per month
2BR
2 bedrooms in Queens
126-43 39TH AVENUE & 126-55 39TH AVENUE FLUSHING (150% AMI)
Available unit Location couldn't be verified
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$3,684 per month
2BR
2 bedrooms in Queens
126-43 39TH AVENUE & 126-55 39TH AVENUE FLUSHING (150% AMI)
Available unit Location couldn't be verified
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$4,244 per month
3BR
3 bedrooms in Queens
126-43 39TH AVENUE & 126-55 39TH AVENUE FLUSHING (150% AMI)
Available unit Location couldn't be verified
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$2,322 per month
1BR
1 bedroom in Brooklyn
83 GATEWAY DRIVE (80% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Online form
$1,615 per month
Studio
Studio in Concourse-Concourse Village
1164 RIVER AVENUE (80% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
By phone
$2,085 per month
1BR
1 bedroom in Concourse-Concourse Village
1164 RIVER AVENUE (80% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
By phone
$537 per month
Studio
Studio in Downtown Brooklyn-DUMBO-Boerum Hill
90 SANDS STREET (30% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$736 per month
Studio
Studio in Downtown Brooklyn-DUMBO-Boerum Hill
90 SANDS STREET (40% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,134 per month
Studio
Studio in Downtown Brooklyn-DUMBO-Boerum Hill
90 SANDS STREET (60% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$1,215 per month
1BR
1 bedroom in Downtown Brooklyn-DUMBO-Boerum Hill
90 SANDS STREET (60% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$1,592 per month
Studio
Studio in Downtown Brooklyn-DUMBO-Boerum Hill
90 SANDS STREET (100% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$1,706 per month
1BR
1 bedroom in Downtown Brooklyn-DUMBO-Boerum Hill
90 SANDS STREET (100% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$1,990 per month
Studio
Studio in Downtown Brooklyn-DUMBO-Boerum Hill
90 SANDS STREET (120% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$2,132 per month
1BR
1 bedroom in Downtown Brooklyn-DUMBO-Boerum Hill
90 SANDS STREET (120% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$2,409 per month
2BR
2 bedrooms in Brooklyn
1115, 1117 & 1123 ASHFORD STREET, *516 SCHROEDERS AVE (70% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Online form
$2,774 per month
2BR
2 bedrooms in Brooklyn
1115, 1117 & 1123 ASHFORD STREET, *516 SCHROEDERS AVE (90% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Online form
$803 per month
1BR
1 bedroom in Brooklyn
1115, 1117 & 1123 ASHFORD STREET, *516 SCHROEDERS AVE (30% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Online form
$795 per month
Studio
Studio in Mott Haven-Port Morris
255 E 138TH STREET (30% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,092 to $1,588 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Mott Haven-Port Morris
255 E 138TH STREET (40% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,389 to $2,029 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Mott Haven-Port Morris
255 E 138TH STREET (50% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,686 to $2,470 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Mott Haven-Port Morris
255 E 138TH STREET (60% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,092 to $1,588 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Mount Hope
2028 CRESTON AVENUE (40% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,389 to $2,029 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Mount Hope
2028 CRESTON AVENUE (50% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,686 to $2,470 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Mount Hope
2028 CRESTON AVENUE (60% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$2,280 to $3,352 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Mount Hope
2028 CRESTON AVENUE (90% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$795 to $1,147 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Bronx
1115 Commonwealth Ave (30% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,092 to $1,588 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Bronx
1115 Commonwealth Ave (40% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,389 to $2,029 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Bronx
1115 Commonwealth Ave (50% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,686 to $2,470 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Bronx
1115 Commonwealth Ave (60% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$2,280 to $3,352 per month
Studios to 3 bedrooms
Studios to 3 bedrooms in Bronx
1115 Commonwealth Ave (100% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,259 per month
Studio
Studio in Flushing-Willets Point
133-45 41ST AVENUE (60% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,114 per month
1BR
1 bedroom in Flushing-Willets Point
133-45 41ST AVENUE (60% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$1,306 to $1,652 per month
Studios to 2 bedrooms
Studios to 2 bedrooms in Jamaica
147-36 94TH AVENUE (50% AMI)
Building accepting applications
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$2,206 per month
1BR
1 bedroom in Forest Hills
62-11 108th Street and 1 more building (110% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$2,550 per month
2BR
2 bedrooms in Forest Hills
62-11 108th Street and 1 more building (110% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$2,618 per month
1BR
1 bedroom in Forest Hills
62-11 108th Street and 1 more building (140% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$824 per month
Studio
Studio in Flushing-Willets Point
133-45 41ST AVENUE (50% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$3,011 per month
1BR
1 bedroom in Queens
5241 CENTER BLVD (130% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$2,786 per month
Studio
Studio in Queens
5241 CENTER BLVD (165% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$3,385 per month
1BR
1 bedroom in Queens
5241 CENTER BLVD (165% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$3,113 per month
2BR
2 bedrooms in Greenpoint
35 COMMERCIAL STREET (110% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$2,980 per month
3BR
3 bedrooms in Upper East Side-Lenox Hill-Roosevelt Island
460 MAIN STREET (130% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$2,470 per month Building rent range
3BR
3 bedrooms in Brooklyn
2943 West 20th Street & 2926 West 19th Street Coney Island
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$3,358 per month
1BR
1 bedroom in Manhattan
1465 Park Avenue East Harlem (165% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$4,110 per month
2BR
2 bedrooms in Manhattan
1465 Park Avenue East Harlem (165% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$2,100 per month
Studio
Studio in Bronx
575 Exterior Street (80% AMI)
Available unit
Listed by NYC Housing Development Corporation, Found 2d ago
Email
$765 per month
Studio
Studio in Queens
5203 CENTER BLVD (50% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$3,224 per month
1BR
1 bedroom in Queens
5203 CENTER BLVD (130% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$3,644 per month
2BR
2 bedrooms in Queens
5203 CENTER BLVD (130% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$3,478 per month
1BR
1 bedroom in Queens
5203 CENTER BLVD (165% AMI)
Waitlist open
Listed by NYC Housing Development Corporation, Found 2d ago
Waitlist
$965 per month
1BR
1 bedroom in Brooklyn
481 Williams Avenue, Brooklyn, NY 11207 Unit 3G (60% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,132 per month
3BR
3 bedrooms in Brooklyn
481 Williams Avenue, Brooklyn, NY 11207 Unit 4H (50% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$851 per month
3BR
3 bedrooms in Brooklyn
481 Williams Avenue, Brooklyn, NY 11207 Unit 3H (40% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,105 per month
3BR
3 bedrooms in Brooklyn
481 Williams Avenue, Brooklyn, NY 11207 Unit 2H (50% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$702 per month
2BR
2 bedrooms in Brooklyn
481 Williams Avenue, Brooklyn, NY 11207 Unit 6I (40% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,316 per month
3BR
3 bedrooms in Brooklyn
481 Williams Avenue, Brooklyn, NY 11207 Unit 6H (60% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$908 per month
Studio
Studio in Brooklyn
481 Williams Avenue, Brooklyn, NY 11207 Unit 4C (60% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$884 per month
Studio
Studio in Brooklyn
481 Williams Avenue, Brooklyn, NY 11207 Unit 2C (60% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,227 per month
Studio
Studio in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (95% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,633 per month
Studio
Studio in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (65% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,984 per month
3BR
3 bedrooms in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (55% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,431 per month
1BR
1 bedroom in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (55% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$3,307 per month
3BR
3 bedrooms in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (95% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,863 per month
2BR
2 bedrooms in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (95% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,385 per month
1BR
1 bedroom in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (95% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,866 per month
3BR
3 bedrooms in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (80% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,481 per month
2BR
2 bedrooms in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (80% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,067 per month
1BR
1 bedroom in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (80% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,930 per month
Studio
Studio in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (80% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,425 per month
3BR
3 bedrooms in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (65% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,099 per month
2BR
2 bedrooms in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (65% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,749 per month
1BR
1 bedroom in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (65% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,717 per month
2BR
2 bedrooms in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (55% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$1,336 per month
Studio
Studio in Bronx
3436 Corsa Avenue, Bronx, NY 10469 (55% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,428 per month
Studio
Studio in Manhattan
10, 20, 25, 30, 40 Waterside Plaza, New York, NY 10010 (130% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,593 per month
1BR
1 bedroom in Manhattan
10, 20, 25, 30, 40 Waterside Plaza, New York, NY 10010 (130% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$3,094 per month
1BR
1 bedroom in Manhattan
10, 20, 25, 30, 40 Waterside Plaza, New York, NY 10010 (160% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$3,689 per month
2BR
2 bedrooms in Manhattan
10, 20, 25, 30, 40 Waterside Plaza, New York, NY 10010 (160% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,281 per month
1BR
1 bedroom (location not listed)
50 Nepperhan Street and 1 more building
Available unit Location couldn't be verified
Listed by Pronto Housing, Found 2d ago
Online form
$2,827 per month
3BR
3 bedrooms (location not listed)
40 Memorial Hwy, New Rochelle, NY 10801 #3 Bedroom - (70% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
$2,231 per month
1BR
1 bedroom (location not listed)
40 Memorial Hwy, New Rochelle, NY 10801 #1 Bedroom - (70% AMI)
Available unit
Listed by Pronto Housing, Found 2d ago
Online form
Show more

Showing 200 of 309

(function () { var listwrap = document.getElementById('listwrap'); var mapwrap = document.getElementById('mapwrap'); var mapEl = document.getElementById('map'); if (!listwrap || !mapwrap || !mapEl) return; // Status -> dot color + label. Labels come from the server (STATUS_LABELS // in app.py) so the key can never drift from the list cards. Colors are // Okabe-Ito colorblind-safe; "new" is an overlay halo, not a color, so a // listing is never two colors at once. var STATUS_META = [ { key: 'available', color: '#2F7A4D' }, { key: 'building', color: '#0072B2' }, { key: 'waitlist', color: '#E69F00' }, { key: 'on_hold', color: '#9AA0A6' } ]; // Most actionable status wins when several units share one building pin: // "can I apply right now?" reads at a glance. var STATUS_RANK = { available: 0, building: 1, waitlist: 2, on_hold: 3 }; var statusLabels = {}; try { statusLabels = JSON.parse(mapEl.getAttribute('data-status-labels') || '{}'); } catch (e) { statusLabels = {}; } function statusLabel(key) { return statusLabels[key] || key; } function statusColor(key) { for (var i = 0; i < STATUS_META.length; i++) { if (STATUS_META[i].key === key) return STATUS_META[i].color; } return '#2F7A4D'; } // Tile layer config lives in one constant so the provider can be swapped // without a code change. We use Esri's World Light Gray canvas: // muted, light, minimal-label cartography (the Zillow/Redfin look) that // lets the price pills carry the visual weight. Free to use with visible // attribution; no API key needed. Terms: // https://www.esri.com/en-us/legal/terms/full-master-agreement // (CartoDB Positron was evaluated first but now serves an "API KEY // REQUIRED" watermark to unauthenticated clients, so it is unusable // without a key. OSM standard tiles were the previous look; the // client-side grayscale filter over them read as muddy gray.) var TILE_URL = 'https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}'; // Attribution must name this service's actual providers (Esri's // copyrightText for Canvas/World_Light_Gray_Base). The previous // "Esri, DeLorme, NAVTEQ" was World_Street_Map's attribution. var TILE_ATTRIB = 'Tiles © Esri — Esri, HERE, Garmin, © OpenStreetMap contributors, and the GIS user community'; var map = null, inited = false, loading = false; // Markers built by buildMap, keyed to list rows in commit 3 (row hover). var pinRefs = []; function esc(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]; }); } function pins() { try { return JSON.parse(mapEl.getAttribute('data-pins') || '[]'); } catch (e) { return []; } } // Tile failure (or a CDN failure, below): hide the map pane, keep the // list, show a notice. #maperr lives outside #mapwrap so it survives. function mapFailed(msg) { mapwrap.setAttribute('hidden', ''); } // The map hero is full-width at the top of the page on every viewport; // it loads eagerly on page load. function layoutMode() { mapwrap.removeAttribute('hidden'); initMap(); if (map) map.invalidateSize(); } function initMap() { if (inited || loading) return; if (window.L) { buildMap(); return; } loading = true; loadCss("/static/vendor/leaflet/leaflet.css"); // MarkerCluster (self-hosted vendor dir, same lazy load): clusters pins on Browse so // 300 listings don't render 300 overlapping markers (QA 0.9). If it // fails to load we fall back to plain markers - never a broken map. loadCss("/static/vendor/leaflet/MarkerCluster.css"); loadCss("/static/vendor/leaflet/MarkerCluster.Default.css"); loadScript("/static/vendor/leaflet/leaflet.js", function (ok) { if (!ok) return leafletFailed(); loadScript("/static/vendor/leaflet/leaflet.markercluster.js", function () { loading = false; buildMap(); }); }); } function loadCss(href) { var css = document.createElement('link'); css.rel = 'stylesheet'; css.href = href; document.head.appendChild(css); } function loadScript(src, done) { var s = document.createElement('script'); s.src = src; s.onload = function () { done(true); }; s.onerror = function () { done(false); }; document.head.appendChild(s); } function leafletFailed() { loading = false; mapLoadError('Map could not load (check your connection). Showing the list instead.'); } function mapLoadError(msg) { var e = document.getElementById('maperr'); if (e) { e.textContent = msg; e.removeAttribute('hidden'); } mapFailed(msg); } function buildMap() { inited = true; var ps = pins(); if (!ps.length) { mapEl.innerHTML = '

None of these listings have map locations yet. Try widening your filters.

'; return; } map = L.map('map', { scrollWheelZoom: false, zoomControl: false }); var tiles = L.tileLayer(TILE_URL, { maxZoom: 19, // Esri's Canvas/World_Light_Gray_Base publishes real tiles only to // z16: deeper zooms return HTTP 200 with a "Map data not yet // available" placard baked into the pixels (not a 404, so the // tileerror fallback never fires). maxNativeZoom makes Leaflet // upscale z16 tiles past that instead of requesting placards. // (P0 2026-09-28: fitBounds zooms tight result sets to z17+, which // tiled the whole mobile map with placards.) maxNativeZoom: 16, attribution: TILE_ATTRIB }); // QA 0.9: degrade to the list if the TILES fail (not just the Leaflet // CDN). A handful of bad tiles is normal; sustained failure means the // tile server is unreachable, so fall back with a notice. var tileErrors = 0; tiles.on('tileerror', function () { tileErrors++; if (tileErrors >= 6) { mapLoadError("Map tiles couldn't load. Showing the list instead."); } }); tiles.addTo(map); // Zoom control sits bottom-right: the status legend occupies // top-left, and the stacked default controls covered pins there // on narrow screens (owner interface note 2026-09-28). L.control.zoom({ position: 'bottomright' }).addTo(map); // Group pins that share a building (identical coordinates) into one // marker. Map v2: the cluster is a STATUS RING, not a price pill - an // inline SVG ring shows the mix of application statuses inside // ("can I apply here?"), with the count in the middle. SVG arcs, not // conic-gradient: identical rendering in every engine (P0 2026-09-28: // the gradient build rendered as thin bars on iOS Safari and taps // were dead). The divIcon is a real 46x46 box anchored at its center, // so iOS hit-testing always has a true tappable target. var groups = groupPins(ps); var group = (window.L && L.markerClusterGroup) ? L.markerClusterGroup({ maxClusterRadius: 56, iconCreateFunction: function (cluster) { var kids = cluster.getAllChildMarkers(); var counts = {}; kids.forEach(function (mk) { var s = mk.options.status || 'available'; counts[s] = (counts[s] || 0) + 1; }); // Bubble size ramps with count: a "2" cluster no longer dwarfs // single pins (owner interface note 2026-09-28). var n = kids.length; var size = n < 10 ? 40 : (n < 50 ? 48 : 56); return L.divIcon({ className: 'scluster-wrap', html: clusterRingHtml(counts, n, size), iconSize: [size, size], iconAnchor: [size / 2, size / 2] }); } }) : null; var bounds = []; groups.forEach(function (g) { var m = L.marker([g.lat, g.lng], { icon: statusDotIcon(g), title: pinLabel(g), status: g.status // tallied by the cluster ring above }); m.bindPopup(popupHtml(g)); m.on('click', function () { selectPin(m); }); if (group) group.addLayer(m); else m.addTo(map); bounds.push([g.lat, g.lng]); pinRefs.push({ marker: m, urls: g.members.map(function (p) { return p.url.split('?')[0]; }) }); }); if (group) map.addLayer(group); map.fitBounds(bounds, { padding: [30, 30] }); addLegend(map); window.RR_MAP = map; // handle for tests/debug tooling // The container may have settled to its final size while Leaflet was // loading; re-sync so no gray gaps remain. setTimeout(function () { map.invalidateSize(); }, 50); setTimeout(placeCallout, 300); map.on('moveend zoomend', placeCallout); // Don't hijack page scroll: zoom with wheel only while the map is focused. map.on('focus', function () { map.scrollWheelZoom.enable(); }); map.on('blur', function () { map.scrollWheelZoom.disable(); }); wireRowHover(); } function rentVal(r) { return parseFloat(String(r == null ? '' : r).replace(/[^0-9.]/g, '')) || Infinity; } // Status ring for clusters: inline SVG arc segments proportional to the // statuses inside, count in the middle. Glanceable, ownable, no prices. // SVG (not conic-gradient): deterministic in every engine, including // iOS Safari where the gradient build broke (P0 2026-09-28). function clusterRingHtml(counts, total, size) { var RC = 2 * Math.PI * 17.5; // r=17.5 in the 46x46 viewBox var acc = 0, circles = ''; function ringArc(color, offset, len) { // +0.9px overlap per segment hides dash anti-aliasing seams; later // segments paint over earlier ones so the overlap stays invisible. return ''; } STATUS_META.forEach(function (sm) { var n = counts[sm.key] || 0; if (!n) return; var len = n / total * RC; circles += ringArc(sm.color, acc, len); acc += len; }); if (acc < RC - 0.001) { // unknown status keys fall back to the green slice circles += ringArc('#2F7A4D', acc, RC - acc); } var bits = STATUS_META.filter(function (sm) { return counts[sm.key]; }) .map(function (sm) { return counts[sm.key] + ' ' + statusLabel(sm.key).toLowerCase(); }); var label = total + (total === 1 ? ' listing: ' : ' listings: ') + bits.join(', '); return '' + '' + '' + total + ''; } // The legend/key: dot color = application status, exactly the labels the // list cards use. Collapsed on narrow screens so it never covers the map. function addLegend(map) { var legend = L.control({ position: 'topleft' }); legend.onAdd = function () { var d = L.DomUtil.create('details', 'map-legend'); if (window.innerWidth >= 640) d.setAttribute('open', ''); // The color key lives in the summary itself: on narrow screens the // details element starts collapsed, so without inline dots the key // was invisible until tapped (owner interface note 2026-09-28). The // chevron is the tap affordance (the native marker is hidden in CSS). var h = 'Listing status' + '' + STATUS_META.map(function (sm) { return ''; }).join('') + '
    '; STATUS_META.forEach(function (sm) { h += '
  • ' + esc(statusLabel(sm.key)) + '
  • '; }); h += '
  • Added in the last 24 hours
'; d.innerHTML = h; L.DomEvent.disableClickPropagation(d); L.DomEvent.disableScrollPropagation(d); return d; }; legend.addTo(map); } function groupPins(ps) { // Group pins that belong to the SAME building: same cleaned address // AND same rounded coordinate. Two distinct addresses that round to // the same point stay separate pins (owner P0 2026-09-28: the // Brownsville/Manhattan popup merged two boroughs into one pin). var byCoord = {}; ps.forEach(function (p) { var addr = (p.addr_key || "").trim().toLowerCase(); var k = (addr ? "a:" + addr : "x") + "|" + p.lat.toFixed(4) + ',' + p.lng.toFixed(4); (byCoord[k] = byCoord[k] || []).push(p); }); return Object.keys(byCoord).map(function (k) { var members = byCoord[k]; var priced = members.filter(function (m) { return m.rent; }) .sort(function (a, b) { return rentVal(a.rent) - rentVal(b.rent); }); // Group status: the most actionable member status wins, so a building // with one open unit never reads as "waitlist" at a glance. var gstatus = 'available', grank = 99, gnew = false; members.forEach(function (m) { var s = m.status || 'available'; var r = (STATUS_RANK[s] == null) ? 99 : STATUS_RANK[s]; if (r < grank) { grank = r; gstatus = s; } if (m.new) gnew = true; }); return { lat: members[0].lat, lng: members[0].lng, members: members, rent: priced.length ? priced[0].rent : null, count: members.length, status: gstatus, isNew: gnew }; }); } function pinLabel(g) { var p = g.members[0]; return (g.rent || 'Rent not listed') + (g.count > 1 ? ', ' + g.count + ' units' : ', ' + p.beds) + (p.hood ? ', ' + p.hood : '') + ', ' + statusLabel(g.status); } // Map v2: the pin is a color-coded status DOT. Price is gone from the pin // face; it lives in the hover title, the tap popup, and the list cards. // New listings (first seen < 24h) get a halo ring: an overlay, never a // second color, so a dot is always exactly one status. // The divIcon is a real 16x16 box anchored at its center (P0 2026-09-28: // 0x0 icons left iOS Safari with no tappable target). function statusDotIcon(g) { var cls = 'sdot sdot-' + (g.status || 'available') + (g.isNew ? ' is-new' : ''); var html = ''; return L.divIcon({ className: 'sdot-wrap', html: html, iconSize: [16, 16], iconAnchor: [8, 8] }); } function popupHtml(g) { var h = '
'; // Status first: the map's whole language is "can I apply right now?". // Price stays prominent right below it: never lost, just not on the pin. h += '
' + esc(statusLabel(g.status)) + '
'; if (g.count === 1) { var p = g.members[0]; h += '
' + esc(p.addr || '') + '
' + '
' + esc(p.rent || 'Rent not listed') + '
' + '
' + esc(p.beds) + '
' + // Reside enrichment (DECISIONS #65): enriched rent/bedrooms are // labeled so they never read as tracker-sourced fact. (p.enrich_note ? '
' + esc(p.enrich_note) + '
' : '') + (p.hood ? '
' + esc(p.hood) + '
' : '') + 'View listing'; } else { h += '
' + esc(g.rent || 'Rent not listed') + '
' + '
' + g.count + ' units
' + (g.members[0].hood ? '
' + esc(g.members[0].hood) + '
' : ''); g.members.slice(0, 5).forEach(function (p) { h += '' + '' + esc(p.rent || 'Rent not listed') + '' + '' + esc(p.beds) + ''; }); if (g.count > 5) h += '
+' + (g.count - 5) + ' more at this building
'; } return h + '
'; } function selectPin(m) { document.querySelectorAll('.sdot.sel').forEach(function (x) { x.classList.remove('sel'); }); var el = m.getElement && m.getElement(); var chip = el && el.querySelector('.sdot'); if (chip) chip.classList.add('sel'); flashRow(m); } // List <-> map linking: hovering (or keyboard-focusing) a result row // highlights its pin; clicking a pin opens the popup (Leaflet's bindPopup) // and flashes the matching row WITHOUT scrolling. Map users stay in map // context; the popup carries the detail (owner UX 2026-09-29). Row hrefs // carry household query params; pin urls are bare, so matching strips // the query string on both sides. function wireRowHover() { if (!listwrap) return; function hrefOf(el) { var a = el && el.closest ? el.closest('.lrow') : null; return a ? a.getAttribute('href').split('?')[0] : null; } listwrap.addEventListener('mouseover', function (ev) { setPinHover(hrefOf(ev.target)); }); listwrap.addEventListener('mouseleave', function () { setPinHover(null); }); listwrap.addEventListener('focusin', function (ev) { setPinHover(hrefOf(ev.target)); }); listwrap.addEventListener('focusout', function () { setPinHover(null); }); } function setPinHover(path) { pinRefs.forEach(function (ref) { var on = !!path && ref.urls.indexOf(path) !== -1; var el = ref.marker.getElement && ref.marker.getElement(); if (!el) return; // clustered pins aren't rendered; nothing to highlight var chip = el.querySelector('.sdot'); if (!chip) return; chip.classList.toggle('hl', on); el.classList.toggle('hl-above', on); }); } function flashRow(m) { // Pin tap highlights the matching row WITHOUT scrolling: the map stays // put and the popup shows the summary. Never call scrollIntoView here. if (mapwrap.hasAttribute('hidden') || listwrap.hasAttribute('hidden')) return; var ref = null; for (var i = 0; i < pinRefs.length; i++) { if (pinRefs[i].marker === m) { ref = pinRefs[i]; break; } } if (!ref || !ref.urls.length) return; var row = null; try { row = listwrap.querySelector('.lrow[href^="' + ref.urls[0].replace(/"/g, '') + '"]'); } catch (e) { row = null; } if (!row) return; row.classList.add('flash'); setTimeout(function () { row.classList.remove('flash'); }, 1600); } // Design/homepage-v2: the hero callout. A floating card anchored by a // connector line to ONE real listing pin (the server picks it and passes // its bare detail URL in data-hero-url). Positioned from the pin's live // container point, re-anchored on pan/zoom, hidden when the pin is // off-screen, dismissible so it can never trap taps. var callout = document.getElementById('hero-callout'); var calloutSvg = document.getElementById('hero-callout-svg'); var calloutClose = document.getElementById('hero-callout-close'); var heroUrl = mapEl.getAttribute('data-hero-url') || ''; var calloutDismissed = false; if (calloutClose) { calloutClose.addEventListener('click', function (ev) { ev.stopPropagation(); calloutDismissed = true; callout.setAttribute('hidden', ''); if (calloutSvg) calloutSvg.innerHTML = ''; }); } function heroMarker() { if (!heroUrl || !pinRefs.length) return null; for (var i = 0; i < pinRefs.length; i++) { if (pinRefs[i].urls.indexOf(heroUrl) !== -1) return pinRefs[i].marker; } return null; } function placeCallout() { if (!callout || calloutDismissed || !map) return; var mk = heroMarker(); if (!mk) { callout.setAttribute('hidden', ''); return; } var pt, size; try { pt = map.latLngToContainerPoint(mk.getLatLng()); size = map.getSize(); } catch (e) { return; } if (pt.x < 0 || pt.y < 0 || pt.x > size.x || pt.y > size.y) { callout.setAttribute('hidden', ''); if (calloutSvg) calloutSvg.innerHTML = ''; return; } callout.removeAttribute('hidden'); // Anchor up-right of the pin, clamped inside the map frame. var cw = callout.offsetWidth || 240, ch = callout.offsetHeight || 160; var x = Math.min(Math.max(pt.x + 28, 8), Math.max(size.x - cw - 8, 8)); var y = Math.max(pt.y - ch - 28, 8); callout.style.left = x + 'px'; callout.style.top = y + 'px'; // Connector: pin center to the callout's bottom-left corner. if (calloutSvg) { calloutSvg.setAttribute('width', size.x); calloutSvg.setAttribute('height', size.y); calloutSvg.innerHTML = ''; } } // The map hero is full-width at the top of the page on every viewport, so // there is no viewport-dependent layout to re-run; just reveal and init once. layoutMode(); })();