# Zillow API — US real estate data: for-sale, rental and sold listings, full property detail with Zestimate, price/tax history, schools, comps, agents, market trends, walk/transit/bike scores and home-value history

> Search listings by location (for sale / for rent / recently sold), with structured filters: price, beds, baths, home type, sqft, lot, year built, HOA, days-on-market and keywords.
> ReefAPI engine `zillow` · 13 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/zillow/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed or blocked calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /zillow/v1/search — 2 credits
Search listings by location (for sale / for rent / recently sold), with structured filters: price, beds, baths, home type, sqft, lot, year built, HOA, days-on-market and keywords.

**Parameters:**
- `location` (string, required) — Where to search — city, ZIP, neighborhood or county ('Austin, TX', '78704', 'Brooklyn, NY').
- `status` (enum, optional, default "for_sale") — Listing status to search (synonyms rent/rental/recently_sold also accepted). [one of: for_sale, for_rent, sold]
- `max_results` (integer, optional, default 1000) — Stop after this many listings. Caps across pages — a single page (~41 listings) is always returned in full.
- `max_pages` (integer, optional, default 1) — How many result pages to fetch (~41 listings/page).
- `fetch_all` (boolean, optional, default false) — Fetch EVERY listing in the area (returns more than Zillow's standard ~860-result cap). Slower; combine with max_results.
- `price_min` (integer, optional) — Minimum list price in USD (e.g. 300000).
- `price_max` (integer, optional) — Maximum list price in USD (e.g. 700000).
- `beds_min` (integer, optional) — Minimum bedrooms (e.g. 3 = 3+ beds).
- `baths_min` (number, optional) — Minimum bathrooms (e.g. 2 = 2+ baths).
- `home_type` (string, optional) — Property type filter — one or several (comma-separated). One of: house, condo, townhouse, multi_family, land, manufactured, apartment (e.g. 'house,condo').
- `sqft_min` (integer, optional) — Minimum living area in square feet (e.g. 1500).
- `sqft_max` (integer, optional) — Maximum living area in square feet (e.g. 3000).
- `lot_min` (integer, optional) — Minimum lot size in SQUARE FEET (43560 sqft = 1 acre).
- `lot_max` (integer, optional) — Maximum lot size in square feet.
- `year_built_min` (integer, optional) — Earliest year built (e.g. 2010).
- `year_built_max` (integer, optional) — Latest year built (e.g. 2024).
- `max_hoa` (integer, optional) — Maximum monthly HOA fee in USD (e.g. 100; 0 keeps no-HOA only).
- `days_on_max` (integer, optional) — Only listings on Zillow at most this many days (e.g. 7 = new this week).
- `keywords` (string, optional) — Free-text listing keyword filter (e.g. 'pool', 'waterfront', 'guest house').

**Returns:** items[]{zpid, url, list_price_usd, price_display, status, property_type, beds, baths, sqft, lot_sqft, zestimate_usd, rent_zestimate_usd, address_line, latitude, longitude, photo_url} + filters_applied

**Example request body:**
```json
{
  "location": "Austin, TX"
}
```

### POST /zillow/v1/search_by_coordinates — 2 credits
Search listings inside exact map bounds (returns more than the standard ~860-result cap), with the same structured filters as search.

**Parameters:**
- `map_bounds` (object, required) — Map viewport to search: {west, east, south, north} in decimal degrees.
- `status` (enum, optional, default "for_sale") — Listing status to search (synonyms rent/rental/recently_sold also accepted). [one of: for_sale, for_rent, sold]
- `max_results` (integer, optional, default 1000) — Stop after this many listings. Caps across pages — a single page (~41 listings) is always returned in full.
- `max_pages` (integer, optional, default 1) — How many result pages to fetch (~41 listings/page).
- `fetch_all` (boolean, optional, default false) — Fetch EVERY listing in the area (returns more than Zillow's standard ~860-result cap). Slower; combine with max_results.
- `price_min` (integer, optional) — Minimum list price in USD (e.g. 300000).
- `price_max` (integer, optional) — Maximum list price in USD (e.g. 700000).
- `beds_min` (integer, optional) — Minimum bedrooms (e.g. 3 = 3+ beds).
- `baths_min` (number, optional) — Minimum bathrooms (e.g. 2 = 2+ baths).
- `home_type` (string, optional) — Property type filter — one or several (comma-separated). One of: house, condo, townhouse, multi_family, land, manufactured, apartment (e.g. 'house,condo').
- `sqft_min` (integer, optional) — Minimum living area in square feet (e.g. 1500).
- `sqft_max` (integer, optional) — Maximum living area in square feet (e.g. 3000).
- `lot_min` (integer, optional) — Minimum lot size in SQUARE FEET (43560 sqft = 1 acre).
- `lot_max` (integer, optional) — Maximum lot size in square feet.
- `year_built_min` (integer, optional) — Earliest year built (e.g. 2010).
- `year_built_max` (integer, optional) — Latest year built (e.g. 2024).
- `max_hoa` (integer, optional) — Maximum monthly HOA fee in USD (e.g. 100; 0 keeps no-HOA only).
- `days_on_max` (integer, optional) — Only listings on Zillow at most this many days (e.g. 7 = new this week).
- `keywords` (string, optional) — Free-text listing keyword filter (e.g. 'pool', 'waterfront', 'guest house').

**Returns:** items[] (same shape as search) + filters_applied

### POST /zillow/v1/search_by_url — 2 credits
Run any copied Zillow URL: a search URL replays that exact search (with its filters); a property URL routes to the full property detail.

**Parameters:**
- `url` (string, required) — Any Zillow search or property URL, copied from the browser.

**Returns:** items[] (search URL) or listing{...} (property URL)

### POST /zillow/v1/property_detail — 3 credits
Full property record: Zestimate (+history), price & tax history, schools, walk/transit/bike scores, agent, photos, RESO facts. Batch several with zpids[].

**Parameters:**
- `zpid` (string, optional) — Zillow property ID. Provide zpid, zpids OR url.
- `zpids` (array, optional) — Several property IDs in one call (batch).
- `url` (string, optional) — Zillow property URL (alternative to zpid).

**Returns:** listing{zpid, address_line, list_price_usd, zestimate_usd, rent_zestimate_usd, price_history[], tax_history[], schools[], walk_transit_score{...}, agent{...}, photos[], reso_facts{...}} (or listings[] for zpids batch)

**Example request body:**
```json
{
  "zpid": "29377187"
}
```

### POST /zillow/v1/comps — 2 credits
Comparable homes near a property (synthesized similar-listing search, scored by distance/beds/sqft).

**Parameters:**
- `zpid` (string, optional) — Zillow property ID — the number in the property URL (…/12345678_zpid/) or `zpid` from a search result.
- `url` (string, optional) — Zillow property URL (alternative to zpid).
- `radius_deg` (number, optional, default 0.03) — Search radius in decimal degrees (0.03 ≈ 2 miles).
- `max_comps` (integer, optional, default 12) — How many comparables to return (1–100).

**Returns:** subject{...} + comps[]{zpid, address_line, list_price_usd, beds, baths, sqft, distance} + radius_deg + method

### POST /zillow/v1/sold — 2 credits
Recently-sold listings (last 12 months) by location or map bounds, with the same structured filters as search.

**Parameters:**
- `location` (string, optional) — Where to search. Provide location OR map_bounds.
- `map_bounds` (object, optional) — Exact map viewport {west, east, south, north} (alternative to location).
- `max_pages` (integer, optional, default 1) — How many result pages to fetch (~41 listings/page).
- `fetch_all` (boolean, optional, default false) — Fetch EVERY listing in the area (returns more than Zillow's standard ~860-result cap). Slower; combine with max_results.
- `price_min` (integer, optional) — Minimum list price in USD (e.g. 300000).
- `price_max` (integer, optional) — Maximum list price in USD (e.g. 700000).
- `beds_min` (integer, optional) — Minimum bedrooms (e.g. 3 = 3+ beds).
- `baths_min` (number, optional) — Minimum bathrooms (e.g. 2 = 2+ baths).
- `home_type` (string, optional) — Property type filter — one or several (comma-separated). One of: house, condo, townhouse, multi_family, land, manufactured, apartment (e.g. 'house,condo').
- `sqft_min` (integer, optional) — Minimum living area in square feet (e.g. 1500).
- `sqft_max` (integer, optional) — Maximum living area in square feet (e.g. 3000).
- `lot_min` (integer, optional) — Minimum lot size in SQUARE FEET (43560 sqft = 1 acre).
- `lot_max` (integer, optional) — Maximum lot size in square feet.
- `year_built_min` (integer, optional) — Earliest year built (e.g. 2010).
- `year_built_max` (integer, optional) — Latest year built (e.g. 2024).
- `max_hoa` (integer, optional) — Maximum monthly HOA fee in USD (e.g. 100; 0 keeps no-HOA only).
- `days_on_max` (integer, optional) — Only listings on Zillow at most this many days (e.g. 7 = new this week).
- `keywords` (string, optional) — Free-text listing keyword filter (e.g. 'pool', 'waterfront', 'guest house').

**Returns:** items[] (same shape as search; status=RECENTLY_SOLD, sold price/date) + filters_applied

### POST /zillow/v1/agent — 2 credits
Listing agent + broker attribution for one property (agentInfo).

**Parameters:**
- `zpid` (string, optional) — Zillow property ID — the number in the property URL (…/12345678_zpid/) or `zpid` from a search result.
- `url` (string, optional) — Zillow property URL (alternative to zpid).

**Returns:** agent{agent_name, agent_license, broker_name, co_agent_name, buyer_agent…} + for_property{zpid, address_line, list_price_usd, status} (contact details require include_pii)

### POST /zillow/v1/agent_profile — 3 credits
An agent's full portfolio: profile info + their for-sale/sold listings + reviews (browser-rendered; slower).

**Parameters:**
- `username` (string, optional) — Agent's Zillow username (the part after /profile/). Provide username, profile_url, zuid OR url.
- `profile_url` (string, optional) — Agent profile URL.
- `zuid` (string, optional) — Advanced: Zillow user ID.

**Returns:** agent{name, business_name, rating_average, review_count, years_experience, specialties[], license_number, license_state, sale_count_all_time, sales_last_12mo, price_range, average_price, photo_url, service_areas[]} + for_sale[] + sold[] + reviews[]{rating, text, date, reviewer}

### POST /zillow/v1/agents_by_location — 2 credits
Real-estate agent directory for a location, with review summaries.

**Parameters:**
- `location` (string, required) — Where to search — city, ZIP, neighborhood or county ('Austin, TX', '78704', 'Brooklyn, NY').

**Returns:** agents[]{name, profile_url, review_count, rating, sales…} + count + location

**Example request body:**
```json
{
  "location": "Austin, TX"
}
```

### POST /zillow/v1/autocomplete — 1 credit
Location autocomplete — suggest Zillow regions and addresses for a free-text query (city, ZIP, neighborhood, county or street). Use it to resolve a fuzzy term before searching, or to power a search box.

**Parameters:**
- `query` (string, required) — Free-text location to autocomplete — a partial city, ZIP, neighborhood, county or street ('Brookl', '787', 'Austin').
- `limit` (integer, optional, default 10) — Max suggestions to return (1–25).

**Returns:** suggestions[]{name, type, region_id, latitude, longitude} + count + query

**Example request body:**
```json
{
  "query": "Austin"
}
```

### POST /zillow/v1/market_trends — 2 credits
Region market metrics: ZHVI home-value index, median sale/list price, inventory, days-to-pending, % sold above list, rent index.

**Parameters:**
- `location` (string, required) — Where to search — city, ZIP, neighborhood or county ('Austin, TX', '78704', 'Brooklyn, NY').

**Returns:** market{zhvi_usd, median_sale_price_usd, median_list_price_usd, for_sale_inventory, days_to_pending, pct_sold_above_list, rent_zori_usd} + location + region_id + region_type

**Example request body:**
```json
{
  "location": "Austin, TX"
}
```

### POST /zillow/v1/walk_transit_bike — 1 credit
Zillow Walk Score, Transit Score and Bike Score for a property — walkability, public-transit access and bikeability (0-100) with a description for each.

**Parameters:**
- `zpid` (string, optional) — Zillow property ID — the number in the property URL (…/12345678_zpid/) or `zpid` from a search result.
- `url` (string, optional) — Zillow property URL (alternative to zpid).

**Returns:** scores{walk_score, walk_description, transit_score, transit_description, bike_score, bike_description} + zpid

**Example request body:**
```json
{
  "zpid": "29377187"
}
```

### POST /zillow/v1/home_value_chart — 1 credit
Zillow home-value history — the Zestimate value-over-time series for a property (monthly home value, up to the last 10 years, with the latest forecast point).

**Parameters:**
- `zpid` (string, optional) — Zillow property ID — the number in the property URL (…/12345678_zpid/) or `zpid` from a search result.
- `url` (string, optional) — Zillow property URL (alternative to zpid).
- `time_period` (enum, optional, default "10y") — History window for the home-value chart. [one of: 1y, 5y, 10y]

**Returns:** this_home{name, points[]{date_ms, value_usd}, point_count} + series[] + latest_value_usd + earliest_value_usd + time_period + zpid

**Example request body:**
```json
{
  "zpid": "29377187"
}
```

## More
- Try it live, no code: https://reefapi.com/playground?engine=zillow
- Human docs page: https://reefapi.com/docs/zillow
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
