Zumper Scraper — US Apartments & Houses for Rent
Pricing
from $4.00 / 1,000 listing scrapeds
Zumper Scraper — US Apartments & Houses for Rent
Scrape Zumper rental listings by US city, Zumper search URL or area, with rent range, beds, baths, square feet, address, geo, building name, images and listing URL. Map tiling pages past Zumper's 200-per-view cap, with no login.
Pricing
from $4.00 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
What is Zumper Scraper — Apartments & Houses for Rent Data?
Zumper Scraper is an Apify Actor for rental-market workflows that accepts a US city, a Zumper search URL, or both. It returns one record per rental listing, where each record represents a building or property and includes the fields Zumper publishes for that listing, such as rent range, bedrooms, bathrooms, square footage, address, geo-coordinates, building name, image metadata, and the property URL. The dataset is suited for spreadsheet review, market analysis, lead building, and Apify MCP usage.
Best fit and connected workflows
This Actor fits workflows that start with a Zumper city page and end with structured rental data.
Common routing patterns include:
- city-level inventory pulls for a single US market
- batch scraping from multiple Zumper search URLs
- rent-band review using the price filters
- bed-count targeting for apartment and house searches
- downstream enrichment or analysis using the
propertyUrl, coordinates, and stable IDs
Zumper Scraper — Apartments & Houses for Rent Data is designed as a focused workflow.
Practical scenario
A relocation specialist is reviewing Austin rental inventory for a client who wants 1-2 bedroom homes and apartments in a monthly rent band. They start with location: "Austin, TX" and set minBedrooms, maxBedrooms, minPrice, and maxPrice. The returned dataset includes buildingName, address, minPrice, maxPrice, minBedrooms, maxBedrooms, latitude, longitude, and propertyUrl. The specialist sorts the results by price and distance, then opens selected propertyUrl entries to review listing detail pages and share options with the client.
Input fields
| Field | Type | Purpose |
|---|---|---|
location | string | US city in "City, ST" or "City, State" form, or a Zumper city slug such as austin-tx. |
startUrls | array | One or more Zumper search URLs. Each resolves to a city and can be combined with location for batching. |
maxResults | integer | Maximum number of listings across all locations. Used as a cost cap. |
minPrice | integer | Keep listings whose rent range reaches at least this monthly amount in USD. |
maxPrice | integer | Keep listings whose rent range starts at or below this monthly amount in USD. |
minBedrooms | integer | Keep listings with at least this many bedrooms. Studios count as 0. |
maxBedrooms | integer | Keep listings with at most this many bedrooms. |
proxyConfiguration | object | Proxy settings for the run. The input schema pre-fills Apify Proxy with the US Residential group. |
Focused JSON example
{"location": "Austin, TX","maxResults": 500,"minPrice": 1200,"maxPrice": 3000,"minBedrooms": 1,"maxBedrooms": 2}
Output fields
Each dataset record represents one scraped rental listing.
| Field | Type | Meaning |
|---|---|---|
listingId | integer or null | Listing identifier from Zumper. |
buildingId | integer or null | Building identifier from Zumper. |
buildingName | string or null | Property or building name. |
address | string or null | Street address. |
city | string or null | City name. |
state | string or null | State abbreviation or name. |
zipcode | string or null | ZIP code. |
neighborhood | string or null | Neighborhood name when available. |
latitude | number or null | Listing latitude. |
longitude | number or null | Listing longitude. |
minPrice | integer or null | Minimum rent in USD. |
maxPrice | integer or null | Maximum rent in USD. |
minBedrooms | integer or null | Minimum bedrooms across published floorplans. |
maxBedrooms | integer or null | Maximum bedrooms across published floorplans. |
minBathrooms | number or null | Minimum bathrooms across published floorplans. |
maxBathrooms | number or null | Maximum bathrooms across published floorplans. |
minSquareFeet | integer or null | Minimum square feet across published floorplans. |
maxSquareFeet | integer or null | Maximum square feet across published floorplans. |
floorplanCount | integer or null | Number of distinct floorplans. |
isHouse | boolean or null | Whether the listing represents a house. |
hasFees | boolean or null | Whether Zumper flags fees. |
isMessageable | boolean or null | Whether the listing is messageable. |
feedName | string or null | Source feed name. |
imageCount | integer or null | Number of images. |
imageIds | array or null | Raw image IDs. |
featureCodes | array or null | Amenity or feature codes. |
listedAt | string or null | Listing timestamp. |
modifiedAt | string or null | Last modified timestamp. |
propertyUrl | string or null | Absolute Zumper property URL. |
citySlug | string or null | Resolved Zumper city slug. |
Illustrative JSON record
{"listingId": 123456789,"buildingId": 987654321,"buildingName": "Camden Example","address": "123 Example St","city": "Austin","state": "TX","zipcode": "78701","neighborhood": "Downtown","latitude": 30.2711,"longitude": -97.7437,"minPrice": 1800,"maxPrice": 2600,"minBedrooms": 1,"maxBedrooms": 2,"minBathrooms": 1,"maxBathrooms": 2,"minSquareFeet": 700,"maxSquareFeet": 1100,"floorplanCount": 4,"isHouse": false,"hasFees": true,"isMessageable": true,"feedName": "zumper","imageCount": 12,"imageIds": [111, 222, 333],"featureCodes": ["pool", "gym"],"listedAt": "2026-01-01T12:00:00Z","modifiedAt": "2026-01-03T15:30:00Z","propertyUrl": "https://www.zumper.com/apartments-for-rent/example","citySlug": "austin-tx"}
How it works
The Actor resolves each provided city or Zumper search URL into a city slug and GeoJSON bounds. It then queries Zumper's internal maplist/pins API over HTTP. When a box contains more than 200 listings, the Actor splits the area into smaller tiles and continues recursively, which lets it move past Zumper's 200-per-view cap. Listings are deduplicated by ID, filtered client-side by price and bedroom criteria, and pushed to the dataset until maxResults is reached.
Pricing
This Actor uses Apify Pay per event pricing with Apify platform usage included. The charged events in the live contract are:
- Actor start
- Listing scraped
The Listing scraped event is charged per rental listing returned in the dataset. A 200-listing run means 200 listing events plus one Actor start event. For the latest live pricing details, open the Pricing tab on the Actor page.
Use with AI agents (MCP)
Zumper Scraper is an Apify Actor usable through Apify MCP. The MCP tool call takes a compact input and returns structured rental listings that agents can read field by field.
Exact Actor identity: khadinakbar/zumper-scraper
Tool description: scrape Zumper rentals from a US city or Zumper search URL and return one structured record per listing with rent, beds, baths, square feet, address, coordinates, and listing URL.
Find rental listings for Austin, TX from Zumper. Return buildings, rent ranges, bed and bath ranges, coordinates, and property URLs. Limit the run to 300 listings and keep the results in JSON so I can rank them by price and neighborhood.
Output interpretation:
- read each dataset item as one rental listing record
- use
buildingName,address,city, andstatefor display - use
minPriceandmaxPriceto understand the published rent range - use
minBedrooms,maxBedrooms,minBathrooms, andmaxBathroomsto compare unit mix - use
propertyUrlas the source listing link - use
listingId,buildingId, andcitySlugfor stable joins
Provenance and scope:
- records come from Zumper listing pages and map data exposed through the Actor
- the Actor is focused on US rental listings
- pagination is handled automatically through map tiling when the city view exceeds the 200-per-view cap
maxResultsacts as the run-level cost cap
Cost guidance:
- MCP calls follow the same pay-per-event model as regular runs
- raising
maxResultsallows deeper coverage while keeping billing capped at that value
Apify API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const run = await client.actor('khadinakbar/zumper-scraper').call({location: 'Austin, TX',maxResults: 300,minBedrooms: 1,});console.log('Dataset ID:', run.defaultDatasetId);const dataset = client.dataset(run.defaultDatasetId);const items = await dataset.listItems();for (const item of items.items) {console.log(item.buildingName, item.minPrice, item.maxPrice, item.propertyUrl);}
Set APIFY_TOKEN in your environment before running the example.
Best results and outcome guidance
Use a city-level location when you want one market, and use startUrls when you want to batch multiple Zumper search pages in one run. Set maxResults to the coverage level you want for the run, then add price and bedroom filters when you already know the target segment. Review propertyUrl for listing detail pages and use latitude and longitude when you need map-based analysis or distance sorting.
Continue the workflow
- Then use Bayut Scraper — UAE Property Listings, Agents & Agencies to extend Zumper Scraper — Apartments & Houses for Rent Data with a neighboring property research source when the brief calls for Bayut data.
- Then use Zillow Search Scraper — ZIP, City & Map Bounds to extend Zumper Scraper — Apartments & Houses for Rent Data with a neighboring property research source when the brief calls for Zillow data.
Design note
I found that the live dataset contract exposes isMessageable and feedName alongside the core rent and location fields, which makes it practical to preserve source and contact-related context in downstream workflows.
FAQ
Can I start from a city name or a Zumper search page?
Yes. The Actor accepts location, startUrls, or both.
What kind of record does each dataset row represent?
Each row represents one rental listing, which is the building or property level object returned by Zumper.
How can I work across several cities in one run?
Add multiple Zumper search URLs in startUrls. The Actor merges them with location when both are supplied.
How do I focus on a price band or bedroom count?
Use minPrice, maxPrice, minBedrooms, and maxBedrooms to filter the returned listings.
What should I use for the next review step?
Use propertyUrl for the listing detail page and listingId or buildingId for stable joins in your own systems.
Responsible use
Use this Actor for lawful rental-market, research, and automation workflows. Respect Zumper's terms, the data source's access rules, and applicable privacy and platform policies. Keep downstream usage aligned with the public listing data returned by the Actor and with the scope you set in your inputs.