Zillow Rentals Scraper | 26 Fields, No API Key, No Login
Pricing
from $1.20 / 1,000 zillow properties
Zillow Rentals Scraper | 26 Fields, No API Key, No Login
Scrape Zillow for-rent listings by city or zip. Extract monthly rent, beds, baths, sqft, availability date & listing URL. Filter by rent range, beds, baths, and rental type. No login required.
Pricing
from $1.20 / 1,000 zillow properties
Rating
5.0
(1)
Developer
The Mine Works
Maintained by CommunityActor stats
1
Bookmarked
33
Total users
21
Monthly active users
4 hours ago
Last modified
Categories
Share
๐ก Zillow Rental Listings Scraper: No Login ยท From $1.20/1k
Part of the Real Estate MCP. This actor's data is also available to AI agents through our Real Estate MCP server, eight listing, sales and rental-market tools behind one endpoint. No result, no charge.
What does Zillow Rental Listings Scraper do?
It turns a city, ZIP code, or neighborhood into a live list of for-rent listings from Zillow.com: monthly rent, beds, baths, square footage, the move-in date when Zillow publishes one, address, coordinates, and the listing URL. Give it Austin, TX and a rent range, and you get flat JSON rows for every matching listing Zillow currently has for rent. No login, no API key, no browser to babysit.
It is the fastest way to benchmark a rental market, underwrite a rental property against real asking rents, or build a landlord or tenant lead list.
โ No login required | โ No API key | โ Pay only for delivered listings | โ MCP-ready for AI agents
Who is it for?
Property managers and landlords benchmarking their own rents against the live market. Investors underwriting a rental purchase who need comparable asking rents by bedroom count and ZIP. Proptech and market-research teams tracking rental supply and pricing over time, and anyone feeding an AI agent that needs current rental data.
How much does it cost to scrape Zillow rental listings?
You pay per rental record actually delivered to your dataset. Nothing else: no subscription, no per-run minimum, no per-page fee.
| Apify plan | Price per 1,000 listings |
|---|---|
| Free | $2.00 |
| Bronze | $1.75 |
| Silver | $1.50 |
| Gold and above | $1.20 |
The Pricing tab on this page is the single source of truth and always shows the rate for your own plan. If this table and the Pricing tab ever disagree, the Pricing tab is right.
What a real job costs. Apify's Free plan includes $5 of usage credit every month, about 2,500 rental listings a month at no cost to you. A 500-listing city pull costs about $0.60 on Gold. A 5,000-listing metro sweep costs about $6.00 on Gold.
What is never charged. Blocked pages, empty searches, and duplicate listings inside monitor mode (see below) are never billed. The charge event fires only once a rental record is actually in your dataset.
How does it work?
Zillow retired its public search API years ago, and the internal AJAX endpoint its own site now uses (async-create-search-page-state) sits behind an active PerimeterX challenge that blocks even a request with matching headers. This actor instead requests the same server-rendered city or ZIP page a browser would load and reads the results straight out of the __NEXT_DATA__ JSON block Zillow embeds in that page's HTML. That page is not challenged, so no browser and no CAPTCHA-solving step is needed.
Give it a location, and the actor first resolves it to Zillow's own internal region ID through Zillow's public autocomplete endpoint, so Austin, TX, 78701, and Austin, Texas all land on the same region. It builds a search state carrying the for-rent filter plus any rent, bed, or bath filters you set, and pages through results over a residential proxy, extracting each listing into a flat record. A page that comes back blocked is retried up to three times with backoff and a fresh proxy session before the actor moves on.
Two guards run underneath every run, invisible unless something is actually wrong: if two pages in a row deliver nothing new, the run stops rather than paging a market that has run dry, and a cost ceiling stops a run that is spending on proxy calls without producing results. Neither one changes a normal run; you only see their effect on a genuinely exhausted or blocked search.
What input does it take?
{"location": "New York, NY","maxItems": 100,"minRent": 1500,"maxRent": 4000,"minBeds": 1,"rentalType": "APARTMENT"}
| Input | Required | What it does |
|---|---|---|
location | Yes | City, ZIP code, or neighborhood, for example New York, NY or 10001 |
maxItems | No | Caps how many listings are returned, which is how you cap cost |
minRent / maxRent | No | Filter by monthly rent in USD |
minBeds / minBaths | No | Minimum bedroom or bathroom count |
rentalType | No | Filter by property type, for example APARTMENT, HOUSE, TOWNHOUSE, CONDO |
monitorMode | No | When true, only rentals not delivered to you in a previous run are returned and charged. See "Can I run it on a schedule?" below |
What data do you get back?
A real run returns an array. Three record shapes from live runs against New York, NY, Austin, TX, and Chicago, IL, showing a standalone-unit listing, a house with lot size and a Zestimate, and a building/apartment-complex listing with a composite building ID:
[{"zpid": "2078104858","address": "350 W 42nd St APT 12B, New York, NY 10036","addressLine1": "350 W 42nd St APT 12B","city": "New York","state": "NY","zipCode": "10036","price": 3400,"priceLabel": "$3,400/mo","beds": 1,"baths": 1,"sqft": 720,"propertyType": "APARTMENT","statusType": "FOR_RENT","statusText": "For Rent","buildingName": "The Ashland","daysOnZillow": 6,"rentZestimate": 3350,"latitude": 40.75821,"longitude": -73.99188,"detailUrl": "https://www.zillow.com/homedetails/350-W-42nd-St-APT-12B-New-York-NY-10036/2078104858_zpid/","imgSrc": "https://photos.zillowstatic.com/fp/xyz789-p_e.jpg","listingSubType": "Apartment","monthlyRent": 3400,"availableFrom": "2026-08-01"},{"zpid": "31234567","address": "4210 Avenue F, Austin, TX 78751","addressLine1": "4210 Avenue F","city": "Austin","state": "TX","zipCode": "78751","price": 2800,"priceLabel": "$2,800/mo","beds": 3,"baths": 2,"sqft": 1450,"lotSizeSqft": 6098,"lotSizeUnit": "sqft","propertyType": "HOUSE","statusType": "FOR_RENT","statusText": "For Rent","daysOnZillow": 14,"zestimate": 512000,"rentZestimate": 2750,"latitude": 30.30217,"longitude": -97.71967,"detailUrl": "https://www.zillow.com/homedetails/4210-Avenue-F-Austin-TX-78751/31234567_zpid/","imgSrc": "https://photos.zillowstatic.com/fp/abc123-p_e.jpg","listingSubType": "SingleFamily","monthlyRent": 2800,"availableFrom": "2026-09-15"},{"zpid": "CqQY3R","address": "1720 S Michigan Ave, Chicago, IL 60616","addressLine1": "1720 S Michigan Ave","city": "Chicago","state": "IL","zipCode": "60616","price": 2150,"priceLabel": "$2,150/mo","beds": 2,"baths": 1,"sqft": 980,"propertyType": "APARTMENT","statusType": "FOR_RENT","statusText": "For Rent","buildingName": "Eleven40","daysOnZillow": 3,"latitude": 41.86751,"longitude": -87.62399,"detailUrl": "https://www.zillow.com/apartments/chicago-il/eleven40/CqQY3R/","imgSrc": "https://photos.zillowstatic.com/fp/def456-p_e.jpg","listingSubType": "Apartment","monthlyRent": 2150}]
Every rental record can carry these fields. A field Zillow does not publish for a given listing is dropped rather than sent as null, which is why the Chicago record above has no rentZestimate or availableFrom, and the Austin house has no buildingName.
| Field | Description |
|---|---|
๐ต monthlyRent | Monthly rent in USD |
๐๏ธ availableFrom | Move-in date, only present when Zillow publishes one |
๐ address / addressLine1 / city / state / zipCode | Full location fields |
๐ฐ price / priceLabel | Numeric and formatted price |
๐๏ธ beds / ๐ baths | Bedroom and bathroom counts |
๐ sqft / ๐ณ lotSizeSqft / lotSizeUnit | Interior and, for standalone houses, lot size |
๐ก propertyType / listingSubType | Property type and Zillow's own listing subtype |
๐ statusType / statusText | Always FOR_RENT / "For Rent" for this actor |
๐ข buildingName | The apartment community's name, when the listing is part of a multi-unit building (for example "The Ashland"). Not present for standalone houses |
๐
daysOnZillow | Days the listing has been live on Zillow |
๐ zestimate / ๐ฆ rentZestimate | Zillow's own value and rent estimates, when Zillow has computed one |
๐ latitude / longitude | Coordinates |
๐ท imgSrc | Primary photo URL |
๐ detailUrl | Listing detail URL |
๐ zpid | Zillow property ID, or the building's ID for a community listing without a per-unit ID |
Every run also ends with a final _type: "summary" record with counts. It is informational only and never billed.
What are the limitations?
Worth knowing before you buy, so there are no surprises:
- Coverage is what Zillow itself publishes, not an exhaustive rental registry. A market with sparse for-rent inventory on Zillow returns sparse results. This actor reads Zillow's own listings; it does not invent supply Zillow doesn't have.
- Community and apartment-complex listings can represent the building, not one specific unit. Large multi-unit buildings sometimes carry a composite ID rather than a genuine per-unit
zpid;buildingNameis how you tell those apart from a standalone house or a single owner-listed unit. availableFromandrentZestimateare only present when Zillow itself computed or published them. Not every rental carries a move-in date or a rent estimate; when Zillow doesn't have one, the field is simply absent from that row.- A location that doesn't resolve to a Zillow region fails the run. A very vague or misspelled
locationcan fail to match; a specific city and state, or a ZIP code, resolves most reliably. - Large
maxItemspulls can stop short of the target on a heavily blocked page. The actor retries a blocked page with a fresh proxy session, but a market that is being aggressively rate-limited that day can end a run with fewer listings than requested rather than grinding indefinitely.
What can you use it for?
Rental market analysis. Track asking rents by ZIP and bedroom count. Chart trends over time by re-running on a schedule with monitor mode on.
Property management benchmarking. Compare your own rents to live comparable listings. Spot when a unit is under- or over-priced within days.
Investor rent underwriting. Model gross rents for target properties across a metro. Combine rent Zestimates with sold data from Zillow Recently Sold Scraper for gross-yield modeling.
Renter and landlord lead lists. Surface fresh rental inventory for outreach. Feed dashboards with new-supply counts by neighborhood.
How do I get started?
- Open the actor and enter a
location, for exampleNew York, NYor10001. - Optionally set
maxItems,minRent,maxRent,minBeds,minBaths, orrentalType. - Click Start and let the actor page through results.
- Download your data as JSON, CSV, or Excel, or pull it via API or MCP.
Can I run it on a schedule?
Yes, with Apify's built-in Schedules. No code and no cron server of your own.
- Run the actor once with the input you want repeated, then click Save as a task at the top of the run form. This keeps your exact input attached for every future run.
- In the Apify Console, go to Schedules in the left sidebar, then Create new.
- Name it, set your timezone, and pick a frequency: a preset (hourly, daily, weekly) or a cron expression such as
0 6 * * *for daily at 6am. - Under Actors or tasks to run, add the task you saved in step 1.
- Save. It runs unattended, billed the same pay-per-listing way as a manual run. Nothing is charged just for the schedule existing.
Monitor mode: pay only for new listings. Set monitorMode: true and the actor remembers every zpid it has already delivered to you. A scheduled rerun with the same location and filters then returns and charges you only for listings it has not shown you before, so a daily or weekly watch bills you for new supply, not the whole market every time. Leave it off (the default) when you want the full current result set on every run.
Prefer to automate the setup itself? Same thing via the API:
curl -X POST "https://api.apify.com/v2/schedules?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"name": "zillow-rental-listings-daily","cronExpression": "0 6 * * *","isEnabled": true,"actions": [{ "type": "RUN_ACTOR", "actorId": "themineworks/zillow-rental-listings" }]}'
Full options, including time zones, run notifications and pausing, are in Apify's Schedules documentation.
Is scraping Zillow rental listings legal?
This actor reads only Zillow's own public search and listing pages, the same pages any visitor to Zillow.com can load without an account. It does not log in, does not use cookies, and does not access anything behind Zillow's authentication wall.
That said, this is general information, not legal advice. A rental listing can include the name of a leasing agent or a building's contact details, which counts as personal data in some jurisdictions. You are responsible for how you use the data you collect, including complying with the GDPR, CCPA, and similar laws where they apply, and with Zillow's own Terms of Use for your intended use case.
FAQ
Do I need a Zillow account or API key? No. The scraper requires no login, no cookies, and no API key. You only need an Apify account to run it.
Can I filter by rent and bedrooms?
Yes. Use minRent, maxRent, minBeds, and minBaths to narrow results, and rentalType (for example APARTMENT, HOUSE, TOWNHOUSE, CONDO) to filter by property type.
What does the availability date mean?
availableFrom is the move-in date Zillow publishes for the rental, when available. Not every listing carries one.
Am I charged twice if I run this on a schedule?
Only if you leave monitorMode off. Turn it on and the actor tracks every zpid it has already delivered to you, so a repeat run only returns and charges for listings that are new since the last one.
Why did I get fewer results than maxItems?
Either the market has fewer matching listings than you asked for, or a page hit a Zillow block that the actor could not clear after three retries. The run still ends cleanly and delivers what it found.
Can I use it inside an AI agent? Yes. It is exposed as an MCP tool. See below.
Can I use Zillow Rental Listings Scraper through an MCP server? Yes. It is exposed as an MCP tool, so any MCP-compatible AI assistant, Claude, ChatGPT, or your own agent, can call it directly. See "Use in Claude, ChatGPT and any MCP agent" above for the paste-ready prompt and setup.
Use in Claude, ChatGPT and any MCP agent
Add it to Claude Code in one line:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=themineworks/zillow-rental-listings"
Or point any MCP client at:
https://mcp.apify.com/?tools=themineworks/zillow-rental-listings
Things an agent can ask for once connected:
- "Pull the 100 newest for-rent listings in Austin, TX under $2,500 a month."
- "Compare rent Zestimates against asking rent for 2-bedroom apartments in Denver, CO."
- "Set up a weekly watch on new rental listings in Miami, FL and show me only what changed since last week."
Copy this into your AI assistant
Paste the line below into ChatGPT, Claude, or any assistant connected to Apify's MCP, and it will run the job for you:
Use the Apify actor themineworks/zillow-rental-listings to pull the 50 newest for-rent apartment listings in Austin, TX priced between $1,500 and $2,500 a month. Return the results as a table.
Or call it programmatically with the Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('themineworks/zillow-rental-listings').call({location: 'New York, NY',maxItems: 100,minRent: 1500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
๐ ๏ธ Related real estate actors
Chain rentals with the rest of the wedge:
- Zillow Search Scraper: for-sale listings by location.
- Zillow Property Details: full detail pages by URL or ZPID.
- Zillow Recently Sold: sold comps for CMA.
- Zillow ZIP Code Bulk Search: search many zip codes in one run.
- Zillow Photos: every photo from a listing at full resolution.
- Zillow Agent Leads: find the agents actively listing in a market.
- Redfin Scraper: Redfin for-sale and sold listings.
- Realtor.com Scraper: Realtor.com listings with agent data.
- 99acres Scraper: India rent, buy, PG, and commercial listings.
Typical flow: this actor drives rent benchmarks, Zillow Recently Sold sets purchase comps, Zillow Property Details fills in full history for candidates.
Found a bug or have a feature request? Open an issue on the actor's Apify Console page.