PropertyTrend

Data trust

Methodology and definitions

Everything an analyst should know before trusting the numbers in the demo: sources, observation window, deduplication and exact metric definitions. The demo is limited to Warsaw; the full platform covers more cities.

Data sources

District metrics and the forecast in this demo come exclusively from Otodom rental listings. We don't merge them with other portals, to avoid mixing inconsistent price fields.

Observation window and freshness

The pipeline collects listings daily. “Active supply” and all medians cover listings seen in the last 30 days. History goes back about half a year — enough for multi-month trends and short-horizon forecasts, but not for year-on-year comparisons (which would need ≥ 12 months), so we don't show those. The last-computed date is shown above the tiles on the market pulse.

Deduplication

Every listing is counted once — we deduplicate by Otodom listing id, keeping the most recent observation of each listing. So re-collecting the same listing doesn't inflate supply or medians.

Asking rent, not transaction rent

All amounts are asking rents — listing prices, not actual contract rates. We have no access to a rental-transaction registry and don't pretend to. The asking level reflects direction and market tension well, but can be higher than the finally negotiated figure.

What is an “active listing”

A unique rental listing with at least one observation in the 30-day window, with a city and district assigned and a price in a plausible range. Districts with fewer than 30 active listings are omitted — we show the gap, we don't smooth it.

Metric definitions

Median rent (PLN/mo)

The middle monthly asking rent (not transaction rent) in a district.

  • How we compute: Median (50th percentile) of asking rents from active rental listings in the district. The city value is the median of the district medians.
  • Window: Listings active in the last 30 days.
  • Exclusions: Rents outside 500–30,000 PLN are dropped as erroneous/contaminated (sale prices, junk).
  • Sample: Number of active listings in the district (the “sample” column). Districts with < 30 listings are omitted, not smoothed.

Rent per m² (PLN/m²)

Median rent per square metre.

  • How we compute: Median of (rent ÷ area) across the district's listings. It's the basis for price-anomaly signals.
  • Window: Listings active in the last 30 days.
  • Exclusions: Area outside 8–400 m² and rent outside 500–30,000 PLN are dropped.
  • Sample: Same sample as median rent (the district's active listings).

Median days on market (days)

How many days a listing stays active from publication to last observation.

  • How we compute: Median of (last observation − publication date). Publication date comes straight from the Otodom listing (100% populated).
  • Window: Computed for listings active in the last 30 days.
  • Exclusions: Negative values (published after last-seen, ~4%) and over 365 days (re-listings/long tail, ~18%) are trimmed.
  • Sample: The district's active listings with a valid publication date.

Active supply (listings)

Number of unique rental listings seen in the 30-day window.

  • How we compute: Count of unique listings (deduplicated by Otodom id) with at least one observation in the last 30 days. The city value is the sum across districts.
  • Window: Trailing 30 days.
  • Exclusions: Listings without a city/district are omitted. Districts with < 30 listings aren't reported.
  • Sample: The value itself is the sample size.

Supply change (%)

Change in active supply versus the previous 30-day window.

  • How we compute: (current supply − previous supply) ÷ previous supply, over 30-day windows.
  • Window: Current 30 days vs previous 30 days.
  • Exclusions: Because of the Otodom collection gap (~20 Jul – 20 Aug 2026) the comparison window is sometimes empty — then we return null, not a fabricated value.
  • Sample: Requires a non-empty previous window.

Anomaly signals — what “+1.9σ” means

An anomaly signal = a district's z-score versus the other districts of the same city that period.

For each district we compute the z-score of its rent per m² and of its supply change against the distribution of all the city's districts that same period (population z-score). The signal takes the sign of whichever metric deviates most (|z|). The trigger is |z| ≥ 1.5σ.

Example: Śródmieście +1.9σ means the rent per m² in Śródmieście is 1.9 standard deviations above the distribution of all reported Warsaw districts that period.

Forecast

The forecast is a model. On a real weekly median-rent series (by listing publication week) we fit a trend by least squares and project it a few weeks ahead with a 95% prediction band. The trend is damped — its momentum fades over the horizon, so we don't extrapolate a steep line indefinitely. Monthly seasonality is enabled once at least two full years of data exist. Alongside the forecast we publish the backtest error (MAPE and MAE) computed one-week-ahead on previously unused observations.

Known limitations and gaps

See the data in the demo →Book a call