Zumper – Rental Listings, Prices & Agent Contacts
Pricing
from $1.20 / 1,000 listing results
Zumper – Rental Listings, Prices & Agent Contacts
Scrape Zumper.com rental listings: apartments, houses, condos and rooms. Pulls 60+ fields per listing, including monthly rent, beds/baths, square footage, decoded amenities, agent name and phone, ratings, availability and full-resolution photos. Search by location with filters, or paste Zumper URLs.
Pricing
from $1.20 / 1,000 listing results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Zumper Rentals Scraper
Pull rental listings from Zumper across the United States: apartments, houses, condos and rooms. Search by location with rich filters, or paste your own Zumper URLs. Returns 60+ fields per listing including monthly rent, beds/baths, square footage, human-readable amenities, agent name and phone, ratings, availability and full-resolution photo URLs.
Why this scraper
- 60+ fields straight from the results page. You do not have to turn on detail fetching to get price, beds/baths, square footage, amenities, agent name, phone, rating and photos.
- Amenities decoded to plain text. Amenities and building features come back as readable labels (
"In-Unit Laundry","Fitness Center","Garage Parking"), not opaque numeric codes. - Full photo URLs, not just IDs. Every image is returned as a ready-to-open URL.
- Ratings included. Zumper's overall rating and external rating on every card; the optional detail step adds the full category-by-category rating breakdown and Zumper's resident-feedback summary.
- Two modes: search by location and filters, or paste specific search / building / listing URLs (multiple URLs supported).
- Predictable cost. A small default result cap, per-record output, and an optional per-listing detail surcharge only when you turn detail fetching on.
- Runs on any Apify plan.
Data you get
Sample shape; values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
| id | 64606115 |
| url | https://www.zumper.com/apartment-buildings/p000000/sample-building-city-st |
| title | 1A with Balcony |
| buildingName | Sample Apartments |
| propertyCategory | apartments |
| address | 123 Sample St |
| city / state / zipcode | San Francisco / CA / 94103 |
| neighborhood | SOMA |
| latitude / longitude | 37.7700 / -122.4000 |
| minPrice / maxPrice | 4035 / 6360 |
| previousPrice | 4200 (set when the rent dropped) |
| minBedrooms / maxBedrooms | 0 / 2 (0 = studio) |
| minBathrooms / maxBathrooms | 1 / 2 |
| minSquareFeet / maxSquareFeet | 509 / 980 |
| dateAvailable | 2026-01-15 |
| rating / externalRating | 9.3 / 4.1 |
| unitAmenities | ["In-Unit Laundry", "Dishwasher", "Air Conditioning"] |
| buildingAmenities | ["Fitness Center", "Garage Parking", "Roof Deck"] |
| agentName / brokerageName / phone | Sample Mgmt / Sample Brokerage / (415) 555-0100 |
| primaryImage / images / imageCount | https://img.zumpercdn.com/000000000/1280x960 / [...] / 10 |
| shortDescription | Bright corner unit with balcony. |
| scrapedAt | 2026-01-01T00:00:00.000Z |
| changeType | NEW (only present when incrementalMode is on, see below) |
| changedFields, firstSeenAt, lastSeenAt | Incremental mode only |
With Fetch detail pages enabled, each listing is additionally enriched with:
| Field | Notes |
|---|---|
| description | Full property description |
| yearBuilt / yearRemodeled / floors | Building facts |
| amenityGroups | Amenities grouped by category |
| petPolicy / parking / deposits / fees | Policy + cost detail |
| specials / incomeRestrictions / leaseTerms / hours | When present |
| units / floorplanListings | Per-unit / per-floorplan availability and pricing |
| agents | Full agent / property-manager contact records |
| categoryRatings | Per-category rating breakdown (e.g. location, value, quality) |
| ratingDate | When the ratings were last generated |
| reviewsSummary | Zumper's editorial summary of resident feedback |
| editorialReview / aggregateRating | Zumper's editorial review blurb + aggregate score |
| averagePrice / averageSquareFeet | Building averages |
A note on reviews
Zumper does not publish individual resident / tenant reviews (per-comment review text with an author and date). What Zumper exposes for a building is:
- an overall rating and an external rating (numbers),
- a category rating breakdown (location, value, quality, etc.), and
- an editorial, AI-generated resident-feedback summary plus a single editorial "review" blurb authored by Zumper itself, not by a renter.
This was confirmed by inspecting Zumper's own page data: the building-reviews data structure is present in the page state but is never populated, no per-comment review section is rendered, and the only review object on a listing is authored by the "Zumper" organization. This scraper therefore captures all of the rating and feedback data that does exist (rating, externalRating, categoryRatings, reviewsSummary, editorialReview, aggregateRating) and always includes a userReviews field, which is an empty array because Zumper has no per-comment user reviews to return.
How to use
Search apartments in a city:
{"mode": "search","locations": ["San Francisco, CA"],"propertyCategory": "apartments","maxListings": 20}
Search houses with filters, cheapest first, and full detail:
{"mode": "search","locations": ["Austin, TX"],"propertyCategory": "houses","minPrice": 1500,"maxPrice": 6000,"minBedrooms": 2,"petsAllowed": ["dogs"],"sortBy": "price-asc","fetchDetails": true,"maxListings": 50}
Paste your own Zumper URLs (search pages or specific buildings):
{"mode": "url","urls": ["https://www.zumper.com/apartments-for-rent/new-york-ny","https://www.zumper.com/apartment-buildings/p87664/sample-building-san-francisco-ca"],"fetchDetails": true}
Input options
| Option | What it does |
|---|---|
mode | search (build URLs from the search fields) or url (use your own URLs) |
locations | Search mode only. Cities, states, neighborhoods or ZIPs, e.g. "San Francisco, CA", "new-york-ny", "94110" |
propertyCategory | Search mode only for picking the category to browse: apartments, houses, condos, rooms. In URL mode it filters nothing; it is only the label used when the pasted URL does not name a category |
minPrice / maxPrice | Both modes. Monthly-rent bounds (USD) |
minBedrooms / maxBedrooms / minBathrooms | Both modes. Room filters (0 beds = studio) |
petsAllowed | Search mode only. dogs, cats |
sortBy | Both modes. default, price-asc, price-desc, newest, rating-desc |
urls | URL mode only: search / building / listing URLs |
fetchDetails | Add full description, ratings breakdown, units, agents and more |
maxPages | Results pages walked per location/URL. Leave empty to walk every result page (still bounded by maxListings) |
maxListings | Total result cap (0 = unlimited) |
resumeFromRunId | Optional: a previous run ID or dataset ID to continue an unbounded walk across separate runs |
incrementalMode | Turn on for recurring/scheduled monitoring of the SAME search. Classifies each listing as NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED against the actor's own remembered state, instead of you pasting a run/dataset ID every time |
stateKey | Incremental mode only. Names a monitoring campaign so its state stays stable, or to deliberately share state across differently-configured runs. Leave empty to derive a key automatically from the location/category/filters/fetchDetails |
emitUnchanged | Incremental mode only. Also return (and bill) listings that have not changed since the last run, marked UNCHANGED |
emitExpired | Incremental mode only. Also return (and bill) listings that were tracked before but are no longer found, marked EXPIRED. Only produced once a run fully scans the tracked search |
proxy | Connection settings; managed automatically, or supply your own proxy URLs |
The rent, bedroom, bathroom and sort fields apply in both modes: in URL mode they narrow and reorder the results of a pasted search-results URL after they are read, so a pasted URL returns fewer listings than the page itself shows when they are set. A pasted building or listing URL is saved as-is and is never narrowed by them. locations, propertyCategory and petsAllowed are the search-only fields: they shape the search URL this actor builds for you and are not re-applied to the listings that come back.
Resuming an unbounded walk
For a full pull (maxPages empty, maxListings: 0), two things protect a long run:
resumeFromRunIdlets you continue in a brand-new run: paste the ID of a previous run (or its dataset), and this run skips every listingidalready saved there, appending only new listings.- A checkpoint is saved automatically as the run progresses. If the run is interrupted by an Apify platform migration or you click Resurrect on a failed run, it picks back up from where it left off in the same run, without re-saving (or re-charging for) listings it already collected. No input is needed for this; it's automatic.
Incremental & dedup mode (recurring monitoring)
Distinct from resumeFromRunId above, which continues ONE specific interrupted run. incrementalMode is for scheduling this actor to run the SAME search again and again (daily/weekly) and getting only what changed:
- The first run returns every matching listing marked
changeType: "NEW". - Later runs normally return only
NEW,UPDATED, andREAPPEAREDlistings. Unchanged listings are suppressed (not pushed, not billed) unless you turn onemitUnchanged. - Every dataset row gains
changeType,changedFields,firstSeenAt, andlastSeenAtwhile incremental mode is on. With it off, output is unchanged. - State is kept per
stateKey(or an automatic hash of location/category/filters/fetchDetails) in a dedicated key-value store, so it never costs extra requests against Zumper. - A detail page is still fetched (and used to compute the change fingerprint) for a listing that turns out UNCHANGED, but that listing is neither pushed nor charged the detail-enrichment surcharge.
emitExpiredonly fires once a run has fully scanned the tracked search: a page-capped, resumed, or partial run leaves previously-tracked listings' state as-is instead of guessing they are gone.incrementalModeandresumeFromRunIdare usually used one at a time. Combining them is only for bootstrapping a monitoring campaign from an existing pull's dataset on its first incremental run; once a state key has tracked listings, combining the two fails fast with a clear message instead of guessing.
Send results into your apps (MCP connectors)
Optionally pipe each scraped listing into the tools you already use (Notion, Linear, Airtable, or any Model Context Protocol server) by selecting an authorized connector in the input. Each connector receives a condensed, human-readable summary per item; the full record always stays in the dataset.
Notes
- Results reflect the public listing data available at run time; field availability can vary by region, listing type and Zumper interface changes. Use
idas the idempotency / dedup key. - The default run keeps detail fetching off because the results page already carries the large majority of fields; turn it on when you need the full description, ratings breakdown, units or agent records.