For AI agents: a documentation index is available at /llms.txt
Skip to main content

Scrape Zillow Agent Listings

Pull agent names and profile URLs from a Zillow agent directory page as structured JSON.

Prerequisites

Steps

Zillow blocks most automated requests without stealth mode and residential proxies. The examples below navigate to the New York agent directory and extract agent data from the rendered page.

Selector stability

Zillow updates its markup regularly. If selectors stop returning results, inspect the current DOM in browser DevTools and update them.

Send the BQL mutation over HTTP to the stealth endpoint. No browser library or BQL IDE required.

1. Send the request

curl -X POST \
"https://production-sfo.browserless.io/stealth/bql?token=YOUR_API_TOKEN_HERE&proxy=residential&proxySticky=true&proxyCountry=us&humanlike=true&blockAds=true" \
-H "Content-Type: application/json" \
-d '{
"query": "mutation ScrapeZillow { goto(url: \"https://www.zillow.com/professionals/real-estate-agent-reviews/new-york-ny/ny/\", waitUntil: networkIdle) { status } waitForTimeout(time: 3000) { time } agents: mapSelector(selector: \"a[href^='\''\/profile\/'\'']\" ) { name: mapSelector(selector: \"span, h3\") { innerText } profileUrl: attribute(name: \"href\") { value } } }",
"variables": {},
"operationName": "ScrapeZillow"
}'

2. Check the output

{
"data": {
"goto": { "status": 200 },
"waitForTimeout": { "time": 3000 },
"agents": [
{
"name": [{ "innerText": "Jane Smith" }],
"profileUrl": { "value": "/profile/janesmith/" }
},
{
"name": [{ "innerText": "John Doe" }],
"profileUrl": { "value": "/profile/johndoe/" }
}
]
}
}

Next steps