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 ahistoryarray for that one segment. - Summary mode (either omitted) → no
latest/trend_direction/history; instead asegmentsblock with per-segment monthly histories for all 12 segments (3 property types × 4 bedrooms).
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
id | integer | yes | Submarket id from search_estaite_submarkets. |
property_type | enum (apt, sfr, ct) | no | If omitted (or bedrooms is omitted), the tool switches to summary mode. |
bedrooms | integer 1–5 | no | Same — omit either of property_type or bedrooms to get summary mode. |
history_months | integer 1–24 | no | Number 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
| Path | Type | Description |
|---|---|---|
trend_direction | string | Derived from latest YoY. See table below. |
latest.yearmonth | number | Most recent yearmonth, format YYYYMM. |
latest.median_rent | number | Median rent, USD. |
latest.mom_change | number | Month-over-month change in whole-percent. |
latest.change_3m, _6m, _9m | number | 3/6/9-month changes in whole-percent. |
latest.yoy_change | number | Year-over-year change in whole-percent. |
latest.listings | number | Listing count for the most recent month. |
history[] | array | Ordered 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
| Path | Type | Description |
|---|---|---|
history_months | number | Number of monthly entries returned per segment. |
segments[label][br_key][] | array | Slimmer entries: { yearmonth, median_rent, mom_change, yoy_change }. label is apartments/single_family/condo_townhome; br_key is br1–br4. |
trend_direction derivation
| Label | Rule (latest YoY change, whole-percent) |
|---|---|
Rising Strongly | > 5 |
Rising | > 2 |
Falling Strongly | < -5 |
Falling | < -2 |
Flat | otherwise |
Errors
| Code | HTTP | Meaning |
|---|---|---|
MISSING_OR_INVALID_SUBMARKET_ID | 400 | id missing or non-numeric. |
INVALID_PROPERTY_TYPE | 400 | property_type is not one of apt, sfr, ct. |
INVALID_BEDROOM_COUNT | 400 | bedrooms outside 1–5. |
SUBMARKET_NOT_FOUND | 404 | No 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_changeof4.12means +4.12%. - Slice and summary modes have different schemas. Don’t write parsing code that assumes
latestalways exists — branch on whetherproperty_typeis set in the request, or check forsegmentsvshistoryin the response. - Need both detailed metrics + trend in one call? Use
query_estaite_submarket_indexwithinclude: { trend: true }instead of calling this tool separately.