# StreetEasy Scraper: NYC Sales, Rentals & Sold Listings (`layercity/streeteasy-scraper`) Actor

Get StreetEasy listings for New York City and New Jersey: active and sold sales, active and past rentals, new listings, buildings, and full details for any StreetEasy URL. Prices, beds and baths, HOA and taxes, price history, agents, photos and more.

- **URL**: https://apify.com/layercity/streeteasy-scraper.md
- **Developed by:** [Layer City](https://apify.com/layercity) (community)
- **Categories:** Real estate
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## StreetEasy Scraper: NYC Sales, Rentals & Sold Listings

Unlock the potential of StreetEasy New York and New Jersey real estate data. This Actor is built for developers, real estate professionals and data analysts who need detailed, reliable property information for their applications and projects, with no scraping, proxies or blocks to manage.

For any question, open an issue on the **Issues** tab or join our [Discord](https://discord.gg/69bUjFWS) server.

### Key features

**Search properties by neighborhood.** Find properties for sale or for rent in specific NYC and New Jersey neighborhoods quickly. Pick one or more neighborhoods or boroughs and narrow the results with filters for property type, price range, bedrooms, bathrooms, HOA, taxes, amenities, no-fee and more.

**Sold and off-market history.** Search sales that sold, closed or were delisted, and rentals that rented or came off the market. Closing prices are included where recorded.

**Property details by StreetEasy ID or URL.** Paste StreetEasy listing URLs or IDs and get the full record for each property: address, price, size, HOA, taxes, bedrooms, bathrooms, year built, amenities, description, agents, photos, floor plans, nearby subways and price history.

### Why use it

- **No blocking or throttling.** Data comes from our own continuously refreshed StreetEasy dataset, so runs are fast and reliable. There's no browser, no proxy and no captcha.
- **Comprehensive data.** A wide range of property information built for the New York City market, across Manhattan, Brooklyn, Queens, the Bronx, Staten Island and New Jersey.
- **Up to date.** Results come from the latest data run, so listings and statuses are current.
- **Easy integration.** Export to JSON, CSV, Excel or HTML, or connect the Apify API, Zapier, Make, Google Sheets, webhooks and other integrations.
- **Customization.** Combine filters to get just the listings you need, and cap every run with **Maximum results**.

### How to use it

1. Choose **What to fetch**.
2. Choose one or more **Areas**, or paste StreetEasy URLs for the details mode.
3. Optionally set filters, and turn on **Include full listing details** if you need complete records.
4. Click **Start**. Each listing becomes one row in the dataset.

| What to fetch | Description |
| --- | --- |
| Active sales | Properties currently listed for sale |
| Active rentals | Properties currently listed for rent |
| Sold / off-market sales | Sales that sold, closed, were delisted or went temporarily off market |
| Rented / off-market rentals | Rentals that rented or came off the market |
| New sales listed today | Every sale listed today across all areas |
| Buildings | Buildings in the chosen areas, with address, coordinates and year built |
| Details for specific StreetEasy URLs | The full record for each StreetEasy sale or rental URL or ID you paste |

### Input

#### Active sales search

| Field | Description | Default |
| --- | --- | --- |
| Areas | NYC and NJ neighborhoods or boroughs to search. See the [supported areas](#supported-areas-and-neighborhoods). **Required.** | |
| Minimum price | The minimum price of a property | 0 |
| Maximum price | The maximum price of a property | 1,000,000,000 |
| Minimum bedrooms | The minimum number of bedrooms. Studios have 0 | 0 |
| Maximum bedrooms | The maximum number of bedrooms | 10 |
| Minimum bathrooms | The minimum number of bathrooms | 0 |
| Maximum monthly HOA | The maximum monthly maintenance / HOA cost | no limit |
| Maximum monthly taxes | The maximum monthly tax cost | no limit |
| Property types | `condo`, `coop`, `condop`, `house`, `townhouse`, `multi_family`, `commercial` | all |
| Required amenities | e.g. `washer_dryer`, `dishwasher`, `laundry`, `elevator`, `doorman`, `gym`, `pool`, `pets` | none |
| Maximum results | Stop after this many results | 100 |

#### Active rentals search

Same as sales, without the HOA, tax, property type and amenity filters, plus:

| Field | Description | Default |
| --- | --- | --- |
| No-fee only | Only rentals with no broker fee | off |

#### Sold / rented (past) search

Same filters as the active search for sales or rentals, plus:

| Field | Description | Default |
| --- | --- | --- |
| Closing status | `sold`, `closed`, `delisted` or `temporary_off_market` | any |
| Closed after | Only listings that closed after this date (YYYY-MM-DD) | any date |

#### Details by StreetEasy URL or ID

| Field | Description |
| --- | --- |
| StreetEasy listing URLs | `https://streeteasy.com/sale/<id>`, `https://streeteasy.com/rental/<id>`, `https://streeteasy.com/building/<building>/<unit>`, or a bare listing ID |

### Output

#### Search results

By default each search row is a summary:

```json
{
  "type": "sale",
  "id": "1750127",
  "price": 2680000,
  "status": "open",
  "longitude": -74.01360321,
  "latitude": 40.70740128,
  "url": "https://www.streeteasy.com/sale/1750127",
  "fetchedAt": "2026-11-09T14:49:06.803Z"
}
```

#### Full listing details

With **Include full listing details** on, and always in the URL details mode, each row is the complete record:

```json
{
  "type": "sale",
  "id": "1724898",
  "status": "open",
  "listedAt": "2024-07-03",
  "closedAt": null,
  "daysOnMarket": 146,
  "address": "5 Beekman Street #30A",
  "price": 2800000,
  "closedPrice": null,
  "borough": "manhattan",
  "neighborhood": "fultonseaport",
  "zipcode": "10038",
  "propertyType": "condo",
  "sqft": 1395,
  "ppsqft": 2007,
  "bedrooms": 2,
  "bathrooms": 2,
  "latitude": 40.71120071,
  "longitude": -74.00689697,
  "monthlyHoa": 3178,
  "monthlyTax": 2283,
  "amenities": ["central_ac", "city_view", "concierge", "dishwasher", "doorman", "elevator", "gym", "washer_dryer"],
  "builtIn": 2015,
  "description": "Welcome to Residence 30A at The Beekman Residences a perfectly split 2 bedroom 2.5 bath home ...",
  "building": { "id": "489" },
  "images": ["https://photos.zillowstatic.com/fp/8881214526a2035d1b9ad39f6d9b3748-full.jpg"],
  "videos": [],
  "floorplans": ["https://photos.zillowstatic.com/fp/e9a67ce3c4e6a887ebe34b7fd591618b-full.jpg"],
  "subways": [{ "id": "1293", "line": "Bway-7th Ave", "distance": "0.03", "routes": ["1"] }],
  "priceHistory": [{ "date": "2024-07-03", "price": 2800000, "event": "LISTED" }],
  "url": "https://www.streeteasy.com/sale/1724898",
  "fetchedAt": "2026-11-09T14:49:06.803Z"
}
```

This example is shortened. Real rows include every amenity, photo and nearby subway, plus the listing `agents`. Rentals also include `availableFrom` and `noFee`; `monthlyHoa`, `monthlyTax`, `ppsqft`, `closedPrice` and `priceHistory` are sales only.

### Supported areas and neighborhoods

Choosing an area includes every neighborhood nested under it.

- `nyc-and-nj`: all of NYC and New Jersey
- `north-jersey`

<details>
<summary>Manhattan (<code>manhattan</code>)</summary>

- `roosevelt-island`
- `all-downtown`
  - `civic-center`
  - `financial-district`
    - `fultonseaport`
  - `tribeca`
  - `stuyvesant-townpcv`
  - `soho`
    - `hudson-square`
  - `little-italy`
  - `lower-east-side`
    - `two-bridges`
  - `chinatown`
  - `battery-park-city`
  - `gramercy-park`
  - `chelsea`
    - `west-chelsea`
  - `greenwich-village`
    - `noho`
  - `east-village`
  - `west-village`
  - `flatiron`
    - `nomad`
  - `nolita`
- `all-midtown`
  - `midtown`
  - `central-park-south`
  - `midtown-south`
  - `midtown-east`
    - `murray-hill`
    - `sutton-place`
    - `turtle-bay`
      - `beekman`
    - `kips-bay`
  - `midtown-west`
    - `hudson-yards`
    - `hells-kitchen`
- `all-upper-west-side`
  - `upper-west-side`
    - `lincoln-square`
    - `manhattan-valley`
- `all-upper-east-side`
  - `upper-east-side`
    - `lenox-hill`
    - `yorkville`
    - `carnegie-hill`
    - `upper-carnegie-hill`
- `all-upper-manhattan`
  - `morningside-heights`
  - `hamilton-heights`
  - `washington-heights`
    - `hudson-heights`
    - `fort-george`
  - `inwood`
  - `west-harlem`
    - `manhattanville`
  - `central-harlem`
    - `south-harlem`
  - `east-harlem`
  - `marble-hill`

</details>

<details>
<summary>Bronx (<code>bronx</code>)</summary>

- `mott-haven`
  - `north-new-york`
- `melrose`
- `port-morris`
- `hunts-point`
- `longwood`
- `morrisania`
  - `claremont`
- `crotona-park-east`
- `highbridge`
- `concourse`
- `morris-heights`
- `university-heights`
- `fordham`
- `east-tremont`
  - `west-farms`
- `belmont`
- `bedford-park`
- `kingsbridge`
  - `kingsbridge-heights`
- `riverdale`
  - `fieldston`
  - `spuyten-duyvil`
- `soundview`
- `castle-hill`
- `parkchester`
- `throgs-neck`
  - `locust-point`
- `pelham-bay`
- `co-op-city`
- `city-island`
- `morris-park`
- `pelham-parkway`
- `van-nest`
- `laconia`
- `williamsbridge`
- `baychester`
- `woodlawn`
- `wakefield`
- `eastchester`
- `tremont`
  - `mt-hope`
- `norwood`
- `bronxwood`
- `pelham-gardens`
- `woodstock`
- `westchester-village`
  - `westchester-square`
- `country-club`
- `schuylerville`
- `edenwald`

</details>

<details>
<summary>Brooklyn (<code>brooklyn</code>)</summary>

- `greenpoint`
- `williamsburg`
  - `east-williamsburg`
- `downtown-brooklyn`
- `fort-greene`
- `brooklyn-heights`
- `boerum-hill`
- `dumbo`
  - `vinegar-hill`
- `bedford-stuyvesant`
  - `stuyvesant-heights`
  - `ocean-hill`
- `bushwick`
- `east-new-york`
  - `new-lots`
  - `city-line`
  - `starrett-city`
  - `cypress-hills`
- `red-hook`
- `park-slope`
- `gowanus`
- `carroll-gardens`
- `cobble-hill`
- `sunset-park`
- `windsor-terrace`
- `crown-heights`
  - `weeksville`
- `prospect-heights`
- `columbia-st-waterfront-district`
- `prospect-lefferts-gardens`
- `bay-ridge`
  - `fort-hamilton`
- `dyker-heights`
- `bensonhurst`
- `bath-beach`
- `gravesend`
- `borough-park`
  - `mapleton`
- `ocean-parkway`
- `kensington`
- `coney-island`
- `brighton-beach`
- `ditmas-park`
  - `fiske-terrace`
- `seagate`
- `flatbush`
- `midwood`
- `sheepshead-bay`
  - `homecrest`
  - `madison`
- `manhattan-beach`
- `brownsville`
- `prospect-park-south`
- `east-flatbush`
  - `farragut`
  - `wingate`
- `canarsie`
- `flatlands`
- `marine-park`
- `mill-basin`
- `bergen-beach`
- `clinton-hill`
- `old-mill-basin`
- `greenwood`
- `gerritsen-beach`

</details>

<details>
<summary>Queens (<code>queens</code>)</summary>

- `astoria`
  - `ditmars-steinway`
- `long-island-city`
  - `hunters-point`
- `sunnyside`
- `woodside`
- `jackson-heights`
- `east-elmhurst`
- `north-corona`
- `elmhurst`
- `corona`
- `maspeth`
- `middle-village`
- `ridgewood`
- `glendale`
- `rego-park`
- `forest-hills`
- `flushing`
  - `east-flushing`
  - `murray-hill-queens`
- `whitestone`
  - `malba`
  - `beechhurst`
- `college-point`
- `fresh-meadows`
- `kew-gardens-hills`
- `jamaica-hills`
- `woodhaven`
- `richmond-hill`
- `kew-gardens`
- `howard-beach`
  - `hamilton-beach`
  - `ramblersville`
  - `rockwood-park`
  - `lindenwood`
  - `old-howard-beach`
- `ozone-park`
- `south-ozone-park`
- `bayside`
  - `bay-terrace-queens`
- `douglaston`
- `little-neck`
- `auburndale`
- `jamaica`
- `south-jamaica`
- `hollis`
- `st-albans`
- `laurelton`
- `cambria-heights`
- `queens-village`
- `glen-oaks`
- `floral-park`
- `bellerose`
- `rosedale`
- `springfield-gardens`
- `briarwood`
- `jamaica-estates`
- `new-hyde-park`
- `south-richmond-hill`
- `oakland-gardens`
- `hillcrest`
- `pomonok`
- `utopia`
- `clearview`
- `rockaway-all`
  - `far-rockaway`
  - `broad-channel`
  - `arverne`
  - `rockaway-park`
  - `bayswater`
  - `belle-harbor`
  - `breezy-point`
  - `neponsit`
  - `edgemere`
  - `hammels`
- `brookville`

</details>

<details>
<summary>Staten Island (<code>staten-island</code>)</summary>

- `north-shore`
  - `arlington`
  - `clifton`
  - `elm-park`
  - `grymes-hill`
  - `howland-hook`
  - `mariners-harbor`
  - `new-brighton`
  - `park-hill`
  - `port-richmond`
  - `rosebank`
  - `shore-acres`
  - `silver-lake`
  - `saint-george`
  - `stapleton`
  - `tompkinsville`
  - `west-brighton`
- `south-shore`
  - `annadale`
  - `arden-heights`
  - `charleston`
  - `eltingville`
  - `great-kills`
  - `greenridge`
  - `huguenot`
  - `pleasant-plains`
  - `princes-bay`
  - `richmond-valley`
  - `rossville`
  - `tottenville`
  - `woodrow`
- `east-shore`
  - `arrochar`
  - `bay-terrace`
  - `dongan-hills`
  - `egbertville`
  - `emerson-hill`
  - `fort-wadsworth`
  - `grant-city`
  - `grasmere`
  - `lighthouse-hill`
  - `midland-beach`
  - `new-dorp`
  - `oakwood`
  - `ocean-breeze`
  - `richmondtown`
  - `south-beach`
  - `todt-hill`
  - `new-dorp-beach`
  - `oakwood-beach`
- `west-shore`
  - `bloomfield`
  - `chelsea-staten-island`
  - `travis`
- `mid-island`
  - `bulls-head`
  - `castleton-corners`
  - `graniteville`
  - `manor-heights`
  - `meiers-corners`
  - `new-springville`
  - `sunnyside-staten-island`
  - `westerleigh`
  - `willowbrook`

</details>

<details>
<summary>New Jersey (<code>new-jersey</code>)</summary>

- `cliffside-park`
- `edgewater`
- `fort-lee`
- `jersey-city`
  - `historic-downtown`
  - `waterfront`
    - `paulus-hook`
  - `the-heights`
  - `journal-square`
  - `mcginley-square`
  - `west-side`
  - `newport`
  - `bergenlafayette`
- `bayonne`
- `hoboken`
- `east-newark`
- `union-city`
- `north-bergen`
- `weehawken`
- `guttenberg`
- `harrison`
- `kearny`
- `secaucus`
- `west-new-york`

### Use cases

- **Investors and analysts:** track asking prices, sold prices and days on market by neighborhood.
- **Brokers and agents:** monitor new inventory and comps every day.
- **Proptech and data teams:** feed listings into models, dashboards and CRMs.
- **Renters and buyers:** schedule runs to catch new no-fee rentals or price drops.

### Tips

- Schedule a daily **New sales listed today** run to get a feed of fresh inventory.
- Leave **Include full listing details** off for quick price and location scans, and turn it on when you need complete records.
- Use **Maximum results** to cap the cost of each run.

### Notes

This Actor provides publicly listed information for research and analysis. You are responsible for using the data in line with applicable laws and StreetEasy's terms.

# Actor input Schema

## `mode` (type: `string`):

Active listings, sold or off-market listings, new sales listed today, buildings, or full details for specific StreetEasy URLs.

## `areas` (type: `array`):

Boroughs or neighborhoods to search. Choosing a borough or larger area includes every neighborhood inside it. Required for every mode except 'New sales listed today' and 'Details for specific StreetEasy URLs'.

## `listingUrls` (type: `array`):

Only for 'Details for specific StreetEasy URLs'. Accepts streeteasy.com/sale/…, /rental/… and /building/…/<unit> URLs, or bare listing IDs.

## `includeDetails` (type: `boolean`):

Search results contain only ID, price, status, coordinates and URL. Turn this on to get the full record for each listing: address, beds and baths, sqft, HOA and taxes, amenities, description, agents, photos, floor plans, nearby subways and (for sales) price history. Runs take longer.

## `maxItems` (type: `integer`):

Stop after this many results.

## `minPrice` (type: `integer`):

Only listings priced at or above this amount (sale price, or monthly rent for rentals).

## `maxPrice` (type: `integer`):

Only listings priced at or below this amount (sale price, or monthly rent for rentals).

## `minBeds` (type: `integer`):

Only listings with at least this many bedrooms. Studios have 0.

## `maxBeds` (type: `integer`):

Only listings with at most this many bedrooms.

## `minBaths` (type: `integer`):

Only listings with at least this many bathrooms.

## `maxHoa` (type: `integer`):

Only sales whose monthly common charges or maintenance are at or below this amount.

## `maxTax` (type: `integer`):

Only sales whose monthly property taxes are at or below this amount.

## `propertyTypes` (type: `array`):

Only return these property types. Leave empty for all.

## `amenities` (type: `array`):

Only return listings that have every amenity listed, using StreetEasy's amenity names, e.g. doorman, full_time_doorman, elevator, gym, pool, washer_dryer, laundry, dishwasher, central_ac, pets, dogs, cats, garage, parking, roofdeck, private_roof_deck, terrace, balcony, garden, bike_room, storage_room, package_room, concierge, live_in_super, city_view, skyline_view, park_view, waterview, fireplace, smoke_free, wheelchair_access. Leave empty for no amenity filter.

## `noFee` (type: `boolean`):

Only rentals with no broker fee.

## `pastStatus` (type: `string`):

Limit sold/rented results to one closing status.

## `closedAfter` (type: `string`):

Only listings that closed after this date (YYYY-MM-DD).

## Actor input object example

```json
{
  "mode": "sales",
  "areas": [
    "manhattan"
  ],
  "listingUrls": [],
  "includeDetails": false,
  "maxItems": 100,
  "noFee": false,
  "pastStatus": "any"
}
```

# Actor output Schema

## `overview` (type: `string`):

Key columns for every result: type, price, status, address, neighborhood, beds, baths, dates and StreetEasy URL.

## `results` (type: `string`):

Every field of every result. With full listing details on, this includes amenities, description, agents, photos, floor plans, subways and price history.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "areas": [
        "manhattan"
    ],
    "listingUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("layercity/streeteasy-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "areas": ["manhattan"],
    "listingUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("layercity/streeteasy-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "areas": [
    "manhattan"
  ],
  "listingUrls": []
}' |
apify call layercity/streeteasy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,layercity/streeteasy-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lX6KzOkMonZhzZo7a/builds/iPyvLxHVlbl0iNVo7/openapi.json
