Skip to main content
Zillow scraper

Scrape Zillow property listings with Browserless

Search Zillow properties and retrieve listing details as structured JSON. Start with the dedicated Zillow Scraper API, then use browser automation, MCP, or agent Skills for custom workflows.

Browserless features that make Zillow scraping reliable

The Zillow APIs handle common property queries, while Browserless's browser tools give you more control when a workflow needs to go beyond a single API call.

Automatic browser fallback
If the Zillow API path is blocked, the predefined scraper can fall back to a stealth browser. The response identifies whether an API or browser route succeeded.
Property search filters
Narrow searches by sale or rent, price, beds, baths, home type, recency, and other supported query parameters.
Custom stealth automation
Use BAP or BrowserQL for interactions and specialized extraction on a rendered page, with detection-resistant browser options.
Property-level details
Look up a zpid to retrieve available listing information, address, characteristics, history, photos, and related property fields.
Agent Skill validation
Search homes with an agent recipe that checks whether Zillow actually retained the requested location and filters before returning rows.
Scale with managed browsers
Run scraping workflows without provisioning your own browsers. Respect account concurrency limits and retry transient requests with backoff.

What is a Zillow scraper?

Turn Zillow listings into useful property data.

A Zillow scraper automatically collects publicly visible real estate listings or property information from Zillow search pages and individual property URLs.

Teams use the data for property comparisons, market research, listing monitoring, and business intelligence. Structured records are far easier to analyze than listings copied by hand from the website.

Street address, city, state, and ZIP code
Listing price and current listing status
Bedrooms, bathrooms, and square footage
Property type, lot size, and listing URL
Photo URLs and brokerage when available
Price history and property facts when available
Rentals and for-sale search results
Agent profiles on a separate directory workflow

How Browserless overcomes the challenges of scraping Zillow

Use the dedicated API for common property records and browser tools where custom page interaction is necessary.

The challenge

Bot detection blocks automated requests

Browserless’s solution

The Zillow Scraper API tries its direct extraction path and can fall back to a stealth browser; BrowserQL and BAP support custom protected-page workflows.

The challenge

Too many requests or IP-based limits

Browserless’s solution

For browser workflows, use built-in residential proxies and control concurrency. For scraper API responses, retry temporary failures with backoff.

The challenge

Search pages require the right location and filters

Browserless’s solution

Use supported search parameters and check the returned query and listing rows; the Zillow agent Skill can verify filters on live pages.

The challenge

HTML selectors and page layouts change

Browserless’s solution

Start with validated JSON from /scrapers/zillow/search or /scrapers/zillow/property so routine fields do not depend on your own page parsing logic.

The challenge

One search result lacks full property detail

Browserless’s solution

Take a home result’s zpid or Zillow listing URL (building URLs aren’t accepted) and call /scrapers/zillow/property to retrieve additional facts and history where available.

The challenge

Large datasets need consistent export and retries

Browserless’s solution

Page through up to 24 pages (984 listings) per search and split larger markets by ZIP code. Retry when error.retryable is true and deduplicate by zpid before exporting.

How Browserless scrapes Zillow listings

A property-search workflow using the new predefined scraper, with detail lookups when you need more fields.

  1. 01

    Set your search

    Choose a location, for sale or for rent, and supported price or property filters.

  2. 02

    Call the Zillow API

    Send a Zillow search API request and receive structured JSON.

  3. 03

    Check the results

    Validate ok, results, and page fields, and then deduplicate by zpid.

  4. 04

    Enrich and export

    Fetch more property details, then save JSON or CSV.

A simple Zillow scraper code example

Search Zillow homes for sale by location using the predefined scraper API. No Puppeteer package or custom HTML parsing is required.

Requirements: Node.js 18+ and a Browserless Cloud API token set as BROWSERLESS_TOKEN.

Node.js

zillow-scraper.mjs

const token = process.env.BROWSERLESS_TOKEN;
const location = process.argv.slice(2).join(" ") || "San Francisco, CA";
if (!token) throw new Error("Set BROWSERLESS_TOKEN first.");

const response = await fetch(
  "https://production-sfo.browserless.io/scrapers/zillow/search?timeout=90000",
  {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${token}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      params: { query: location, tenure: "sale", page: 1 },
    }),
    signal: AbortSignal.timeout(105000),
  },
);

const result = await response.json().catch(() => ({}));
if (!response.ok || !result.ok) {
  throw new Error(result.error?.message || `HTTP ${response.status}`);
}

const listings = result.data.results.map((home) => ({
  zpid: home.zpid,
  url: home.url,
  address: home.address?.line ?? null,
  price: home.price?.amount ?? null,
  beds: home.beds ?? null,
  baths: home.baths ?? null,
  status: home.status ?? null,
}));
console.log(JSON.stringify({ location, listings }, null, 2));

Run: node zillow-scraper.mjs "San Francisco, CA"

Save the example as zillow-scraper.mjs. It returns one search page (up to 41 listings) as JSON. Each successful call costs a fixed 10 units, as does a not-found result; other failed calls are free. The 90-second timeout leaves room for the browser fallback. Add pagination, property lookups, and CSV or Google Sheets export as needed.

Automate Zillow scraping with MCP

Use the Browserless MCP server from an AI assistant for custom page extraction. The documented Zillow example scrapes public real estate agent directories, not the new property-search API.

  1. 01

    Connect MCP

    Connect your MCP-compatible client to the hosted Browserless server at https://mcp.browserless.io/mcp. Sign in with OAuth or pass your API token – see the MCP setup guide.

  2. 02

    Request agent data

    Ask the assistant to use browserless_smartscraper on a publicly accessible Zillow agent-directory page and return the visible agent names and profile URLs as markdown.

Frequently asked questions

Ready to scrape Zillow with Browserless?