Get price trends
GET/market/trends
Monthly asking prices over recent months (up to 36), for a city or for up to five neighborhoods (one series each): the median and quartiles for the price level, and a constant-quality price index (price_index) for change over time. The median is not a price index; see the methodology.
Computed from Kite's listing history, not from today's listings: every listing Kite has recorded, including ones since rented, sold or removed, and every price change (the price in force at each point in time, not the current one).
on_market(default): a listing counts in a month if it was live at any point that month (first seen before the month ended, and still active or last seen on or after the month started), at the price it had at the end of the month, or when last seen if it went off the market earlier.new_listings: a listing counts in the month Kite first saw it, at its first recorded asking price.
Listings are deduplicated across sources and pass the same outlier filter as the current market (fences are today's), but not the 30-day freshness window, which doesn't apply to history. Prices are asking prices in SAR: yearly rent for rentals (monthly, weekly and daily postings are converted to a yearly amount), total price for sales. Medians and quartiles are null when fewer than 5 listings back them; check sample_size before relying on a number.
The median is not a price index. Asking prices cluster on round numbers, so a monthly median can sit on the same figure for months while prices move (Riyadh rent apartments: 45,000 SAR in every month from March to November 2026), and it moves when the mix of what is listed changes even if no price does. Use price_index for change over time; use the median and quartiles for the price level.
price_index is a constant-quality (same-basket) index, 100 at index_base_month, the first month in the window with enough data. Listings are grouped into cells of neighborhood × property type × bedrooms (0-4, 5+, or not stated); a cell counts in a month when it has at least 5 listings, and its level is the geometric mean of their prices. Each month is linked to the previous month with a value over the cells present in both, each weighted by the smaller of its two counts, and the links are chained. A cell entering or leaving doesn't move the index, so a change in mix doesn't read as a price change. A link needs 100 matched listings (); below that the month's is null and the next month links to the last month that has one. A series with no link that passes is null throughout. Listings without a neighborhood are left out of the index. For property types without bedrooms (land, most commercial types) a cell is neighborhood × property type, so a shift in the plot or unit sizes listed within a neighborhood can still show up in the index. With , each neighborhood's index is built from its own cells and is often null for small neighborhoods. The index uses the same listings, prices and filters as the median, under either .