← Catalog · Austin case study · SF rent drops · Actor
How to get Zumper rental listing data (and track rent changes)
26 Oct 2026 · benthepythondev
If you need rental listings from Zumper in a spreadsheet or a database, the Zumper Rental Scraper on Apify exports them by city, property type, price and bedroom count. It can also watch a saved search and return only listings that are new or whose asking rent changed. Output comes as JSON, CSV or Excel.
What you get
Each row is one Zumper listing or building. These are the fields in the sample run below:
- Identity and link:
listing_id(stable across runs),url,name,sourceandscraped_at. - Location: the full
addressplusstreet,city,state,zipcode,neighborhood, andlatitude/longitude. - Rent and size:
price_minandprice_max(monthly asking rent range for the building),beds_min/beds_max(0 means studio) andbaths_min/baths_max. - Details:
property_type, the sourcerating, a list ofamenities,pets_allowed,date_availableandhas_fees. - Contact:
phone,agent_name,brokerage_nameandfeed_name, when Zumper shows them. - Photos:
image_idsandimage_count. Turn onincludePhotosto get photo URLs where they're available. lead_score: a 0 to 100 heuristic based on how complete the listing is, useful for sorting.
If a field isn't on the source listing, it stays null or empty.
Example output
This is one row from a real San Francisco apartment search. I cut the amenities and image ID lists down to keep it short:
{
"source": "zumper.com",
"scraped_at": "2026-10-05T11:17:58.272600+00:00",
"listing_id": 17811674,
"url": "https://www.zumper.com/apartment-buildings/p13179/potrero-1010-potrero-hill-san-francisco-ca",
"name": "Potrero 1010",
"address": "1010 16th St, San Francisco, CA 94107",
"city": "San Francisco",
"state": "CA",
"zipcode": "94107",
"neighborhood": "Potrero Hill",
"latitude": 37.766986,
"longitude": -122.397049,
"price_min": 3720,
"price_max": 7173,
"beds_min": 0,
"beds_max": 2,
"baths_min": 1,
"baths_max": 2,
"rating": 9.3,
"property_type": "Apartment",
"amenities": ["Controlled Access", "In-Unit Laundry", "Air Conditioning", "Garage Parking"],
"pets_allowed": ["Cats", "Dogs"],
"phone": "(650) 488-6005",
"agent_name": "Potrero 1010",
"brokerage_name": "Equity Residential",
"feed_name": "equity",
"date_available": null,
"has_fees": true,
"image_ids": [238069142, 703756131, 703756133],
"image_count": 10,
"lead_score": 78
}
What people use it for
- Rental comps and market studies. Pull every apartment in a city within a price band, then compare rent ranges by neighborhood or zip code using the address and coordinate fields.
- Portfolio monitoring. Schedule a weekly run on the markets you care about and keep the rent and availability snapshots over time.
- Price change alerts. Turn on
onlyChanges, and each run returns only rows markednew,price_changedordetails_changedin achange_typefield. Where the values exist, those rows include the previous asking rent and the size of the change. Unchanged listings are left out. - Automated workflows. Connect the dataset to n8n, Make or Zapier. The README links an n8n rental alert template you can start from.
Two write-ups show change mode on real runs: the Austin change-only feed (baseline, duplicate suppression and n8n delivery over six runs) and the San Francisco rent drop it caught overnight.
How to run it on Apify
Open the actor page and set the input. A small one-off export looks like this:
{
"mode": "search",
"location": "san-francisco-ca",
"propertyType": "apartments-for-rent",
"maxListings": 3,
"includePhotos": false,
"useApifyProxy": true
}
location is a city-state slug such as austin-tx. You can add minPrice, maxPrice, minBeds and maxBeds, or switch mode to direct_urls and pass specific Zumper links in listingUrls. maxListings defaults to 10.
For a recurring monitor, add "onlyChanges": true, a stable monitorId such as "austin-rentals-under-3000", and pick a firstRunMode. With seedOnly, the first run saves a baseline and returns nothing, and later runs return only what changed. With emitAll, you get the baseline back on the first run as well. Then schedule the run in Apify.
There's also a tested Austin example you can open to see real output before you run anything.
Open the actor See the Austin example
How to call it as an API on RapidAPI
If you'd rather make a plain HTTP request than use the Apify console, the scraper is also listed on RapidAPI: Zumper Rental Scraper API. It takes the same search inputs and returns the same listing fields.
Honest limits
- Prices are building ranges.
price_minandprice_maxcover the whole building. They don't mean every unit matches your filters, or that a unit is still available. Check the exact unit and terms with the listing provider. - Some fields are often empty.
date_availableis null in all three sample rows. Phone, agent and brokerage only show up when Zumper exposes them. lead_scoreis only a sorting aid. It doesn't verify a landlord, judge whether something is a good investment, or tell you anyone will answer the phone. Ratings and contact details are whatever the source says.airbnbFriendlyjust passes Zumper's own filter through. It's not a legal check on short-term rental eligibility.- Cost grows with output. On the free tier it's $0.015 per returned listing, plus $0.01 for each listing that has a phone number. That phone charge applies automatically whenever
phoneis present. On a 512 MB run there's also a $0.00005 start event. SetmaxListingsand Apify's maximum run charge before you start a large export. In monitor mode you're only charged for the change rows a run returns, so an unchanged repeat costs only the start event.
Affiliate if you still need an Apify account: apify.com/?fpr=qolupv. I may earn a commission; the price you pay does not change.