๐ Zillow Agents Finder
Pricing
from $4.99 / 1,000 results
๐ Zillow Agents Finder
Zillow Agents Finder extracts real estate agent profiles from Zillow. Collect agent names, brokerages, phone numbers, ratings, reviews, profile URLs, service areas, and more. Ideal for lead generation, market research, recruitment, and competitive analysis.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
0
Monthly active users
11 hours ago
Last modified
Categories
Share
Zillow Scraper โ Extract Agents, Lenders and Reviews as JSON
Zillow Agents Finder extracts real estate agent profiles, mortgage lender records, and agent reviews directly from Zillow โ by profile URL, @screenName, agent or lender name, or a location crawl. Every result returns typed, normalized JSON: contact and licensing details for agents, NMLS data for lenders, or reviewer text and ratings โ no HTML, no selectors, no manual parsing. Point it at a city, a specialty filter, or a list of screen names, and get back structured records ready for a CRM, a lead list, or an LLM pipeline.
What is Zillow Agents Finder?
Zillow Agents Finder is an Apify Actor that scrapes Zillow's real estate agent directory and mortgage lender directory, plus each agent's individual reviews. It requires no Zillow account or login โ every request goes straight to Zillow's public directory and profile pages. Feed it direct profile URLs, @screenNames, plain agent or lender names, or just a location, and it returns either compact directory cards or full profile detail depending on the agent_detail_info toggle.
- Scrape real estate agent profiles โ contact info, ratings, specialties, licenses, sales stats
- Scrape mortgage lender records โ company and NMLS data, ratings, licenses, an allowlist of fields you pick
- Scrape agent reviews โ reviewer name, rating, review text, sub-ratings, and the agent's own reply
- Filter by specialty, language, top-agent status, and buyer/seller focus
- Export as JSON or CSV โ no proxy management required
What data does Zillow Agents Finder collect?
Zillow Agents Finder returns four distinct record shapes depending on operation, agent_detail_info, and whether a urls entry points at a profile sub-tab.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Real Estate Agents (directory card) | name, business, rating, review count, profile URL | name, business, rating, reviews.count, screenName, url |
| Real Estate Agents (full profile) | licenses, service areas, sales stats, languages, active/sold listings | licenses, serviceAreas, salesStats, languagesSpoken, forSaleListingsSummary, soldListingsSummary |
| Mortgage Lenders | company name, NMLS ID, address, rating, review counts | companyName, nmlsLicense, address, rating, totalReviews |
| Agent Reviews (preview) | reviewer name, rating, review text, sub-ratings, agent reply | reviewerName, rating, reviewText, subRatings, agentResponse |
Need more Zillow data?
If you need the property side of Zillow rather than the people side, Zillow Search Scraper With Agent Contact Leads scrapes Zillow property search results and enriches each listing with its MLS-disclosed agent and broker attribution โ agent name, phone, email, license number, and MLS ID โ pulled straight from the listing's own detail page.
Why not build this yourself?
Zillow doesn't publish a general-purpose public API for agent, lender, or review data โ the directory and profile pages are the only access point, and they sit behind PerimeterX bot detection that blocks plain HTTP clients with a captcha page or an empty response. Building this yourself means maintaining a Chrome-TLS-impersonating HTTP client, a proxy escalation ladder (direct โ datacenter โ residential, with sticky sessions so PerimeterX cookies stay valid across a run), and a parser that keeps up with Zillow's embedded __NEXT_DATA__ payload as its field names shift over time. Zillow Agents Finder ships that infrastructure already built โ proxy fallback, block detection, and dual-shape field extraction that degrades gracefully instead of returning null when Zillow renames or relocates a field. You still choose what to scrape; you don't maintain the plumbing that gets it.
Why do developers and teams scrape Zillow?
For real estate lead generation and marketing teams
Marketing and lead-gen teams use the agents directory to build outreach lists segmented by market and specialty โ pulling name, business, phone, and screenName for agents filtered by specialty (e.g. luxury-homes, relocation), location, or flagged is_top_agent. Because compact card mode reads straight from Zillow's own directory cards with no extra profile fetch, a team can pull hundreds of prospects per market cheaply, then run agent_detail_info: true only on the shortlist that responds โ turning a broad directory sweep into a qualified contact list without paying for a full profile fetch on every row.
For brokerages and recruiting teams
Brokerages sourcing recruits filter the same directory by is_top_agent, is_buying, is_selling, and language to find agents who match a specific book of business โ a Spanish-speaking buyer's agent in a given metro, for example. Full-detail mode adds salesStats (countAllTime, averageValueThreeYear), serviceAreas, and licenses, letting a recruiter compare production and territory before making a call. Because results are typed JSON, they drop straight into a spreadsheet or ATS without manual cleanup, and the same input schema works whether the target list is five agents or a whole metro area.
For mortgage and fintech companies
Lenders and mortgage-tech companies set operation: lenders to pull the mortgage directory โ companyName, nmlsLicense, rating, and totalReviews โ for competitive tracking or partner sourcing in a given location, sorted by sort_lenders (relevance, location, or rating). The lender_fields allowlist lets a pipeline request only the fields it needs (e.g. stateLicenses, languagesSpoken, employerScreenName) instead of pulling a full profile every time, which keeps a recurring monitoring job's output schema narrow, predictable, and stable across runs even as the watch-list of companies grows.
For AI engineers and agent builders
Because every response is typed JSON with stable field names โ not HTML that needs a selector rewrite every time Zillow ships a redesign โ agent and lender records drop directly into a RAG index or an LLM agent's tool-call response. A real-estate assistant agent can call this Actor with a location and specialty, get back structured reviewsPreview text and subRatings alongside contact fields, and pass the result straight into a prompt or a vector store with no parsing step in between.
How to scrape Zillow (step by step)
- Open Zillow Agents Finder on its Apify Store page, or from the Actors tab in your Apify Console if you've already added it.
- Provide input โ leave
urlsempty and setlocationfor a directory crawl, or list direct profile URLs,@screenNames, or plain agent/lender names inurls. No field is strictly required by the schema, but a directory crawl needslocation. - Set
operationtoagentsorlenders, then narrow results withspecialty,language,is_top_agent,is_buying,is_selling(agents) orsort_lenders,lender_fields(lenders). - Click Start and watch records stream into the dataset live as each card or profile is scraped.
- Download results as JSON, CSV, or Excel from the Export tab in Apify Console, or pull them through the API.
What to do when Zillow changes its structure
Zillow Agents Finder is maintained against Zillow's live site, and its extractors already handle more than one historical payload shape (older reviewer.firstName/lastName fields alongside the newer reviewMetadataTexts pair, for example), so a single field reshuffle degrades gracefully instead of returning null. The output schema stays stable on your end โ field names don't change because Zillow changed its markup.
โฌ๏ธ Input
Required per schema: none โ every field below is optional, though a directory crawl needs location and a lender run needs operation: "lenders".
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
urls | No | array | Bulk list of profile URLs, sub-tab URLs, @screenNames, or plain agent/lender names (runs a directory search). Leave empty for a pure location-based crawl. | ["@REMAX EDGE", "https://www.zillow.com/profile/Jane Doe/reviews"] |
operation | No | string | Which Zillow directory to target: agents or lenders. Default agents. | "agents" |
location | No | string | City/state used as the geo seed for every directory search. Required unless every urls entry is a direct profile URL or @screenName. Default "New York". | "Austin, TX" |
limit | No | integer | Maximum number of profiles returned across all queries, 0โ10000. 0 = unlimited. Default 20. | 50 |
agent_detail_info | No | boolean | true returns the full agent profile (sales stats, licenses, service areas, address, phones, email). false returns the compact card shape. Default false. | true |
specialty | No | string | Single specialty filter for the agents directory (numeric code or Zillow slug), e.g. luxury-homes, foreclosure, relocation. Default "" (any). | "luxury-homes" |
language | No | string | Single language filter (display name) for the agents directory. Default "" (any). | "spanish" |
is_top_agent | No | boolean | Filter to Zillow-flagged top agents (agents only). Default false. | true |
is_buying | No | boolean | Filter to agents who focus on buyers (agents only). Default false. | false |
is_selling | No | boolean | Filter to agents who focus on sellers (agents only). Default false. | true |
sort_lenders | No | string | Sort order for the lender directory: relevance, location, or rating (lenders only). Default "relevance". | "rating" |
lender_fields | No | array | Field allowlist for lender records โ leave empty to return every field. Values map to keys on Zillow's lender profile payload. | ["companyName", "rating", "totalReviews"] |
proxyConfiguration | No | object | Proxy settings. By default the Actor sends requests without a proxy, then auto-escalates to Apify Datacenter โ Apify Residential (3 retries on residential) if Zillow blocks the request. Default {"useApifyProxy": false}. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
Example JSON input:
{"urls": ["@REMAX EDGE", "https://www.zillow.com/profile/Jane Doe/reviews"],"operation": "agents","location": "Austin, TX","limit": 50,"agent_detail_info": true,"specialty": "luxury-homes","language": "spanish","is_top_agent": true,"is_buying": false,"is_selling": true,"sort_lenders": "rating","lender_fields": ["companyName", "rating", "totalReviews"],"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Most common pitfall: leaving urls empty (or filling it with only free-text names) while also leaving location blank โ the directory crawl has no geo seed to search, so the run logs a warning and returns zero records instead of erroring.
โฌ๏ธ Output
Every result is typed, normalized JSON pushed to the Actor's dataset as it's found, exportable as JSON, CSV, or Excel from Apify Console.
Scraped Agent (compact โ default)
{"avatar": "https://photos.zillowstatic.com/fp/abc123-square_800.jpg","business": "RE/MAX Edge","id": "X1-ZU1abc23def456gh_8xyz1","location": null,"name": "Jane Doe","phone": null,"rating": 4.9,"reviews": { "count": 187 },"screenName": "Jane Doe","url": "https://www.zillow.com/profile/Jane%20Doe","scrapedAt": "2026-07-25T14:02:11.000Z"}
location and phone are null in compact mode โ directory cards don't expose street-level location or a phone number; set agent_detail_info: true to get them from the profile page.
Scraped Agent (full profile โ agent_detail_info: true)
{"id": "X1-ZU1abc23def456gh_8xyz1","name": "Jane Doe","screenName": "Jane Doe","url": "https://www.zillow.com/profile/Jane%20Doe","avatar": "https://photos.zillowstatic.com/fp/abc123-square_800.jpg","business": "RE/MAX Edge","rating": 4.9,"yearsOfExperience": 12,"reviews": { "count": 187 },"serviceAreas": [{ "name": "Austin, TX", "url": "https://www.zillow.com/austin-tx/" }],"email": "jane.doe@remaxedge.com","phone": "(512) 555-0148","phones": { "cell": "(512) 555-0148", "brokerage": "(512) 555-0100", "business": null },"address": {"line1": "123 Main St","line2": null,"city": "Austin","state": "TX","postalCode": "78701","full": "RE/MAX Edge, 123 Main St, Austin, TX 78701"},"licenses": {"Real estate licenses": [{ "License No.": "123456", "issued by": "TX", "status": "Active", "expiration": "2027-06-30" }],"otherLicenses": []},"salesStats": {"countAllTime": 214,"countLastYear": 18,"priceRangeThreeYearMin": 210000,"priceRangeThreeYearMax": 1850000,"averageValueThreeYear": 512000,"statsIncludeTeam": false,"pastSalesTotal": 214},"aboutMe": "Helping Austin buyers and sellers for over a decade.","languagesSpoken": ["English", "Spanish"],"specialties": null,"title": null,"forSaleListingsSummary": {"total": 6,"previewCount": 5,"items": [{"zpid": "29384756","address": "45 Oak Ave","cityStateZip": "Austin, TX 78704","bedrooms": 3,"bathrooms": 2,"livingArea": 1820,"livingAreaUnits": "sqft","imageUrl": "https://photos.zillowstatic.com/fp/oak-square_800.jpg","listingUrl": "https://www.zillow.com/homedetails/45-Oak-Ave/29384756_zpid/","price": 549000}]},"forRentListingsSummary": { "total": 0, "previewCount": 0, "items": [] },"soldListingsSummary": {"total": 214,"previewCount": 5,"items": [{"zpid": "18374659","address": "9 Pine Ct","cityStateZip": "Austin, TX 78745","bedrooms": 4,"bathrooms": 3,"livingArea": 2340,"livingAreaUnits": "sqft","imageUrl": "https://photos.zillowstatic.com/fp/pine-square_800.jpg","listingUrl": "https://www.zillow.com/homedetails/9-Pine-Ct/18374659_zpid/","soldPrice": 612000,"soldDate": "2026-05-14","representedRole": "Seller's Agent"}]},"subtab": "reviews","subtabUrl": "https://www.zillow.com/profile/Jane%20Doe/reviews/","subtabNote": "The /reviews page is live; reviewsPreview below has up to 3 individual reviews extracted from it. For full paginated review extraction (every review, a per-run child dataset, and optional AI sentiment/theme tagging), use the dedicated Zillow Agents Finder & Reviews Scraper actor.","reviewsPreview": [{"reviewId": "rev-8834521","reviewerName": "Michael R.","rating": 5,"reviewText": "Jane helped us find our first home in under a month.","date": "2026-04-02","workDescription": "Bought a home in 2026","subRatings": [{ "description": "Local knowledge", "score": 5 },{ "description": "Responsiveness", "score": 5 }],"agentResponse": "Thank you so much, Michael!"}],"scrapedAt": "2026-07-25T14:03:47.000Z"}
forSaleListingsSummary / forRentListingsSummary / soldListingsSummary are pulled from the same profile-page fetch at zero extra cost โ Zillow's old /sales, /rentals, /sold sub-tab URLs no longer serve separate pages, so the Actor reads the equivalent embedded data instead. reviewsPreview only appears when a urls entry targets the /reviews sub-tab.
Scraped Lender
{"id": "X1-ZUabc123lend456","name": "Alex Rivera","screenName": "Alex Rivera Lending","url": "https://www.zillow.com/lender-profile/Alex%20Rivera%20Lending","avatar": "https://mortgageapi.zillow.com/getLenderProfileImage?lenderId=X1-ZUabc123lend456&imageId=img-9981","business": "Summit Home Loans","nmlsLicense": "1928374","phone": null,"email": null,"address": { "line1": null, "city": null, "state": null, "postalCode": null },"rating": 4.8,"reviews": { "count": 342 },"languages": [],"specialties": [],"nmlsType": "Company","confirmedReviews": 210,"recentReviews": 12,"totalReviews": 342,"scrapedAt": "2026-07-25T14:05:02.000Z"}
This is the compact card shape returned from the lender directory. phone, email, and address are only populated when lender_fields requests fields not present on a directory listing โ that triggers a full profile fetch instead of the directory card.
How many results can you scrape with Zillow Agents Finder?
The limit input field accepts 0โ10000, defaulting to 20; setting it to 0 removes the input-level cap entirely. Internally, each directory crawl (one per search name, or the single location crawl) still stops after 10,000 records as a safety ceiling in the code, regardless of limit. Pagination differs by operation: the agents directory walks pages until it hits limit, runs out of results, or gets three consecutive empty pages in a row; the lenders directory walks the mortgage API in fixed pages of 10 until Zillow's own reported total is exhausted. Direct urls entries (profile URLs, @screenNames) bypass pagination entirely โ each is fetched once. There is no separately published Zillow-side rate limit to cite; the practical ceiling on a given run is the limit you set and how much the directory search itself returns.
Integrate Zillow Agents Finder and automate your workflow
Zillow Agents Finder works with any language or tool that can send an HTTP request.
REST API integration
import requestsACTOR_ID = "captivated_transformer~zillow-agents-finder"TOKEN = "<YOUR_APIFY_TOKEN>"resp = requests.post(f"https://api.apify.com/v2/acts/{ACTOR_ID}/run-sync-get-dataset-items",params={"token": TOKEN},json={"operation": "agents", "location": "Austin, TX", "limit": 25},timeout=300,)resp.raise_for_status()for record in resp.json():print(record["name"], record.get("business"), record.get("rating"))
Works in Python, Node.js, Go, Ruby, cURL.
Automation platforms (n8n, Make)
In n8n, the official Apify node's Run Actor and get dataset items operation can call captivated_transformer/zillow-agents-finder directly with your input JSON, or an HTTP Request node can hit the same run-sync-get-dataset-items endpoint shown above. In Make, the Apify app's Run Actor & Get Dataset Items module takes the same JSON input and drops each output record into downstream modules (a CRM upsert, a Google Sheets row, a Slack alert) without any custom parsing step.
Is it legal to scrape Zillow?
Yes โ Zillow Agents Finder only collects data that is already publicly visible on Zillow's agent, lender, and review directory pages; no login-gated or private content is accessed. Because agent and lender names, contact details, and reviewer names are personal and business data, GDPR and CCPA (and equivalent regimes) still apply to what you do with the data after collection โ you need a lawful basis to store and use personal data, and reviewers retain rights over their own review text. Consult legal counsel for commercial use cases involving bulk personal data, especially outreach or resale.
Frequently asked questions
Does Zillow Agents Finder work without a Zillow account?
Yes. The Actor never logs in โ every request goes to Zillow's public directory and profile pages with no account or API key required.
How often is the scraped data updated?
Every run fetches live from Zillow at request time. There is no caching layer โ each run reflects whatever Zillow's directory and profile pages show at that moment.
What happens if an agent or lender profile no longer exists or fails to load?
The Actor logs a warning for that specific target and moves on to the next one rather than failing the whole run โ you'll see fewer rows in the dataset than targets requested, with the reason logged (a block, a fetch failure, or no data available).
Can I scrape private or restricted Zillow content?
No. Only publicly accessible directory and profile data is returned. Fields that Zillow itself doesn't expose on a given page โ for example, phone and street-level location on a directory card โ come back null unless you request the full profile with agent_detail_info or the right lender_fields.
Does Zillow Agents Finder work for AI agent workflows and LLM pipelines?
Yes. It's callable as an HTTP endpoint by any agent framework via the Apify API โ every response is typed JSON with stable field names, so it can be passed to an LLM or indexed into a vector store with no HTML-parsing step first.
How does Zillow Agents Finder handle Zillow's anti-bot system?
It uses Chrome-TLS-impersonating requests (curl_cffi, matched to a real Chrome version) and an automatic proxy escalation ladder โ direct โ Apify Datacenter โ Apify Residential, with sticky sessions so PerimeterX's session cookies stay valid โ plus block detection for captcha pages and HTTP 403/429 responses.
Does Zillow Agents Finder return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with stable field names โ no HTML, no selectors, no parsing step before passing it to an LLM context window or agent tool.
Can I use Zillow Agents Finder without managing proxies?
Yes. By default it sends requests with no proxy at all and only escalates to Apify Datacenter, then Apify Residential, if Zillow blocks the request. You can also force a specific proxy group through proxyConfiguration.
What happens when Zillow changes its structure or blocks the scraper?
The Actor is maintained, and the output schema stays stable on your end โ field names and types don't change because Zillow's markup changed. There's no numeric turnaround guarantee, but the extractors are already built to degrade gracefully across more than one historical payload shape rather than break outright.
Your feedback
Found a bug or missing a field? We want to know. Leave feedback or report an issue directly from the Actor's page in Apify Console, or open an issue on the Actor's issue tracker if one is linked there โ it helps keep this scraper maintained and accurate.