Zumper Scraper - US Apartments & Rentals Data
Pricing
from $0.40 / 1,000 listings
Zumper Scraper - US Apartments & Rentals Data
Scrape Zumper rentals by city: full price/bed/bath/sqft ranges, address, neighborhood, amenities, pets, photos, agent and brokerage contact, ratings and dates. Fast, HTTP-first, no browser.
Pricing
from $0.40 / 1,000 listings
Rating
0.0
(0)
Developer
Ihor Bielievskiy
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Zumper Scraper - US Apartments & Rentals
Pull rental listings from Zumper by city. For every listing you get the full price and bedroom/bathroom ranges, square footage, address with neighborhood and zip, amenities, pet policy, photos, the listing agent and brokerage with a phone number, ratings, and the key dates - everything Zumper ships in its own search payload.
No headless browser. Each city page embeds its complete search state as inline JSON, and the actor parses that directly, so it is fast and cheap to run. Requests use a real Chrome TLS fingerprint (via curl_cffi) to look like a browser.
What you can scrape
- Apartments, houses, condos, or rooms for rent in any US city Zumper covers.
- Filter by price, bedrooms, bathrooms, and pet-friendliness without writing a single Zumper URL filter.
- Cap results per city so a multi-city run samples evenly instead of draining the first city.
Input
| Field | Type | Description |
|---|---|---|
startUrls | array | Zumper for-rent URLs, e.g. https://www.zumper.com/apartments-for-rent/san-francisco-ca. Houses/condos/rooms paths and Zumper's own path filters are accepted. |
citySlugs | array | City slugs like san-francisco-ca, austin-tx (the part after the property-type path). Combined with the property type below. |
propertyType | string | apartments (default), houses, condos, or rooms. Decides the URL path built from each city slug. Ignored for full startUrls. |
maxItems | integer | Stop after this many listings across all cities. 0 = no limit. Default 100. |
maxItemsPerCity | integer | Cap listings per city URL. 0 = no per-city cap. |
minPrice / maxPrice | integer | Keep listings whose monthly rent range overlaps this band. |
minBeds / maxBeds | integer | Bedroom range filter (0 = studio). |
minBaths | integer | Minimum bathrooms. |
petsAllowed | boolean | Keep only listings that allow at least one pet type. |
proxyConfiguration | object | Apify Proxy. Datacenter is usually enough; switch to residential if you start seeing blocks. |
impersonate | string | curl_cffi browser fingerprint: chrome (default), chrome131, chrome124, safari17_0. |
Provide at least one of startUrls or citySlugs. Pagination is automatic - the actor walks ?page=N until a city runs out of listings. Price/bed/bath/pet filters are applied after fetch, so pagination and counts stay correct.
Example input:
{"citySlugs": ["san-francisco-ca", "austin-tx"],"propertyType": "apartments","minPrice": 2000,"maxPrice": 4000,"minBeds": 1,"petsAllowed": true,"maxItemsPerCity": 200,"maxItems": 500}
Output
One dataset item per rental listing:
{"listing_id": 58574913,"price_min": 3020.0,"price_max": 18280.0,"previous_price": null,"beds": 0.0,"max_beds": 3.0,"baths": 1.0,"max_baths": 2.0,"min_square_feet": 425,"max_square_feet": 1818,"floorplan_count": 54,"address": "149 San Francisco New Montgomery St","building_name": "Blueground San Francisco","building_id": 1717500,"city": "San Francisco","state": "CA","zipcode": "94105","neighborhood_id": 247,"neighborhood_name": "SOMA","timezone": "America/Los_Angeles","lat": 37.78714246632131,"lng": -122.39963719035394,"property_type": 2,"listing_type": 1,"listing_status": 1,"lease_type": 1,"min_lease_days": 30,"max_lease_days": null,"leasing_fee": 0.0,"has_fees": false,"promotion": 100,"amenities": [32, 1, 2, 5, 6],"amenity_tags": ["Smoke Detector", "Stove", "Blender"],"building_amenities": [8, 13, 11],"building_amenity_tags": ["Elevator", "Fitness Center"],"features": [35, 14, 78],"pets": [1, 3, 2],"agent_id": 14665954,"agent_name": "Blueground Us","brokerage_id": 160302,"brokerage_name": "BLUEGROUND","phone": "(415) 964-3025","is_messageable": true,"is_featured": false,"rating": 9.6,"external_rating": null,"integrated_tour_types": [],"date_available": null,"created_on": "2024-07-31T19:43:57+00:00","modified_on": "2026-06-23T18:05:45+00:00","listed_on": "2026-06-24T05:00:01+00:00","short_description": "...","image_ids": [761884337, 761884338],"photos": ["https://img.zumpercdn.com/761884337/1280x960?auto=format","https://img.zumpercdn.com/761884338/1280x960?auto=format"],"url": "https://www.zumper.com/apartment-buildings/1717500/blueground-san-francisco-soma-san-francisco-ca"}
Field notes:
price_min/price_max,beds/max_beds,baths/max_baths, and the square-foot fields describe the building's advertised range across its floorplans.amenity_tagsandbuilding_amenity_tagsare the human-readable labels;amenities/building_amenities/features/pets/integrated_tour_typesare Zumper's internal numeric codes for the same things, kept so you can match listings without parsing text.photosare ready-to-use Zumper CDN image URLs built fromimage_ids(1280x960).image_idsis kept so you can request other sizes.created_on/modified_on/listed_onare ISO-8601 UTC timestamps.- Listings are deduplicated by
listing_idacross all cities.
Unresolvable inputs and fetch/parse failures are written as typed error items ({ "error": ..., "source_url": ..., "detail": ... }) so a single bad city or a markup change never silently empties your run. The error field is one of unsupported_url, not_found (dead URL or city slug), blocked (anti-bot challenge), fetch_failed (transient network or HTTP error), or parse_failed (a listing did not match the expected shape). If every source fails and zero listings are scraped, the run is marked FAILED with a status message instead of reporting a green, empty success, so schedulers and monitors are not deceived.
Billing
Pay-per-result: one listing charge event per stored listing. Listings removed by your filters and error records are never charged.
Notes
- Listing data lives in the page's
window.__PRELOADED_STATE__blob undercurrentSearch.listables.listables. If Zumper changes that structure, the actor emits an explicit parse error rather than empty results. - Network calls have a 30s timeout and bounded retries with exponential backoff and jitter;
403/429/redirects are treated as blocks and retried with backoff. - The for-rent listing paths are allowed by Zumper's
robots.txtfor the default user agent.