Zumper Scraper - US Apartments & Rentals Data avatar

Zumper Scraper - US Apartments & Rentals Data

Pricing

from $0.40 / 1,000 listings

Go to Apify Store
Zumper Scraper - US Apartments & Rentals Data

Zumper Scraper - US Apartments & Rentals Data

Scrape Zumper rentals by city: full price/bed/bath/sqft ranges, address, neighborhood, amenities, pets, photos, agent and brokerage contact, ratings and dates. Fast, HTTP-first, no browser.

Pricing

from $0.40 / 1,000 listings

Rating

0.0

(0)

Developer

Ihor Bielievskiy

Ihor Bielievskiy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Zumper Scraper - US Apartments & Rentals

Pull rental listings from Zumper by city. For every listing you get the full price and bedroom/bathroom ranges, square footage, address with neighborhood and zip, amenities, pet policy, photos, the listing agent and brokerage with a phone number, ratings, and the key dates - everything Zumper ships in its own search payload.

No headless browser. Each city page embeds its complete search state as inline JSON, and the actor parses that directly, so it is fast and cheap to run. Requests use a real Chrome TLS fingerprint (via curl_cffi) to look like a browser.

What you can scrape

  • Apartments, houses, condos, or rooms for rent in any US city Zumper covers.
  • Filter by price, bedrooms, bathrooms, and pet-friendliness without writing a single Zumper URL filter.
  • Cap results per city so a multi-city run samples evenly instead of draining the first city.

Input

FieldTypeDescription
startUrlsarrayZumper for-rent URLs, e.g. https://www.zumper.com/apartments-for-rent/san-francisco-ca. Houses/condos/rooms paths and Zumper's own path filters are accepted.
citySlugsarrayCity slugs like san-francisco-ca, austin-tx (the part after the property-type path). Combined with the property type below.
propertyTypestringapartments (default), houses, condos, or rooms. Decides the URL path built from each city slug. Ignored for full startUrls.
maxItemsintegerStop after this many listings across all cities. 0 = no limit. Default 100.
maxItemsPerCityintegerCap listings per city URL. 0 = no per-city cap.
minPrice / maxPriceintegerKeep listings whose monthly rent range overlaps this band.
minBeds / maxBedsintegerBedroom range filter (0 = studio).
minBathsintegerMinimum bathrooms.
petsAllowedbooleanKeep only listings that allow at least one pet type.
proxyConfigurationobjectApify Proxy. Datacenter is usually enough; switch to residential if you start seeing blocks.
impersonatestringcurl_cffi browser fingerprint: chrome (default), chrome131, chrome124, safari17_0.

Provide at least one of startUrls or citySlugs. Pagination is automatic - the actor walks ?page=N until a city runs out of listings. Price/bed/bath/pet filters are applied after fetch, so pagination and counts stay correct.

Example input:

{
"citySlugs": ["san-francisco-ca", "austin-tx"],
"propertyType": "apartments",
"minPrice": 2000,
"maxPrice": 4000,
"minBeds": 1,
"petsAllowed": true,
"maxItemsPerCity": 200,
"maxItems": 500
}

Output

One dataset item per rental listing:

{
"listing_id": 58574913,
"price_min": 3020.0,
"price_max": 18280.0,
"previous_price": null,
"beds": 0.0,
"max_beds": 3.0,
"baths": 1.0,
"max_baths": 2.0,
"min_square_feet": 425,
"max_square_feet": 1818,
"floorplan_count": 54,
"address": "149 San Francisco New Montgomery St",
"building_name": "Blueground San Francisco",
"building_id": 1717500,
"city": "San Francisco",
"state": "CA",
"zipcode": "94105",
"neighborhood_id": 247,
"neighborhood_name": "SOMA",
"timezone": "America/Los_Angeles",
"lat": 37.78714246632131,
"lng": -122.39963719035394,
"property_type": 2,
"listing_type": 1,
"listing_status": 1,
"lease_type": 1,
"min_lease_days": 30,
"max_lease_days": null,
"leasing_fee": 0.0,
"has_fees": false,
"promotion": 100,
"amenities": [32, 1, 2, 5, 6],
"amenity_tags": ["Smoke Detector", "Stove", "Blender"],
"building_amenities": [8, 13, 11],
"building_amenity_tags": ["Elevator", "Fitness Center"],
"features": [35, 14, 78],
"pets": [1, 3, 2],
"agent_id": 14665954,
"agent_name": "Blueground Us",
"brokerage_id": 160302,
"brokerage_name": "BLUEGROUND",
"phone": "(415) 964-3025",
"is_messageable": true,
"is_featured": false,
"rating": 9.6,
"external_rating": null,
"integrated_tour_types": [],
"date_available": null,
"created_on": "2024-07-31T19:43:57+00:00",
"modified_on": "2026-06-23T18:05:45+00:00",
"listed_on": "2026-06-24T05:00:01+00:00",
"short_description": "...",
"image_ids": [761884337, 761884338],
"photos": [
"https://img.zumpercdn.com/761884337/1280x960?auto=format",
"https://img.zumpercdn.com/761884338/1280x960?auto=format"
],
"url": "https://www.zumper.com/apartment-buildings/1717500/blueground-san-francisco-soma-san-francisco-ca"
}

Field notes:

  • price_min/price_max, beds/max_beds, baths/max_baths, and the square-foot fields describe the building's advertised range across its floorplans.
  • amenity_tags and building_amenity_tags are the human-readable labels; amenities/building_amenities/features/pets/integrated_tour_types are Zumper's internal numeric codes for the same things, kept so you can match listings without parsing text.
  • photos are ready-to-use Zumper CDN image URLs built from image_ids (1280x960). image_ids is kept so you can request other sizes.
  • created_on/modified_on/listed_on are ISO-8601 UTC timestamps.
  • Listings are deduplicated by listing_id across all cities.

Unresolvable inputs and fetch/parse failures are written as typed error items ({ "error": ..., "source_url": ..., "detail": ... }) so a single bad city or a markup change never silently empties your run. The error field is one of unsupported_url, not_found (dead URL or city slug), blocked (anti-bot challenge), fetch_failed (transient network or HTTP error), or parse_failed (a listing did not match the expected shape). If every source fails and zero listings are scraped, the run is marked FAILED with a status message instead of reporting a green, empty success, so schedulers and monitors are not deceived.

Billing

Pay-per-result: one listing charge event per stored listing. Listings removed by your filters and error records are never charged.

Notes

  • Listing data lives in the page's window.__PRELOADED_STATE__ blob under currentSearch.listables.listables. If Zumper changes that structure, the actor emits an explicit parse error rather than empty results.
  • Network calls have a 30s timeout and bounded retries with exponential backoff and jitter; 403/429/redirects are treated as blocks and retried with backoff.
  • The for-rent listing paths are allowed by Zumper's robots.txt for the default user agent.