API StreetEasy data

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

GET /v1/streeteasy/sold
curl -G https://api.realtycrawl.com/v1/streeteasy/sold \  -H "Authorization: Bearer $REALTYCRAWL_KEY" \  -d zip=10014 \  -d sold_within_days=90
result.summaryExample data
{  "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"}
What you get

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.

Routes

The StreetEasy routes. Credits per call.

Each route is also a tool on our hosted MCP server, for Claude, Cursor and VS Code.

RouteCreditsWhat it returns
GET /v1/streeteasy/listings1Homes 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/sold1Homes 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/rentals1Homes 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/property2Facts 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/estimate1StreetEasy'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/comps2Recent 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.

Prompt for ChatGPT, Claude or Cursor
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.
Paste it in, add your key as REALTYCRAWL_KEY, and it writes working code.Open in ChatGPT Open in Claude
FAQ

Common questions

Something else? Email support@realtycrawl.com and a person will reply.

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.