StreetEasy sold comps
Recent sales with recorded closing prices most like one home: nearby, similar in size, beds and baths, and recent, ranked by similarity. Costs 2 credits.
https://api.realtycrawl.com/v1/streeteasy/compsRecent sales most like one home: nearby, similar in size, beds and baths, and recent, ranked by similarity. summary gives the median sale price and price per sqft over the comps, and an indicated value for the home. Sales far off the comps' price per sqft are flagged and left out of the maths.
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.
Cost: 2 credits when complete. Failed calls are free.
#Inputs
- lookup: Which home. Send exactly one of
address,urlorsource_id. None, or more than one, returns 422 withparamset tolookup.
| Parameter | Type | Default | Description |
|---|---|---|---|
address | string | Full 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 in error. Send one of their source_ids. | |
url | string | The home's page URL on the source site. | |
source_id | string | The source's own ID for the home. On Zillow, the zpid; on Redfin, the number at the end of the home's URL (.../home/34056278). | |
radius_mi | number, 0.1–3 | 1 | How far to look, in miles. Optional; 1 when not sent. |
sold_within_days | 90, 180, 365 or 730 | 180 | Only sales in this many past days. Optional; 180 when not sent. |
limit | integer, 1–25 | 10 | Most comps to return. Optional; 10 when not sent. |
#Example
curl -G https://api.realtycrawl.com/v1/streeteasy/comps \ -H "Authorization: Bearer $REALTYCRAWL_KEY" \ -d source_id=sale-1849109 \ -d limit=5#Fields
| Field | Type | Description |
|---|---|---|
request_id | string | ID of this request. Poll it at /v1/jobs/{request_id}. |
status | string: pending, complete, failed | pending, complete or failed. Always check it, even on HTTP 200. |
credits | integer | Credits charged. The route's price when complete; 0 while pending, when failed, or for a page past the last one. |
cached | boolean | True when the result came from our cache. |
poll_url | string or null | Where to poll while pending. Null when complete. |
error | object or null | {code, message, param} when failed. On address_ambiguous, also candidates: up to 5 {address, source_id, source_url} to pick from. Null otherwise. |
result | object or null | The result when complete. Null otherwise. |
result.source | string | Source of the rows, like zillow. |
result.query | object | The inputs you sent, as we read them. |
result.count | integer | Rows in data. |
result.reported_total | integer or null | Total matches the source reported for the whole search, when it shows one. |
result.next_cursor | string or null | Send as cursor for the next page. Null on the last page and on lookups. |
result.collected_at | string | When we read the source (ISO 8601, UTC). |
result.schema_version | integer | Version of the row schema. Changes only with a new, opt-in version. |
result.completeness | string: complete, partial | complete, or partial when the source returned less than a full page for a reason other than reaching the end. |
result.summary | object or null | Maths over this page for area searches. Null on lookups. |
result.data | array | The rows. |
result.field_notes | array | Why a field is null: {field, reason, detail}. One note covers every row where it applies. |
result.summary | object | subject (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[].source | string | Which source the row came from. New sources may be added, so handle values you don't know. |
result.data[].source_id | string | The source's own ID for the home or building. On Zillow, a home's ID is its zpid; on Redfin, its property ID. |
result.data[].source_url | string | Page for this home or building on the source site. |
result.data[].sold_date | string or null | Sale date (YYYY-MM-DD). |
result.data[].sale_price | Money or null | Sale price. Null when the price is not disclosed; field_notes says why. Never filled with a list price or estimate. |
result.data[].sale_price_disclosure | string: public_record, mls_reported, not_disclosed, unknown | How 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_price | Money or null | Last asking price before the sale. Null when the source does not show it. |
result.data[].list_date | string or null | Date the sold listing started (YYYY-MM-DD). |
result.data[].sale_to_list_ratio | number or null | sale_price divided by list_price. |
result.data[].days_on_market | integer or null | Days 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_sqft | number or null | Sale price divided by living area. |
result.data[].beds | number or null | Bedrooms. |
result.data[].baths | number or null | Bathrooms as the source counts them. |
result.data[].living_area_sqft | integer or null | Living area in square feet. |
result.data[].property_type | string or null: single_family, condo, townhouse, multi_family, land, manufactured, apartment, other | Home type. |
result.data[].address | Address | Address. |
result.data[].location | Location or null | Map point. |
result.data[].broker_name | string or null | Listing brokerage at the time of sale. |
result.data[].distance_mi | number | Straight-line miles from the subject home. |
result.data[].similarity | number | 0 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[].outlier | boolean | True 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[].extras | object | Fields only this source has. Each source lists its own on its docs page. {} when there are none. |
result.data[].extras.property_type_raw | string or null | StreetEasy's own building type, like CO_OP, CONDO, CONDOP, TOWNHOUSE or TWOFAMILY. |
result.data[].extras.neighborhood | string or null | Neighborhood as StreetEasy names it, like West Village. |
result.data[].extras.sale_type | string or null | Kind of sale, like RESALE. Null on rentals. |
result.data[].extras.off_market_date | string or null | Day StreetEasy marked the home sold (YYYY-MM-DD). sold_within_days counts from it. Usually on or a few days after the closing. |
result.data[].extras.monthly_maintenance | Money or null | Co-op monthly maintenance, which includes property taxes. |
result.data[].extras.monthly_taxes | Money or null | Monthly property taxes, when listed (condos and houses). |
result.data[].extras.monthly_common_charges | Money or null | Condo monthly common charges. |