StreetEasy Scraper

A New York property search,
as rows you can map.

Paste a StreetEasy for-sale or for-rent search URL and get every listing on it back as rows: the address with and without its unit, the price, the building type, beds and baths, the size, the neighbourhood and postcode, latitude and longitude, and links to the listing and its photo.

one-time 500 free rows$0.002 per row after15 columnsCSV · XLSX · JSON
How it works

Build the search on StreetEasy,
hand us the address.

Every filter you set - borough, price band, bed count - is already encoded in the URL. Copy it from the bar and the run reproduces that search.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the StreetEasy Scraper.
  3. STEP 3Paste StreetEasy for-sale or for-rent search URLs, one per line - or upload a CSV, XLSX, TXT or Parquet file.
  4. STEP 4Set a limit per query, or leave it at zero to take everything.
  5. STEP 5Choose your output format.
  6. STEP 6Click Get Data.

One row per listing, tagged with the query it came from and numbered in the order StreetEasy returned it. StreetEasy blocks datacenter IPs, so live runs need a residential proxy.

Why teams use it

A property search
you can actually plot.

Coordinates come with every row

Latitude and longitude arrive as their own columns, so the export is mappable the moment it lands - no geocoding pass, no address matching, no per-row API bill just to put pins on a map.

The building and the unit, separately

name carries the unit - 80 Elizabeth Street #2K - while address is the building without it. Group on one to count buildings, on the other to count units, without splitting strings yourself.

The search order survives

Rows arrive numbered in the order StreetEasy returned them, so what the site ranked first for your filters is recoverable afterwards. Re-run the same search later and the movement is the interesting part.

What you get back

Fifteen columns,
one row per listing.

What a StreetEasy result carries: where the property is, what it costs, what kind of building it sits in, and how big it is.

One column will bite you if you miss it. price is a formatted string, not a number - it arrives as $820,000, dollar sign and thousands commas included. Cast that column straight to a number and you get NaN for every row; strip the $ and the commas first. Everything else numeric is a string too, including bedrooms, bathrooms, size_sqft and the two coordinates.

Two more worth knowing before you filter on them. building_type is an enum, and one of its values is UNKNOWN - we have seen CONDO, CO_OP, HOUSE, TWOFAMILY and UNKNOWN, and the naming is not consistent between them, so match on the exact string rather than a tidied-up guess. And bathrooms carries halves: 1.5 and 2.5 both occur, so an integer parse will quietly round your data.

One limit we would rather state than let you assume. The scraper accepts both for-sale and for-rent searches, but the populated export we hold came from a for-sale search - so the $NNN,NNN price shape is confirmed for sales, and worth checking on your first rental run rather than assumed. And because StreetEasy blocks datacenter IPs, a live run needs a residential proxy.

Data dictionary

Fifteen columns in the file,
sixteen in the JSON.

The export's header row, in order. Where a field is marked optional below, that describes what a StreetEasy listing published - not the scrape.

query
The StreetEasy search URL you submitted, repeated on every row that came from it.
name
The listing title - the street address with its unit designator, as in 80 Elizabeth Street #2K. Where a property has no unit, this matches address exactly.
price
The asking price as a formatted string: $820,000, with a dollar sign and thousands commas. Strip both before casting to a number - see the note below.
building_type
The kind of building, as an enum. Observed: CONDO, CO_OP, HOUSE, TWOFAMILY and UNKNOWN. Note the inconsistent naming, and treat the vocabulary as open - match the exact string.
bedrooms
The bedroom count, as a string. 0 occurs, so do not treat a zero here as a missing value.
bathrooms
The bathroom count, as a string. Carries halves - 1.5 and 2.5 both occur, so parse as a decimal rather than an integer.
size_sqft
The interior size in square feet, as a string. Optional - plenty of listings do not publish one, across every building type.
address
The street address without the unit. Group on this when you want buildings rather than units.
neighborhood
StreetEasy's neighbourhood label for the property, such as Little Italy or East New York.
region
The state code the listing sits in. Worth checking rather than assuming - a search scoped to a city can still return listings across a state line.
postcode
The five-digit ZIP code.
latitude
The property's latitude, as a string. Cast it before you plot.
longitude
The property's longitude, as a string. Together with latitude this makes the export mappable without a geocoding step.
url
Link to the listing on StreetEasy. Two shapes occur: a /sale/<id> permalink and a /building/<slug>/<unit> path.
image
The listing's photo, on Zillow's image CDN - StreetEasy is a Zillow property, and the hostname shows it.
position
1-based rank within the query, in the order StreetEasy returned the listing. JSON only - the CSV and XLSX exports stop at fifteen columns.

One trap, and it is the first column you will reach for. price is a formatted string - $820,000 - so casting it without stripping the dollar sign and commas gives you NaN across the board. Every other numeric field is a string too, including both coordinates, so cast before you plot or sort. Watch two enums: building_type includes a literal UNKNOWN and its members are named inconsistently, so match exact strings; and bathrooms carries halves, so parse it as a decimal. And name is not address - the first carries the unit, the second does not, which is what lets you count buildings and units separately. position exists only in the JSON, so a CSV or XLSX export has fifteen columns rather than sixteen.

What it accepts

A for-sale search,
or a for-rent one.

The input is the StreetEasy URL from your address bar, with your filters already baked into it. Both search types come back in the same fifteen columns, one row per listing.

streeteasy.com/for-sale/<area> streeteasy.com/for-rent/<area> Filters carried in the URL Paste one per line CSV · XLSX · TXT · Parquet upload Limit per query One row per listing Residential proxy required
Common workflows

Three jobs people
most often run here.

A few examples of what a property search is worth once it is a table with coordinates attached.

Market analysis

Price a neighbourhood properly

Pull a whole search and group by neighborhood and building_type. Strip the price formatting once and you can compare a co-op against a condo on the same block instead of eyeballing a results page.

Research · Valuation
Mapping

Plot the inventory without geocoding

Latitude and longitude arrive per row, so the file goes straight into a map. That removes the geocoding step entirely - which is usually the slowest and most expensive part of turning listings into a picture.

GIS · Visualisation
Monitoring

Watch what comes on and what goes

Re-run the same search on a schedule and keep the files. Comparing the url column between runs tells you what is new and what has gone - and the position column tells you how the ranking shifted.

Tracking · Inventory
Pricing

Pay only for the listings
you actually pull.

No subscription, no minimum, no recurring bill. Your first 500 rows are on us - after that, pay-as-you-go at the same flat rate as every other scraper here.

Free tier

500 free rows - $0

Every new account, one-time. No credit card required. Per-query limits, file upload and every export format included.

$0 forever
Pay-as-you-go

$0.002 per row, after the free tier

Roughly $2 per 1,000 listings. The pre-flight estimator shows the row count and credit cost before a run starts - no surprise bills, no compute units to translate.

Most popular
Volume

Custom · high volume

Volume pricing, dedicated workers and an SLA for tracking many searches on a schedule. Tell us your numbers and we will quote.

Talk to us
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

Property listings,
on the other markets.

StreetEasy is New York. These three cover the ground around it.

The legal bit

Is it legal to scrape
StreetEasy?

Short answer: these listings are public property advertisements - but StreetEasy is a Zillow property and takes a firm line on automated collection, so read this rather than skim it.

Everything collected here is shown on a public StreetEasy results page to any visitor, signed in or not: the address, the price, the building type, the bed and bath counts, the size, the neighbourhood, the coordinates and the photo. No login, no paywall, nothing behind an account. There is no agent name, no broker phone number and no seller contact anywhere in the export, and no column for one.

We would rather flag this than let you find out later. StreetEasy blocks datacenter IPs, which is a deliberate anti-automation measure rather than an accident, and their terms restrict automated collection. That does not make public listings secret, but it does mean this is a terms question with a real position behind it. If you are planning volume, or building a product on top of the output, take advice on your specific use rather than relying on a general rule about public data.

One data-protection note. These rows describe properties, not people - but a property address is capable of identifying whoever lives there, so if you combine this export with anything that names occupants you have moved into personal-data territory and the usual obligations follow. We run no third-party trackers on the data layer, and your exports auto-delete after 30 days.

livescraper.app · principles
Public listing pages only
No logins, no accounts touched
No agent or seller contact details
Exports auto-delete (30 days)
StreetEasy blocks datacenter IPs - read the terms!
Take advice before building a product on this one.
Common questions

Things people
ask before signing up.

The questions we hear most. Anything else? Talk to us - humans, not bots, write the answers.

How do I scrape StreetEasy?+
Using the StreetEasy Scraper: Sign in to the platform. Open the StreetEasy Scraper. Paste StreetEasy for-sale or for-rent search URLs, one per line - or upload a CSV, XLSX, TXT or Parquet file. Set a limit per query, or leave it at zero to take everything. Choose your output format. Click Get Data.
Why is the price column not a number?+
Because it carries the price as StreetEasy displays it - $820,000, with the dollar sign and the thousands commas. Cast that column straight to a number and every row comes back NaN. Strip the $ and the commas first, then cast. It is the single most important thing to know about this export, and it applies to the other numeric columns too: bedrooms, bathrooms, size_sqft, latitude and longitude are all strings.
Do I need a residential proxy?+
For live results, yes. StreetEasy blocks datacenter IPs, which is why this is called out on the page rather than left for you to discover. The run goes through our proxy pool and never your real IP, but a residential exit is what gets through reliably. If you do not have one, this is worth sorting before you sign up rather than after.
What is the difference between name and address?+
name carries the unit designator and address does not. A listing at 80 Elizabeth Street #2K has that full string in name and 80 Elizabeth Street in address. Where a property has no unit - a house or a two-family - the two are identical. Group on address when you want to count buildings and on name when you want to count units.
What values does building_type take?+
We have seen CONDO, CO_OP, HOUSE, TWOFAMILY and UNKNOWN. Two things follow. UNKNOWN is a real value rather than an empty cell, so a filter that ignores blanks will still pick it up. And the naming is not internally consistent - CO_OP has an underscore, TWOFAMILY does not - so match the exact string rather than a normalised version, and treat the list as open rather than complete.
Can I use it for rentals as well as sales?+
Yes - the scraper accepts both for-sale and for-rent search URLs. One caveat worth stating: the populated export we hold came from a for-sale search, so the $820,000 price format is confirmed for sales. Check the shape on your first rental run rather than assuming it is identical.
Does it include latitude and longitude?+
Yes, both, as their own columns on every row. That is the part that saves the most time downstream: the export is mappable as it lands, with no geocoding pass and no per-address API bill. They arrive as strings, so cast them before you plot.
How much does it cost?+
The first 500 rows are free and one-time, with no credit card. After that it is $0.002 per row - about $2 per 1,000 listings - which is the same flat rate as every other scraper on the platform. The estimator shows the cost of a run before it starts. A residential proxy, if you need one, is separate.

Turn a property search
into a table you can map.

Your first 500 rows are free - no card, no subscription. After that it is $0.002 per row, flat.

Activates instantly · no card required

Scrape StreetEasy listings

StreetEasy is where New York property is listed, and a search on it is a filtered view you can only read one card at a time. The StreetEasy Scraper turns that view into rows. You submit a for-sale or for-rent search URL - with your borough, price band and bed count already encoded in it, one per line or as a CSV, XLSX, TXT or Parquet upload - and every listing comes back as a record with the address, the unit, the price, the building type, the bed and bath counts, the size in square feet, the neighbourhood, the ZIP code, latitude and longitude, and links to the listing and its photo. Fifteen columns in the file, sixteen in the JSON, one row per listing.

The coordinates are the part that changes what you can do with it. Because latitude and longitude arrive per row, the export is mappable the moment it lands - no geocoding pass, no address matching against a second service, no per-row API bill just to plot the inventory. Pair that with the neighbourhood label and the building type and a search becomes a picture of a submarket rather than a list.

One column needs care before you build on it. price is a formatted string, not a number: it arrives as $820,000 with the dollar sign and thousands commas, so casting it directly returns NaN for every row. Strip the symbol and the separators first. The same applies more quietly to the rest - bedrooms, bathrooms, size_sqft and both coordinates are all strings, and bathrooms carries halves like 1.5, so parse it as a decimal rather than an integer.

Two honest notes. building_type is an enum whose values include a literal UNKNOWN, and its members are named inconsistently, so match exact strings rather than a tidied guess. And StreetEasy blocks datacenter IPs, so live results need a residential proxy - stated here rather than left to be discovered. Start free: your first 500 rows cost nothing and need no credit card, and after that it is $0.002 per row, flat.