StreetEasy API. NYC listings and closing prices as JSON.
Search StreetEasy homes for sale, sold homes and rentals in New York City by ZIP, borough or map area, with co-op maintenance, condo charges and recorded closing prices.
100 free credits · No credit card required · No StreetEasy login
curl -G https://api.realtycrawl.com/v1/streeteasy/sold \ -H "Authorization: Bearer $REALTYCRAWL_KEY" \ -d zip=10014 \ -d sold_within_days=90{ "priced_count": 1, "disclosed_count": 1, "median_sale_price": 420000, "p25": 420000, "p75": 420000, "median_price_per_sqft": null, "earliest_sold_date": "2026-09-29", "latest_sold_date": "2026-09-29"}StreetEasy data, as typed JSON.
Every source returns the same core fields, so code you write here works for our other sources too. Fields only StreetEasy has go in extras.
Monthly costs included
Co-op maintenance, condo common charges and taxes on every sale listing, with days on market.
Recorded closing prices
Closed sales newest first, with the closing price, date and last asking price.
No-fee rentals
The no-fee flag, free months and net effective rent on each rental.
Unit and building facts
Size, building type, year built, brokerage and every listing's price history for a unit.
StreetEasy's estimates
Its sale value estimate with a range, and its rent estimate, labeled as StreetEasy's.
Sold comps
The recent sales most like one home, with the median price per sqft and an indicated value.
The StreetEasy routes. Credits per call.
Each route is also a tool on our hosted MCP server, for Claude, Cursor and VS Code.
| Route | Credits | What it returns |
|---|---|---|
GET /v1/streeteasy/listings | 1 | Homes for sale on StreetEasy in a New York City ZIP code, borough or map area, one page of up to 100 at a time, with the listing date, days on market, co-op maintenance, condo charges and taxes. Page with `next_cursor`. |
GET /v1/streeteasy/sold | 1 | Homes sold on StreetEasy in a New York City area, newest first, with the recorded closing price and date and the last asking price. Homes marked sold before their closing is recorded come back with a null sale price. Page with `next_cursor`. |
GET /v1/streeteasy/rentals | 1 | Homes for rent on StreetEasy in a New York City area, with the listing date, no-fee flag, free months and net effective rent. Page with `next_cursor`. |
GET /v1/streeteasy/property | 2 | Facts about one StreetEasy listing and its unit: size, building type and year built, brokerage, co-op maintenance or condo charges, the unit's last recorded sale, and every listing's price history. |
GET /v1/streeteasy/estimate | 1 | StreetEasy's own sale value estimate with its range, and its rent estimate, for one home. We pass them through; we do not make our own. |
GET /v1/streeteasy/comps | 2 | Recent 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. |
Building with ChatGPT? Paste this.
One prompt gives your assistant the endpoint, the sign-in header and how to wait for a result, so its first script works.
I'm building with the RealtyCrawl API. It returns real-estate data from StreetEasy as typed JSON: New York City homes for sale, recorded closings, rentals, property history, estimates and comps. Read the docs first: https://realtycrawl.com/llms.txt OpenAPI spec: https://realtycrawl.com/openapi.json Rules for the code you write: - Base URL: https://api.realtycrawl.com/v1 - Auth: send the header "Authorization: Bearer <key>". Read the key from the REALTYCRAWL_KEY environment variable. Never put it in browser code. - StreetEasy sold homes in New York City: GET /streeteasy/sold?zip=<5-digit NYC ZIP>&sold_within_days=90. - A call often answers 202 with status "pending" and a poll_url. Poll GET /jobs/<request_id>?wait=20 with the same header until status is "complete" or "failed". - The rows are in result.data, each with address, sale_price, sold_date, sale_price_disclosure and source_url. sale_price is null when the price isn't public; result.field_notes says why. Never replace a null with a guess. - result.summary has median_sale_price and median_price_per_sqft. For the next page, send result.next_cursor as cursor. - A search costs 1 credit; property details and comps cost 2. A free account starts with 100 credits that do not refill, so save results while testing instead of repeating a call. Start with a short script that prints the median closing price for ZIP "10014". Then ask me what I want to build.
No. RealtyCrawl is not affiliated with StreetEasy or Zillow Group. We collect public pages signed out and return the facts as JSON.
New York City, all five boroughs, plus a few New Jersey towns StreetEasy lists. Search by ZIP code, borough (as a county), map box, or a point and radius; for the New Jersey towns, use a ZIP or a map box.
Yes. Sold rows have the recorded closing price and date and the last asking price. A home marked sold before its closing is recorded comes back with a null sale price and a reason.
Yes. Each rental has the listing date, a no-fee flag, the free months offered and the net effective rent.
Start with 100 free credits, no credit card required. Plans start at $9 a month for 1,000 credits. Most calls cost 1 credit; property and comps cost 2.
Calls that fail, and addresses that aren't found, are free.
Get StreetEasy sold homes in about two minutes.
Create a free account, make a key, and send your first request. Start with 100 free credits. No credit card required.