Zumper – Rental Listings, Prices & Agent Contacts avatar

Zumper – Rental Listings, Prices & Agent Contacts

Pricing

from $1.20 / 1,000 listing results

Go to Apify Store
Zumper – Rental Listings, Prices & Agent Contacts

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

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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.

FieldExample
id64606115
urlhttps://www.zumper.com/apartment-buildings/p000000/sample-building-city-st
title1A with Balcony
buildingNameSample Apartments
propertyCategoryapartments
address123 Sample St
city / state / zipcodeSan Francisco / CA / 94103
neighborhoodSOMA
latitude / longitude37.7700 / -122.4000
minPrice / maxPrice4035 / 6360
previousPrice4200 (set when the rent dropped)
minBedrooms / maxBedrooms0 / 2 (0 = studio)
minBathrooms / maxBathrooms1 / 2
minSquareFeet / maxSquareFeet509 / 980
dateAvailable2026-01-15
rating / externalRating9.3 / 4.1
unitAmenities["In-Unit Laundry", "Dishwasher", "Air Conditioning"]
buildingAmenities["Fitness Center", "Garage Parking", "Roof Deck"]
agentName / brokerageName / phoneSample Mgmt / Sample Brokerage / (415) 555-0100
primaryImage / images / imageCounthttps://img.zumpercdn.com/000000000/1280x960 / [...] / 10
shortDescriptionBright corner unit with balcony.
scrapedAt2026-01-01T00:00:00.000Z
changeTypeNEW (only present when incrementalMode is on, see below)
changedFields, firstSeenAt, lastSeenAtIncremental mode only

With Fetch detail pages enabled, each listing is additionally enriched with:

FieldNotes
descriptionFull property description
yearBuilt / yearRemodeled / floorsBuilding facts
amenityGroupsAmenities grouped by category
petPolicy / parking / deposits / feesPolicy + cost detail
specials / incomeRestrictions / leaseTerms / hoursWhen present
units / floorplanListingsPer-unit / per-floorplan availability and pricing
agentsFull agent / property-manager contact records
categoryRatingsPer-category rating breakdown (e.g. location, value, quality)
ratingDateWhen the ratings were last generated
reviewsSummaryZumper's editorial summary of resident feedback
editorialReview / aggregateRatingZumper's editorial review blurb + aggregate score
averagePrice / averageSquareFeetBuilding 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:

  1. an overall rating and an external rating (numbers),
  2. a category rating breakdown (location, value, quality, etc.), and
  3. 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

OptionWhat it does
modesearch (build URLs from the search fields) or url (use your own URLs)
locationsSearch mode only. Cities, states, neighborhoods or ZIPs, e.g. "San Francisco, CA", "new-york-ny", "94110"
propertyCategorySearch 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 / maxPriceBoth modes. Monthly-rent bounds (USD)
minBedrooms / maxBedrooms / minBathroomsBoth modes. Room filters (0 beds = studio)
petsAllowedSearch mode only. dogs, cats
sortByBoth modes. default, price-asc, price-desc, newest, rating-desc
urlsURL mode only: search / building / listing URLs
fetchDetailsAdd full description, ratings breakdown, units, agents and more
maxPagesResults pages walked per location/URL. Leave empty to walk every result page (still bounded by maxListings)
maxListingsTotal result cap (0 = unlimited)
resumeFromRunIdOptional: a previous run ID or dataset ID to continue an unbounded walk across separate runs
incrementalModeTurn 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
stateKeyIncremental 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
emitUnchangedIncremental mode only. Also return (and bill) listings that have not changed since the last run, marked UNCHANGED
emitExpiredIncremental 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
proxyConnection 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:

  • resumeFromRunId lets you continue in a brand-new run: paste the ID of a previous run (or its dataset), and this run skips every listing id already 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, and REAPPEARED listings. Unchanged listings are suppressed (not pushed, not billed) unless you turn on emitUnchanged.
  • Every dataset row gains changeType, changedFields, firstSeenAt, and lastSeenAt while 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.
  • emitExpired only 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.
  • incrementalMode and resumeFromRunId are 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 id as 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.