Zillow Agent Scraper API
Our Zillow agents scraper reads the listing agent straight off a property page: pass a homedetails URL or a zpid and the response returns the agent name and brokerage as JSON, tied to the home's address, price, and zpid for easy lead building.
Why Zillow Agent data is tough at scale
Zillow has no public API that exposes agent details, so the listing agent only appears in the property page markup, behind PerimeterX. The attribution field also moves around inside the page's hydration blob, so a hand-written selector for the agent name breaks whenever Zillow reshapes it.
Run the Zillow Agent Scraper API in one call
curl "https://api.zillowscraperapi.com/api/v1/zillow/property?url=https://www.zillow.com/homedetails/6505-44th-Ave-NE-Seattle-WA-98115/463504654_zpid/&api_key=$API_KEY" import requests
BASE = "https://api.zillowscraperapi.com"
API_KEY = "YOUR_API_KEY"
# Read the listing agent + brokerage from a property page.
data = requests.get(
f"{BASE}/api/v1/zillow/property",
params={
"url": "https://www.zillow.com/homedetails/6505-44th-Ave-NE-Seattle-WA-98115/463504654_zpid/",
"api_key": API_KEY,
},
timeout=30,
).json()
# listing_agent is "<agent name>, <brokerage>".
agent = data["listing_agent"]
name, _, brokerage = agent.partition(", ")
print("Agent:", name)
print("Brokerage:", brokerage)
print("Listing:", data["name"], "| zpid", data["zpid"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
url | required | - | The Zillow homedetails page URL for the listing whose agent you want. Required unless you pass zpid. |
zpid | optional | - | The numeric Zillow property id. We build the canonical /homedetails/{zpid}_zpid/ URL from it. One of url or zpid is required. |
country | optional | - | Optional two-letter country hint. Zillow is US-only, so this is rarely needed. |
add_html | optional | false | Set to true to include the raw page HTML alongside the parsed record for custom extraction. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
The Zillow Agent Scraper API JSON response
{
"name": "6505 44th Avenue NE, Seattle, WA, 98115",
"listing_agent": "Eric Nissen, Real Property Associates, Inc.",
"url": "https://www.zillow.com/homedetails/6505-44th-Ave-NE-Seattle-WA-98115/463504654_zpid/",
"zpid": "463504654",
"home_status": "FOR_SALE",
"address": {
"street_address": "6505 44th Avenue NE",
"address_locality": "Seattle",
"address_region": "WA",
"postal_code": "98115"
},
"trade_info": [
{ "currency": "USD", "price": 899900, "price_per_area_unit": 633, "trade_type": "sale" }
],
"property_type": "house",
"latitude": 47.675953,
"longitude": -122.281136
} | Field | Type | Description |
|---|---|---|
listing_agent | string | The listing agent and brokerage as one string, e.g. Eric Nissen, Real Property Associates, Inc. Falls back to the brokerage alone when no individual agent is attributed. |
name | string | The full property address, so each agent is tied to the exact listing. |
address | object | Structured address parts for the listing: street_address, address_locality, address_region, postal_code. |
trade_info | array | The listing's offer, with price, currency, price_per_area_unit, and trade_type, useful for qualifying a lead by price band. |
property_type | string | Normalized property type: house, apartment, or land. |
home_status | string | Raw listing status, e.g. FOR_SALE, so you know if the listing is still active. |
zpid | string | The stable Zillow property id, the key to dedupe listings and agents. |
url | string | The canonical homedetails URL for the listing. |
latitude | number | Property latitude, for grouping agents by area. |
longitude | number | Property longitude, for grouping agents by area. |
Ways teams use this data
Agent lead lists
Brokerage market share
Recruiting and partnerships
CRM enrichment
Competitive tracking
Deal sourcing
Where our Zillow Agent Scraper API stands out
Pass a homedetails URL or a zpid and we resolve the page, run residential proxies and PerimeterX handling, and parse the attribution block into a clean listing_agent string tied to the property. It returns the agent, brokerage, address, price, and zpid as validated JSON in about 2.6 seconds, with no Zillow API key to apply for and a 1,000-request free tier.
Agent tied to the listing
URL or zpid input
PerimeterX handling built in
Brokerage fallback
Resilient parsing
Pay for success
Zillow Agent Scraper API vs DIY and the Zillow API
| Our API | DIY (requests / headless) | Official Zillow API | |
|---|---|---|---|
| Listing agent access | Parsed from URL or zpid | Manual parse of the page | Not exposed |
| Tied to property | Agent, address, price, zpid together | You join it yourself | Not applicable |
| Anti-bot (PerimeterX) | Handled for you | You solve the challenge yourself | Not applicable |
| Setup | API key only | Residential proxies and parsers | Partner approval, where available |
| Output shape | Stable flat JSON | Whatever you parse | Not applicable |
| Billing | Pay per successful request | You absorb blocked-request cost | Not applicable |
Free to test, cheap to scale
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
Send a GET request to our zillow/property endpoint with a homedetails URL or a zpid and your api_key. The response includes a listing_agent field with the agent name and brokerage for that listing, returned as clean JSON alongside the property address, price, and zpid. We handle Zillow's PerimeterX challenge, the proxies, and the parsing, so you build an agent list without running a scraper of your own.
The endpoint returns the listing_agent as a single string in the form agent name, brokerage, for example Eric Nissen, Real Property Associates, Inc. When Zillow attributes only a brokerage and no individual agent, the field returns the brokerage name. The agent is tied to the property record, so you also get the address, price, status, and zpid for the home they are listing.
The public property page attributes the listing agent by name and brokerage, and that is what the listing_agent field returns. Zillow does not publish a direct agent phone number in the property page markup we parse, so we leave it out and never fabricate a number. To reach an agent, use the name and brokerage to look them up through the brokerage or a licensing directory, and always follow lawful outreach rules such as Do-Not-Call requirements.
Yes, in two steps. Use the zillow/search endpoint to pull the listings for a location and collect each home's zpid, then call zillow/property for each zpid to read the listing_agent. Counting how often each agent or brokerage appears across a city's listings gives you a ranked view of who is most active in that market.
Scraping publicly visible listing pages is generally treated as lawful in the United States, but agent names tied to a person can be personal data, and Zillow's Terms of Use restrict automated collection, so review the terms and applicable privacy and anti-spam laws before you use the data for outreach. This is general information, not legal advice.
Median end-to-end response is about 2.6 seconds per property, including proxy routing, PerimeterX handling, retries, and parsing. Each call returns the full property record with the listing agent, so you do not chain extra requests, and you are billed only for successful requests. The free tier includes 1,000 requests to test with.