StreetEasy APIstreeteasy.com ↗
Search NYC rental listings on StreetEasy. Filter by bedrooms, price, neighborhood, and amenities. Get photos, broker info, floor plans, and geo-coordinates.
What is the StreetEasy API?
The StreetEasy API gives programmatic access to New York City rental listings across 3 endpoints, covering search, detail retrieval, and deep description scanning. The search_rentals endpoint returns paginated results with price, bedroom count, bathrooms, building type, and geo-coordinates. The get_listing_details endpoint adds photos, amenities, agent name, and net effective rent. The scan_listings endpoint filters by description keywords like "duplex" or "terrace" that search cards don't expose.
curl -X GET 'https://api.parse.bot/scraper/38049975-1a6c-4bcd-ad05-a4b1a051e522/search_rentals?page=1&areas=soho&sort_by=RECOMMENDED&max_beds=4&min_beds=2&per_page=5&amenities=elevator&max_price=30000&min_price=3000&sort_direction=ASCENDING' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for rental listings on StreetEasy with filters for bedrooms, price range, neighborhoods, and amenities. Returns a paginated list of matching active rental listings including address, price, size, broker info, and geo-coordinates. Pagination is manual via the page parameter; each page contains up to per_page results. Listings without a known square footage return living_area_sqft as null.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| areas | string | Comma-separated neighborhood names or numeric area IDs. Supported names: soho, chelsea, west chelsea, tribeca, greenwich village, east village, west village, lower east side, upper east side, upper west side, midtown, midtown east, midtown west, financial district, battery park city, flatiron, gramercy park, murray hill, hell's kitchen, harlem, williamsburg, brooklyn heights, park slope, dumbo, long island city. Numeric area IDs also accepted (e.g. '107,115,163'). |
| sort_by | string | Sort attribute for results ordering. |
| max_beds | integer | Maximum number of bedrooms. If omitted, defaults to the value of min_beds. |
| min_beds | integer | Minimum number of bedrooms. |
| per_page | integer | Results per page. |
| amenities | string | Comma-separated amenities filter. Accepted values: elevator, doorman, laundry, gym, pool, parking, dishwasher, pets, outdoor_space, roof_deck. |
| max_price | integer | Maximum monthly rent in dollars. |
| min_price | integer | Minimum monthly rent in dollars. |
| sort_direction | string | Sort direction for results. |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"listings": "array of listing objects with id, address, street, unit, area, price, bedrooms, full_bathrooms, half_bathrooms, building_type, status, broker, latitude, longitude, photo_url, url, url_path, living_area_sqft",
"per_page": "integer, results per page",
"total_count": "integer, total matching listings"
},
"sample": {
"data": {
"page": 1,
"listings": [
{
"id": "4808197",
"url": "https://streeteasy.com/building/the-chelsea/3n",
"area": "Chelsea",
"unit": "3N",
"price": 9544,
"broker": "Greystar",
"status": "ACTIVE",
"street": "160 West 24th Street",
"address": "160 West 24th Street #3N",
"bedrooms": 2,
"latitude": 40.7444,
"url_path": "/building/the-chelsea/3n",
"longitude": -73.9949,
"photo_url": "https://photos.zillowstatic.com/fp/9e966168fa0f43b7796e3c0e938bab1d-se_large_800_400.webp",
"building_type": "RENTAL",
"full_bathrooms": 2,
"half_bathrooms": 0,
"living_area_sqft": 948
}
],
"per_page": 3,
"total_count": 37
},
"status": "success"
}
}About the StreetEasy API
Search and Filter NYC Rentals
The search_rentals endpoint accepts filters for min_beds, max_beds, max_price, areas (neighborhood names like soho or chelsea, or numeric area IDs), and amenities (accepted values include elevator, doorman, laundry, gym, pool, parking, dishwasher). Results are paginated via page and per_page, and the response includes total_count so you can compute page depth. Each listing object carries id, address, street, unit, area, price, bedrooms, full_bathrooms, half_bathrooms, building_type, and url_path.
Listing Detail
Pass a url_path from search_rentals results to get_listing_details to get the full record for a single listing. The response adds photos (array of photo URLs), lead_photo, amenities (lowercase strings), broker, agent_name, and additional pricing fields. Fields absent from a listing come back as null rather than being omitted, so response shapes are consistent.
Description-Level Scanning
The scan_listings endpoint runs a search across up to 100 listings, fetches each detail page, and applies a keywords filter against listing descriptions — useful for terms like duplex, garden, terrace, or prewar that aren't exposed as structured filters. It also surfaces net_effective_rent, months_free, living_area_sqft, days_on_market, and available_date in matched results. A scanned_count field tells you how many detail pages were checked, and matched_count reports how many passed the keyword filter. The max_listings cap is 100.
The StreetEasy API is a managed, monitored endpoint for streeteasy.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when streeteasy.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official streeteasy.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a rental alert tool that monitors new listings in specific neighborhoods filtered by bedroom count and price ceiling
- Aggregate net effective rent and months free across listings to compare true cost in different NYC neighborhoods
- Scan listing descriptions for keywords like 'terrace' or 'garden' to surface inventory that structured filters miss
- Pull broker and agent names from
get_listing_detailsto track which firms dominate a given neighborhood's rental market - Feed geo-coordinates from
search_rentalsinto a map layer to visualize rental density and price distribution - Track days_on_market from
scan_listingsresults to identify stale inventory or fast-moving price segments - Filter amenities like 'doorman' and 'elevator' combined with max_price to generate shortlists for relocation clients
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does StreetEasy have an official developer API?+
What does scan_listings return that search_rentals doesn't?+
scan_listings endpoint returns fields populated from individual listing detail pages: net_effective_rent, months_free, living_area_sqft, days_on_market, and available_date. It also accepts a keywords parameter matched against listing descriptions, letting you find listings mentioning terms like 'duplex' or 'exposed brick' that have no equivalent structured filter in search_rentals.Does the API cover sale listings, not just rentals?+
search_rentals, get_listing_details, and scan_listings — cover active rental listings only. You can fork this API on Parse and revise it to add a sales-listing endpoint.What are the pagination limits for search_rentals?+
page parameter and set per_page to control batch size. The total_count field in the response tells you the total number of matching listings so you can compute how many pages to fetch. There is no cursor-based or automatic pagination built into the endpoint.