← 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:

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

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

Affiliate if you still need an Apify account: apify.com/?fpr=qolupv. I may earn a commission; the price you pay does not change.