Datasets API endpoint
Returns one housing-market record by region_type and Redfin table_id from dataset id enum value `housing-markets`. 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` (defaults to `All Residential`). `period` defaults to the most recent period on record. Pass `history=true` to get the full monthly series (a `{dataset, region_type, table_id, property_type, items}` envelope, sorted by period ascending) instead of a single record.
/datasets/housing-markets/items/{region_type}/{table_id}Returns one housing-market record — a single region x month x property type
cut — or, with history=true, the region's full monthly series since 2012.
Dataset id enum:
housing-marketsPath parameters:
region_type: required region level. Allowed values: national, metro, county, city, zip.table_id: required numeric Redfin table id (the region's stable id; e.g. 1400 for national, the CBSA code for metros). Discover ids via the search endpoint's table_id field.Query parameters:
period: optional exact period start date, YYYY-MM-DD; defaults to the most recent period on record.property_type: optional property type. Allowed values: All Residential, Single Family Residential, Condo/Co-op, Townhouse, Multi-Family (2-4 Unit), Single Units Only. Defaults to All Residential.history: optional; true returns the full monthly series for the region and property type (sorted by period ascending) instead of a single record.Response behavior:
history, returns the single record for the requested (or latest) period.history=true, returns a {dataset, region_type, table_id, property_type, items} envelope with every stored month.404 when the region/period/property-type combination is not present in the stored dataset.region_type, a non-numeric table_id, an invalid property_type, or a malformed period.| Field | In the sample | Value in the sample |
|---|---|---|
| region_type | Has a value | |
| region_type_id | Has a value | |
| table_id | Has a value | |
| region | Has a value | |
| city | Has a value | |
| state | Has a value | |
| state_code | Has a value | |
| property_type | Has a value | |
| property_type_id | Has a value | |
| period_begin | Has a value | 2026-05-01 |
| period_end | Has a value | 2026-05-31 |
| is_latest | Has a value | true |
| median_sale_price | Has a value | 449,846 |
| median_sale_price_mom | Has a value | 0.02 |
| median_sale_price_yoy | Has a value | 0.02 |
| median_list_price | Has a value | 476,259 |
| median_list_price_mom | Has a value | 0 |
| median_list_price_yoy | Has a value | 0.02 |
| median_ppsf | Has a value | 242 |
| median_ppsf_mom | Has a value | 0.01 |
| median_ppsf_yoy | Has a value | 0.01 |
| median_list_ppsf | Has a value | 253 |
| median_list_ppsf_mom | Has a value | 0 |
| median_list_ppsf_yoy | Has a value | 0.03 |
| homes_sold | Has a value | 464,811 |
| pending_sales | Has a value | 559,615 |
| new_listings | Has a value | 648,351 |
| inventory | Has a value | 1,460,440 |
| months_of_supply | Has a value | 3.14 |
| median_dom | Has a value | 42 |
| avg_sale_to_list | Has a value | 0.99 |
| sold_above_list | Has a value | 0.3 |
| price_drops | Has a value | 0.2 |
| off_market_in_two_weeks | Has a value | 0.41 |
| median_household_income | Has a value | 80,734 |
| income_geo_id | Has a value | |
| income_vintage | Has a value | |
| price_to_income | Has a value | 5.57 |
| list_price_to_income | Has a value | 5.9 |
| salary_to_buy | Has a value | 121,483 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| region_type (path) | string | Yes | Region level enum: national, metro, county, city, zip Allowed values: national, metro, county, city, zip. | national | |
| table_id (path) | integer | Yes | Redfin table id (the region's stable numeric id) | 26097 | |
| period | string | No | the latest period | Exact period start date, YYYY-MM-DD; defaults to the latest period | |
| property_type | string | No | All Residential | Property type enum: All Residential, Single Family Residential, Condo/Co-op, Townhouse, Multi-Family (2-4 Unit), Single Units Only; defaults to All Residential | |
| history | boolean | No | Return the full monthly series instead of a single period | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/datasets/housing-markets/items/national/26097?history=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"region_type": "zip",
"region_type_id": 2,
"table_id": 26097,
"region": "Zip Code: 60616",
"state": "Illinois",
"state_code": "IL",
"zip_code": "60616",
"parent_metro": "Chicago, IL",
"parent_metro_code": "16984",
"property_type": "All Residential",
"property_type_id": -1,
"period_begin": "2026-03-01",
"period_end": "2026-05-31",
"is_latest": true,
"median_sale_price": 340000,
"median_sale_price_yoy": 0.062,
"median_list_price": 349900,
"homes_sold": 94,
"inventory": 151,
"median_dom": 38,
"median_household_income": 91245,
"income_geo_id": "860Z200US60616",
"income_vintage": "acs2024_5yr",
"price_to_income": 3.73,
"salary_to_buy": 96581,
"affordability_gap": 5336,
"mortgage_rate_pct": 6.49,
"source": "redfin_data_center",
"run_id": "housing-20260711",
"schema_version": 1
}
}Request schema
No body schema
Response schema
#/definitions/datasets.housingMarketItemResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | es.HousingMarketRecord | No | ||||
| data.affordability_gap | integer | No | ||||
| data.avg_sale_to_list | number | No | ||||
| data.city | string | No | ||||
| data.homes_sold | integer | No | ||||
| data.income_geo_id | string | No | ||||
| data.income_vintage | string | No | ||||
| data.inventory | integer | No | ||||
| data.is_latest | boolean | No | IsLatest is true only on the most recent period per (region_type_id, table_id, property_type_id); the loader maintains it. | |||
| data.last_updated | string | No | ||||
| data.list_price_to_income | number | No | ||||
| data.loaded_at | string | No | ||||
| data.median_dom | number | No | ||||
| data.median_household_income | integer | No | Affordability join (Census ACS 5-year median household income). Present only where the income geography matched and median_sale_price exists. | |||
| data.median_list_ppsf | number | No | ||||
| data.median_list_ppsf_mom | number | No | ||||
| data.median_list_ppsf_yoy | number | No | ||||
| data.median_list_price | number | No | ||||
| data.median_list_price_mom | number | No | ||||
| data.median_list_price_yoy | number | No | ||||
| data.median_ppsf | number | No | ||||
| data.median_ppsf_mom | number | No | ||||
| data.median_ppsf_yoy | number | No | ||||
| data.median_sale_price | number | No | ||||
| data.median_sale_price_mom | number | No | ||||
| data.median_sale_price_yoy | number | No | ||||
| data.months_of_supply | number | No | ||||
| data.mortgage_rate_pct | number | No | ||||
| data.new_listings | integer | No | ||||
| data.off_market_in_two_weeks | number | No | ||||
| data.parent_metro | string | No | ||||
| data.parent_metro_code | string | No | ||||
| data.pending_sales | integer | No | ||||
| data.period_begin | string | No | ||||
| data.period_end | string | No | ||||
| data.price_drops | number | No | ||||
| data.price_to_income | number | No | ||||
| data.property_type | string | No | ||||
| data.property_type_id | integer | No | ||||
| data.region | string | No | ||||
| data.region_type | string | No | RegionType is the normalized region level: national, metro, county, city, zip. | |||
| data.region_type_id | integer | No | ||||
| data.run_id | string | No | ||||
| data.salary_to_buy | integer | No | ||||
| data.schema_version | integer | No | ||||
| data.sold_above_list | number | No | ||||
| data.source | string | No | ||||
| data.state | string | No | ||||
| data.state_code | string | No | ||||
| data.table_id | integer | No | ||||
| data.zip_code | string | No | ZipCode is set on zip rows only, parsed from REGION ("Zip Code: 60616"). | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/datasets/housing-markets/items/national/26097?history=true" \
-H "x-api-key: $CRAWLORA_API_KEY"