---
title: "Get county market statistics"
method: GET
path: "/api/v1/market/counties"
tags: ["Market"]
---

# Get county market statistics

`GET /api/v1/market/counties`

## Request

- Base URL: `https://propraven.com`
- URL: `https://propraven.com/api/v1/market/counties`
- Auth: one of:
  - HTTP bearer
  - none

Retrieve real estate market statistics aggregated at the county level, including sale counts, median prices, and year-over-year changes. API key optional (county aggregates, no person-level fields): anonymous callers are rate-limited per IP at the free tier; a present but invalid key is a 401; keyed calls are metered.

## Query parameters

- `state_fips` string
- `min_sales` integer
- `quarter` string
- `sort` 'median_sale_price' | 'sale_count' | 'total_volume' | 'price_yoy_pct'
- `order` 'asc' | 'desc'
- `limit` integer
- `offset` integer

## Response `200`

County market stats returned.

- object
  - `data` object[], required
    - `county_fips` string, required
    - `state_fips` string, required
    - `county_name` string, nullable, required
    - `state` string, nullable, required
    - `refreshed_at` string, nullable, required
    - `quarter` string, nullable, required
    - `sale_count` integer, nullable, required
    - `median_sale_price` number, nullable, required
    - `avg_sale_price` number, nullable, required
    - `total_volume` integer, nullable, required
    - `price_yoy_pct` number, nullable, required
    - `avg_dom` number, nullable, required
    - `under_review` string[]
    - `stale_quarter` boolean, nullable
    - `state_abbr` string
    - `median_price` number
    - `avg_price` number
    - `yoy_change` number, float: Year-over-year median price change as a decimal (e.g., 0.05 = 5%).
    - `avg_days_on_market` integer
  - `summary` object, required
    - `total_counties` integer, required
    - `total_sales` integer, nullable, required
    - `overall_median_price` number, required
    - `total_volume` integer, nullable, required
    - `avg_yoy_pct` number, required
    - `under_review` string[]
  - `total` integer, required
  - `limit` integer, required
  - `offset` integer, required

## Other responses

- `400`: A query or body parameter is invalid. Nothing was read or charged.
- `401`: Missing, malformed or invalid credential.
- `402`: Monthly call cap reached (free tier, or a paid tier with the hard cap enabled).
- `405`: The endpoint exists but does not support this method. `Allow` lists the methods it does.
- `429`: Rate limit exceeded.
- `500`: Unexpected server error. The body never carries database or driver text.

---

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