Zillow Agents Scraper | $1/1K | Profiles & Contacts
Pricing
from $1.00 / 1,000 paid plans: saved agent or team profiles
Zillow Agents Scraper | $1/1K | Profiles & Contacts
Scrape Zillow real estate agent and team profiles by city, ZIP or profile URL. Export available public phones, emails, brokerage, ratings and sales to CSV.
Pricing
from $1.00 / 1,000 paid plans: saved agent or team profiles
Rating
0.0
(0)
Developer
Hundevmode Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
Zillow Agents Scraper
Find Zillow real estate agents and teams by location, or collect known profile URLs. Export available public business phone numbers, emails, brokerage details, reviews and sales statistics to CSV or JSON.
Result pricing: $1.00/1,000 agent or team rows on paid Apify plans; $3.00/1,000 on Free. Automatic source access recovery is included. No Zillow login or additional service is required.
What you can collect
- Search the live agent directory by city and state or ZIP code.
- Include individual profiles by default for available business contacts and profile statistics.
- Distinguish teams from individuals with
isTeam, and omit teams when you only need individual agents. - Use directory-only mode for a smaller request count when profile contacts are unnecessary.
How to use Zillow Agents Scraper
- Enter locations or Zillow agent-directory/profile URLs.
- Set Maximum results this run and optional filters.
- Set a spending limit in Apify run options, then click Start.
- Open the results, review the coverage summary, and download CSV, Excel or JSON.
Quick-start input
{"locations": ["Austin, TX"],"maxResults": 5}
This example is a starting point; replace its sources with your own. URL-only runs should leave locations empty.
Input options
| Input | Purpose | Default |
|---|---|---|
locations | Up to 100 US cities with state, or five-digit ZIP codes. | Empty |
startUrls | Agent directory or /profile/ URLs as [{"url":"…"}]. | Empty |
includeProfileDetails | Fetch profiles for available contacts and statistics; no separate enrichment fee. | true |
includeTeams | Include team rows marked isTeam=true. | true |
maxResults | Maximum new agent or team rows this run. | 100 |
resumeFromRunId | Continue the latest finished batch with the same query. | Unset |
advanced | Optional request, time, download and retry ceilings. | 300 requests, 600 seconds, 50 MB on paid plans |
Manually supplied source lists accept up to 100 entries. You may combine supported input methods; earlier sources can consume the shared result limit before later ones are reached.
Output: CSV and JSON fields
Each result is one agent or team record. Missing source fields are null. The default table uses readable column labels while exports keep stable field names.
| Data | Columns |
|---|---|
| Profile | recordId, agentId, url, name, isTeam |
| Public contacts | phone, businessPhone, email, brokerage |
| Location | city, state, zipcode |
| Activity | rating, reviewCount, salesLast12Months, totalSales |
| Enrichment outcome | profileStatus: profile enrichment can fail while retaining the directory row. |
Nested attributes, where present, are serialized as JSON strings so CSV remains flat. Errors are not mixed into paid dataset rows. Coverage and limits (RUN_SUMMARY), Source issues (ERRORS) and Continue collection (PAGINATION) are separate run output links. REQUEST_METRICS and CHECKPOINT are available in key-value storage.
Directory pagination continues beyond the first page. Advertisements are excluded; source caps and profile failures are reported. Map splitting is not used for the agent directory.
💳 Pricing and spending limits
| Apify account | Price per 1,000 agent or team rows | Collection allowance |
|---|---|---|
| Paid plan | $1.00 | Requested count, source availability and run limits |
| Free | $3.00 | 25 rows across one collection and its continuation chain |
Profile enrichment is included in the row price; unavailable contacts and failed enrichment can still leave a useful saved directory row.
The platform actor-start event is $0.00005 per GB of allocated memory, with a minimum of one event. A 256 MB run therefore pays $0.00005 to start. Each new continuation run and each Resurrect may incur another start event. There are no separate enrichment or access-recovery add-ons. Platform usage is included in the PPE policy; no extra dataset-item event is configured.
Apify authenticates the account plan automatically; input cannot select the cheaper rate. Free is an Apify account plan, not zero-price output: results consume available account credits. Free runs also stop at 40 requests, 180 seconds or 10 MB of compressed downloaded responses. These ceilings cannot be raised in the input. Downloads are checked between responses, so one response can exceed the remaining traffic allowance. Independent fresh collections have independent allowances; this is not an account-wide monthly quota.
Minimum permitted Max total charge: $0.00305, covering the start event and at least one result at the highest Free rate. This is a minimum budget setting, not a minimum bill: only the start and saved result events are charged. The same result rates apply to all paid Apify plans.
Set Max total charge in Apify run options, or maxTotalChargeUsd through the API. The requested result count is not a dollar budget. The SDK checks remaining run budget before saving charged rows, and Apify can stop a run when its budget is reached. Paid-account credit balance and overage settings are separate from this run limit. Rates are configured for the current private release; the actor has not been published in Apify Store.
🔁 Continue after a limit or source error
- Keep the saved dataset and wait until the previous run has finished.
- Open Continue collection (
PAGINATION) in the run output. - If
hasMore=true, copy the fullnextInputinto a new run of this same actor. It includesresumeFromRunId. - Keep the query, filters and any monitor baseline unchanged. You may change
maxResultsand advanced collection limits; ZIP per-code quotas stay unchanged. - Set a new spending budget. Download this batch’s dataset and combine it with your earlier batches.
The next batch contains newly saved rows only. Earlier rows are skipped and are not charged again along that continuation chain. Use the latest finished batch: branching twice from an older run can create overlapping datasets. The previous run must belong to your own account and this actor, and its storage must remain available.
| Stop or issue | Next step |
|---|---|
| Result, request, time or download ceiling | Use PAGINATION.nextInput if hasMore=true; adjust the next batch’s limits. |
| Temporary restriction or HTTP 403 | Bounded automatic recovery has already been attempted. Retain progress and try the continuation later. A fresh run does not guarantee that access is restored. |
| Spending limit | Keep saved rows and resume with a new per-run budget. The budget is not shared across the chain. |
| Free collection allowance | Continuation and Resurrect do not replenish it. Upgrade the account before collecting beyond the Free allowance. |
| Invalid input or changed query | Correct the input; keep the original query for continuation or start a separate collection. |
| Missing checkpoint after a hard stop | A usable continuation may be unavailable. Keep any saved rows; a fresh collection cannot guarantee deduplication against that dataset. |
Apify Resurrect restarts the same run and storage. resumeFromRunId creates a separate batch and dataset. Do not use both methods simultaneously. A requested count is a ceiling, not a promise that Zillow has that many accessible records.
Run through the Apify API
The same JSON input works in Apify Console and through the Apify Actor API. Start a run, wait for it to finish, then export its dataset as JSON, CSV or Excel. Use the actor ID from its Console page and your own Apify API token; no Zillow API key is required. Pass maxTotalChargeUsd as a run option rather than an input field. Never put API tokens in the input.
Choose the right Zillow actor
Choose this actor for the Zillow agent directory and agent/team profiles. Use Zillow Property Details Scraper for contacts attached to a known property listing; listing contacts and directory profiles are different records.
Frequently asked questions
Are emails and phone numbers guaranteed?
No. Only contacts available in the public source are returned; missing fields are null. A saved directory row can have no email or a failed profile enrichment.
Are these property-owner leads?
These are agent and team profiles. An agent’s public business contact is not the contact of the owner of a listed property.
How can I reduce collection time?
Set includeProfileDetails to false for directory rows without additional profile requests. Contacts available only on individual profiles will not be fetched.
How are team sales counted?
Zillow may display sales for the whole team. Keep isTeam in your export when comparing activity; do not interpret team totals as one agent’s personal sales.
Is this an official Zillow API?
No. This is an independent actor callable through the Apify API. It is not affiliated with, sponsored or endorsed by Zillow. Source fields, layouts and access can change; complete extraction and uninterrupted access are not guaranteed.
