Find below-market listings (old path) (GET /market/deals) — Kite API
KitePlatform
Use casesDocsGuidesPricing
Browse endpoints
All endpoints

Reference data

  • List cities
  • List neighborhoods
  • List city directions
  • List enumerated values
  • Get this key's limits
  • What the API covers

Listings

  • Search listings
  • Count listings
  • Get listings by id
  • Get a listing
  • Get a listing's price history

Market data

  • Market summary
  • Price distribution
  • Area distribution
  • New supply
  • Vacancy indicator
  • Prices by neighborhood
  • Commercial rent per m² by neighborhood

Official data

  • Registered rents (REGA)
  • Kite Property Index

Analytics

  • Get comparable listings
  • Get a listing's market position
  • Get a listing's nearby asking-price band
  • Find below-market listings
  • Find below-market listings (old path)
  • Get gross rental yield
  • Get price trends
  • Compare neighborhoods

Registered transactions

  • Search registered deals
  • Registered deal statistics
  • Land prices per m²

Off-plan projects

  • Search projects
  • Get a project
  • List a project's units
  • Search project units
  • List developers

Exports

  • Create an export
  • List exports
  • Get an export

Administration

  • Get your organization
  • List data keys
  • Create a data key
  • Revoke a key
  • List projects
  • Daily usage
  • List members and invitations
  • List audit events
  • List request logs
  • Create a webhook endpoint
  • List webhook endpoints
  • Delete a webhook endpoint
  • List deliveries
  • Replay a delivery

Interactive reference

All endpoints

Reference data

  • List cities
  • List neighborhoods
  • List city directions
  • List enumerated values
  • Get this key's limits
  • What the API covers

Listings

  • Search listings
  • Count listings
  • Get listings by id
  • Get a listing
  • Get a listing's price history

Market data

  • Market summary
  • Price distribution
  • Area distribution
  • New supply
  • Vacancy indicator
  • Prices by neighborhood
  • Commercial rent per m² by neighborhood

Official data

  • Registered rents (REGA)
  • Kite Property Index

Analytics

  • Get comparable listings
  • Get a listing's market position
  • Get a listing's nearby asking-price band
  • Find below-market listings
  • Find below-market listings (old path)
  • Get gross rental yield
  • Get price trends
  • Compare neighborhoods

Registered transactions

  • Search registered deals
  • Registered deal statistics
  • Land prices per m²

Off-plan projects

  • Search projects
  • Get a project
  • List a project's units
  • Search project units
  • List developers

Exports

  • Create an export
  • List exports
  • Get an export

Administration

  • Get your organization
  • List data keys
  • Create a data key
  • Revoke a key
  • List projects
  • Daily usage
  • List members and invitations
  • List audit events
  • List request logs
  • Create a webhook endpoint
  • List webhook endpoints
  • Delete a webhook endpoint
  • List deliveries
  • Replay a delivery

Interactive reference

Analytics

Find below-market listings (old path)

GET/market/dealsDeprecated

Deprecated: use GET /market/below-market, which takes the same parameters and returns the same response. This path keeps working until 2027-06-30.

Residential listings asking noticeably less than similar listings nearby, biggest gap first. These are listings, not deals: "deal" in this API means a registered transaction (GET /transactions).

Each listing is compared with Kite's published nearby asking-price comparison: the same property type and bedroom count, a similar area, within a calibrated radius and look-back (disclosed per listing in comparison), one observation per distinct unit, and the subject's own duplicates excluded. A listing appears only when the comparison is published for its cohort and its direction is stable under a 95% cluster bootstrap, so thin or noisy evidence never puts a listing here. This is an asking-price comparison, not a valuation.

Listings are drawn from 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). 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. Paginate with cursor.

Authentication
Send a data key (dk_live_… or dk_test_…) as a Bearer token.
Scope
analytics
Cost
NaN units per call

Parameters

NameTypeDescription
cityrequiredquerystring

City slug from GET /cities. A town inside a covered region is accepted and resolved to its city (dammam, khobar, dhahran, jubail and qatif to eastern_province; buraydah and unaizah to qassim; hofuf to al_ahsa), as are Arabic city names. The response's filters.city and the X-Resolved-City header show the slug used.

listing_typerequiredquerystring

rent (prices are yearly rent) or sale (prices are total price).

One of: rent, sale

property_typequerystring

One residential property type.

One of: apartment, villa, floor, duplex

bedsqueryinteger

Exact number of bedrooms (0 = studio).

neighborhood_idqueryinteger[]

Limit to one or more neighborhoods (comma-separated ids from GET /cities/{city}/neighborhoods). Unknown ids are a 404.

min_discount_pctquerynumber

Minimum percent below the nearby median.

max_discount_pctquerynumber

Maximum percent below the nearby median. Listings priced far below their neighbors are usually mispriced or mislabeled, so they're left out by default.

limitqueryinteger
cursorquerystring

Response

The data field is a list; each item has these fields.

NameTypeDescription
listingrequiredobject
comparisonrequiredobject

Example request

curl
curl "https://api.kite.sa/v1/market/deals?city=riyadh&listing_type=rent" \
  -H "Authorization: Bearer $KITE_API_KEY"
JavaScript (@kite-sa/sdk)
import { Kite } from "@kite-sa/sdk";

const kite = new Kite(); // reads KITE_API_KEY
const result = await kite.analytics.deals({ city: "riyadh", listing_type: "rent" });
Python (kite-sa)
from kite_sa import Kite

kite = Kite()  # reads KITE_API_KEY
result = kite.analytics.deals(city="riyadh", listing_type="rent")

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
  • Get gross rental yield GET /market/rental-yield
  • Get price trends GET /market/trends
  • Compare neighborhoods GET /market/neighborhoods/compare

Guides

  • Quickstart
  • What a listing is
  • Coverage and freshness
  • Limits and quotas
  • Errors
Kite API

Saudi real estate data for developers.

Product
  • API reference
  • Data coverage
  • Pricing
  • Valuation checks
  • Changelog
  • Status
Company
  • kite.sa
  • Contact
  • Security
Legal
  • Terms
  • Subprocessors
© Kite