Zillow Rental Listings Scraper for US Markets avatar

Zillow Rental Listings Scraper for US Markets

Pricing

Pay per usage

Go to Apify Store
Zillow Rental Listings Scraper for US Markets

Zillow Rental Listings Scraper for US Markets

Scrape Zillow rental listings for any US city, zip, or neighborhood. Extract monthly rent, beds, baths, sqft, amenities, pet policies, images, and landlord info. Filter by rent range, bedrooms, bathrooms, and pet-friendliness. Handles pagination and anti-bot detection.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ricardo Akiyoshi

Ricardo Akiyoshi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Categories

Share

Zillow Rental Listings Scraper

Scrape Zillow rental listings for any US city, zip code, or neighborhood. Purpose-built for the rental market with rental-specific extraction: monthly rent, pet policies, amenities, lease terms, floor plans, landlord info, and more.

This actor is separate from the general Zillow scraper — it is optimized exclusively for rental properties with rental-specific fields and filters that the sales scraper does not provide.

Features

  • Multi-location search — scrape rentals across multiple cities or zip codes in one run
  • Rental-specific data — rent ranges, pet policies, amenities, lease terms, security deposits, floor plans
  • Smart filtering — filter by rent range, bedrooms, bathrooms, and pet-friendliness
  • 4-tier extraction__NEXT_DATA__ JSON, Apollo GraphQL cache, inline scripts, CSS selectors
  • Anti-bot handling — CAPTCHA detection, rate limiting, realistic browser headers, proxy support
  • Automatic pagination — follows Zillow's paginated results up to the platform limit (~1000 listings)
  • Deduplication — skips duplicate listings by ZPID and address

Output Fields

Each scraped rental listing includes:

FieldTypeDescription
zpidstringZillow Property ID
addressstringFull address
streetAddressstringStreet address
citystringCity name
statestringState code
zipcodestringZIP code
rentnumberMonthly rent (lowest if range)
rentFormattedstringFormatted rent (e.g., "$1,500/mo")
rentMinnumberMinimum rent (for multi-unit properties)
rentMaxnumberMaximum rent
bedsnumberNumber of bedrooms (0 = studio)
bathsnumberNumber of bathrooms
sqftnumberSquare footage
propertyTypestringApartment, House, Condo, Townhouse, etc.
amenitiesarrayList of amenities (pool, gym, parking, etc.)
imagesarrayHigh-resolution photo URLs
petPolicystringPet policy description
landlordstringLandlord or property manager name
urlstringZillow listing URL
latitudenumberLatitude coordinate
longitudenumberLongitude coordinate
daysOnZillownumberDays the listing has been on Zillow
descriptionstringFull listing description (truncated to 2000 chars)
leaseTermsstringLease term information
depositstringSecurity deposit amount
floorPlansarrayAvailable floor plans with beds/baths/sqft/rent
yearBuiltnumberYear the property was built
rentZestimatenumberZillow's estimated rental value
nearbySchoolsarrayNearby schools with ratings
walkScorenumberWalk Score (0-100)
transitScorenumberTransit Score (0-100)
bikeScorenumberBike Score (0-100)

Input Parameters

ParameterTypeDefaultDescription
locationsarray["los-angeles-ca"]Locations to search (Zillow slug format)
minRentinteger0Minimum monthly rent filter
maxRentinteger0Maximum monthly rent filter
bedsinteger0Minimum bedrooms (0 = any including studios)
bathsinteger0Minimum bathrooms
petFriendlybooleanfalseOnly return pet-friendly listings
maxResultsinteger500Maximum listings to scrape (0 = unlimited)
proxyobject-Apify proxy config (residential recommended)

Example Input

{
"locations": ["los-angeles-ca", "san-francisco-ca", "90210"],
"minRent": 1000,
"maxRent": 3000,
"beds": 1,
"baths": 1,
"petFriendly": true,
"maxResults": 200,
"proxy": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Example Output

{
"zpid": "12345678",
"address": "123 Main St, Los Angeles, CA 90012",
"streetAddress": "123 Main St",
"city": "Los Angeles",
"state": "CA",
"zipcode": "90012",
"rent": 2100,
"rentFormatted": "$2,100/mo",
"rentMin": 2100,
"rentMax": 2400,
"beds": 2,
"baths": 1,
"sqft": 950,
"propertyType": "Apartment",
"amenities": [
"Dishwasher",
"Air Conditioning",
"Hardwood Floors",
"In-Unit Laundry",
"Parking",
"Pool",
"Gym"
],
"images": [
"https://photos.zillowstatic.com/fp/photo1.jpg",
"https://photos.zillowstatic.com/fp/photo2.jpg"
],
"petPolicy": "Dogs & Cats Allowed (deposit: $500)",
"landlord": "Greystar Property Management",
"url": "https://www.zillow.com/homedetails/123-Main-St/12345678_zpid/",
"latitude": 34.0522,
"longitude": -118.2437,
"daysOnZillow": 7,
"description": "Beautiful 2BR apartment in downtown LA...",
"leaseTerms": "12 month lease",
"deposit": "$2,100",
"floorPlans": [
{
"name": "The Urban",
"beds": 2,
"baths": 1,
"sqft": 950,
"rent": 2100,
"rentFormatted": "$2,100/mo",
"available": 3
}
],
"yearBuilt": 2019,
"rentZestimate": 2050,
"walkScore": 92,
"transitScore": 85,
"bikeScore": 78,
"scrapedAt": "2026-03-01T12:00:00.000Z",
"source": "zillow-rentals",
"searchLocation": "los-angeles-ca"
}

Location Format

Use Zillow's URL-friendly slug format for locations:

TypeFormatExample
City + Statecity-statelos-angeles-ca, new-york-ny
Multi-word citycity-name-statesan-francisco-ca, new-york-ny
ZIP codezipcode90210, 10001
Neighborhoodneighborhood-city-statemanhattan-new-york-ny
Countycounty-statelos-angeles-county-ca

Tip: search on zillow.com/rentals and copy the location slug from the URL.

Proxy Configuration

Zillow aggressively blocks datacenter IP addresses. Residential proxies are strongly recommended for reliable scraping.

{
"proxy": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Without proxies, expect high block rates and incomplete results.

How It Works

  1. URL Construction — Builds Zillow rental search URLs with filter parameters for each location
  2. Page Fetching — Uses CheerioCrawler with realistic browser headers and rate limiting
  3. Data Extraction — Tries 4 strategies in priority order:
    • __NEXT_DATA__ (Next.js server-side data — most complete)
    • hdpApolloPreloadedData (Apollo GraphQL cache — detail pages)
    • Inline script state objects (window.__INITIAL_STATE__, etc.)
    • CSS selectors (fallback for when JSON blobs are unavailable)
  4. Filtering — Applies rent range, beds, baths, and deduplication filters
  5. Pagination — Automatically follows paginated results up to Zillow's limit (~25 pages)
  6. Charging — PPE model charges $0.006 per successfully scraped listing

Differences from General Zillow Scraper

FeatureThis Actor (Rentals)General Zillow Scraper
FocusRentals onlySales, rentals, sold
Rent fieldsrent, rentMin, rentMax, rentFormattedprice (generic)
Pet policyStructured extractionNot included
AmenitiesKeyword + structured extractionNot included
Lease termsExtracted from descriptionsNot included
Floor plansMulti-unit floor plan dataNot included
DepositSecurity deposit extractionNot included
Walk/transit scoresIncludedNot included
Multi-locationArray input, parallel crawlSingle location
Pet filterBuilt-in petFriendly toggleNot available

Rate Limits & Anti-Bot

  • Max 12 requests per minute (conservative for Zillow)
  • Max 2 concurrent requests
  • Random delays between requests (100-800ms)
  • Automatic CAPTCHA and block detection
  • Graceful degradation (saves partial results on block)

Cost

Pay-per-event pricing: $0.006 per listing scraped.

Example costs:

  • 100 listings = $0.60
  • 500 listings = $3.00
  • 1,000 listings = $6.00

Plus Apify platform compute costs (~$0.25-0.50 per 1000 pages for residential proxies).

Changelog

v1.0.0 (2026-03-01)

  • Initial release
  • Multi-location rental search
  • 4-tier extraction strategy
  • Pet policy, amenity, lease term, and floor plan extraction
  • Smart rent range, beds/baths, and pet-friendly filtering
  • Automatic pagination and deduplication

Integration — Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("sovereigntaylor/zillow-rentals-scraper").call(run_input={
"searchTerm": "zillow rentals",
"maxResults": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item.get('title', item.get('name', 'N/A'))}")

Integration — JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('sovereigntaylor/zillow-rentals-scraper').call({
searchTerm: 'zillow rentals',
maxResults: 50
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => console.log(item.title || item.name || 'N/A'));