Zumper Scraper โ Rentals, Buildings & Rent Data
Under maintenancePricing
from $3.95 / 1,000 results
Zumper Scraper โ Rentals, Buildings & Rent Data
Under maintenanceExtract rental listings, building details, and rent-market data from Zumper โ apartments, houses, condos, and rooms with prices, amenities, photos, floorplan units, and 24-month rent trends.
Pricing
from $3.95 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Zumper Rental Listings Scraper
Scrape rental listings, building details, and rent-market data from Zumper.com โ one of the largest US rental platforms. Extract apartments, houses, condos, and rooms with prices, amenities, photos, neighborhood data, individual floorplan units, and historical rent trends.
Features
- Search mode โ Scrape city listing pages with full pagination (25 listings/page).
- Detail mode โ Scrape individual building pages for the full description and every rentable unit (floorplan-level prices, beds, baths, sqft, availability).
- Rent research mode โ Market data: median & average rent, 24-month history, and rent distribution by bedroom count (studio โ 4+ bed).
- Property types โ Apartments, houses, condos, rooms.
- Neighborhood drill-down โ Optionally enumerate and scrape every neighborhood within each city.
- Deduplication โ The same listing appearing in city + neighborhood views is pushed only once.
- Anti-bot handling โ Runs a real browser to clear Zumper's JavaScript challenge automatically.
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | SEARCH | DETAIL | RENT_RESEARCH | SEARCH | What to scrape (see below). |
startUrls | string[] | [] | DETAIL mode only โ Zumper building/listing page URLs. |
cities | string[] | ["new-york-ny"] | SEARCH / RENT_RESEARCH โ city slugs ({city}-{state}, e.g. los-angeles-ca). |
propertyTypes | string[] | ["apartments"] | SEARCH โ apartments, houses, condos, rooms. |
maxPages | integer | 10 | Max search-result pages per city + property-type combo (25 listings/page). |
includeNeighborhoods | boolean | false | Also scrape each neighborhood within each city. |
includeMarketData | boolean | false | In SEARCH mode, also scrape rent-research data per city. |
maxConcurrency | integer | 5 | Max parallel browser pages. |
proxy | object | Apify Residential | Proxy configuration. |
Modes
SEARCHโ builds URLs fromcitiesรpropertyTypes, paginates, and emits one listing record per unit/building.DETAILโ visits each URL instartUrlsand emits one building record (full description + all floorplan units).RENT_RESEARCHโ emits one market-data record per city.
Example: NYC apartments
{"mode":"SEARCH","cities":["new-york-ny"],"propertyTypes":["apartments"],"maxPages":5}
Example: Full building details
{"mode":"DETAIL","startUrls":["https://www.zumper.com/apartment-buildings/p1528434/the-highland-east-new-york-new-york-ny"]}
Example: SF rent trends
{"mode":"RENT_RESEARCH","cities":["san-francisco-ca"]}
City slug format
{city-name-hyphenated}-{state-abbrev-lowercase}
| City | Slug |
|---|---|
| New York, NY | new-york-ny |
| Los Angeles, CA | los-angeles-ca |
| San Francisco, CA | san-francisco-ca |
| Chicago, IL | chicago-il |
| Austin, TX | austin-tx |
| Miami, FL | miami-fl |
Output
Listing output (SEARCH)
38 fields per listing. sqftMin/sqftMax/leaseMinDays/leaseMaxDays are null when Zumper doesn't publish them.
{"listingId":63457759,"buildingId":2022915,"buildingName":"The Highland","address":"2840 Atlantic Avenue","city":"New York","state":"NY","zipcode":"11207","neighborhood":"East New York","lat":40.6763085,"lng":-73.8890418,"priceMin":2300,"priceMax":3688,"previousPrice":null,"bedroomsMin":0,"bedroomsMax":2,"bathroomsMin":0,"bathroomsMax":2,"sqftMin":null,"sqftMax":null,"leaseMinDays":null,"leaseMaxDays":null,"floorplanCount":9,"propertyType":"apartment","dateAvailable":null,"listedOn":"2026-06-11","modifiedOn":"2026-06-15","rating":9.4,"petsAllowed":[],"amenities":["Granite Countertop","Stainless Steel Appliances","Floor-To-Ceiling Windows"],"buildingAmenities":["Fitness Center","Rooftop Lounge","Co-working lounge"],"phone":"(516) 619-3153","agentName":"Bushburg Properties","brokerageName":null,"isFeatured":false,"hasFees":false,"images":["https://img.zumpercdn.com/873992950/1280x960"],"url":"https://www.zumper.com/apartment-buildings/p1528434/the-highland-east-new-york-new-york-ny","description":null}
Building output (DETAIL)
One record per building, with a nested units array (one entry per rentable floorplan).
{"buildingId":2022915,"name":"The Highland","description":"Housed in what was formerly the Empire State Dairy Company, The Highland โฆ","address":"2840 Atlantic Avenue","formattedAddress":"2840 Atlantic Avenue, New York, NY 11207, USA","city":"New York","state":"NY","zipcode":"11207","neighborhood":"East New York","citySlug":"new-york-ny","lat":40.6763085,"lng":-73.8890418,"yearBuilt":null,"floors":null,"phone":"(516) 619-3153","agentName":"Bushburg Properties","brokerageName":null,"petsAllowed":["Large Dogs","Cats"],"amenities":["Fitness Center","Rooftop Lounge"],"hasFees":false,"images":["https://img.zumpercdn.com/873992950/1280x960"],"unitCount":9,"units":[{"listingId":63457779,"title":"Unit 324","priceMin":2300,"priceMax":2300,"bedrooms":0,"bathrooms":0,"halfBathrooms":0,"sqft":null,"dateAvailable":null,"propertyType":"apartment","amenities":["Floor-To-Ceiling Windows","Vinyl Plank Flooring"],"images":["https://img.zumpercdn.com/873993321/1280x960"],"url":"https://www.zumper.com/apartment-buildings/p1528434/the-highland-east-new-york-new-york-ny"}],"url":"https://www.zumper.com/apartment-buildings/p1528434/the-highland-east-new-york-new-york-ny"}
Market data output (RENT_RESEARCH)
{"city":"New York","state":"NY","citySlug":"new-york-ny","scrapedAt":"2026-06-15","rentData":{"studio":{"medianRent":3895,"averageRent":4048.12,"averageSqft":412,"count":1470,"rentRanges":[{"label":"$0 - $1,500","percent":1.85}],"monthlyHistory":[{"date":"2024-06","medianRent":3800}]},"oneBed":{"medianRent":4750,"averageRent":4912.02,"averageSqft":600,"count":3147,"rentRanges":[],"monthlyHistory":[]},"twoBed":{"medianRent":5600,"averageRent":6182.17,"averageSqft":900,"count":2381,"rentRanges":[],"monthlyHistory":[]},"threeBed":{"medianRent":6195,"averageRent":7130.08,"averageSqft":1200,"count":1196,"rentRanges":[],"monthlyHistory":[]},"fourBedPlus":{"medianRent":7300,"averageRent":8839.63,"averageSqft":1500,"count":315,"rentRanges":[],"monthlyHistory":[]}}}
Any bedroom type with no data is null.
How it works
Zumper is a React app served behind a non-interactive JavaScript anti-bot challenge โ a plain HTTP request only ever returns a small "Client Challenge" shell, never the real content. This actor therefore drives a real headless browser (Playwright + Chromium):
- Builds seed URLs from the input (or uses
startUrlsin DETAIL mode). - Loads each page in a browser, which automatically executes the challenge and reloads with the real content.
- Reads the server-rendered
window.__PRELOADED_STATE__JSON embedded in the page and parses it with a brace-matching scanner (robust to the ~400 KB blob and trailing scripts). - Normalizes records (deduplicating by ID, cleaning Zumper's sentinel "unknown" values), then paginates and optionally enqueues neighborhoods / rent research.
A JSON-LD extraction utility is included as a resilience aid if the embedded-state format ever changes.
Pricing
Designed for Pay Per Result โ e.g. $0.015 per listing, building, or market-data record (configure in the Apify console). Because each page runs a browser, residential proxy + compute costs are higher than a plain HTTP scraper; per-result pricing keeps that predictable for you.
Limitations & notes
- 25 listings per search page (Zumper's pagination size); use
maxPagesto control depth. - Residential proxies are strongly recommended โ datacenter IPs are challenged far more aggressively.
- DETAIL expects building pages (
/apartment-buildings/pโฆ). The full description and per-unit prices live only on these pages, not in search results. - Polite by default: capped concurrency and request rate.
Development
npminstallnpm run buildnpmtest# 38 unit tests (extraction + normalization)npm start # runs locally against ./storage with an INPUT.json
The unit tests cover the pure extraction/normalization logic (no network). To smoke-test the browser pipeline locally, drop an INPUT.json into storage/key_value_stores/default/ and run npm start.
