# Zillow Mortgage Lenders Scraper (`automation-lab/zillow-mortgage-lenders-scraper`) Actor

Discover public Zillow mortgage lenders by location or profile. Export NMLS identity, company, contacts, address, biography, ratings, and review counts for lead research.

- **URL**: https://apify.com/automation-lab/zillow-mortgage-lenders-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Zillow Mortgage Lenders Scraper

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

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

```json
{
  "locations": ["Austin, TX", "San Antonio, TX"],
  "maxItems": 40,
  "maxPagesPerLocation": 2,
  "pageSize": 20,
  "enrichProfiles": true,
  "profileConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

Direct profile enrichment:

```json
{
  "profileUrls": [
    "https://www.zillow.com/lender-profile/jonwmlo/"
  ],
  "maxItems": 1
}
```

### Example output

```json
{
  "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:

- `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

```javascript
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

```python
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

```bash
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:

```bash
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](https://mcp.apify.com/?tools=automation-lab/zillow-mortgage-lenders-scraper).

#### Claude Code setup

```bash
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:

```json
{
  "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](https://apify.com/automation-lab/zillow-scraper) for property listings and real-estate market data.
- [Zillow Agents Scraper](https://apify.com/automation-lab/zillow-agents-scraper) for real-estate agent profiles rather than mortgage lenders.
- [NMLS Mortgage License Search Scraper](https://apify.com/automation-lab/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.

# Actor input Schema

## `locations` (type: `array`):

One or more US locations, for example New Jersey, Austin TX, or 90210.

## `screenNames` (type: `array`):

Optional Zillow lender screen names to enrich directly.

## `profileUrls` (type: `array`):

Optional URLs such as https://www.zillow.com/lender-profile/jonwmlo/.

## `maxItems` (type: `integer`):

Maximum number of unique lender records saved across every input.

## `maxPagesPerLocation` (type: `integer`):

Safety cap for directory pagination. Zillow currently returns up to 20 lenders per page.

## `pageSize` (type: `integer`):

Directory page size. Keep 20 for efficient requests.

## `enrichProfiles` (type: `boolean`):

Fetch public contact, biography, address, licensing, and language details for every discovered lender.

## `profileConcurrency` (type: `integer`):

Number of lender profile API requests processed at once.

## `proxyConfiguration` (type: `object`):

Optional Apify Proxy or custom proxies. Direct requests work by default; use residential proxy only if Zillow blocks your run.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "screenNames": [],
  "profileUrls": [],
  "maxItems": 20,
  "maxPagesPerLocation": 2,
  "pageSize": 20,
  "enrichProfiles": true,
  "profileConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locations": [
        "Austin, TX"
    ],
    "maxItems": 20,
    "maxPagesPerLocation": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/zillow-mortgage-lenders-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "locations": ["Austin, TX"],
    "maxItems": 20,
    "maxPagesPerLocation": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/zillow-mortgage-lenders-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    "Austin, TX"
  ],
  "maxItems": 20,
  "maxPagesPerLocation": 2
}' |
apify call automation-lab/zillow-mortgage-lenders-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/zillow-mortgage-lenders-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zillow Mortgage Lenders Scraper",
        "description": "Discover public Zillow mortgage lenders by location or profile. Export NMLS identity, company, contacts, address, biography, ratings, and review counts for lead research.",
        "version": "0.1",
        "x-build-id": "QlATRz39gLGKnlMTo"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~zillow-mortgage-lenders-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-zillow-mortgage-lenders-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/automation-lab~zillow-mortgage-lenders-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-zillow-mortgage-lenders-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/automation-lab~zillow-mortgage-lenders-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-zillow-mortgage-lenders-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "One or more US locations, for example New Jersey, Austin TX, or 90210.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "screenNames": {
                        "title": "Zillow lender screen names",
                        "type": "array",
                        "description": "Optional Zillow lender screen names to enrich directly.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "profileUrls": {
                        "title": "Zillow lender profile URLs",
                        "type": "array",
                        "description": "Optional URLs such as https://www.zillow.com/lender-profile/jonwmlo/.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Maximum lenders",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of unique lender records saved across every input.",
                        "default": 20
                    },
                    "maxPagesPerLocation": {
                        "title": "Maximum pages per location",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Safety cap for directory pagination. Zillow currently returns up to 20 lenders per page.",
                        "default": 2
                    },
                    "pageSize": {
                        "title": "Lenders per page",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Directory page size. Keep 20 for efficient requests.",
                        "default": 20
                    },
                    "enrichProfiles": {
                        "title": "Enrich lender profiles",
                        "type": "boolean",
                        "description": "Fetch public contact, biography, address, licensing, and language details for every discovered lender.",
                        "default": true
                    },
                    "profileConcurrency": {
                        "title": "Profile concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of lender profile API requests processed at once.",
                        "default": 4
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy or custom proxies. Direct requests work by default; use residential proxy only if Zillow blocks your run.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
