Search registered deals (GET /transactions) — 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

Registered transactions

Search registered deals

GET/transactions

Individual sale deals registered with the Ministry of Justice, from its quarterly open data, in one city: month, neighborhood, land-use class, area, price and price per m². Newest month first; paginate with cursor.

MOJ classes each deal by land use (residential = سكني, commercial = تجاري, …), not by what stands on the plot. Residential-class deals are overwhelmingly vacant land: 97.5% carry no building type and the median plot is about 500 m². Read prices per m² as land prices, not home prices.

Dates are served to the month. MOJ publishes the day, but a neighbourhood and a day single out one deal in 23% of cases against 1% for a neighbourhood and a month, so the day is withheld, and rows within a month are in a fixed order unrelated to the date. Plan, parcel and deed numbers and MOJ's own reference number are never served. Quarters published with misaligned columns (2020-Q2, 2023-Q1) are excluded. Prices are as registered and unfiltered: very low prices per m² usually mean a partial-share or family transfer, so filter with price_per_sqm_min for market comparables.

Riyadh city. Since 2024 the Real Estate Registry has registered a growing share of Riyadh-city sales (a majority by late 2025), and all of them from 19 May 2026. The Ministry of Justice open data we use covers notary-registered deals only, so Riyadh-city figures from 2024 are notary deals only and may under-represent districts that moved to the Registry early; Riyadh city is excluded after 18 May 2026. So Riyadh deals dated after 2026-05-18 are not served, coverage.notary_only_from_quarter is 2024-Q1, and figures from then on carry coverage_flag: "notary_only". Other Riyadh-region towns are unaffected.

Free on every plan and costs no units: this is Saudi government open data, served at no charge under the ODC Attribution License. It is not Kite Data, and our API terms put no restriction on reusing or redistributing it; keep the attribution notice with it wherever you show or pass it on.

Authentication
Send a data key (dk_live_… or dk_test_…) as a Bearer token.
Scope
reference
Cost
FreeFree on every plan: Saudi open data, served at no charge

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.

neighborhood_idqueryinteger[]

Up to 50 neighborhood ids from GET /cities/{city}/neighborhoods, comma-separated. Deals Kite could not place in a neighborhood are left out when this is set.

land_usequerystring[]

One or more classes, comma-separated. Omit for all.

One of: residential, commercial, agricultural, industrial, mixed_use, other

month_fromquerystring

First month to include, YYYY-MM.

month_toquerystring

Response

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

NameTypeDescription
idrequiredstring

Opaque, stable id for the deal: a keyed hash, not MOJ's reference number, which is not served.

monthrequiredstring

Month the deal was registered.

source_quarterrequiredstring

The MOJ quarterly file the deal was published in; see attribution.datasets.

cityrequiredstring
city_name_arrequiredstring | null

City as MOJ writes it. Tells towns apart where a Kite city covers a region (eastern_province, qassim).

district_name_arrequiredstring | null

District as MOJ writes it, whether or not Kite could map it.

neighborhoodrequiredobject | null

The Kite neighborhood the district maps to; null when it doesn't map.

land_userequiredstring

MOJ's land-use class: residential (سكني), (تجاري), (زراعي), (صناعي), (سكني تجاري), (أخرى). also covers unclassified deals.

Example request

curl
curl "https://api.kite.sa/v1/transactions?city=riyadh" \
  -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.transactions.search({ city: "riyadh" });
Python (kite-sa)
from kite_sa import Kite

kite = Kite()  # reads KITE_API_KEY
result = kite.transactions.search(city="riyadh")

Open in the interactive reference

Related endpoints

  • Registered deal statistics GET /market/transactions
  • Land prices per m² GET /market/land-prices

Guides

  • Quickstart
  • Coverage and freshness
  • Limits and quotas
  • Errors
  • Terms in practice
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

Last month to include, YYYY-MM.

price_minqueryinteger

Total price, SAR.

price_maxqueryinteger

Total price, SAR.

area_minquerynumber

m².

area_maxquerynumber

m².

price_per_sqm_minquerynumber

SAR per m².

price_per_sqm_maxquerynumber

SAR per m².

sortquerystring

month_desc (newest month first) or month_asc.

One of: month_desc, month_asc

limitqueryinteger
cursorquerystring
commercial
agricultural
industrial
mixed_use
other
other

One of: residential, commercial, agricultural, industrial, mixed_use, other

land_use_arrequiredstring | null
area_sqmrequirednumber | null

Total area of the deal in m².

price_sarrequirednumber

Total registered price in SAR.

price_per_sqm_sarrequirednumber | null

price_sar / area_sqm, rounded to 2 decimals; null without an area.

property_countrequiredinteger | null

Properties conveyed in the deal. Above 1, price and area are totals for all of them.