Zillow Mortgage Lenders Scraper
Pricing
Pay per event
Zillow Mortgage Lenders Scraper
Discover public Zillow mortgage lenders by location or profile. Export NMLS identity, company, contacts, address, biography, ratings, and review counts for lead research.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Turn Zillow's public mortgage lender directory into structured, contact-ready lead data.
Search one or many US locations, enrich every lender profile, and export NMLS identity, company, address, phone, website, biography, rating, and review totals.
The Actor also accepts known Zillow lender profile URLs or screen names, so it works for both market discovery and recurring profile enrichment.
What does Zillow Mortgage Lenders Scraper do?
Zillow Mortgage Lenders Scraper discovers public mortgage lender profiles by location.
It calls Zillow's public mortgage directory and profile data surfaces, merges duplicate records, and saves one clean lender record per dataset item.
Use it to:
- π find mortgage lenders in a city, state, or ZIP code;
- πͺͺ preserve Zillow IDs and NMLS IDs for reliable matching;
- βοΈ collect public office and cell phone numbers;
- π collect company websites and Zillow profile URLs;
- β compare aggregate ratings and review counts;
- π enrich profiles with titles, biographies, languages, and licensing data;
- π refresh the same prospect markets on a schedule.
Individual review bodies are not part of this version. Aggregate rating and review totals are included.
Who is it for?
Mortgage technology and vendor sales teams
Build market-specific lender prospect lists for CRM outreach, territory planning, and account enrichment.
Mortgage recruiters
Identify licensed loan officers, their employers, locations, public contact details, and reputation signals.
Brokerages and lenders
Research local competitors, compare lender presence by market, and monitor public profile changes.
Lead-data teams
Create repeatable Zillow-to-CRM pipelines while retaining NMLS identity for deduplication.
Analysts
Study lender concentration, employer networks, public ratings, and market coverage without copying data manually.
Why use this Actor?
- HTTP-first extraction: it uses public JSON endpoints instead of a full browser.
- Lower compute: the default run uses 256 MB memory.
- Flexible discovery: search locations or submit exact lender profiles.
- Enriched records: directory results can be expanded with public profile details.
- Stable identity: Zillow lender ID, screen name, and NMLS ID are retained.
- Cross-market deduplication: the same lender is saved once, with every discovery location listed.
- Partial-failure reporting: a failed location does not erase successful location results.
- Apify-ready exports: download JSON, CSV, Excel, XML, or RSS from the dataset.
What Zillow lender data can you extract?
| Field | Description |
|---|---|
zillowId | Zillow's lender identifier |
screenName | Public Zillow lender screen name |
profileUrl | Canonical Zillow lender profile URL |
name | Individual lender or company name |
firstName, lastName | Individual name components when present |
title | Public professional title |
companyName | Employer or lender company |
nmlsId | NMLS identifier preserved as text |
nmlsType | Individual or company registration type |
rating | Aggregate Zillow rating |
totalReviews | Total public review count |
confirmedReviews | Confirmed review count when available |
recentReviews | Recent review count when available |
address | Structured street, city, state, and ZIP fields |
addressFormatted | Normalized one-line address |
officePhone | Normalized public office phone |
cellPhone | Normalized public cell phone |
faxPhone | Normalized public fax phone |
website | Public lender or employer website |
biography | Public profile biography |
languagesSpoken | Publicly listed languages |
nationallyRegistered | National registration flag |
stateLicenses | Public state license data |
stateSponsorships | Public state sponsorship data |
discoveredIn | Input locations that produced the lender |
enriched | Whether profile enrichment succeeded |
scrapedAt | UTC extraction timestamp |
How to scrape Zillow mortgage lenders
- Open the Actor input page.
- Enter one or more locations such as
Austin, TXorNew Jersey. - Set a small
maxItemsvalue for your first run. - Keep Enrich lender profiles enabled for contact and biography fields.
- Click Start.
- Preview results in the Dataset tab.
- Export the dataset or connect it to your automation.
For exact lookups, leave locations empty and provide lender profile URLs or screen names.
Input options
locations
A list of human-readable US locations accepted by Zillow's lender directory.
Examples:
New JerseyAustin, TXPhoenix, AZ90210
screenNames
Known Zillow lender screen names to enrich directly.
profileUrls
Known Zillow profile URLs such as:
https://www.zillow.com/lender-profile/jonwmlo/
maxItems
The global maximum number of unique lender records saved across all inputs.
maxPagesPerLocation
A safety cap on directory pagination for each location.
pageSize
The number of directory records requested per page, up to Zillow's current limit of 20.
enrichProfiles
When enabled, fetches contact, biography, address, language, and licensing details.
profileConcurrency
Controls simultaneous profile requests. The default of 4 is intentionally conservative.
proxyConfiguration
Direct requests work by default. Configure Apify Proxy or custom proxies if your environment receives blocking responses.
Example input
{"locations": ["Austin, TX", "San Antonio, TX"],"maxItems": 40,"maxPagesPerLocation": 2,"pageSize": 20,"enrichProfiles": true,"profileConcurrency": 4,"proxyConfiguration": {"useApifyProxy": false}}
Direct profile enrichment:
{"profileUrls": ["https://www.zillow.com/lender-profile/jonwmlo/"],"maxItems": 1}
Example output
{"zillowId": "ZU123example","screenName": "jonwmlo","profileUrl": "https://www.zillow.com/lender-profile/jonwmlo/","name": "Jonathan Williamson","title": "Loan Officer","companyName": "Example Mortgage","nmlsId": "2021483","nmlsType": "Individual","rating": 5,"totalReviews": 44,"addressFormatted": "123 Main St, Rocklin, CA, 95677","officePhone": "(555) 111-2222","cellPhone": "(555) 333-4444","website": "https://example.com","languagesSpoken": ["English"],"discoveredIn": ["Austin, TX"],"enriched": true,"scrapedAt": "2026-07-18T00:00:00.000Z"}
Values vary by what each lender publishes. Missing optional values are returned as null, empty arrays, or empty objects with stable field names.
How much does it cost to scrape Zillow mortgage lenders?
This Actor uses pay-per-event pricing.
- A small one-time Start event costs $0.005 and covers run setup.
- A Lender profile event is charged for each unique record saved.
- Subscription tiers receive decreasing per-record prices.
| Apify plan tier | Price per lender profile |
|---|---|
| Free | $0.000061169 |
| Bronze | $0.00005319 |
| Silver | $0.000041489 |
| Gold | $0.000031914 |
| Platinum | $0.000021276 |
| Diamond | $0.000014893 |
The input prefill uses only 20 lenders so you can verify the output cheaply before scaling.
Your final cost appears in the Apify run detail and depends mainly on the number of saved lender records.
Pagination and result limits
Zillow's directory currently returns up to 20 lenders per page.
The Actor stops when any of these happens:
maxItemsunique lenders have been collected;maxPagesPerLocationis reached;- Zillow returns a short page;
- all supplied inputs are processed.
The global limit applies after deduplication, not once per location.
Deduplication and identity
Records are deduplicated by Zillow lender ID when available.
Screen name is used as the fallback key.
If one lender appears in several markets, discoveredIn contains each market while the lender is saved only once.
NMLS IDs are exported as strings so leading zeros and large identifiers remain safe in spreadsheets and databases.
Failed inputs and run summaries
The default key-value store contains an OUTPUT record with:
- number of lenders saved;
- number of lenders discovered;
- failed locations and error messages;
- invalid profile URLs;
- profile enrichment failure count.
A failed location does not fail the whole run if another input produced useful records.
If every input fails to produce a lender, the Actor exits non-zero instead of reporting a misleading successful empty run.
Tips for reliable lender lead extraction
- Start with one location and 20 records.
- Use specific city/state combinations when you need local prospects.
- Keep enrichment concurrency at 4 unless you have evidence a higher value is needed.
- Schedule recurring runs rather than requesting a huge dataset repeatedly.
- Match records downstream using
nmlsId, thenzillowId. - Review public data before outreach and honor applicable marketing rules.
- Enable a residential proxy only after direct requests are consistently blocked.
Integrations
Google Sheets
Send new dataset items to a spreadsheet for recruiter or sales review.
Airtable
Create a lender research base keyed by NMLS ID and market.
HubSpot or Salesforce
Use Make, Zapier, n8n, or a webhook to upsert lender/company leads into a CRM.
Slack
Post newly discovered high-rating lenders to a market research channel.
Webhooks
Trigger your own enrichment or compliance workflow when a run completes.
Scheduled monitoring
Run daily, weekly, or monthly and compare snapshots by NMLS ID.
JavaScript API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/zillow-mortgage-lenders-scraper').call({locations: ['Austin, TX'],maxItems: 20,enrichProfiles: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python API example
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/zillow-mortgage-lenders-scraper').call(run_input={'locations': ['Austin, TX'],'maxItems': 20,'enrichProfiles': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL API example
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~zillow-mortgage-lenders-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"locations":["Austin, TX"],"maxItems":20,"enrichProfiles":true}'
Fetch dataset items after the run finishes:
$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json"
Use with Apify MCP and AI agents
Connect the Actor through Apify MCP.
Claude Code setup
claude mcp add --transport http apify \"https://mcp.apify.com/?tools=automation-lab/zillow-mortgage-lenders-scraper"
Claude Desktop setup
Add this remote server to your Claude Desktop MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=automation-lab/zillow-mortgage-lenders-scraper"}}}
Cursor setup
Use the same mcpServers JSON in Cursor's MCP settings.
VS Code setup
Add the same remote Apify MCP URL through the VS Code MCP server configuration.
Example prompts:
- βFind 50 Zillow mortgage lenders in Phoenix and return NMLS ID, company, phone, and rating.β
- βEnrich these Zillow lender profile URLs and group the results by employer.β
- βCompare lender counts and median ratings across Austin and San Antonio.β
Data quality and limitations
The Actor exports public data supplied by Zillow's lender directory and lender profile surfaces.
Not every lender publishes every optional contact or biography field.
The enriched flag tells you whether the detailed profile request succeeded.
Individual review text is intentionally excluded. This Actor provides aggregate rating and review counts only.
Zillow can change its internal data surfaces. Conservative requests, retries, and explicit failure reporting reduce silent errors.
Is it legal to scrape Zillow mortgage lender data?
Scraping public information can be lawful, but your use of the data matters.
You are responsible for complying with Zillow's terms, privacy rules, database rights, consumer-protection law, and outreach regulations that apply to your jurisdiction and use case.
Do not use the Actor to harass people, make prohibited eligibility decisions, or send unlawful marketing messages.
Consult qualified legal counsel for regulated or high-risk workflows.
Frequently asked questions
Does it scrape individual Zillow lender reviews?
No. It exports aggregate ratings and review counts, not individual review bodies.
Can I search multiple locations?
Yes. Add several values to locations. The global maxItems limit applies across all of them.
Can I scrape one known lender?
Yes. Provide a Zillow lender profile URL or public screen name.
Why is a phone number or website null?
That lender may not publish the field, or profile enrichment may have failed. Check enriched and the run's OUTPUT record.
Why did my location return no records?
Try Zillow's familiar City, ST, state, or ZIP format. Also review failedLocations in OUTPUT for request errors.
When should I use a proxy?
Start without one. If direct runs consistently receive blocking responses, enable Apify Proxy and use residential routing only when needed.
How do I avoid duplicate CRM contacts?
Use nmlsId as the primary external key and zillowId as a secondary source key.
Can I schedule recurring exports?
Yes. Use Apify schedules and integrations to refresh markets daily, weekly, or monthly.
Related scrapers
- Zillow Scraper for property listings and real-estate market data.
- Zillow Agents Scraper for real-estate agent profiles rather than mortgage lenders.
- NMLS Mortgage License Search Scraper for registry-oriented mortgage licensing research.
Choose this Actor when Zillow mortgage lender discovery and profile enrichment are the primary workflow.
Support
If a run behaves unexpectedly, open an Actor issue and include:
- the run URL;
- a sanitized input example;
- the location or profile that failed;
- the expected result;
- whether a proxy was enabled.
That evidence makes source changes and edge cases much faster to reproduce.