Zillow Rentals Scraper | 26 Fields, No API Key, No Login avatar

Zillow Rentals Scraper | 26 Fields, No API Key, No Login

Pricing

from $1.20 / 1,000 zillow properties

Go to Apify Store
Zillow Rentals Scraper | 26 Fields, No API Key, No Login

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

The Mine Works

Maintained by Community

Actor stats

1

Bookmarked

58

Total users

28

Monthly active users

a day ago

Last modified

Share

540 Austin rentals in 75 seconds: a recorded run returned 540 Zillow rental listings for Austin, TX in 75 seconds

From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with nearly 139,000 runs across our actors. This actor ranks #2 for "zillow rental" in Apify Store search.

Why choose this actor?

  • A city's rental market in about a minute. A recorded run returned 540 for-rent listings in Austin, TX in 75 seconds at 512 MB, each with the address, coordinates and listing link. No Zillow account, no API key and no browser.
  • A rent on every row you pay for. In that run, 535 of the 540 rows carried a monthly rent. The other 5 showed "Contact Landlord" on Zillow; they were delivered so you see the whole market, and they were not charged.
  • Apartment communities priced by bedroom count. Zillow shows a community as one card with no single price. This actor turns it into a units list with the starting rent for each bedroom count, the rent range, and how many units are available, so a community sorts and filters on rent like any single rental.

Run it on Apify

Part of The Mine Works Real estate family: Zillow Sold Comps Scraper, India Real Estate MCP, Housing.com Scraper, MagicBricks Scraper, Zillow Property Scraper, 99acres Scraper.

Try it in one minute

Paste this into the input's JSON tab and start the run. It returns 10 current rentals in Austin, TX in a few seconds (a recorded 10 listing run for Denver, CO took 4 seconds).

{
"location": "Austin, TX",
"maxItems": 10
}

location takes a city and state ("Austin, TX", "Santa Monica, CA"), a ZIP code ("10001"), or a neighborhood name. The actor looks it up with Zillow's own location search and uses the first region Zillow suggests, so a specific city and state or a ZIP code works best; a vague or misspelled place can match the wrong region or none. One location per run; for several, run the actor once per location or use a saved task per market.

Apify's free plan includes $5 of credit every month, which covers about 2,500 rental listings at this actor's price (the Free plan rate of $0.002 per listing with a rent; there is no start fee).

Copy to your AI assistant

themineworks/zillow-rental-listings on Apify. Returns current for-rent listings from Zillow for one US city, ZIP code or neighborhood, with monthly rent, beds, baths, square feet, address, coordinates and, for apartment communities, the starting rent per bedroom count. Call ApifyClient("TOKEN").actor("themineworks/zillow-rental-listings").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: location (for example "Austin, TX" or "78701"). Optional: maxItems (default 100, up to 2000, but Zillow serves about 1,000 per search), minRent, maxRent (USD per month), minBeds, minBaths, rentalType ("APARTMENT", "HOUSE", "TOWNHOUSE" or "CONDO"; blank for all), monitorMode (default false; only listings not delivered in an earlier run). Listing rows have no _type field; each run adds one row with _type "summary" and, when it delivered listings, one with _type "info"; neither is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~zillow-rental-listings/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations

Key features

  • Up to 29 fields per listing. Rent, rent label, beds, baths, square feet, address in five parts, coordinates, Zillow's rent and value estimates, days on Zillow, move-in date, photo, listing link and property type. A field Zillow does not publish for a listing is left out of that row rather than sent empty.
  • Rent by bedroom count for communities. Each apartment community row has a units list (one entry per bedroom count with its starting rent), minRent, maxRent and availableUnits.
  • Five filters sent to Zillow itself. minRent, maxRent, minBeds, minBaths and rentalType go into Zillow's own search, so a house search in a big city returns houses from the first page instead of paging past hundreds of apartment communities.
  • About 1,000 listings per search, no duplicates. The run follows Zillow's pages to the real end of the results (Zillow serves about 1,000 per search), merges a community that Zillow shows twice on one page, and never delivers or charges the same listing twice in a run.
  • Monitor mode. With monitorMode on, the actor remembers each listing it delivered to you, keyed on zpid, so a scheduled rerun delivers and charges only new supply.
  • Rows without a rent are free. A listing that shows "Call" or "Contact Landlord" instead of a price is delivered and never charged.

How to use it

Basic: one market

{
"location": "Denver, CO",
"maxItems": 200
}

With no filters, Zillow's own order puts apartment communities first in a big city, so most rows will be communities with rent by bedroom count.

Several markets

The actor reads one location per run. For several cities or ZIP codes, save one task per market, or start runs in a loop from the API:

from apify_client import ApifyClient
client = ApifyClient("TOKEN")
rows = []
for loc in ["78701", "78702", "78704"]:
run = client.actor("themineworks/zillow-rental-listings").call(run_input={"location": loc, "maxItems": 1000})
rows += client.dataset(run["defaultDatasetId"]).list_items().items

Splitting a big city into ZIP codes is also how you get past Zillow's limit of about 1,000 listings per search. Each run finds its own listings, so a listing on the edge of two ZIP codes can appear in both runs; dedupe on zpid.

Single family houses for rent, for investors

{
"location": "Austin, TX",
"rentalType": "HOUSE",
"minBeds": 3,
"maxItems": 300
}

A recorded run of this search without minBeds returned 300 houses in 46 seconds, every one typed SINGLE_FAMILY. House rows usually carry rentZestimate and zestimate, which gives a quick gross yield check: yearly rent divided by the value estimate. Pair it with Zillow Recently Sold for sold comps in the same ZIP codes.

Rent benchmark for a property manager

{
"location": "78745",
"rentalType": "APARTMENT",
"minRent": 1200,
"maxRent": 2500,
"maxItems": 500
}

Group the rows by beds (or by the units entries for communities) and take the median monthlyRent to see where your own units sit.

Weekly new listings watch

{
"location": "Boise, ID",
"maxItems": 1000,
"monitorMode": true
}

Save it as a task and schedule it weekly. The first run delivers the current market. Each later run delivers and charges only listings it has not delivered to you before, and the summary row counts the rest in already_delivered_in_earlier_run. Keep the location and filters the same between runs.

Input parameters

ParameterTypeDefaultWhat it does
locationstringnone (required)City and state, ZIP code or neighborhood, for example "Austin, TX" or "10001". One per run.
maxItemsinteger100Most listings to deliver, 1 to 2000. Zillow serves about 1,000 listings per search, so above that split the market into ZIP codes. This is also your cost cap.
minRentintegernoneLowest monthly rent in USD. Sent to Zillow's search.
maxRentintegernoneHighest monthly rent in USD. Sent to Zillow's search.
minBedsintegernoneFewest bedrooms, 0 to 10 (0 is a studio).
minBathsintegernoneFewest bathrooms, 0 to 10.
rentalTypestringblank (all types)APARTMENT (includes communities), HOUSE, TOWNHOUSE or CONDO. Case does not matter, and SINGLE_FAMILY, TOWNHOME and plurals such as HOUSES also work.
monitorModebooleanfalseDelivers and charges only listings not delivered to you in an earlier run. Keep the location and filters the same across runs.

What data do you get?

One row per listing, plus one summary row per run. Listing rows have no _type field.

Rent: monthlyRent and price (the rent in USD; for a community, its cheapest floor plan's starting rent), priceLabel (Zillow's own text: $2,026/mo, $1,406+, Call or Contact Landlord), minRent, maxRent, rentZestimate (Zillow's rent estimate, when it has one).

Community details (when isBuilding is true): buildingName, units (one entry per bedroom count: beds, price, priceLabel, roomForRent), availableUnits.

The home: beds, baths, sqft, propertyType (APARTMENT, SINGLE_FAMILY, TOWNHOUSE, CONDO), zestimate (Zillow's value estimate, mostly on houses), daysOnZillow, availableFrom (move-in date, when Zillow publishes one). Community cards carry no baths or square feet, because Zillow's community cards do not include them.

Location and links: address, addressLine1, city, state, zipCode, latitude, longitude, detailUrl, imgSrc, zpid (Zillow's property ID for a single rental, or the community's Zillow code such as CmWCqz).

Status: isBuilding, statusType (always FOR_RENT), statusText (always For Rent).

Summary row (_type: "summary", never charged): location, total_available (Zillow's own count for the search), pages_fetched, total_scraped, charged_for, delivered_without_rent, duplicates_skipped, building_cards_merged, zillow_home_type_filter and filtered_out_by_rental_type (when rentalType is set), stop_reason, ended_on_deadline, already_delivered_in_earlier_run, the monitor counts, and a few cost guard counters.

stop_reason tells you why a run ended: max_items (reached your limit), end_of_results (Zillow had no more), repeated_page (Zillow started repeating listings, which is how it signals the end), page_failed (Zillow blocked a page three times), deadline (the run's timeout came first), or yield_guard / profit_guard (the run stopped paying for pages that delivered nothing).

Info row (_type: "info", never charged): on runs that delivered at least one listing, the count and a note on scheduling.

Stable fields for automations

These fields were present in every listing row of the recorded Austin run (540 rows) and the recorded Austin house run (300 rows). Their names will not change, so a sheet, Zapier zap or n8n flow can map them once.

FieldWhat it is
zpidZillow ID of the listing or community, the key to store and join on
addressFull address as Zillow shows it
addressLine1Street line, with the unit when there is one
cityCity
stateTwo letter state code
zipCodeZIP code
priceLabelZillow's price text, including Call or Contact Landlord
propertyTypeAPARTMENT, SINGLE_FAMILY, TOWNHOUSE or CONDO
isBuildingTrue for an apartment community card
detailUrlLink to the listing or community on Zillow
imgSrcMain photo
statusTypeAlways FOR_RENT

monthlyRent, price, minRent and maxRent are present on every row that has a rent, which is every row you are charged for. latitude and longitude were missing on 2 of the 300 house rows, so treat them as optional.

Output examples

An apartment community (recorded Austin, TX run):

{
"zpid": "CmWCqz",
"address": "1701 Daleside Ln, Austin, TX",
"addressLine1": "1701 Daleside Ln # 1206",
"city": "Austin",
"state": "TX",
"zipCode": "78754",
"price": 1406,
"priceLabel": "$1,406+",
"beds": 1,
"propertyType": "APARTMENT",
"statusType": "FOR_RENT",
"buildingName": "Ascend at Pioneer Hill",
"latitude": 30.360699,
"longitude": -97.66857,
"detailUrl": "https://www.zillow.com/apartments/austin-tx/ascend-at-pioneer-hill/CmWCqz/",
"imgSrc": "https://photos.zillowstatic.com/fp/db6144d404ee891c7457286dd62fb779-p_e.jpg",
"isBuilding": true,
"monthlyRent": 1406,
"minRent": 1406,
"maxRent": 2381,
"units": [
{ "beds": 1, "price": 1406, "priceLabel": "$1,406+", "roomForRent": false },
{ "beds": 2, "price": 1811, "priceLabel": "$1,811+", "roomForRent": false },
{ "beds": 3, "price": 2381, "priceLabel": "$2,381+", "roomForRent": false }
],
"availableUnits": 25,
"statusText": "For Rent"
}

A single house for rent (recorded Austin, TX run with rentalType: "HOUSE"):

{
"zpid": "29391382",
"address": "1400 Penny St, Austin, TX 78721",
"addressLine1": "1400 Penny St",
"city": "Austin",
"state": "TX",
"zipCode": "78721",
"price": 2265,
"priceLabel": "$2,265/mo",
"beds": 2,
"baths": 1,
"sqft": 950,
"propertyType": "SINGLE_FAMILY",
"statusType": "FOR_RENT",
"daysOnZillow": 1,
"zestimate": 325100,
"rentZestimate": 2050,
"latitude": 30.2805,
"longitude": -97.684685,
"detailUrl": "https://www.zillow.com/homedetails/1400-Penny-St-Austin-TX-78721/29391382_zpid/",
"imgSrc": "https://photos.zillowstatic.com/fp/93b7457a49d04c32ea6c721f6920e114-p_e.jpg",
"isBuilding": false,
"monthlyRent": 2265,
"minRent": 2265,
"maxRent": 2265,
"availableFrom": "2026-10-15",
"statusText": "For Rent"
}

A listing with no rent, delivered and not charged (recorded Austin, TX run):

{
"zpid": "463437801",
"address": "Norman Commons, 5712 Jackie Robinson St #1ba22274b, Austin, TX 78721",
"addressLine1": "5712 Jackie Robinson St #1ba22274b",
"city": "Austin",
"state": "TX",
"zipCode": "78721",
"priceLabel": "Contact Landlord",
"beds": 1,
"baths": 1,
"sqft": 735,
"propertyType": "APARTMENT",
"statusType": "FOR_RENT",
"daysOnZillow": 79,
"rentZestimate": 1741,
"latitude": 30.276262,
"longitude": -97.675476,
"detailUrl": "https://www.zillow.com/apartments/austin-tx/norman-commons/CqH796/",
"imgSrc": "https://photos.zillowstatic.com/fp/f139cbf829f5f6255332aa2f92cf396a-p_e.jpg",
"isBuilding": false,
"statusText": "For Rent"
}

The summary row (recorded Austin house run; 300 delivered, 299 charged because one house showed no rent):

{
"_type": "summary",
"location": "Austin, TX",
"total_available": 1683,
"pages_fetched": 8,
"total_scraped": 300,
"charged_for": 299,
"delivered_without_rent": 1,
"duplicates_skipped": 0,
"building_cards_merged": 0,
"zillow_home_type_filter": "houses",
"filtered_out_by_rental_type": 7,
"stop_reason": "max_items",
"ended_on_deadline": false,
"charge_failures": 0,
"already_delivered_in_earlier_run": 0,
"monitor": false,
"scraped_at": "2026-09-11T18:50:48.237Z"
}

The summary above is trimmed: the real row also carries the cost guard counters (requests, est_spend_usd and similar).

Pricing

Pay per event: one property-scraped event for each listing delivered with a rent. There is no start fee, no per page fee and no subscription.

EventFreeBronzeSilverGold and above
Listing with a rent (property-scraped), per listing$0.002$0.00175$0.0015$0.0012
Per 1,000 listings$2.00$1.75$1.50$1.20

Start fee: none. This actor has no apify-actor-start or other per run event, so a run that finds nothing costs nothing.

Never charged: listings that show "Call" or "Contact Landlord" instead of a rent (delivered free), a community Zillow shows twice on one page (merged, charged once), a listing already delivered earlier in the same run, listings skipped by monitor mode, pages that fail, and the summary and info rows.

What real jobs cost on Gold: 500 Austin rentals cost about $0.60. A full search of about 1,000 listings costs about $1.20.

There is no price change scheduled for this actor. The Pricing tab on this page always shows the rate for your own plan.

FAQ

What does this actor read from Zillow? Zillow's public for-rent search results for one location: the same listing cards a visitor sees on zillow.com when searching rentals, read from the page Zillow's server renders. It does not open each listing's own page, so fields that appear only there (a community's floor plan details, fees, pet policy, agent contacts) are not included.

How many listings can I get? Up to about 1,000 per search. Zillow stops serving a search past that point whatever maxItems says. For a whole metro, run one search per ZIP code. The summary's total_available shows how many rentals Zillow counts for your search, which can be far above what one search serves (24,850 for Austin in the recorded run).

How fresh is the data? Live. Each run reads Zillow at the moment it runs. daysOnZillow shows how long a single rental has been listed.

Do I need a Zillow account, cookies or an API key? No. You only need an Apify account.

Do I need to set up a proxy? No. The actor uses Apify's US residential proxy on its own, and the proxy cost is inside the per listing price. A page that Zillow blocks is retried up to three times on a fresh proxy session. On a day when Zillow is blocking heavily, a large run can end with fewer listings than asked for; the summary then says page_failed.

Why is a community rent shown as "$1,406+"? The row is an apartment community, and the figure is Zillow's starting rent for its cheapest floor plan. units gives the starting rent for every bedroom count, minRent is the lowest and maxRent the highest starting rent, not the most expensive unit in the building. Community rows carry no baths or square feet; open detailUrl for the floor plans.

Can I get only houses, or only condos? Houses and townhomes, yes: rentalType HOUSE or TOWNHOUSE is sent to Zillow's own home type filter, so houses come back from the first page even in a city where communities fill the default results. Zillow mixes a few community cards into those results; they carry no home type, so they are left out and every row is the type you asked for. Condos are harder: Zillow's rental search groups condos with apartments and has no condo filter, so CONDO pages through that group and keeps only listings Zillow types as a condo. In a large city that is few or none. The run stops after two pages in a row with no match, so an empty condo search ends fast and costs nothing.

What happens with a listing that has no price? It is delivered with priceLabel set to Call or Contact Landlord and no monthlyRent, and it is not charged. The summary counts these in delivered_without_rent.

What if my location is not found? The run stops with an error and nothing is charged. Use a specific city and state or a ZIP code. The run log shows which Zillow region your text resolved to, so check it if the results look like the wrong place.

How do I run it on a schedule and get only new listings? Save your input as a task, then add a schedule in Apify Console (Schedules, then Create new, for example weekly). Turn on monitorMode: the actor keeps the zpid of every listing it delivered to you in a storage named monitor-zillow-rental-listings in your Apify account, and later runs skip those. Leave it off when you want the full current market every time.

How do I export the data? From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. The units list stays nested in JSON and is flattened into columns in CSV and Excel.

Can I use it from Claude, ChatGPT or another AI assistant? Yes. Add Apify's MCP server at https://mcp.apify.com/?tools=themineworks/zillow-rental-listings to any MCP client and ask in plain words, for example "pull 50 rentals in Austin, TX between $1,500 and $2,500 a month". The block under "Copy to your AI assistant" gives an assistant everything it needs to call the API directly. The same data is part of our Real Estate MCP.

Is it legal to scrape Zillow rental listings? The actor reads only Zillow's public search pages, with no login and nothing behind an account. A listing can name a leasing office or show contact details, which can be personal data in some places. You are responsible for how you use the data, including Zillow's Terms of Use and data protection law such as GDPR and CCPA. This is general information, not legal advice.

Integrations

  • Google Sheets: send each run's listings to a sheet with Apify's Google Sheets integration, one tab per market.
  • Make, Zapier and n8n: start runs and read datasets with the official Apify apps and nodes.
  • Webhooks: get a call to your own URL when a run succeeds, then fetch its dataset.
  • API and SDKs: the Apify API and the Python and JavaScript clients, as in the loop above.
  • MCP clients: Claude, ChatGPT, Cursor and others through https://mcp.apify.com/?tools=themineworks/zillow-rental-listings.

For the other side of the market, Zillow Recently Sold returns homes sold in the last 1 to 730 days for the same cities and ZIP codes, with the sale date on every row and the sale price where the state publishes it. It takes the same location, maxItems and monitorMode inputs.

More from The Mine Works

Real estate

Social media and video

Leads and business directories

Marketing, SEO and reviews

LinkedIn

Science, health and government data

Jobs and hiring

Company and business data

E-commerce and marketplaces

Food and local services

Developer and AI tools

More tools

Support

Found a bug or need a field? Open an issue on the Issues tab of this actor. To ask for a new source, email dmineworks@gmail.com.

Zillow Rentals Scraper returns a city's or ZIP code's current Zillow rental listings with monthly rent, rent by bedroom count for communities, and no login, from $1.20 per 1,000 listings with a rent.