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
- 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).
- 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.
| Route | Core fields | Price / 1K | Success, 30 days | Link |
|---|---|---|---|---|
| Partner onlyZillow data access (partner / Bridge) | not compared | below | Official docs | |
| Zillow For-Sale, Rent & Sold Listing Extractor | 9/9 | $0.99 | 16 runs, too few to rate | Open in Apify Store |
| Zillow Upcoming Open House Finder by City or ZIP | 9/9 | $0.99 | 100% of 20 runs | Open in Apify Store |
| Zillow Distressed Property Finder by City or ZIP | 9/9 | $0.99 | 100% of 25 runs | Open in Apify Store |
Official price: Partner terms; no public self-serve price. Compare all 17 Zillow routes.
The facts behind the error
| Fact | Value |
|---|---|
| Open listing API | Zillow does not publish an open self-serve listing API |
| Partner route | Zillow Group developer and MLS-related programs |
| Data restrictions | Listings can carry broker and MLS restrictions |
| Public pages | Subject 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.
Website pages
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.
- Zillow Group developers — checked 2026-11-09
- Zillow terms — checked 2026-11-09
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.