Get gross rental yield
GET/market/rental-yield
Gross rental yield (median yearly asking rent ÷ median asking sale price) for one property type, over the whole city (or the requested neighborhoods) and per neighborhood, highest yield first.
Rent and sale medians come from the same cohort (property type, and bedrooms if given) in the same area. Neighborhoods are listed only when both sides have at least min_sample_size listings. Gross yield ignores vacancy, service charges, maintenance and transaction costs, and compares asking prices, not achieved rents or sale prices; use it to rank areas, not to value a property.
Both sides use the market sample: active, deduplicated listings updated in the last 30 days (updated_at), after the same outlier filter kite.sa uses (per-tier price fences from the median and MAD of log price, bedroom and area sanity checks, and a floor at 30% of the neighborhood median).
- Authentication
- Send a data key (dk_live_… or dk_test_…) as a Bearer token.
- Scope
analytics- Cost
- 75 units per call
Parameters
| Name | Type | Description |
|---|---|---|
cityrequiredquery | string | City slug from GET /cities. A town inside a covered region is accepted and resolved to its city ( |
property_typerequiredquery | string | Required, so rents and prices of different kinds of property are never mixed. One of: |
bedsquery | integer | Exact number of bedrooms (0 = studio). |
neighborhood_idquery | integer[] | Limit to these neighborhoods (comma-separated ids). Unknown ids are a 404. |
min_sample_sizequery | integer | Minimum listings on each side for a yield to be computed. |
Response
The data field is an object with these fields.
| Name | Type | Description |
|---|---|---|
filtersrequired | object | The filters the numbers were computed for, after defaults. |
overallrequired | object | The city, or the requested neighborhoods together. |
neighborhoodsrequired | object[] | |
price_sourcerequired | string | Where the prices come from: One of: |
windowrequired | object | The freshness window of the market sample. |
Example request
curl "https://api.kite.sa/v1/market/rental-yield?city=riyadh&property_type=apartment" \
-H "Authorization: Bearer $KITE_API_KEY"import { Kite } from "@kite-sa/sdk";
const kite = new Kite(); // reads KITE_API_KEY
const result = await kite.analytics.rentalYield({ city: "riyadh", property_type: "apartment" });from kite_sa import Kite
kite = Kite() # reads KITE_API_KEY
result = kite.analytics.rental_yield(city="riyadh", property_type="apartment")Open in the interactive reference
Related endpoints
- Get comparable listings
GET /listings/{id}/comparables - Get a listing's market position
GET /listings/{id}/market-position - Get a listing's nearby asking-price band
GET /listings/{id}/price-band - Find below-market listings
GET /market/below-market - Find below-market listings (old path)
GET /market/deals - Get price trends
GET /market/trends - Compare neighborhoods
GET /market/neighborhoods/compare