Skip to main content
POST
/
markets
/
bulk_forecasts
Bulk Market Forecasts
curl --request POST \
  --url https://data.apartmentiq.io/apartmentiq/api/v2/markets/bulk_forecasts \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "account_id": "{account_id}",
  "time_period": "next_12_months",
  "interval": "quarter"
}
'
{
  "rows": [
    {
      "name": "Madison, WI Metro Area",
      "geo_boundary_id": 4127,
      "geo_type": "MSA",
      "msa_name": null,
      "submarket_name": null,
      "period": "2026-Q3",
      "rent_growth_yoy": 0.0211,
      "rent_growth_yoy_downside": 0.0098,
      "rent_growth_yoy_upside": 0.0342,
      "rent_growth_yoy_bed_0": 0.0184,
      "rent_growth_yoy_bed_0_downside": 0.0065,
      "rent_growth_yoy_bed_0_upside": 0.031,
      "rent_growth_yoy_bed_1": 0.0202,
      "rent_growth_yoy_bed_1_downside": 0.0089,
      "rent_growth_yoy_bed_1_upside": 0.0331,
      "rent_growth_yoy_bed_2": 0.0237,
      "rent_growth_yoy_bed_2_downside": 0.0114,
      "rent_growth_yoy_bed_2_upside": 0.0376,
      "rent_growth_yoy_bed_3": 0.0196,
      "rent_growth_yoy_bed_3_downside": 0.0071,
      "rent_growth_yoy_bed_3_upside": 0.0324,
      "rent_growth_yoy_class_a": 0.0252,
      "rent_growth_yoy_class_a_downside": 0.0128,
      "rent_growth_yoy_class_a_upside": 0.0394,
      "rent_growth_yoy_class_b": 0.0201,
      "rent_growth_yoy_class_b_downside": 0.0087,
      "rent_growth_yoy_class_b_upside": 0.0322,
      "rent_growth_yoy_class_c": 0.0157,
      "rent_growth_yoy_class_c_downside": 0.0038,
      "rent_growth_yoy_class_c_upside": 0.0289,
      "occupancy": 0.9433,
      "occupancy_downside": 0.9275,
      "occupancy_upside": 0.9581,
      "absorption": 148,
      "absorption_downside": 96,
      "absorption_upside": 201,
      "deliveries": 132,
      "deliveries_downside": 74,
      "deliveries_upside": 186
    },
    {
      "name": "Downtown Madison",
      "geo_boundary_id": 90114,
      "geo_type": "Submarket",
      "msa_name": "Madison, WI Metro Area",
      "submarket_name": null,
      "period": "2026-Q3",
      "rent_growth_yoy": 0.0289,
      "rent_growth_yoy_downside": 0.0142,
      "rent_growth_yoy_upside": 0.0441,
      "rent_growth_yoy_bed_0": 0.0251,
      "rent_growth_yoy_bed_0_downside": 0.0107,
      "rent_growth_yoy_bed_0_upside": 0.0402,
      "rent_growth_yoy_bed_1": 0.0278,
      "rent_growth_yoy_bed_1_downside": 0.0131,
      "rent_growth_yoy_bed_1_upside": 0.0435,
      "rent_growth_yoy_bed_2": 0.0314,
      "rent_growth_yoy_bed_2_downside": 0.0168,
      "rent_growth_yoy_bed_2_upside": 0.0479,
      "rent_growth_yoy_bed_3": null,
      "rent_growth_yoy_bed_3_downside": null,
      "rent_growth_yoy_bed_3_upside": null,
      "rent_growth_yoy_class_a": 0.0335,
      "rent_growth_yoy_class_a_downside": 0.0188,
      "rent_growth_yoy_class_a_upside": 0.0502,
      "rent_growth_yoy_class_b": 0.0246,
      "rent_growth_yoy_class_b_downside": 0.0104,
      "rent_growth_yoy_class_b_upside": 0.0395,
      "rent_growth_yoy_class_c": null,
      "rent_growth_yoy_class_c_downside": null,
      "rent_growth_yoy_class_c_upside": null,
      "occupancy": 0.9504,
      "occupancy_downside": 0.9312,
      "occupancy_upside": 0.9648,
      "absorption": 32,
      "absorption_downside": 18,
      "absorption_upside": 47,
      "deliveries": 24,
      "deliveries_downside": 0,
      "deliveries_upside": 42
    }
  ],
  "pagination": {
    "current_page": 1,
    "total_pages": 4,
    "total_count": 100,
    "per_page": 25
  }
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
account_id
required

ApartmentIQ account ID used to set the request account context.

time_period
enum<string>
required

Forecast horizon.

Available options:
next_12_months,
next_3_years,
next_5_years
interval
enum<string>
required

Forecast period bucket.

Available options:
month,
quarter,
year
fields
enum<string>[]

Forecast metric field names to include in each market row.

Available options:
rent_growth_yoy,
rent_growth_yoy_downside,
rent_growth_yoy_upside,
rent_growth_yoy_bed_0,
rent_growth_yoy_bed_0_downside,
rent_growth_yoy_bed_0_upside,
rent_growth_yoy_bed_1,
rent_growth_yoy_bed_1_downside,
rent_growth_yoy_bed_1_upside,
rent_growth_yoy_bed_2,
rent_growth_yoy_bed_2_downside,
rent_growth_yoy_bed_2_upside,
rent_growth_yoy_bed_3,
rent_growth_yoy_bed_3_downside,
rent_growth_yoy_bed_3_upside,
rent_growth_yoy_class_a,
rent_growth_yoy_class_a_downside,
rent_growth_yoy_class_a_upside,
rent_growth_yoy_class_b,
rent_growth_yoy_class_b_downside,
rent_growth_yoy_class_b_upside,
rent_growth_yoy_class_c,
rent_growth_yoy_class_c_downside,
rent_growth_yoy_class_c_upside,
occupancy,
occupancy_downside,
occupancy_upside,
absorption,
absorption_downside,
absorption_upside,
deliveries,
deliveries_downside,
deliveries_upside
geo_filters
object

Market selection filters. Omit to page through all supported market boundaries.

page
integer
default:1

Page number. Values less than 1 are treated as 1.

Required range: x >= 1
per_page
integer
default:25

Matched markets per page. Values above 100 are capped at 100. Interval-based rows expand each matched market into one row per period, so the number of rows returned can be greater than per_page.

Required range: 1 <= x <= 100

Response

Bulk market forecast rows and pagination metadata.

Paginated market forecast export results.

rows
object[]
required

Market forecast rows for the matched markets on the current page. Each matched market is expanded into one row per interval period, so the number of rows returned can be greater than the per_page value. Each row includes market identity fields, an output period, and any requested forecast fields.

pagination
object
required

Pagination details for matched markets, not the expanded interval-period rows.