Skip to content

get_estaite_rent_trends

Description

Returns rent trend history for a submarket — month-over-month, 3M, 6M, 9M, and YoY price changes — plus a derived trend_direction label. Defaults to apt, 2 BR, 6 months of history.

The response shape depends on whether you pass property_type and bedrooms:

  • Slice mode (both set) → latest, trend_direction, and a history array for that one segment.
  • Summary mode (either omitted) → no latest/trend_direction/history; instead a segments block with per-segment monthly histories for all 12 segments (3 property types × 4 bedrooms).

Inputs

NameTypeRequiredDescription
idintegeryesSubmarket id from search_estaite_submarkets.
property_typeenum (apt, sfr, ct)noIf omitted (or bedrooms is omitted), the tool switches to summary mode.
bedroomsinteger 1–5noSame — omit either of property_type or bedrooms to get summary mode.
history_monthsinteger 1–24noNumber of months to return. Default 6, hard cap 24.

Response — Slice mode

{
"attribution": "Data via Estaite Submarket Index",
"powered_by": "Estaite.com",
"api_version": "v1",
"request_id": "f0a4e9c2-7f8e-4d11-9a7e-7a2f1b4c8e91",
"id": 1,
"submarket_name": "Carmel Valley",
"city": "San Diego",
"state": "CA",
"property_type": "apt",
"bedrooms": 2,
"trend_direction": "Falling",
"latest": {
"yearmonth": 202603,
"median_rent": 3659.0,
"mom_change": 0.4,
"change_3m": 1.1,
"change_6m": 2.0,
"change_9m": 2.8,
"yoy_change": -3.2,
"listings": 64
},
"history": [
{ "yearmonth": 202603, "median_rent": 3659.0, "mom_change": 0.4, "yoy_change": -3.2 },
{ "yearmonth": 202602, "median_rent": 3645.0, "mom_change": 0.3, "yoy_change": -3.0 },
{ "yearmonth": 202601, "median_rent": 3635.0, "mom_change": 0.2, "yoy_change": -2.8 }
]
}

Response — Summary mode

{
"attribution": "Data via Estaite Submarket Index",
"powered_by": "Estaite.com",
"api_version": "v1",
"request_id": "f0a4e9c2-7f8e-4d11-9a7e-7a2f1b4c8e91",
"id": 1,
"submarket_name": "Carmel Valley",
"city": "San Diego",
"state": "CA",
"history_months": 6,
"segments": {
"apartments": {
"br1": [ { "yearmonth": 202603, "median_rent": 2700, "mom_change": 0.3, "yoy_change": 3.5 } ],
"br2": [ { "yearmonth": 202603, "median_rent": 3659, "mom_change": 0.4, "yoy_change": -3.2 } ],
"br3": [ { "yearmonth": 202603, "median_rent": 4200, "mom_change": 0.2, "yoy_change": 2.8 } ],
"br4": [ { "yearmonth": 202603, "median_rent": 5100, "mom_change": 0.1, "yoy_change": 1.6 } ]
},
"single_family": { "br1": [ ... ], "br2": [ ... ], "br3": [ ... ], "br4": [ ... ] },
"condo_townhome": { "br1": [ ... ], "br2": [ ... ], "br3": [ ... ], "br4": [ ... ] }
}
}

Fields

Slice mode

PathTypeDescription
trend_directionstringDerived from latest YoY. See table below.
latest.yearmonthnumberMost recent yearmonth, format YYYYMM.
latest.median_rentnumberMedian rent, USD.
latest.mom_changenumberMonth-over-month change in whole-percent.
latest.change_3m, _6m, _9mnumber3/6/9-month changes in whole-percent.
latest.yoy_changenumberYear-over-year change in whole-percent.
latest.listingsnumberListing count for the most recent month.
history[]arrayOrdered newest → oldest. Each entry has yearmonth, median_rent, mom_change, yoy_change only — the 3m/6m/9m fields and listings are only present on latest.

Summary mode

PathTypeDescription
history_monthsnumberNumber of monthly entries returned per segment.
segments[label][br_key][]arraySlimmer entries: { yearmonth, median_rent, mom_change, yoy_change }. label is apartments/single_family/condo_townhome; br_key is br1br4.

trend_direction derivation

LabelRule (latest YoY change, whole-percent)
Rising Strongly> 5
Rising> 2
Falling Strongly< -5
Falling< -2
Flatotherwise

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.
SUBMARKET_NOT_FOUND404No data exists for the requested id.

Notes

  • History is newest first. Reverse it if you want a left-to-right time-series chart.
  • All percent values are whole-percent. A yoy_change of 4.12 means +4.12%.
  • Slice and summary modes have different schemas. Don’t write parsing code that assumes latest always exists — branch on whether property_type is set in the request, or check for segments vs history in the response.
  • Need both detailed metrics + trend in one call? Use query_estaite_submarket_index with include: { trend: true } instead of calling this tool separately.