---
title: "Search the US housing markets dataset"
method: GET
path: "/datasets/housing-markets/search"
tags: ["Datasets"]
---

# Search the US housing markets dataset

`GET /datasets/housing-markets/search`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/datasets/housing-markets/search`
- Auth: API key in header `x-api-key`

Searches monthly Redfin housing-market statistics per region and property type since 2012, joined to Census ACS income for affordability metrics. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only`. Sort enum: `relevance`, `price_desc`, `price_asc`, `list_price_desc`, `list_price_asc`, `price_to_income_desc`, `price_to_income_asc`, `salary_to_buy_desc`, `salary_to_buy_asc`, `dom_asc`, `dom_desc`, `inventory_desc`, `homes_sold_desc`, `period_desc`. Use `latest=true` for the most recent period per region series. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).

## Query parameters

- `q` string
- `region_type` 'national' | 'metro' | 'county' | 'city' | 'zip'
- `state_code` string
- `property_type` string
- `parent_metro_code` string
- `zip_code` string
- `period` string
- `latest` boolean
- `min_median_sale_price` number
- `max_median_sale_price` number
- `min_median_list_price` number
- `max_median_list_price` number
- `min_price_to_income` number
- `max_price_to_income` number
- `min_salary_to_buy` integer
- `max_salary_to_buy` integer
- `min_median_dom` number
- `max_median_dom` number
- `min_inventory` integer
- `max_inventory` integer
- `min_homes_sold` integer
- `sort` 'relevance' | 'price_desc' | 'price_asc' | 'list_price_desc' | 'list_price_asc' | 'price_to_income_desc' | 'price_to_income_asc' | 'salary_to_buy_desc' | 'salary_to_buy_asc' | 'dom_asc' | 'dom_desc' | 'inventory_desc' | 'homes_sold_desc' | 'period_desc'
- `page` integer
- `page_size` integer

## Headers

- `x-api-key` string, required

## Response `200`

OK

- DatasetsHousingMarketsSearchResponseDoc
  - `code` integer
  - `data` DatasetsHousingSearchResponse
    - `dataset` string
    - `items` EsHousingMarketRecord[]
      - `affordability_gap` integer
      - `avg_sale_to_list` number
      - `city` string
      - `homes_sold` integer
      - `income_geo_id` string
      - `income_vintage` string
      - `inventory` integer
      - `is_latest` boolean: IsLatest is true only on the most recent period per (region_type_id, table_id, property_type_id); the loader maintains it.
      - `last_updated` string
      - `list_price_to_income` number
      - `loaded_at` string
      - `median_dom` number
      - `median_household_income` integer: Affordability join (Census ACS 5-year median household income). Present only where the income geography matched and median_sale_price exists.
      - `median_list_ppsf` number
      - `median_list_ppsf_mom` number
      - `median_list_ppsf_yoy` number
      - `median_list_price` number
      - `median_list_price_mom` number
      - `median_list_price_yoy` number
      - `median_ppsf` number
      - `median_ppsf_mom` number
      - `median_ppsf_yoy` number
      - `median_sale_price` number
      - `median_sale_price_mom` number
      - `median_sale_price_yoy` number
      - `months_of_supply` number
      - `mortgage_rate_pct` number
      - `new_listings` integer
      - `off_market_in_two_weeks` number
      - `parent_metro` string
      - `parent_metro_code` string
      - `pending_sales` integer
      - `period_begin` string
      - `period_end` string
      - `price_drops` number
      - `price_to_income` number
      - `property_type` string
      - `property_type_id` integer
      - `region` string
      - `region_type` string: RegionType is the normalized region level: national, metro, county, city, zip.
      - `region_type_id` integer
      - `run_id` string
      - `salary_to_buy` integer
      - `schema_version` integer
      - `sold_above_list` number
      - `source` string
      - `state` string
      - `state_code` string
      - `table_id` integer
      - `zip_code` string: ZipCode is set on zip rows only, parsed from REGION ("Zip Code: 60616").
    - `page` integer
    - `page_size` integer
    - `sort` string
    - `total` integer
  - `msg` string

## Other responses

- `400`: Bad Request
- `429`: Too Many Requests
- `500`: Internal Server Error

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/afac9b012a27?raw)
