Zillow Scraper — Listings, Zestimates & Agents avatar

Zillow Scraper — Listings, Zestimates & Agents

Pricing

from $1.60 / 1,000 standard calls

Go to Apify Store
Zillow Scraper — Listings, Zestimates & Agents

Zillow Scraper — Listings, Zestimates & Agents

Scrape Zillow for-sale, for-rent and sold listings: search any location or map box with price, bed, bath, home-type, size, year and HOA filters. Full property detail with Zestimate, price and tax history, schools and photos.

Pricing

from $1.60 / 1,000 standard calls

Rating

0.0

(0)

Developer

ScrapeBadger

ScrapeBadger

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

What does Zillow Scraper do?

Zillow Scraper extracts structured data from Zillow and delivers it as clean JSON — no proxies, browsers or anti-bot handling on your side. It is a practical Zillow API alternative for teams who need Zillow data on a schedule rather than a one-off export.

It covers 6 different Zillow surfaces behind a single Mode dropdown, so one Actor replaces a rack of single-purpose scrapers.

Why scrape Zillow?

  • Every surface in one place — pick a mode, fill two fields, run.
  • Anti-bot handled upstream — residential proxy rotation, TLS and browser fingerprinting, and CAPTCHA solving happen inside the ScrapeBadger API.
  • Pay per call, not per row — a page of results costs the same as one lookup, so bulk work stays cheap.
  • Runs on the Apify platform — scheduling, monitoring, webhooks, the API, and integrations with Make, Zapier, Google Sheets, Slack and Airtable all work out of the box.
  • Partial results are kept — a transient upstream failure ends the run cleanly instead of discarding what you already paid for.

What data can Zillow Scraper extract?

Every record is pushed to the dataset as its own row. The most useful fields are below; the full record carries considerably more.

FieldTypeDescription
street_addressstringStreet address
citystringCity the record belongs to
pricenumberPrice as a number
bedroomsnumberNumber of bedrooms
bathroomsnumberNumber of bathrooms
zestimatenumberZillow's own valuation estimate
urlstring (URL)Canonical URL of the record

Zillow scraping modes

Pick one Mode; the input form marks the fields it needs.

ModeWhat it returnsCharged as
SearchListings for a location or map box, with every Zillow filter.standard-call
Get PropertyFull property by ZPID: Zestimate, history, schools, photos, facts.standard-call
Get Property By URLThe same detail record, addressed by its Zillow URL.standard-call
Get AgentAgent profile: ratings, sales counts, licences, listings, reviews.standard-call
AutocompleteResolve a place name into the region Zillow search expects.basic-call
List MarketsSupported Zillow markets.basic-call

How to scrape Zillow

  1. Click Try for free and sign in to Apify.
  2. Open Settings → Environment variables and add SCRAPEBADGER_API_KEY with your key from scrapebadger.com, ticking Secret.
  3. Choose a Mode from the dropdown.
  4. Fill in the fields that mode needs — the description on each field says which modes use it.
  5. Set Max items to cap the run.
  6. Press Start and watch the dataset fill up.
  7. Export as JSON, CSV, Excel or XML, or pull it from the API tab.

How much will it cost to scrape Zillow?

This Actor is pay per event: one event per API call, whatever that call returns. Fetching a page of 100 records costs the same as fetching one record, so larger pages are cheaper per row.

EventPrice per eventWhat triggers it
basic-call$0.0010A cheap call — autocomplete, reference data, single lookups.
standard-call$0.0020A standard call — one search page, profile, or detail record.

Apify also charges its standard $0.001 actor start fee per run. ScrapeBadger credits are consumed on your own account on top of this.

Input

See the Input tab for every option with inline documentation. A minimal run looks like this:

{
"mode": "Search",
"location": "Austin, TX",
"zpid": "29329029",
"query": "Austin",
"max_items": 100
}

Max items caps the run; the Actor pages until it reaches that number or Zillow runs out of results.

Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel, or read it straight from the Apify API. Each record is one row:

{
"street_address": "<street_address>",
"city": "<city>",
"price": 1234,
"bedrooms": 1234,
"bathrooms": 1234,
"zestimate": 1234
}

What can you do with Zillow data?

A few things teams actually build with this Actor.

Pull comps for a valuation

Search a radius, filter to matching beds, baths and size, and you have the comparable set behind any credible valuation — with Zestimate, price history and tax history attached to each one.

Find investment properties systematically

Combine price, days-on-market and home-type filters to isolate stale listings in strong areas. Running it daily and diffing surfaces price cuts the hour they happen.

Track a market's temperature

Median price and days-on-market for a ZIP, sampled weekly, is a live market index months ahead of published indices.

Build an agent prospecting list

Agent profiles carry sales counts, active listings and reviews — enough to rank who actually transacts in a territory.

Tips for faster, cheaper runs

  • Raise the page-size field (count, limit, per_page — whichever the mode exposes) before raising Max items. Fewer, bigger calls cost less.
  • Use the cheap reference and autocomplete modes to resolve IDs before spending on the expensive detail modes.
  • Schedule incremental runs with a low Max items rather than one huge sweep; you get fresher data and a smaller bill.
  • Chain Actors with webhooks to push new rows straight into your warehouse.

Requirements

This Actor calls the ScrapeBadger API on your behalf, so it needs your key:

  1. Get one at scrapebadger.com — there is a free tier.
  2. In Settings → Environment variables, add SCRAPEBADGER_API_KEY with your sb_live_… key and tick Secret.

Credits are consumed on your ScrapeBadger account in addition to the Apify event price.

Frequently asked questions

Scraping publicly available data from Zillow is generally legal, and this Actor only ever reads pages a logged-out visitor could see. What you then do with the data is what matters — read the disclaimer below before collecting anything that could be personal data.

Do I need my own proxies?

No. Proxy rotation, browser fingerprinting and anti-bot handling all happen upstream in the ScrapeBadger API, so there is nothing to configure here.

Do I need a ScrapeBadger account?

Yes. The Actor calls the ScrapeBadger API on your behalf, so it needs your API key in the SCRAPEBADGER_API_KEY environment variable. There is a free tier at scrapebadger.com — see Requirements below.

How many results can I get in one run?

Set Max items to whatever you need. The Actor keeps paging until it hits that number or Zillow runs out of results, and stops cleanly either way.

How much does one run cost?

Events start at $0.0010 and are charged once per API call, not per row — so a page of 100 results costs the same as a single lookup. Apify adds its standard $0.001 actor start fee per run.

What happens if the run fails halfway through?

Whatever was already scraped stays in the dataset. The run ends with a status message explaining where it stopped instead of throwing your results away.

Can I run this on a schedule or from my own code?

Yes. Use the Schedules tab for recurring runs, or the API tab to start runs and read the dataset from your own application.

Why does a search sometimes return nothing?

Zillow runs PerimeterX. When an exit pool gets flagged the upstream API falls back to a real browser, which is slower but keeps the run alive. A search taking 30 seconds instead of 3 is that fallback working.

How do I get past Zillow's ~820 result cap?

Use the map-bounds fields (north, south, east, west) to tile a large area into smaller boxes and run each one. Every box gets its own result allowance.

Is scraping Zillow reliable?

Anti-bot interstitials are a fact of life on Zillow. A blocked call is retried four times with exponential backoff against fresh exits, and if a run dies partway it keeps everything already scraped rather than throwing the dataset away. Upstream availability is monitored continuously.

Your feedback and support

Found a bug, missing a field, or need a mode that is not here? Open a ticket on the Issues tab, or email support@scrapebadger.com. The API tab has everything you need to run this Actor programmatically.

Disclaimer

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Notes on Zillow

Zillow runs PerimeterX. When a whole exit pool gets flagged the upstream API falls back to a real browser, which is slower but keeps the run alive — a search that takes 30s rather than 3s is that fallback doing its job.