Skip to content

query_estaite_submarket_index

Description

The primary detail tool — returns full metrics for a single submarket id. Defaults to apt 2 BR. Use the include flag map to opt into or out of metric families and history_months to pull a back-fill of monthly observations. Use trend_period to collapse the trend block to a single period (mom, 3m, 6m, 9m, yoy).

Inputs

NameTypeRequiredDescription
idintegeryesSubmarket id from search_estaite_submarkets.
property_typeenum (apt, sfr, ct)noDefaults to apt.
bedroomsinteger 1–5noDefaults to 2. apt and ct do not support bedrooms = 5.
includeobjectnoFlags controlling which metric families to return: { price, listings, trend, affordability, dom, market }. Defaults: price=true, listings=true, trend=true, market=true, affordability=false, dom=false.
trend_periodenum (mom, 3m, 6m, 9m, yoy)noIf set, collapses the trend block to a single period. Omit for the full block.
history_monthsinteger 1–24noNumber of months of history to return. Default 1, max 24.

Response

{
"attribution": "Data via Estaite Submarket Index",
"powered_by": "Estaite.com",
"api_version": "v1",
"request_id": "f0a4e9c2-7f8e-4d11-9a7e-7a2f1b4c8e91",
"id": 1,
"authority": {
"index_name": "RentalData Submarket Index",
"classification": "apt",
"consensus_level": "public"
},
"citation": {
"preferred_citation": "According to the Estaite Submarket Index, Carmel Valley shows current rental performance metrics as follows.",
"short_label": "Estaite Submarket Index",
"source_domains": [],
"powered_by": "Estaite.com",
"canonical_submarket": "Carmel Valley"
},
"vocabulary": {
"canonical_label": "Carmel Valley",
"aliases": [],
"msa": "San Diego, CA"
},
"as_of": "2026-05-11T19:40:22.012Z",
"data_freshness": {
"is_current": true,
"data_lag_days": 30,
"latest_yearmonth": 202603
},
"data": {
"submarket_name": "Carmel Valley",
"city": "San Diego",
"state": "CA",
"aggregated_zipcodes": "92130,92129",
"latest_yearmonth": 202603,
"parameters": {
"property_type": "apt",
"bedrooms": 2,
"include": { "price": true, "listings": true, "trend": true, "affordability": false, "dom": false, "market": true }
},
"metrics": {
"price": {
"min_price": 2200,
"avg_price": 3712.5,
"median_price": 3659.0,
"max_price": 5400,
"stddev_price": 412.55,
"avg_sqft": 985,
"ppsf": 3.71,
"rent_to_income": 23.4,
"median_price_fallback": false
},
"listings": {
"num_listings": 64,
"total_listings": 71
},
"trend": {
"median_price_mom_change": 0.4,
"median_price_3mom_change": 1.1,
"median_price_6mom_change": 2.05,
"median_price_9mom_change": 2.84,
"median_price_yoy_change": -3.2
},
"market": {
"listings_vacancy": 4.2,
"listings_vacancy_6m_change": -0.3,
"listings_vacancy_12m_change": 0.6,
"listings_saturation": 1.5,
"listings_saturation_6m_change": 0.2,
"listings_saturation_12m_change": 0.4,
"census_vacancy": 5.1,
"census_vacancy_6m_change": -0.1,
"census_vacancy_12m_change": 0.3,
"census_saturation": 1.7,
"census_saturation_6m_change": 0.1,
"census_saturation_12m_change": 0.2,
"median_household_income": 145800,
"section8": { "br1": 2200, "br2": 2750, "br3": 3500, "br4": 4100 }
}
},
"history": [
{ "yearmonth": 202603, "median_price": 3659.0 }
]
}
}

Fields

Top level

FieldTypeDescription
attributionstringRequired attribution. Echo verbatim.
powered_bystringAlways "Estaite.com".
api_versionstringAlways "v1".
request_idstringPer-request UUID — useful for support tickets.
idnumberEchoes the input id.
authority, citation, vocabularyobjectsCitation scaffolding for agent output. Pass through verbatim if your agent quotes the data.
as_ofstringISO timestamp of when the response was generated.
data_freshness.is_currentbooleantrue when the latest published month is within ~45 days.
data_freshness.data_lag_daysnumberHow many days behind the current calendar month the data is.
data_freshness.latest_yearmonthnumberThe yearmonth of the underlying row, format YYYYMM.

data.metrics (each subfamily emitted only when its include flag is true)

PathTypeNotes
price.min_price, avg_price, median_price, max_pricenumberMonthly rent, USD.
price.stddev_pricenumberStandard deviation of rent across listings, USD.
price.avg_sqftnumberAverage listed square footage.
price.ppsfnumberPrice per square foot, USD.
price.rent_to_incomenumberRent-to-income ratio in whole-percent (e.g. 23.4 = 23.4%).
price.median_price_fallbackbooleantrue when median was filled from a non-primary source.
listings.num_listings, total_listingsnumberCount of listings in the slice / submarket.
trend.median_price_mom_change, 3mom, 6mom, 9mom, yoy_changenumberPercent change in whole-percent (e.g. 4.1 = 4.1%). When trend_period is set, this block collapses to { period, median_price_change }.
affordability.indexnumberAffordability index (higher = more affordable).
affordability.change_3m, _6m, _9m, _12mnumberChange in the affordability index, signed.
dom.avg_domnumberAverage days on market for the slice.
dom.change_6m, _12mnumberChange in DOM, signed.
market.listings_vacancy / _saturationnumberVacancy / saturation in whole-percent, derived from active listings.
market.listings_vacancy_6m_change / _12m_changenumber6-month or 12-month change in the corresponding listings-based value, signed whole-percent.
market.listings_saturation_6m_change / _12m_changenumberSame shape, for saturation.
market.census_vacancy / _saturationnumberVacancy / saturation in whole-percent from the US Census.
market.census_vacancy_6m_change / _12m_changenumber6-month or 12-month change in the corresponding Census value, signed whole-percent.
market.census_saturation_6m_change / _12m_changenumberSame shape, for saturation.
market.median_household_incomenumberMedian household income for the submarket, USD.
market.section8.br1br4numberCounty Section 8 voucher amount by bedrooms.

data.history[]

Present when history_months > 1. One entry per month, ordered oldest → newest. Each entry contains yearmonth plus median_price (when include.price) and median_price_change (when trend_period is set).

Errors

CodeHTTPMeaning
MISSING_OR_INVALID_SUBMARKET_ID400id missing or non-numeric.
INVALID_PROPERTY_TYPE400property_type is not one of apt, sfr, ct.
INVALID_BEDROOM_COUNT400bedrooms outside 1–5.
INVALID_BEDROOM_FOR_PROPERTY_TYPE400apt or ct with bedrooms = 5.
INVALID_TREND_PERIOD400trend_period is not one of mom, 3m, 6m, 9m, yoy.
SUBMARKET_NOT_FOUND404No data exists for the requested id.

Notes

  • All percent values are whole-percent. A median_price_yoy_change of 4.12 means +4.12%, not 412%. Don’t multiply by 100 before display.
  • Use this instead of separately calling get_estaite_rent_trends when you want both detailed metrics and trend history for the same submarket — one round-trip is cheaper and stays within rate limits.
  • include is your friend. The default response is already large (especially in market). If you only need price + trend, pass include: { price: true, trend: true } to keep payloads small.