Zumper Rental Listings Scraper [w/ EMAILS] Search + Details
Pricing
from $2.50 / 1,000 property listing rows
Zumper Rental Listings Scraper [w/ EMAILS] Search + Details
Zumper.com rental listings scraper — paste any city search or listing URL, get full property rows: price, beds/baths, sqft, address, photos, amenities, agent & brokerage, plus opt-in contact-email enrichment from the manager's own website. Dedup store, JSON or CSV. Pure HTTP, no browser.
Pricing
from $2.50 / 1,000 property listing rows
Rating
1.0
(1)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
4
Monthly active users
15 hours ago
Last modified
Categories
Share
All-in-one Zumper.com scraper — paste any city search URL (or a single listing URL) and get one complete row per rental listing: price, beds/baths, square footage, address, photos, amenities, pet policy, listing agent & brokerage, feed source — plus opt-in contact-email enrichment that discovers the property manager's real email from their own website.
| Input | Row(s) emitted |
|---|---|
City search URL — zumper.com/apartments-for-rent/{city}-{st}?… | N listing rows — one full property-detail object per listing, paginated automatically up to maxItems |
Single listing URL — zumper.com/apartments/{id}/{slug} | 1 listing row with the same full detail object |
City name without state — …/apartments-for-rent/toronto | Auto-resolved via Zumper's own autocomplete API, then treated as a search |
Pure HTTP (Cheerio). No Puppeteer, no Playwright, no headless Chromium, no CAPTCHA-solving service.
Why Use This Scraper?
- Full detail per row, not search-card stubs. Every row is the listing's complete detail payload — the same data Zumper renders on the property page, including photo media, amenity lists, pet policy, lease info, and the managing agent/brokerage.
- Contact-email enrichment (opt-in). Flip
enrichEmails: trueand the actor discovers a contact email for the property's manager/brokerage — first from the business's own website when the listing links one, otherwise by locating the company's domain from its name. AddscontactEmail,contactWebsite, and a detailedemailEnrichmentobject. Most Zumper scrapers on the Store don't do this. - Built-in deduplication for monitoring. Name a storage with
storeNameand re-runs skip listings you've already collected — ideal for daily new-listing alerts and lead pipelines. - Exact-result pagination. The actor replays Zumper's own internal search API with the exact query the page uses, so results match what a visitor sees — no lossy HTML card parsing.
- Cheap and fast. Runs on Cheerio with residential proxies; typical listing rows return in seconds without browser overhead.
Overview
The actor takes Zumper search or listing URLs and emits one dataset row per rental listing. Each row is the full property-detail object. Depending on the page variant Zumper serves, the core listing lives under entity.data (single-unit listings) or activeListings[0] (multi-listing/building pages) — both carry the same ~80 listing fields. Rows also include supporting blocks such as units, nearby, ratings, locationSchools, and buildingReviews when Zumper provides them.
Output is available as JSON, CSV, Excel, or via the Apify API.
Supported Inputs
Paste any mix of these in startUrls:
https://www.zumper.com/apartments-for-rent/long-beach-ca?property-types=13,21,2,14— city search with filters (price, beds, property types — any filter Zumper's UI supports survives in the URL and is honored)https://www.zumper.com/apartments-for-rent/toronto— city without a state/province suffix; the actor resolves the canonical city slug automaticallyhttps://www.zumper.com/apartments/24552762p/2-bedroom-2-bath-apartment-at-445-w-6th-st-long-beach-ca-90802— direct listing URL
Not supported: login-gated saved searches and Zumper's apply/messaging flows.
Use Cases
| Who | What they do with it |
|---|---|
| Lead-gen & proptech sales | Pull every listing in a metro with the managing agent/brokerage per property, enrich with contact emails, feed the CRM |
| Market research & rent analytics | Track asking prices, freshness (listed_on/modified_on), and inventory mix by city, week over week |
| Property managers & investors | Monitor competing rentals around specific buildings; the dedup store means each scheduled run returns only new listings |
| Relocation & rental platforms | Ingest normalized listing data (beds, baths, sqft, photos, amenities) to power search products |
How It Works
- Load the search page through a residential proxy and extract Zumper's
__PRELOADED_STATE__— the exact search query object the site itself uses (city, filters, property types). - Replay Zumper's internal search API (
maplist/search) with that query, paging through results untilmaxItemsis reached. This returns the identical result set a visitor sees. - Fetch each listing's full detail page and parse the complete property payload — ~80 fields per listing.
- Optionally enrich contacts: with
enrichEmails: true, the actor visits the property manager's own website (when the listing links one) or discovers the company domain from its name, and extracts a contact email. - Deduplicate and push: with
storeNameset, already-seen listings are skipped; everything else lands in the dataset as one row per listing.
Input Configuration
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
startUrls | array | yes | — | Zumper search or listing URLs. For city searches, include the city in the URL (e.g. long-beach-ca) |
maxItems | integer | no | 5 | Hard cap on listings scraped per run — pagination stops once reached |
maxConcurrency | integer | no | 40 | Max pages processed in parallel |
minConcurrency | integer | no | 1 | Min pages processed in parallel |
maxRequestRetries | integer | no | 30 | Retries per failed request before giving up |
maxDelay | integer | no | 15 | Max seconds to wait between requests |
storeName | string | no | null | Named key-value store for cross-run deduplication (letters, numbers, hyphens). Leave empty to disable |
enrichEmails | boolean | no | false | Opt-in contact-email discovery for each listing's manager/brokerage. Best-effort; adds contactEmail, contactWebsite, emailEnrichment |
proxy | object | no | Apify RESIDENTIAL | Residential proxies strongly recommended — datacenter IPs get blocked |
Example input
{"startUrls": ["https://www.zumper.com/apartments-for-rent/long-beach-ca?property-types=13,21,2,14"],"maxItems": 100,"enrichEmails": true,"storeName": "zumper-long-beach-monitor","proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output Overview
One row per listing. The core listing object (under entity.data or activeListings[0], see Overview) carries pricing, layout, location, media, amenities, and the managing agent/brokerage. Supporting blocks (units, nearby, ratings, locationSchools, buildingReviews, prosAndCons) appear alongside when Zumper provides them. With enrichEmails on, contactEmail / contactWebsite / emailEnrichment are added at the top level of the row.
Output Samples
Real (shortened) core listing object from a live run:
{"listing_id": 60149939,"title": "Spacious and Renovated-Quaint One-bedroom Duplex, close to Cal State Long Beach!","description": "++ PLEASE READ ENTIRE LISTING BEFORE INQUIRING++ Quaint-Quintessential Long Beach living, updated one bedroom front-duplex unit in the Zaferia District…","min_price": 2280,"max_price": 2280,"bedrooms": 1,"bathrooms": 1,"half_bathrooms": 0,"square_feet": 585,"address": "1537 Freeman Ave #NA","city": "Long Beach","state": "CA","zipcode": "90804","agent_name": "Ernst & Haas Management Co.","brokerage_name": "Ernst & Haas Management Co.","provider_url": "https://www.avail.com/l/60756121","feed_name": "avail","property_type": 13, // Zumper enum id (13 = apartment)"pets": [1, 2], // Zumper enum ids (cats, dogs)"amenities": [2, 5, 1, 3], // Zumper enum ids"building_amenities": [8, 14, 4, 1],"listed_on": 1783664864, // unix timestamp"modified_on": 1783664864,"media": [{ "media_id": 792303238, "media_type": 1, "width": 2250, "height": 3000 }// … 11 more photos]}
With enrichEmails: true, rows additionally carry:
{"contactEmail": "leasing@example-management.com","contactWebsite": "https://www.example-management.com","emailEnrichment": { /* discovery method, source website, all candidate emails found */ }}
Key Output Fields
Identity & pricing — listing_id, title, description, min_price, max_price, currency_code, listing_status, lease_type
Layout — bedrooms, bathrooms, half_bathrooms, square_feet, property_type
Location — address, city, state, zipcode, lat, lng
Contact — agent_name, brokerage_name, provider_url (the feed/manager's own listing link), plus contactEmail / contactWebsite when enrichment is on
Media & features — media (photo objects with ids and dimensions), amenities, building_amenities, pets, lease_terms
Freshness — listed_on, modified_on, created_on (unix timestamps)
Some fields use Zumper's internal numeric enums (e.g.
property_type: 13, amenity ids). They're stable identifiers — map them once and they hold across runs.
Pricing
The actor is priced pay-per-event: a small amount per listing row delivered, plus standard Apify platform usage (compute + residential proxy). maxItems is enforced strictly, so a run never delivers more listings than you asked for.
FAQ
Does it get blocked? Runs use Apify residential proxies by default and replay Zumper's own API with browser-equivalent headers. In testing, runs complete with a 100% request success rate. If you override the proxy config with datacenter IPs, expect 403/422 blocks.
Why do some rows nest the listing under entity.data and others under activeListings[0]?
Zumper serves two page variants — single-unit listings vs. building/multi-unit pages. The actor preserves the variant it received so no data is lost. Both carry the same core fields.
What are the numeric codes in property_type, amenities, pets?
Zumper's internal enum ids (e.g. property_type: 13 = apartment; pets: [1,2] = cats & dogs allowed). They're consistent across all listings and runs.
Can I monitor a city for new listings only?
Yes — set storeName to any name (e.g. "la-monitor"). Every listing pushed is remembered in that store; subsequent runs skip them, so scheduled runs return only new inventory.
How well does email enrichment work?
It's best-effort. When the listing links the manager's own website (via provider_url), the actor scrapes that site directly — highest hit rate. Otherwise it tries to discover the company's domain from the brokerage/agent name. Aggregator links (Zillow, RentCafe, Craigslist, etc.) are recognized and skipped rather than mis-scraped. Rows always deliver even when no email is found.
Does maxItems actually cap the output?
Yes. The crawler stops enqueuing listings and stops paginating the moment the cap is reached — verified: maxItems: 3 returns exactly 3 rows.
Which countries does it cover? Everything Zumper lists — the US and Canada (Canadian cities like Toronto resolve automatically).
Is scraping Zumper legal? The actor reads only publicly visible listing data — the same pages any logged-out visitor sees. See the Disclaimer below; compliance with local regulations and Zumper's ToS is the user's responsibility.
Support
- For issues or feature requests, use the Issues tab of this actor.
- For further assistance, contact the author:
- Website: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
Additional Services
Need a custom pipeline around this data — merged multi-portal feeds (Zumper + Apartments.com + Redfin), scheduled delivery to your database/Sheets, or a bespoke enrichment step? Contact the author above; custom actors and integrations are available.
Explore More Scrapers
- Apartments.com Scraper (US + Canada, w/ EMAILS)
- Redfin Scraper — Listings + Agent Database (Email & Phone)
- Realtor.com Agents Scraper
- Zillow Agents Scraper (w/ Email)
- Crexi Commercial Real Estate Scraper
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Zumper, Inc. or its subsidiaries (including PadMapper). All trademarks mentioned are the property of their respective owners.
The scraper extracts only publicly visible data from Zumper.com — rental listings as they appear to any logged-out visitor. No login, no CAPTCHA solving, no private-endpoint credentials. Use of this Actor must comply with Zumper's Terms of Service and all applicable laws, including data-protection regulations (GDPR, CCPA, etc.). Users must:
- Respect rate limits and avoid overloading Zumper's infrastructure
- Not use scraped data to violate individual privacy
- Use contact-email enrichment only for lawful B2B outreach in compliance with applicable anti-spam laws (CAN-SPAM, CASL, GDPR)
- Not republish scraped content in violation of copyright
We do not store any scraped data; the Actor returns it directly to your Apify dataset for your authorized use.
SEO Keywords
zumper scraper, zumper rental listings scraper, zumper apartment scraper, zumper data extraction, zumper API alternative, zumper bulk export, rental listings scraper, apartment listings data, rental market data, property manager leads, brokerage contact emails, real estate lead generation, rent price analytics, rental inventory monitoring, US rentals scraper, Canada rentals scraper, apartments for rent data, zumper JSON export, zumper CSV export, proptech data, web scraping, Apify scraper, no-code scraper