Zillow 403 Forbidden: why listing requests get blocked

A Zillow 403 is an access denial, not a data format problem. See Zillow's official partner route, the legal constraints around listing data, and the hosted public-data alternative.

403 Forbidden

Short answer

Zillow's forbidden response is an access denial, so changing the data parser does not address the failure. Assess Zillow Group's developer and MLS-related programs for a suitable partner route, or evaluate a hosted public-data tool with Zillow's terms and listing restrictions in view.

Diagnosis checked 2026-11-12; sources below.

Do this now

  1. For listings with price, beds, baths and status at volume, run a hosted route instead of patching your own requests: Zillow For-Sale, Rent & Sold Listing Extractor. The request below runs it with its published example input through the Apify API (your token, billed at the Store price).
  2. Compare every route, with fields and prices, on the Zillow page.

Python

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
    "search": "Houston, TX",
    "mode": "BUY",
    "maxItems": 3,
    "endPage": 1,
    "startUrls": [],
    "bedsMin": "any",
    "bathsMin": "any",
    "lotSizeMin": "any",
    "lotSizeMax": "any",
    "daysOnZillow": "any",
    "sortBy": "relevance",
    "fsboOnly": False,
    "foreclosureOnly": False,
    "auctionOnly": False,
    "newConstructionOnly": False,
    "includePending": False,
    "openHouseOnly": False,
    "priceReducedOnly": False,
    "scrapeDetails": False
}

run = client.actor("nimbryxo-studio/zillow-for-sale-rent-and-sold-listing-extractor").call(run_input=run_input)
if run is None:
    raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

pip install apify-client

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
    "search": "Houston, TX",
    "mode": "BUY",
    "maxItems": 3,
    "endPage": 1,
    "startUrls": [],
    "bedsMin": "any",
    "bathsMin": "any",
    "lotSizeMin": "any",
    "lotSizeMax": "any",
    "daysOnZillow": "any",
    "sortBy": "relevance",
    "fsboOnly": false,
    "foreclosureOnly": false,
    "auctionOnly": false,
    "newConstructionOnly": false,
    "includePending": false,
    "openHouseOnly": false,
    "priceReducedOnly": false,
    "scrapeDetails": false
};

const run = await client.actor("nimbryxo-studio/zillow-for-sale-rent-and-sold-listing-extractor").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

npm install apify-client

cURL

curl -X POST "https://api.apify.com/v2/actors/nimbryxo-studio~zillow-for-sale-rent-and-sold-listing-extractor/run-sync-get-dataset-items"   -H "Authorization: Bearer $APIFY_TOKEN"   -H "Content-Type: application/json"   -d '{"search":"Houston, TX","mode":"BUY","maxItems":3,"endPage":1,"startUrls":[],"bedsMin":"any","bathsMin":"any","lotSizeMin":"any","lotSizeMax":"any","daysOnZillow":"any","sortBy":"relevance","fsboOnly":false,"foreclosureOnly":false,"auctionOnly":false,"newConstructionOnly":false,"includePending":false,"openHouseOnly":false,"priceReducedOnly":false,"scrapeDetails":false}'

Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).

MCP (AI agents)

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=nimbryxo-studio/zillow-for-sale-rent-and-sold-listing-extractor",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}

Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.

Open Zillow For-Sale, Rent & Sold Listing Extractor in Apify Store

Routes that work for Zillow data

The official route first, then the catalogue Actors that fit this problem (listings with price, beds, baths and status), by their published fields. Store figures are the publisher's public numbers.

Routes for Zillow data
RouteCore fieldsPrice / 1KSuccess, 30 daysLink
Partner onlyZillow data access (partner / Bridge)not comparedbelowOfficial docs
Zillow For-Sale, Rent & Sold Listing Extractor9/9$0.9916 runs, too few to rateOpen in Apify Store
Zillow Upcoming Open House Finder by City or ZIP9/9$0.99100% of 20 runsOpen in Apify Store
Zillow Distressed Property Finder by City or ZIP9/9$0.99100% of 25 runsOpen in Apify Store

Official price: Partner terms; no public self-serve price. Compare all 17 Zillow routes.

The facts behind the error

FactValue
Open listing APIZillow does not publish an open self-serve listing API
Partner routeZillow Group developer and MLS-related programs
Data restrictionsListings can carry broker and MLS restrictions
Public pagesSubject to Zillow's terms

Identify the access failure

Check the response status and body before debugging missing listing details. When access is denied, the parser may receive a denial page instead of the listing content it expects.

Changing selectors or output formatting does not resolve that denial. First establish whether the chosen collection route can obtain the required listing content.

Assess the partner route

Zillow does not publish an open self-serve listing API. Its developer and MLS-related programs are the relevant starting point for assessing a partner route.

Check whether an available program covers the listings and intended use your project requires. Listing data can carry broker and MLS restrictions, so technical access alone is an incomplete basis for choosing a source.

Evaluate hosted collection carefully

A hosted public-data tool can move collection and extraction into a managed service. Check which listing details it supplies and how it distinguishes failed access from missing listing information.

Assess Zillow's terms and any applicable broker or MLS restrictions alongside that coverage. A change in collection provider does not answer those questions for the project.

When to stop fighting the error

Further parser patches are pointless when Zillow continues to deny access before returning listing content. Move to assessing a suitable partner program, a hosted public-data tool or another listing source when the current route cannot meet the project's access and coverage needs, and include the intended use and applicable restrictions in that decision.

Questions people ask

Does a forbidden response mean the listing format changed?

The response indicates an access denial, rather than establishing a change in listing format. Investigate parsing only after confirming that the expected listing content was returned.

Can I use an open Zillow listing API instead?

Zillow does not publish an open self-serve listing API. Assess Zillow Group's developer and MLS-related programs for a route that fits your project.

Why do broker and MLS restrictions matter?

Listings can carry restrictions from brokers and MLS sources. Those conditions need assessment alongside Zillow's terms when selecting data for the intended use.

What should I check before choosing a hosted tool?

Check its listing coverage, the details it returns and how it reports access failures. Assess the applicable terms and listing restrictions separately from the tool's technical capabilities.

Sources

Every dated claim on this page comes from the public sources below. Check the source before you make a business decision on it.

Content updated 2026-11-12Data checked 2026-11-12

Get Zillow data with a catalogue Actor

Zillow Upcoming Open House Finder by City or ZIP returns 9 of 9 core Zillow fields at $0.99 per 1,000 results. Compare all 17 Zillow routes.

Open in Apify Store