HouseData

REST API

Reference

Every endpoint is a plain GET with query parameters, except search, batch and the record's body form, which are POST with JSON. Endpoints as served on RapidAPI; the same paths and parameters apply to private keys.

Base: https://zillow-full-data-api.p.rapidapi.com with your RapidAPI key in X-RapidAPI-Key. Private keys use https://api.housedata.dev with x-api-key.

Ids: a zpid is the number before _zpid in any Zillow property URL, and is on every search row. Region ids come from /autocomplete or /region; building ids from rental search rows.

Fields: fields=core returns the headline of a record or a search row; fields=zpid,price,facts.bedrooms picks paths; fields=-photos,-priceHistory excludes.

Errors: {"error":{"code","message","request_id"}} on every refusal, from every route.

One call
curl "https://zillow-full-data-api.p.rapidapi.com/property?zpid=64947237" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: zillow-full-data-api.p.rapidapi.com"

Queries — one call is one query against your plan's monthly quota; a batch call counts one per item. A 4xx answer is not counted.

Batch size — per call, by plan: Basic 10 · Pro 10 · Ultra 50 · Mega 100. A larger batch is refused whole with batch_too_large, naming your size and the count you sent.

Ceilings1,000 results per search (40 per page), 100 months per market call. Each is stated on its endpoint and in the error that refuses you.

Property

The full record for one home — listed or off market — by zpid, and its parts.

GET /property

1 query

Full property record by zpid

The full record for any zpid, listed or off market: price, Zestimate and rent Zestimate, address and coordinates, 23 curated facts, price history, tax history, assigned schools with ratings, listing agent and broker, MLS, walk/transit/bike scores, nearby homes, open houses, engagement counts, description and the photo gallery. Every zpid has a record — zpid 1, a house unlisted for years, answers with a Zestimate. Add fields=core for the ~0.7 KB headline instead of ~17 KB; photos=full adds every image size Zillow serves.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.
fieldsquery · stringProjection. core for the headline preset; comma-separated paths (zpid,price,facts.bedrooms,photos); or - prefixed paths to exclude (-photos,-priceHistory). Presets and paths mix.
photosquery · stringone of fullfull adds a media block with every photo in every size (~50 KB).

POST /property

1 query

Full property record by zpid (JSON body)

The same record as GET /property, with zpid, fields and photos in a JSON body — for clients that prefer one method everywhere.

zpid *body · string
fieldsbody · string
photosbody · stringone of full

GET /property/facts

1 query

The facts for one home

The 23 curated facts for a zpid — beds, baths (full/half), living area, year built, home type and subtype, lot, stories, parking, garage, heating, cooling, appliances, HOA per month, annual tax, assessed value, on-market date, new construction — with status, price and days on Zillow. A slice of /property for callers that want one thing. Works for off-market homes.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

GET /property/price-history

1 query

Price history — listings, price cuts, sales

Every price event Zillow holds for the home: listed, price change, pending, sold — with date, price, change rate, price per sq ft and the source. 13 events on the sample home.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

GET /property/tax-history

1 query

Tax history — assessed value and tax paid by year

Assessed value and tax paid, year by year, with year-over-year rates. 25 years on the sample home.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

GET /property/schools

1 query

Assigned schools with ratings

The home's assigned schools: name, level, grades, distance, GreatSchools rating, student–teacher ratio, enrollment, themed ratings and address.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

GET /property/scores

1 query

Walk, transit and bike scores

Walk Score, Transit Score and Bike Score for the home's location.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

GET /property/nearby

1 query

Nearby homes

Homes Zillow shows near this one: zpid, price, beds, baths, area, status, type, address and image — recently sold and for sale.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

GET /property/photos

1 query

The photo gallery

Every gallery photo URL plus the hero image. size=full adds a media block with each photo in every size Zillow serves (~45 KB).

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.
sizequery · stringone of full

Valuation

Zestimate with history and range; comparable homes.

GET /property/zestimate

1 query

Zestimate, range, 30-day change and value history

Zillow's Zestimate for any home — listed or off market — with its low/high range, the value 30 days ago, the rent Zestimate, and **ten years of monthly Zestimate history** (121 points on the sample home) plus the price history. The valuation product on its own, at one unit.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

GET /property/comps

1 query

Comparable homes

The comparable homes Zillow uses to value this one: zpid, address, price, beds, baths, living area, image — five on the sample home. Works for off-market homes.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

Agents

The listing agent's profile; the top-selling agents around a home.

GET /property/agent

1 query

The listing agent's full profile

The listing agent behind a for-sale home: name, license, phone, email, website, brokerage, bio, social links, and their Zillow profile with rating and review count — plus the broker and the MLS id. For homes with no listing, the agent fields are null.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

GET /property/top-agents

1 query

Top-selling agents around this home, ranked

The agents Zillow ranks for this home by sales in the past year: name, Zillow id, sales count, min/max/average/median sale price, sales in this home's price range, bio and profile (avatar, business name, languages, reviews). Three on the sample home. A lead-generation endpoint: who actually sells here.

zpid *query · stringThe Zillow property id — the number before _zpid in any Zillow property URL, and on every /search row.

Market

Monthly market statistics per region: temperature, inventory, sales, forecast.

GET /market

1 query

Market statistics for a region — monthly, up to 100 months

For a region (by id, or a place name resolved like /search): market temperature (index, buyer/seller label, description), listings (for-sale inventory, new listings, new pending, median days to pending), sales (share sold above/below list, median sale-to-list ratio) and Zillow's home-value forecast where published — one row per month, newest first, months deep (default 12, max 100). latest carries the most recent row of each.

regionIdquery · stringA Zillow region id (from /region or /autocomplete). Give this or location.
locationquery · stringA city, ZIP, neighborhood or county as typed into Zillow — resolved to its region. Give this or regionId.
monthsquery · integer1–100 · default 12

Rentals

Apartment buildings: the building record, floor plans, units, amenities.

GET /building

1 query

A rental building

Zillow's record for an apartment building or rental community, by the buildingId a rental /search row carries or by coordinates: name, address, type, unit summary (bed options with price ranges, sq ft and bath ranges), pet policy, contact, marketing treatments, and the building's own listing URL.

buildingIdquery · stringThe buildingId on a rental /search row (Zillow's lot id). Give this, or lat and lng.
latquery · number
lngquery · number

GET /building/floor-plans

1 query

Floor plans, units and amenities of a rental building

Every floor plan (beds, baths, sq ft, price range, lease term, photos, and the individual units with their numbers and prices — 13 plans on the sample building), unit amenities, building amenities, fees and the leasing contact.

buildingIdquery · stringThe buildingId on a rental /search row (Zillow's lot id). Give this, or lat and lng.
latquery · number
lngquery · number

Mortgage

Today's rates.

GET /mortgage/rates

1 query

Today's mortgage rates

Zillow's current mortgage rates by product — 30-year fixed, FHA, VA — with rate and APR, and the disclaimer text. No input.

Batch

Many of the above in one call.

POST /batch

1 query per item

Many queries in one call — 10 per call on Basic and Pro, 50 on Ultra, 100 on Mega

**Per-call size is set by your plan: Basic 10 · Pro 10 · Ultra 50 · Mega 100 queries.** A larger batch is refused whole with 400 batch_too_large, whose message names your plan's size and the count you sent, so nothing is half-done. Within that size, any mix of searches, property records, place lookups and named routes is answered together and in order; each result carries its own ok and status, so one bad zpid in a batch is one ok: false item and the rest come back as usual. Counts one unit per query against your quota. search items take the same fields as /search; property items the same as /property; autocomplete items q, types, count. Any named route is a batch item too, with type set to its short name and the route's inputs alongside: facts, price-history, tax-history, schools, scores, nearby, photos, zestimate, comps, agent, top-agents, market, region, building, floor-plans, rates — so a hundred Zestimates, or fifty buildings, are one call on Mega.

concurrencybody · integer1–12 · default 6
queries *body · array of object≤ 100 itemsUp to 10 items on Basic and Pro, 50 on Ultra, 100 on Mega — the plan's size, not 100, is the limit that applies to you.

Errors

One object on every refusal, with an id you can quote. Nothing internal in any of them.

unauthorized401No valid key was presented.
bad_request400A parameter is missing, malformed or out of bounds; the message names it.
not_found404No record or region for that input — an answer, not a failure. Do not retry.
not_available404That data is not offered.
batch_too_large400More queries than your plan's batch size; the message names both numbers. The whole batch is refused.
rate_limited429Over your plan's rate; wait for Retry-After.
quota_exceeded429The free plan's month is used up; it resets on the 1st.
upstream_unavailable502 / 503The data source did not answer; one retry a moment later.
upstream_rate_limited429The data source is throttling; retry after a pause.
use_https400The request came over plain HTTP; the key it carried should be rotated.
internal_error500A fault on our side. Quote the request id to support; retrying will not help until it is fixed.

* required.