StreetEasy Scraper — NYC Rentals and Sales
Pricing
from $3.00 / 1,000 listings
StreetEasy Scraper — NYC Rentals and Sales
StreetEasy scraper for New York City apartments for rent and for sale. Each row has price, beds, baths, neighborhood, brokerage, and address.
Pricing
from $3.00 / 1,000 listings
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
16 days ago
Last modified
Categories
Share
Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by StreetEasy (Zillow, Inc.) or its affiliates. Data is read from publicly accessible search result pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.
StreetEasy scraper for New York City apartments for rent and for sale across Manhattan, Brooklyn, Queens, the Bronx, and Staten Island, or one neighborhood such as Williamsburg. Each row has asking price, beds, baths, neighborhood, ZIP, brokerage name, and map coordinates. Use it as a StreetEasy API alternative from Python, Node.js, cURL, or Apify MCP. Results land in the default dataset as JSON.
Best for: rent and sale comps in one borough or neighborhood, and a scheduled check that saves only new listing ids.
| Actor | Role |
|---|---|
| StreetEasy Scraper ◄── you are here | NYC rent and sale search cards |
| Realtor.com Scraper | US sold comps, ZIP, and listing monitor |
| LoopNet Scraper | US commercial sale, lease, and auctions |
When to use this Actor
- Borough or neighborhood — Set an area such as
BrooklynorUpper East Sideand choose rent or sale. - A filtered search you already built — Paste the search URL. Area fields are ignored when Start URLs is set.
- New-listing monitor — Schedule the same search. Later runs save listing ids that were not stored last time. A quiet tick writes zero rows.
- Price and brokerage from the card — Rent or sale price, beds, and the listing name are taken from the search result. This run does not open each property page.
When not to use this Actor
- US homes outside New York — For sold comps and ZIP searches on a national portal, use Realtor.com Scraper.
- Commercial property — For sale, lease, and auction cards, use LoopNet Scraper.
- Agent emails, phones, or a license database — Those are not on the search card. This Actor does not log in and does not open detail pages.
- A full NYC dump in one run — Cap
maxItems. Split by borough or neighborhood.
Key features
- Search cards — One page request returns about 14 listings. Default 256 MB.
- Rent and sale — Borough or neighborhood, or a pasted search URL.
- Price, beds, baths — Net effective rent and free months when the card states them.
- Listed by — Brokerage or listing name shown on the public card.
- Monitor — Named key-value store of listing ids already saved for that search.
Input
| Field | Required | Default | What it does |
|---|---|---|---|
| Area | No | Brooklyn | Borough or neighborhood. Ignored when Start URLs is set. |
| Rent or sale | No | For rent | Search type for the area. |
| Start URLs | No | empty | Search URLs. Overrides the fields above. |
| Max listings | No | 25 | Cap across all searches. Maximum 200. |
| Monitor mode | No | off | Save only listing ids not seen on the previous run of this search. |
| Proxy | No | Unblocker, US | Required. Datacenter and residential IPs are denied before the page loads. |
{"area": "Brooklyn","transaction": "for-rent","maxItems": 25,"monitorMode": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["UNBLOCKER"],"apifyProxyCountry": "US"}}
A search URL overrides Area and Rent or sale:
{"startUrls": [{ "url": "https://streeteasy.com/for-sale/manhattan" }],"maxItems": 25,"monitorMode": false}
Output
One dataset row per listing.
| Field | Meaning |
|---|---|
listingId | Listing path |
url | Listing URL |
address, street, unit | Address from the card |
neighborhood, area, state, zip | Location |
transaction | for-rent or for-sale |
price, priceText, currency | Asking rent or sale price |
netEffectiveRent, monthsFree | Concession, when the card states one |
beds, baths, halfBaths, sqft | Size. Studio beds are 0. Sqft only when the card shows a number |
furnished, newDevelopment, buildingType | Flags from the card |
listedBy | Public card name |
openHouseStart, openHouseEnd | Open house when the search page lists one |
latitude, longitude | Map point |
image | Primary photo |
sourceUrl | Search page |
scrapedAt | UTC timestamp |
{"listingId": "building/fulton-greene/10w","url": "https://streeteasy.com/building/fulton-greene/10w","address": "570 Fulton Street #10W","neighborhood": "Fort Greene","zip": "11217","transaction": "for-rent","price": 4410,"currency": "USD","beds": 1,"baths": 1,"listedBy": "Goose Property Management LLC","newDevelopment": true}
Use cases
- Pull Brooklyn rentals and compare asking rent, beds, and neighborhood in a spreadsheet.
- Build a brokerage list from the names printed on public search cards.
- Schedule a morning run in monitor mode and export only listing ids that were not in yesterday’s file.
- Feed address, price, and beds into an internal comps sheet. For sold comps outside this portal, continue with Realtor.com Scraper.
Integration examples
Replace APIFY_TOKEN. The slug below is the Store name.
Node.js
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("crawloop/streeteasy-scraper").call({area: "Brooklyn",transaction: "for-rent",maxItems: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("crawloop/streeteasy-scraper").call(run_input={"area": "Manhattan","transaction": "for-sale","maxItems": 25,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(len(items))
cURL
curl -X POST "https://api.apify.com/v2/acts/crawloop~streeteasy-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"area":"Brooklyn","transaction":"for-rent","maxItems":10}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP.
Connect your Apify account, then call this Actor by its Store name crawloop/streeteasy-scraper.
Example prompts:
- "Run StreetEasy Scraper for Brooklyn for-rent listings and return the top 20 rows as JSON"
- "Scrape StreetEasy sale listings in Manhattan and summarize price, beds, and neighborhood"
- "Run StreetEasy Scraper in monitor mode for Queens rentals, then use Realtor.com Scraper for sold comps"
Suite next step
This Actor covers NYC rent and sale search cards. For sold comps and ZIP searches on a national portal, run Realtor.com Scraper. For commercial sale and lease, run LoopNet Scraper.
FAQ
Does this open every property page? No. Rows are the search cards: price, beds, neighborhood, and the name on the card. Phone and email are not on that card.
Why is a proxy required? The search page is denied from datacenter and ordinary residential IPs. The default proxy is Apify Unblocker in the US.
What does monitor mode skip? Listing ids already stored for that same search URL. Change the area or the transaction and it is a new cursor. A run with no new ids writes zero rows.
Which New York areas work? A borough such as Brooklyn, Manhattan, Queens, Bronx, or Staten Island, or a neighborhood such as Upper East Side. A pasted for-rent or for-sale search URL keeps the filters already in that address.
Can I export rentals and sales?
Yes. for-rent returns asking rent. for-sale returns asking sale price. Each saved row is one search card in the JSON dataset.