# Housing Market Research

> Compare US housing markets through Crawlora's historical housing dataset and Redfin tools. Use for city, metro, county, or ZIP-code comparisons of prices, inventory, sales activity, time on market, and explicitly qualified affordability trends.

- Skill: `crawlora-org/housing-market-research` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add crawlora-org/housing-market-research`
- Raw SKILL.md: https://api.skillmd.com/api/skills/crawlora-org/housing-market-research/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: Crawlora-org (https://skillmd.com/u/crawlora-org)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/crawlora-org/housing-market-research

---


# Housing market research

Compare defined markets over comparable periods. Keep market aggregates separate
from individual property valuations and personalized financing decisions.

## Setup

Set `CRAWLORA_API_KEY` to your key from [crawlora.net](https://crawlora.net).
Run the bundled `scripts/crawlora.sh` from this skill directory or by absolute
path. It sends `x-api-key` to `https://api.crawlora.net/api/v1`; keep the key in
the environment. Read [reference/endpoints.md](reference/endpoints.md) for
dataset discovery/history and optional live Redfin context.

## Build a comparable market panel

1. Define geography level, candidate places, property type, period, and decision.
   Dataset `region_type` accepts `national`, `metro`, `county`, `city`, or `zip`.
   Use `/datasets/housing-markets/facets` and `/search` under the same prefix to
   resolve exact regions and `table_id`; names and ZIP codes are not table IDs.
2. Start with `latest=true`, a single region level, and a single property type.
   Latest is per series, so compare returned `period_begin` AND `period_end`.
   Select a common period if series differ. A monthly observation can summarize
   a longer rolling window; do not call every row one month's transactions.
3. Retrieve `/datasets/housing-markets/items/{region_type}/{table_id}` with
   `history=true` and the same `property_type` for the stored chronological
   series. Keep gaps, window lengths, and revisions visible. Use matched periods
   for YoY comparisons; overlapping windows are not independent observations.
4. Compare median sale/list prices, inventory, homes sold, and median days on
   market where populated. MoM/YoY fields are fractions: `0.05` means +5%.
   Preserve nulls; a thin market or unmatched metric is not a measured zero.
5. Treat affordability as a modeled comparison. Retain `income_vintage`,
   `income_geo_id`, and `mortgage_rate_pct`. Check the income geography actually
   matches the intended comparison; unavailable or broader-area income cannot
   establish precise neighborhood affordability. The dataset's salary estimate
   assumes 20% down, a 30-year fixed mortgage, 1.5% annual taxes/insurance, and a
   28% payment-to-income ratio. Disclose these assumptions and the income lag.
6. If requested, supplement with `/redfin/search?location=...` or live regional
   trends. These use numeric `region_type` and `region_id` values resolved by
   the live search response; dataset string types/table IDs are not a drop-in
   substitute. Live listings and historical market aggregates have different
   populations and dates; do not blend them into a single unlabeled statistic.
   Live trends can be display strings such as `$1.2M` or `+5%`; they are not the
   dataset's numeric dollars and fractional change fields.

```sh
scripts/crawlora.sh /datasets/housing-markets/search \
  region_type=city state_code=TX latest=true \
  'property_type=Single Family Residential' page_size=5
# Resolve table_id before requesting history for the same region/property type.
```

## Deliverable and interpretation

Return a comparison table and, when helpful, time-series charts with region,
property type, full measurement window, units, sample/activity counts, source,
collection time, and missing-data notes. Explain tradeoffs against the user's
criteria. Link the [Redfin source and methodology](https://www.redfin.com/news/data-center/)
alongside record provenance.

- Do not average ZIP/city medians to obtain a metro median, sum overlapping
  geographies, or sum overlapping rolling-window sales counts.
- A change in median price can reflect the mix of homes sold. It is not the
  appreciation rate of a fixed property. Low transaction counts weaken comparisons.
- Median-income affordability is not an individual's mortgage qualification or
  monthly budget. Keep custom scenarios and assumptions separate from returned data.
- Bound dataset pagination to `page_size<=100` and 10,000 results. A `404` item
  can mean an absent region/period/property-type combination. Back off on `429`,
  retry transient `5xx` once, stop on `401`/`403`, and check application `code`.

