Get a listing's market position (GET /listings/{id}/market-position) — 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

Analytics

Get a listing's market position

GET/listings/{id}/market-position

Where a listing's price sits in its market: percentile, quartiles and difference from the median, against like-for-like listings in its neighborhood and in its city.

The cohort is listings with the same listing type, category and property type, and for residential listings the same bedroom count. basis says which cohort the top-level price_percentile and diff_from_median_pct use: the neighborhood when it has at least 30 listings, otherwise the city.

Computed over 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. Medians and quartiles are null when fewer than 5 listings back them; check sample_size before relying on a number. listing_in_sample says whether the listing itself passed those filters (a listing not updated in 30 days, or priced as an outlier, is compared but not counted).

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

Parameters

NameTypeDescription
idrequiredpath
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

    integer

    Listing id.

    Response

    The data field is an object with these fields.

    NameTypeDescription
    listing_idrequiredinteger
    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

    price_sarrequiredinteger | null

    This listing's price.

    price_per_sqm_sarrequiredinteger | null

    This listing's price per m², when it states an area.

    cohortrequiredobject

    The filters the numbers were computed for, after defaults.

    basisrequiredstring | null

    Which cohort the top-level percentile and difference come from. Null when no cohort could be computed (no price, or a city Kite doesn't cover).

    price_percentilerequiredinteger | null

    From the basis cohort.

    diff_from_median_pctrequirednumber | null

    From the basis cohort.

    neighborhoodrequiredobject | null

    Null when the listing has no neighborhood, no price, or is in a city Kite doesn't cover.

    cityrequiredobject | null

    Null when the listing has no price or is in a city Kite doesn't cover.

    listing_in_samplerequiredboolean
    windowrequiredobject

    The freshness window of the market sample.

    Example request

    curl
    curl "https://api.kite.sa/v1/listings/128647/market-position" \
      -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.listingMarketPosition(128647);
    Python (kite-sa)
    from kite_sa import Kite
    
    kite = Kite()  # reads KITE_API_KEY
    result = kite.analytics.listing_market_position(128647)

    Open in the interactive reference

    Related endpoints

    • Get comparable listings GET /listings/{id}/comparables
    • 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 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