Zumper Rental Listings Scraper [w/ EMAILS] Search + Details avatar

Zumper Rental Listings Scraper [w/ EMAILS] Search + Details

Pricing

from $2.50 / 1,000 property listing rows

Go to Apify Store
Zumper Rental Listings Scraper [w/ EMAILS] Search + Details

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

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

15 hours ago

Last modified

Share

Zumper Scraper logo

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.

InputRow(s) emitted
City search URLzumper.com/apartments-for-rent/{city}-{st}?…N listing rows — one full property-detail object per listing, paginated automatically up to maxItems
Single listing URLzumper.com/apartments/{id}/{slug}1 listing row with the same full detail object
City name without state…/apartments-for-rent/torontoAuto-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: true and 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. Adds contactEmail, contactWebsite, and a detailed emailEnrichment object. Most Zumper scrapers on the Store don't do this.
  • Built-in deduplication for monitoring. Name a storage with storeName and 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 automatically
  • https://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

WhoWhat they do with it
Lead-gen & proptech salesPull every listing in a metro with the managing agent/brokerage per property, enrich with contact emails, feed the CRM
Market research & rent analyticsTrack asking prices, freshness (listed_on/modified_on), and inventory mix by city, week over week
Property managers & investorsMonitor competing rentals around specific buildings; the dedup store means each scheduled run returns only new listings
Relocation & rental platformsIngest normalized listing data (beds, baths, sqft, photos, amenities) to power search products

How It Works

How the Zumper scraper works

  1. 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).
  2. Replay Zumper's internal search API (maplist/search) with that query, paging through results until maxItems is reached. This returns the identical result set a visitor sees.
  3. Fetch each listing's full detail page and parse the complete property payload — ~80 fields per listing.
  4. 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.
  5. Deduplicate and push: with storeName set, already-seen listings are skipped; everything else lands in the dataset as one row per listing.

Input Configuration

FieldTypeRequiredDefaultNotes
startUrlsarrayyesZumper search or listing URLs. For city searches, include the city in the URL (e.g. long-beach-ca)
maxItemsintegerno5Hard cap on listings scraped per run — pagination stops once reached
maxConcurrencyintegerno40Max pages processed in parallel
minConcurrencyintegerno1Min pages processed in parallel
maxRequestRetriesintegerno30Retries per failed request before giving up
maxDelayintegerno15Max seconds to wait between requests
storeNamestringnonullNamed key-value store for cross-run deduplication (letters, numbers, hyphens). Leave empty to disable
enrichEmailsbooleannofalseOpt-in contact-email discovery for each listing's manager/brokerage. Best-effort; adds contactEmail, contactWebsite, emailEnrichment
proxyobjectnoApify RESIDENTIALResidential 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 & pricinglisting_id, title, description, min_price, max_price, currency_code, listing_status, lease_type

Layoutbedrooms, bathrooms, half_bathrooms, square_feet, property_type

Locationaddress, city, state, zipcode, lat, lng

Contactagent_name, brokerage_name, provider_url (the feed/manager's own listing link), plus contactEmail / contactWebsite when enrichment is on

Media & featuresmedia (photo objects with ids and dimensions), amenities, building_amenities, pets, lease_terms

Freshnesslisted_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

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

⚠️ 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