Zillow sold comps

Recent sales most like one home on Zillow, ranked by similarity, with the median price per sqft and an indicated value. Costs 2 credits.

GEThttps://api.realtycrawl.com/v1/zillow/comps

Recent sales most like one home: nearby, similar in size, beds and baths, and recent. Each comp carries its distance and a 0 to 1 similarity score, and rows come best first. summary gives the median sale price and price per sqft over the comps, and an indicated value for the home.

Sales whose price per sqft is far from the others (below 0.6x or above 1.67x the median) are marked outlier: true. Low ones are usually family transfers, foreclosures or partial interests; high ones a different tier, like luxury, new builds or waterfront. They stay in data so you can see them, but are left out of the summary maths.

In non-disclosure states (Texas, Utah and others) Zillow shows sales without prices, so comps come back with sale_price: null and summary has no price maths.

Cost: 2 credits when complete. Failed calls are free.

#Inputs

  • lookup: Which home. Send exactly one of address, url or source_id. None, or more than one, returns 422 with param set to lookup.
ParameterTypeDefaultDescription
addressstringFull street address with city and state or ZIP, like 2041 Samuel Dr, Denver, CO 80221. An address that matches several homes returns 422 address_ambiguous with up to 5 candidates.
urlstringThe home's page URL on the source site.
source_idstringThe source's own ID for the home. On Zillow, the zpid.
radius_minumber, 0.1–31How far to look, in miles. Optional; 1 when not sent.
sold_within_days90, 180, 365 or 730180Only sales in this many past days. Optional; 180 when not sent.
limitinteger, 1–2510Most comps to return. Optional; 10 when not sent.

#Example

curl -G https://api.realtycrawl.com/v1/zillow/comps \  -H "Authorization: Bearer $REALTYCRAWL_KEY" \  --data-urlencode "address=2041 Samuel Dr, Denver, CO 80221" \  -d limit=5
Try it
Which homeSend exactly one
Request
curl -G https://api.realtycrawl.com/v1/zillow/comps \  -H "Authorization: Bearer $REALTYCRAWL_KEY" \  --data-urlencode "address=2041 Samuel Dr, Denver, CO 80221" \  -d limit=5
Sign in to runFree account, no card.

#Fields

FieldTypeDescription
request_idstringID of this request. Poll it at /v1/jobs/{request_id}.
statusstring: pending, complete, failedpending, complete or failed. Always check it, even on HTTP 200.
creditsintegerCredits charged. The route's price when complete; 0 while pending, when failed, or for a page past the last one.
cachedbooleanTrue when the result came from our cache.
poll_urlstring or nullWhere to poll while pending. Null when complete.
errorobject or null{code, message, param} when failed. Null otherwise.
resultobject or nullThe result when complete. Null otherwise.
result.sourcestringSource of the rows, like zillow.
result.queryobjectThe inputs you sent, as we read them.
result.countintegerRows in data.
result.reported_totalinteger or nullTotal matches the source reported for the whole search, when it shows one.
result.next_cursorstring or nullSend as cursor for the next page. Null on the last page and on lookups.
result.collected_atstringWhen we read the source (ISO 8601, UTC).
result.schema_versionintegerVersion of the row schema. Changes only with a new, opt-in version.
result.completenessstring: complete, partialcomplete, or partial when the source returned less than a full page for a reason other than reaching the end.
result.summaryobject or nullMaths over this page for area searches. Null on lookups.
result.dataarrayThe rows.
result.field_notesarrayWhy a field is null: {field, reason, detail}. One note covers every row where it applies.
result.summaryobjectsubject (the home's source_id, address, location, property_type, beds, baths, living_area_sqft, year_built), comp_count, used_count (priced, not outliers), median_sale_price, median_price_per_sqft, price_per_sqft_p25, price_per_sqft_p75, and indicated_value (median price per sqft times the home's living area, rounded to $1,000; null without both). Null when the home has no map location.
result.data[].sourcestringWhich source the row came from. New sources may be added, so handle values you don't know.
result.data[].source_idstringThe source's own ID for the home or building. On Zillow, a home's ID is its zpid.
result.data[].source_urlstringPage for this home or building on the source site.
result.data[].sold_datestring or nullSale date (YYYY-MM-DD).
result.data[].sale_priceMoney or nullSale price. Null when the price is not disclosed; field_notes says why. Never filled with a list price or estimate.
result.data[].sale_price_disclosurestring: public_record, mls_reported, not_disclosed, unknownHow the sale price is known. public_record: from county records. mls_reported: the source shows an MLS price. not_disclosed: the price is hidden, usually in a non-disclosure state. unknown: the source shows a price but not where it came from.
result.data[].list_priceMoney or nullLast asking price before the sale. Null when the source does not show it.
result.data[].list_datestring or nullDate the sold listing started (YYYY-MM-DD).
result.data[].sale_to_list_rationumber or nullsale_price divided by list_price.
result.data[].days_on_marketinteger or nullDays from list_date to the first pending date, or to sold_date when there was no pending date. Null when the source does not say.
result.data[].price_per_sqftnumber or nullSale price divided by living area.
result.data[].bedsnumber or nullBedrooms.
result.data[].bathsnumber or nullBathrooms as the source counts them.
result.data[].living_area_sqftinteger or nullLiving area in square feet.
result.data[].property_typestring or null: single_family, condo, townhouse, multi_family, land, manufactured, apartment, otherHome type.
result.data[].addressAddressAddress.
result.data[].locationLocation or nullMap point.
result.data[].broker_namestring or nullListing brokerage at the time of sale.
result.data[].distance_minumberStraight-line miles from the subject home.
result.data[].similaritynumber0 to 1, higher is more alike. Weighs distance, living area, beds, baths and how recent the sale was. Rows are sorted by it.
result.data[].outlierbooleanTrue when the sale's price per sqft is below 0.6x or above 1.67x the comps' median. Low ones are usually non-market sales (family transfers, foreclosures, part interests); high ones a different tier (luxury, new builds, waterfront). Outliers stay in data but are left out of summary maths.
result.data[].extrasobjectFields only this source has. Each source lists its own on its docs page. {} when there are none.
result.data[].extras.home_type_rawstring or nullZillow's own home type code.
result.data[].extras.days_on_zillowinteger or nullOn sold rows, Zillow counts days since the sale here, not days on market.
result.data[].extras.zestimateMoney or nullZillow's Zestimate on the search card.
result.data[].extras.rent_zestimateMoney or nullZillow's Rent Zestimate on the search card.
result.data[].extras.tax_assessed_valueMoney or nullZillow's "tax assessed value".