Zillow Rental Listings Scraper for US Markets
Pricing
Pay per usage
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
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:
| Field | Type | Description |
|---|---|---|
zpid | string | Zillow Property ID |
address | string | Full address |
streetAddress | string | Street address |
city | string | City name |
state | string | State code |
zipcode | string | ZIP code |
rent | number | Monthly rent (lowest if range) |
rentFormatted | string | Formatted rent (e.g., "$1,500/mo") |
rentMin | number | Minimum rent (for multi-unit properties) |
rentMax | number | Maximum rent |
beds | number | Number of bedrooms (0 = studio) |
baths | number | Number of bathrooms |
sqft | number | Square footage |
propertyType | string | Apartment, House, Condo, Townhouse, etc. |
amenities | array | List of amenities (pool, gym, parking, etc.) |
images | array | High-resolution photo URLs |
petPolicy | string | Pet policy description |
landlord | string | Landlord or property manager name |
url | string | Zillow listing URL |
latitude | number | Latitude coordinate |
longitude | number | Longitude coordinate |
daysOnZillow | number | Days the listing has been on Zillow |
description | string | Full listing description (truncated to 2000 chars) |
leaseTerms | string | Lease term information |
deposit | string | Security deposit amount |
floorPlans | array | Available floor plans with beds/baths/sqft/rent |
yearBuilt | number | Year the property was built |
rentZestimate | number | Zillow's estimated rental value |
nearbySchools | array | Nearby schools with ratings |
walkScore | number | Walk Score (0-100) |
transitScore | number | Transit Score (0-100) |
bikeScore | number | Bike Score (0-100) |
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
locations | array | ["los-angeles-ca"] | Locations to search (Zillow slug format) |
minRent | integer | 0 | Minimum monthly rent filter |
maxRent | integer | 0 | Maximum monthly rent filter |
beds | integer | 0 | Minimum bedrooms (0 = any including studios) |
baths | integer | 0 | Minimum bathrooms |
petFriendly | boolean | false | Only return pet-friendly listings |
maxResults | integer | 500 | Maximum listings to scrape (0 = unlimited) |
proxy | object | - | 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:
| Type | Format | Example |
|---|---|---|
| City + State | city-state | los-angeles-ca, new-york-ny |
| Multi-word city | city-name-state | san-francisco-ca, new-york-ny |
| ZIP code | zipcode | 90210, 10001 |
| Neighborhood | neighborhood-city-state | manhattan-new-york-ny |
| County | county-state | los-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
- URL Construction — Builds Zillow rental search URLs with filter parameters for each location
- Page Fetching — Uses CheerioCrawler with realistic browser headers and rate limiting
- 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)
- Filtering — Applies rent range, beds, baths, and deduplication filters
- Pagination — Automatically follows paginated results up to Zillow's limit (~25 pages)
- Charging — PPE model charges $0.006 per successfully scraped listing
Differences from General Zillow Scraper
| Feature | This Actor (Rentals) | General Zillow Scraper |
|---|---|---|
| Focus | Rentals only | Sales, rentals, sold |
| Rent fields | rent, rentMin, rentMax, rentFormatted | price (generic) |
| Pet policy | Structured extraction | Not included |
| Amenities | Keyword + structured extraction | Not included |
| Lease terms | Extracted from descriptions | Not included |
| Floor plans | Multi-unit floor plan data | Not included |
| Deposit | Security deposit extraction | Not included |
| Walk/transit scores | Included | Not included |
| Multi-location | Array input, parallel crawl | Single location |
| Pet filter | Built-in petFriendly toggle | Not 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 ApifyClientclient = 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'));
Related Actors
- Zillow Scraper — Active Zillow listings for sale
- Zillow Sold Homes Scraper — Recently sold homes
- Apartments Scraper — Apartments.com listings
- Airbnb Scraper — Short-term rental comparison
- Booking Scraper — Hotel and lodging data