StreetEasy Scraper [$1.50/1K💰] | NYC Rentals | Broker Data avatar

StreetEasy Scraper [$1.50/1K💰] | NYC Rentals | Broker Data

Pricing

from $1.20 / 1,000 results

Go to Apify Store
StreetEasy Scraper [$1.50/1K💰] | NYC Rentals | Broker Data

StreetEasy Scraper [$1.50/1K💰] | NYC Rentals | Broker Data

Scrape StreetEasy NYC rental listings into structured data: price, net-effective rent, beds, baths, sqft, neighborhood, broker, no-fee status and price history. Ideal for NYC rental market research, price monitoring and lead generation.

Pricing

from $1.20 / 1,000 results

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Share

StreetEasy Scraper: NYC Rental Listings & Brokerage Data

Scrape streeteasy.com NYC rental listings across all five boroughs and export address, neighborhood, ZIP, latitude/longitude, price, net-effective rent, beds/baths, square footage, building type, broker, no-fee status, photos and full price history as clean structured JSON. It calls StreetEasy's own internal GraphQL endpoint server-side with no browser, so a run is fast and cheap even at scale.

Built for NYC real-estate investors, relocation and rental agencies, buy-box and comp analysts, and lead-generation teams who want StreetEasy coverage alongside Zillow/Redfin data.

Main use cases

  • NYC rental market research: track asking rents, net-effective rents and inventory across boroughs and neighborhoods.
  • Rental price monitoring: schedule recurring snapshots to catch price drops (priceDelta), concessions (monthsFree) and no-fee (noFee) listings.
  • Real estate lead generation: pull the broker/brokerage label from active listings for outreach and partner research.
  • Build a NYC rental database / property dataset: warehouse StreetEasy rentals with geo-coordinates, building type and price history.
  • Buy-box and comps analysis: filter by price, beds and baths to line up comparables across Manhattan, Brooklyn, Queens and more.
  • Relocation and apartment search tooling: power your own apartment-search UI with fresh StreetEasy listings and photos.

How it works

StreetEasy's Next.js frontend queries its own internal GraphQL endpoint, and this actor calls that same endpoint server-side. There is no browser and no HTML scraping: search pages and detail records come back as clean JSON.

  • Endpoint: POST https://api-v6.streeteasy.com/
  • Search: searchRentals(input: {...}), paged with perPage / page, filtered by numeric areas codes plus price, beds and baths.
  • Details: rentalByListingId(id: ...) for description, amenities, all photo and floor-plan keys, the building record (ZIP) and propertyHistory.rentalEventsOfInterest (price history).
  • Photos: https://photos.zillowstatic.com/fp/{key}-se_large_800_400.webp (public CDN, not bot-walled).

Rentals are fully supported. Sales are a best-effort probe of a mirrored endpoint; if the server rejects it, the run logs a warning and continues rentals-only.

Extract NYC Rental Listings For Market Research

Every rental search returns listing cards that the actor maps into one dataset row each: listing id and URL, street address and unit, neighborhood and borough, city/state/ZIP (with detail enrichment), latitude/longitude, current price and net-effective rent, concession months free and no-fee flag, last price change, bedrooms, full and half bathrooms, square feet, building type, broker label, status, availability date, photos and (with enrichment) description, amenities, floor plans and price history.

You provide one or more areas (areas, e.g. MANHATTAN, Williamsburg, park-slope-brooklyn, or numeric area ids) plus optional price/bed/bath filters.

Build A NYC Rental Database Without A StreetEasy API

StreetEasy has no public rental API, and its www.streeteasy.com HTML pages sit behind PerimeterX (a plain HTTP fetch gets a 403 challenge page). This actor sidesteps both by calling the internal api-v6.streeteasy.com GraphQL endpoint the site's own frontend uses, carrying the frontend's headers (Origin: https://streeteasy.com, Apollographql-Client-Name: srp-frontend-service, a browser User-Agent) and valid PerimeterX cookies (_px3, _pxvid).

A critical quirk: enum values are sent as plain JSON strings inside variables.input (for example "rentalStatus": "ACTIVE", "attribute": "LISTED_AT"), which is exactly how the current StreetEasy frontend calls api-v6.

Anti-bot handling (PerimeterX): PX signs its _px3 cookie to the egress IP and User-Agent. On fresh residential exit IPs the API accepts requests without cookies; datacenter IPs get a 403 challenge regardless. The actor therefore:

  1. Rotates the session (fresh exit IP) on every blocked response and retries.
  2. If the API starts returning 403, attempts a one-shot PX cookie bootstrap by loading the public StreetEasy HTML page through the same exit IP with got-scraping; if PX blocks the HTML too, it falls back to IP rotation only.
  3. Optionally accepts manually pasted browser cookies (cookies) as a fallback.

For reliable runs, enable Apify Proxy (residential group) in the input and raise maxRequestRetries if needed.

Known limitations

  • Rentals are fully supported; sales depend on an undocumented endpoint and may fall back to rentals-only.
  • Broker contact details (phone/email) are not exposed by the internal API, only the brokerage label.
  • api-v6.streeteasy.com is an internal, unpublished endpoint with no stability guarantee; if StreetEasy changes the schema, the actor's GraphQL layer is the single place to update.

Input Parameters

FieldTypeRequiredDefaultNotes
areasarray (stringList)Yes["MANHATTAN"]StreetEasy neighborhoods or boroughs, e.g. Manhattan, Williamsburg, Chelsea, Astoria, Park Slope. Numeric area ids are also accepted.
listingTypestring (enum)Norentalsrentals (full support), sales or both (best-effort probe; falls back to rentals-only).
maxItemsintegerNo100Maximum listings to return (1 to 5000). Free users are capped at 10 items per run.
minPriceintegerNo-Minimum monthly rent (or sale price) filter.
maxPriceintegerNo-Maximum monthly rent (or sale price) filter.
minBedsintegerNo-Minimum bedroom count (0 = studio).
maxBedsintegerNo-Maximum bedroom count.
minBathsintegerNo-Minimum bathroom count.
maxBathsintegerNo-Maximum bathroom count.
enrichDetailsbooleanNofalseFetch each listing's detail record (ZIP code, description, amenities, all photos, floor plans, price history). One extra request per listing, roughly triples run time.
listingIdsarray (stringList)No-Specific rental ids or URLs (e.g. 4808197 or https://streeteasy.com/rental/4808197) to enrich directly.
maxRequestsPerCrawlintegerNo500Safety cap on total API requests (search pages plus detail fetches).
maxRequestRetriesintegerNo10Retries per request (0 to 100). Each retry rotates to a fresh proxy session/IP and re-acquires PX cookies. Raise if runs return little data.
cookiesstringNo-Optional fallback: paste the full Cookie header from a working streeteasy.com browser session. The actor normally self-bootstraps PX cookies per proxy IP.
proxyobject (proxy)NoApify proxy, RESIDENTIAL groupResidential proxy strongly recommended. PerimeterX blocks datacenter IPs regardless of cookies.

Output Fields

One dataset item per listing. The default overview view shows Address, Neighborhood, Price, Beds, Baths, Sqft, Broker and URL.

FieldTypeDescription
listingIdstringStreetEasy numeric listing id.
listingTypestringrental or sale.
listingUrlstring / nullCanonical StreetEasy listing URL.
urlPathstring / nullListing path on streeteasy.com.
addressstring / nullStreet plus unit, e.g. 160 West 24th Street #3N.
unitstring / nullUnit / apartment number.
streetstring / nullStreet address.
neighborhoodstring / nullStreetEasy area name, e.g. Chelsea.
boroughstring / nullBorough derived from the area code.
citystring / nullCity (detail enrichment only).
statestring / nullState (detail enrichment only).
zipCodestring / nullZIP code (detail enrichment only).
latitudenumber / nullListing latitude.
longitudenumber / nullListing longitude.
pricenumber / nullCurrent list price ($/mo for rentals).
netEffectivePricenumber / nullNet-effective rent after concessions.
noFeeboolean / nullWhether the listing is no-fee.
monthsFreenumber / nullConcession months free, if any.
priceDeltanumber / nullLast price change amount.
bedroomsnumber / nullBedroom count (0 = studio).
bathroomsFullnumber / nullFull bathrooms.
bathroomsHalfnumber / nullHalf bathrooms.
sqftnumber / nullLiving area in square feet (null when not listed).
buildingTypestring / nullBuilding type, e.g. RENTAL, CONDO, CO_OP.
brokerstring / nullBrokerage/agent label from the listing source.
sourceTypestring / nullListing source type.
statusstring / nullListing status (ACTIVE, ...).
availableAtstring / nullAvailability date.
descriptionstring / nullFull listing description (detail enrichment only).
amenitiesarrayAmenity and feature codes (detail enrichment only).
photosarrayPhoto URLs (Zillow CDN).
floorPlansarrayFloor-plan image URLs (detail enrichment only).
priceHistoryarrayPrice/status events {date, price, event} (detail enrichment only).
areaNamestring / nullRaw StreetEasy area name.
scrapedAtstringRow timestamp (ISO).

Fields that require detail enrichment (zipCode, description, amenities, floorPlans, priceHistory and the extra photos) are null/empty when enrichDetails is false or the detail fetch fails; the search-level row is still returned.

Example Input And Output

Input

{
"areas": ["Williamsburg", "Astoria"],
"listingType": "rentals",
"maxItems": 100,
"maxPrice": 5000,
"minBeds": 1,
"enrichDetails": true
}

Output (one dataset row)

{
"listingId": "4808197",
"listingType": "rental",
"listingUrl": "https://streeteasy.com/rental/4808197",
"urlPath": "/rental/4808197",
"address": "160 West 24th Street #3N",
"unit": "3N",
"street": "160 West 24th Street",
"neighborhood": "Chelsea",
"borough": "Manhattan",
"city": "New York",
"state": "NY",
"zipCode": "10011",
"latitude": 40.74419,
"longitude": -73.99374,
"price": 5200,
"netEffectivePrice": 4766,
"noFee": true,
"monthsFree": 1,
"priceDelta": -200,
"bedrooms": 1,
"bathroomsFull": 1,
"bathroomsHalf": 0,
"sqft": 720,
"buildingType": "RENTAL",
"broker": "Corcoran Group",
"sourceType": "broker",
"status": "ACTIVE",
"availableAt": "2026-11-01",
"description": "Sunny one-bedroom with southern exposure ...",
"amenities": ["ELEVATOR", "LAUNDRY_IN_UNIT", "GYM"],
"photos": ["https://photos.zillowstatic.com/fp/....-se_large_800_400.webp"],
"floorPlans": [],
"priceHistory": [{ "date": "2026-10-01", "price": 5400, "event": "LISTED" }],
"areaName": "chelsea",
"scrapedAt": "2026-10-11T09:00:00.000Z"
}

Integrations & Automation

Every Apify actor is reachable through the Apify API, and this one plugs into webhooks, Zapier and Make so results can flow into a Google Sheet, Airtable base, CRM or data warehouse. For rental price monitoring and market research, run it on a schedule: a daily or weekly snapshot of your target neighborhoods is enough to catch new listings, price drops and concessions, and recurring runs also improve the actor's Store recommendation signals.

  • zillow-scraper: the largest US listings scraper; pairs StreetEasy rentals with broad national coverage.
  • zillow-detail-scraper: adds full Zillow detail pages for listings StreetEasy does not expose.
  • zumper-scraper: US rental listings to complement StreetEasy's NYC inventory.
  • century21-scraper: another US real-estate source for a multi-portal property database.
  • coldwellbanker-scraper: brokerage-level US listings with agent and office data.

FAQ

Is there an official StreetEasy API?

No. StreetEasy (a Zillow brand) does not publish a public rental API, and its HTML pages are protected by PerimeterX. This actor reads StreetEasy's own internal GraphQL endpoint directly, so you get structured rentals without an API key and without a browser.

What are the alternatives to this actor / this data source?

For NYC rental data you can combine this with Zillow, Zumper, Realtor.com or HotPads scrapers. StreetEasy is the most NYC-focused of these, so it is worth having alongside the national portals to widen coverage of active rentals, brokerages and price history.

How do I get NYC rental price history and no-fee data at scale?

Set enrichDetails to true and provide your areas plus any price/bed/bath filters. The actor follows search pagination automatically, then enriches each listing to return priceHistory, netEffectivePrice, monthsFree, noFee and priceDelta alongside price, size and geo-coordinates.

Does StreetEasy block scrapers?

StreetEasy uses PerimeterX, which blocks datacenter IPs with a 403 challenge even with valid cookies. This actor avoids that by rotating to fresh residential exit IP sessions and optionally bootstrapping PX cookies, so enable the residential Apify proxy group in production runs.

Best way to monitor NYC rent prices by neighborhood?

Schedule this actor daily or weekly against your target neighborhoods and store each run's dataset. Comparing runs over time gives you new-listing, rent-change and concession trends without manual checks.

Why are zipCode, description and price history null?

Those fields live on the per-listing detail record. They are returned only when enrichDetails is true (roughly one extra request per listing, which triples run time). Leave it off for fast basic rows.

SEO Keywords

streeteasy scraper, streeteasy api, nyc apartments, nyc rental data, nyc real estate data, rental listings, apartment scraper, zillow scraper, nyc apartments for rent, rental price monitoring, real estate lead generation, no-fee apartments, manhattan rentals, brooklyn apartments, new york city rental market, price history, brokerage data, streeteasy alternative, nyc rental market, property database

For AI Agents & LLM Apps

Purpose: return one structured NYC rental-listing row per StreetEasy listing for a given set of areas and optional price/bed/bath filters.

Minimal working input:

{ "areas": ["MANHATTAN"], "maxItems": 20 }

Variant input (enrich a specific listing, or search sales):

{ "listingIds": ["4808197"], "enrichDetails": true }

Output fields: listingId, listingType, listingUrl, urlPath, address, unit, street, neighborhood, borough, city, state, zipCode, latitude, longitude, price, netEffectivePrice, noFee, monthsFree, priceDelta, bedrooms, bathroomsFull, bathroomsHalf, sqft, buildingType, broker, sourceType, status, availableAt, description, amenities, photos, floorPlans, priceHistory, areaName, scrapedAt.

Behaviors an agent should know:

  • areas is the only required field; it accepts neighborhood or borough names, or numeric StreetEasy area ids.
  • listingType defaults to rentals. sales/both are best-effort and may fall back to rentals-only; an unsupported sales probe does not fail the run.
  • maxItems defaults to 100; free-plan runs are capped at 10 listings regardless.
  • Detail-only fields (zipCode, description, amenities, floorPlans, priceHistory, extra photos) are null/empty unless enrichDetails is true. Do not treat their absence as a failure.
  • listingIds, when set, enriches those specific listings directly and does not require areas.
  • Enable the residential proxy for production; without residential IPs PerimeterX returns 403.

Billing: pay-per-event: $0.0015 per result ($1.50 / 1,000 listings) via the apify-default-dataset-item event, an additional $0.001 per listing ($1.00 / 1,000) full-details event when enrichDetails is on, plus a $0.00005 actor-start event.

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by StreetEasy or Zillow Group. It accesses only publicly available StreetEasy / StreetEasy API surfaces; it does not log in, bypass authentication, or solve CAPTCHAs on anyone's behalf. Users are responsible for ensuring their use complies with StreetEasy's Terms of Service and with applicable data-protection law.