Registered deal statistics (GET /market/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

Registered transactions

Registered deal statistics

GET/market/transactions

Deal counts and median, 25th and 75th percentile price per m² and total price, per quarter and land-use class, for a city, a set of neighborhoods combined (group_by=city with neighborhood_id), or each neighborhood (group_by=neighborhood). Computed from the Ministry of Justice's registered sale deals (open data), so price_source is registered.

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.

Quarters are calendar quarters of the registration date in Saudi time. Cells under min_sample_size deals keep their count and drop their prices. City-level cells include deals Kite could not place in a neighborhood; neighborhood cells don't. Per-neighborhood grouping over a whole city spans at most 8 quarters per call. Check coverage and each cell's coverage_flag before comparing quarters. 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 notice with it wherever you show or pass it on.

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
  • 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

    attribution
    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.

    group_byquerystring

    city: one cell per quarter and class. neighborhood: one per neighborhood too.

    One of: city, neighborhood

    land_usequerystring[]

    Classes to include, comma-separated. Omit for all; each class is its own cell.

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

    quarter_fromquerystring

    First quarter, YYYY-Qn.

    quarter_toquerystring

    Last quarter, YYYY-Qn. Defaults to the city's latest published quarter.

    min_sample_sizequeryinteger

    Cells with fewer deals than this report their count but no prices. At least 5.

    Response

    The data field is an object with these fields.

    NameTypeDescription
    filtersrequiredobject
    price_basisrequiredstring

    What the *_sar price fields mean: yearly_rent (SAR per year) for rentals, sale_price (total SAR) for sales.

    One of: yearly_rent, sale_price

    price_sourcerequiredstring

    Where the prices come from: asking = advertised asking prices from listings; registered = registered transactions or rent contracts. Asking prices typically sit above what is finally agreed.

    One of: asking, registered

    windowrequiredobject
    min_sample_sizerequiredinteger
    cellsrequiredobject[]
    coveragerequiredobject
    attributionrequiredobject

    Licence notice for the Ministry of Justice open data in this response. The rows and figures are government open data under the Saudi Open Data License (an adaptation of ODC-By), not Kite Data: you may reuse and redistribute them, including commercially, provided this attribution travels with them.

    Example request

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

    Open in the interactive reference

    Related endpoints

    • Search registered deals GET /transactions
    • Land prices per m² GET /market/land-prices

    Guides

    • Quickstart
    • Coverage and freshness
    • Limits and quotas
    • Errors
    • Terms in practice