Zillow Mortgage Lenders Scraper avatar

Zillow Mortgage Lenders Scraper

Pricing

Pay per event

Go to Apify Store
Zillow Mortgage Lenders Scraper

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

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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?

FieldDescription
zillowIdZillow's lender identifier
screenNamePublic Zillow lender screen name
profileUrlCanonical Zillow lender profile URL
nameIndividual lender or company name
firstName, lastNameIndividual name components when present
titlePublic professional title
companyNameEmployer or lender company
nmlsIdNMLS identifier preserved as text
nmlsTypeIndividual or company registration type
ratingAggregate Zillow rating
totalReviewsTotal public review count
confirmedReviewsConfirmed review count when available
recentReviewsRecent review count when available
addressStructured street, city, state, and ZIP fields
addressFormattedNormalized one-line address
officePhoneNormalized public office phone
cellPhoneNormalized public cell phone
faxPhoneNormalized public fax phone
websitePublic lender or employer website
biographyPublic profile biography
languagesSpokenPublicly listed languages
nationallyRegisteredNational registration flag
stateLicensesPublic state license data
stateSponsorshipsPublic state sponsorship data
discoveredInInput locations that produced the lender
enrichedWhether profile enrichment succeeded
scrapedAtUTC extraction timestamp

How to scrape Zillow mortgage lenders

  1. Open the Actor input page.
  2. Enter one or more locations such as Austin, TX or New Jersey.
  3. Set a small maxItems value for your first run.
  4. Keep Enrich lender profiles enabled for contact and biography fields.
  5. Click Start.
  6. Preview results in the Dataset tab.
  7. 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 Jersey
  • Austin, TX
  • Phoenix, AZ
  • 90210

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 tierPrice 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:

  • maxItems unique lenders have been collected;
  • maxPagesPerLocation is 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, then zillowId.
  • 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 os
from apify_client import ApifyClient
client = 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().items
print(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.

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.

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.