The headline number is the median asking rent on everything currently listed. The number under it — the median on listings posted in the last four weeks — is usually lower, and it is the more useful one: whatever is still sitting on the market after months is still sitting there for a reason. How this is measured.
People do not shop “San Juan” — they shop Santurce, or Condado, or Hato Rey, and the gap between them is larger than any month-to-month move. Each district is priced, supplied and cleared separately below, then broken down into the named neighborhoods inside it.
| Neighborhood | District | Asking now | Typical range | Per bedroom | Listings since Mar | Live now | Pulled in 30d |
|---|
Size explains more of the price than anything except location: in the pricing model, taking out district and neighbourhood costs the most accuracy, bedrooms and bathrooms come next, and the advertised extras add less once those two are known. Studios are pulled out of the one-bedroom pile where the ad text says so, because the source site has no studio category and files them all as one-bedrooms.
Read the bar, not the dot. The dot is the measured gap; the bar is the range the gap could plausibly be given how many listings it rests on. A bar that crosses the zero line means the difference is within what splitting this many apartments would produce by chance, whatever the dot says. The darker bar compares like for like — same district, same bedroom count — because buildings with a pool are also the buildings with three-bedroom units and they are in Condado rather than Hato Rey, so without that adjustment the pool is charging for the extra bedroom and the postcode. Hover a row to see which comparison it got. Neither bar makes this a price tag: it is what listings with the feature ask, not what the feature is worth.
| Feature | Says yes | Says no | Does not say | Of those who say | Of all listings |
|---|
Three answers, not two. Most ads simply never mention parking, and counting that silence as a “no” would be inventing data — so the last two columns give both readings: the share among ads that addressed it, and the share of the whole market.
A listing can leave the market two ways, and they mean opposite things. Somebody can take it down — which usually means it rented — or it can hit the source site’s 27-day expiry clock and vanish on its own. Both are tracked here separately, because a market where ads expire is not a market where apartments rent.
Zero is the rest of the segment’s own group: two-bedrooms against the other sizes, Santurce against the other districts. A segment to the right gets taken down faster than those, to the left slower, and the bar is the range for that gap — so only a bar clear of the zero line is a difference worth acting on. Price bands are set by the listing’s opening ask, so a listing that cut its way into a cheaper band is not counted as a cheap listing that rented. “Taken down” excludes listings that simply hit the site’s expiry clock, which is why a segment full of ads nobody touched cannot show up here as a segment that cleared.
| Advertised | Listings | Median rent | Taken down by day 30 | Without it | Gap |
|---|
Every price change is recorded, so this is not a survey of what landlords say they would accept — it is what they have already done, in public, on their own listing. Two numbers matter and they behave differently: how often an asking price gets cut, which varies a lot by segment, and how deep the cut goes when it happens, which varies much less. The section closes inside single buildings, which are the only comparables that really compare: same lobby, same view, same commute, so the difference left over is the price.
Find the column for what you are looking at and read down to how long it has been listed. Every listing in a cell had been up at least that long — not exactly that long — because grouping by final lifespan would count only the listings that came down inside the window, and load every cell with the ones that ended there. The second figure is the cut rate multiplied by the typical depth: what an offer at asking is worth giving up on average, across everyone in that cell, including the majority who never moved a dollar.
| Segment | Listings | Have cut | 95% range | Typical cut | In dollars | Expected off asking |
|---|
| Building | District | Live now | Asking now | vs same size nearby | Have cut | Sitting firm |
|---|
Measured on newly posted listings only. Tracking the price of everything currently listed sounds more complete but is not: expensive apartments sit longer, so they pile up in the standing inventory and drag its median around for reasons that have nothing to do with the market. New listings are a clean weekly sample of what landlords are asking today.
A price estimate built from the same listings as the rest of the page. Pick a district, a size and what the ad would advertise, and it returns the opening ask a listing like that typically carries, with the range that eight in ten such listings fall inside. It estimates the asking price on the first day of the ad, not the rent finally agreed; section 04 shows how far those two tend to drift apart.
| Method | Typical miss | Average miss | Average miss, % | Variation explained |
|---|
Everything above rests on choices about what to count and what to throw away. They are stated here in full, including the ones that cost us data.
Source ads expire after about 27 days whether or not the apartment rented, so landlords repost. Ads sharing a phone number, price, bedroom count and district — or an identical description — that never overlap in time and reappear within 21 days are treated as one apartment relisted. Ads that do overlap are kept apart: that is a landlord marketing several similar apartments at once, not one apartment posted twice. Every count on this page is a count of apartments.
When a listing disappears, the ad’s own page is re-fetched to find out why. A page that redirects away has been taken down deliberately; a page showing an expiry notice timed out on its own. That distinction is measured for a growing share of closed listings and inferred from the timing of the 27-day cliff for the rest. Because expiry removes a listing from the site entirely, it cannot be treated as a listing we merely stopped watching — the two outcomes are estimated together, which is why section 03 reports shares by day rather than a single “average days to rent”.
The price band being collected widened partway through, and rents before that change are medians of a narrower slice of the market by construction. Comparing across that date would show a jump that never happened, so everything here starts at the change instead.
A panel that starts empty fills up over one full time-on-market cycle, and expensive units linger while cheap ones turn over, so the standing inventory takes months to settle, and a trend read off it in those months mostly measures the sample filling in. New listings are a fresh sample every week, so the page draws those. They have a weakness of their own: their median moves whenever the mix of what gets listed moves — a month with fewer Condado apartments reads as a cheaper month. The mix-adjusted index in section 05 prices every month's listings with the same model, holding district, neighbourhood, size and amenities fixed, and is the figure to read for whether like-for-like asks have changed.
Where the bedroom field is blank but the description states the count in Spanish or English, the count is read from the text. Where the ad describes a studio or efficiency, it is counted as a studio even though the site filed it as a one-bedroom. Rent-per-bedroom treats a studio as one sleeping space rather than zero, since dividing by zero would drop the cheapest segment off the chart entirely.
The first day of collection captures apartments that had already been listed for an unknown length of time. Their measured age is not their real age, so they take no part in any duration or trend figure while still counting toward inventory.
Collection targets a price band, and every figure on this page is computed inside it. A few listings above the ceiling arrive anyway, because the source site’s own price filter leaks on featured placements.
Feature flags reflect what an ad says, parsed with attention to negation and scope (“includes water, does not include electricity” is read as two different answers). Nothing here is verified against the property.
Collected from publicly available listings by automated extraction. The dataset is a series of snapshots and may not reflect the current state of any listing. Coverage may be uneven across districts, periods and listing types. Results are analytical estimates, not listing verification, and nothing here is an appraisal or an offer.