# Lawyer & Attorney Lead Scraper — Verified Emails (`muhammadafzal/lawyer-lead-scraper`) Actor

Scrape lawyer & attorney contacts from Google Maps with verified emails, phones & social links. Export to HubSpot, Salesforce, or CSV. Built for legal SaaS sales, marketing & recruiting.

- **URL**: https://apify.com/muhammadafzal/lawyer-lead-scraper.md
- **Developed by:** [Muhammad Afzal](https://apify.com/muhammadafzal) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $25.00 / 1,000 enriched attorney leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

## Lawyer & Attorney Lead Scraper — Verified Emails & Law Firm Leads

Scrape lawyer and attorney contacts from Google Maps with **verified emails**, phone numbers, social media links, and attorney names. Built for legal SaaS sales, legal marketing agencies, and recruiting teams who need CRM-ready attorney lead lists.

The actor searches Google Maps by practice area and location, then crawls each law firm's website to extract contact emails, attorney names and titles, social profiles, and practice areas. Emails are verified via DNS MX record lookup to flag deliverable inboxes. Export to **HubSpot**, **Salesforce**, or CSV in a single run.

Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools.

### Use Cases

- **Legal SaaS sales** — Build targeted prospect lists of personal injury, family, or corporate law firms for case management, billing, and e-signature tools
- **Legal marketing agencies** — Generate attorney lead lists by city and practice area for SEO, PPC, and web design outreach
- **Legal recruiting** — Find attorneys by specialty and geography for placement and headhunting
- **Court reporting & litigation support** — Prospect personal injury, criminal defense, and family law firms
- **Bar associations** — Membership outreach and continuing legal education campaigns

### Features

- **Google Maps search** — Find law firms by practice area (11+ preset categories) or custom search query
- **Verified emails** — Crawls firm websites and verifies email deliverability via DNS MX record lookup
- **Attorney names & titles** — Extracts individual attorney names and professional titles from About/Team pages
- **Social media links** — Finds Facebook, Instagram, LinkedIn, Twitter/X, YouTube, and TikTok profiles
- **Multi-location batch mode** — Search multiple cities in a single run and combine results
- **Deduplication** — Removes duplicate firms by phone or website across multi-location runs
- **CRM export formats** — Output in Full, HubSpot CSV import, or Salesforce import format
- **No login required** — No Google account or cookies needed
- **Residential proxies** — Uses Apify's residential proxy pool by default for reliable access

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `businessType` | string | `Personal Injury Lawyer` | Select from 11 practice area presets, or `Custom` |
| `location` | string | `Chicago, IL` | City, state, or region to search (e.g., `Los Angeles, CA`) |
| `locations` | array | — | Multiple locations for batch mode (e.g., `["Chicago, IL", "Houston, TX"]`) |
| `searchQuery` | string | — | Custom Google Maps query (used when businessType = `Custom`) |
| `startUrls` | array | — | Direct Google Maps place URLs to scrape |
| `maxResults` | integer | `50` | Maximum number of leads to collect (1–2000) |
| `enrichEmails` | boolean | `true` | Crawl firm websites to find email addresses |
| `verifyEmails` | boolean | `true` | Verify email deliverability via DNS MX lookup |
| `enrichSocials` | boolean | `true` | Extract social media profile links |
| `extractAttorneyNames` | boolean | `true` | Extract attorney names and titles from firm websites |
| `outputFormat` | string | `full` | `full`, `hubspot`, or `salesforce` |
| `deduplicateResults` | boolean | `true` | Remove duplicate firms across multi-location runs |
| `maxWebsitePages` | integer | `5` | Max pages to crawl per firm website (1–20) |
| `proxyUrl` | string | — | Custom HTTP proxy URL (format: `http://user:pass@host:port`) |

#### Quick Start Example

```json
{
    "businessType": "Personal Injury Lawyer",
    "location": "Los Angeles, CA",
    "maxResults": 50,
    "enrichEmails": true,
    "verifyEmails": true,
    "outputFormat": "hubspot"
}
````

#### Multi-City Batch Example

```json
{
    "businessType": "Family Lawyer",
    "locations": ["New York, NY", "Chicago, IL", "Houston, TX", "Miami, FL"],
    "maxResults": 200,
    "outputFormat": "salesforce"
}
```

### Output Data

Each lead record contains:

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Law firm name |
| `attorney_name` | string|null | Individual attorney name (if found on website) |
| `attorney_title` | string|null | Professional title (e.g., Managing Partner) |
| `category` | string | Practice category from Google Maps |
| `practice_areas` | array | Specific practice areas from firm website |
| `address` | string|null | Full postal address |
| `phone` | string|null | Primary phone number |
| `website` | string|null | Firm website URL |
| `email` | string|null | Primary contact email |
| `all_emails` | array | All emails found with verification status |
| `email_verified` | boolean|null | Whether email passed DNS verification |
| `email_verification_status` | string | `deliverable`, `undeliverable`, `risky`, `unknown`, `not_verified` |
| `social_links` | object | Facebook, Instagram, LinkedIn, Twitter, YouTube, TikTok URLs |
| `rating` | number|null | Google Maps rating (1–5) |
| `review_count` | integer|null | Number of Google Maps reviews |
| `maps_url` | string|null | Direct Google Maps listing URL |
| `scraped_at` | string | ISO 8601 timestamp |
| `source_url` | string | Source Google Maps URL |

#### Sample Output

```json
{
    "name": "Smith & Associates Law Firm",
    "attorney_name": "John Smith, Esq.",
    "attorney_title": "Managing Partner",
    "category": "Personal injury lawyer",
    "practice_areas": ["Personal Injury", "Medical Malpractice", "Wrongful Death"],
    "address": "123 Main St, Chicago, IL 60601",
    "phone": "+1-312-555-0100",
    "website": "https://smithlaw.com",
    "email": "contact@smithlaw.com",
    "all_emails": [
        {
            "address": "contact@smithlaw.com",
            "verified": true,
            "status": "deliverable",
            "verificationNote": "MX record found: mail.smithlaw.com"
        }
    ],
    "email_verified": true,
    "email_verification_status": "deliverable",
    "social_links": {
        "facebook": "https://facebook.com/smithlaw",
        "linkedin": "https://linkedin.com/company/smithlaw"
    },
    "rating": 4.8,
    "review_count": 127,
    "maps_url": "https://www.google.com/maps/place/Smith+%26+Associates",
    "scraped_at": "2026-06-24T12:00:00.000Z",
    "source_url": "https://www.google.com/maps/place/Smith+%26+Associates"
}
```

### Pricing

This actor uses **pay-per-event pricing**: **$0.025 per enriched attorney lead**.

| Leads | Cost |
|-------|------|
| 10 leads | $0.25 |
| 50 leads | $1.25 |
| 100 leads | $2.50 |
| 500 leads | $12.50 |
| 1,000 leads | $25.00 |

You only pay for successfully enriched leads with contact data — no charge for empty results.

### Code Examples

#### Run via Apify SDK (JavaScript)

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('muhammadafzal/lawyer-lead-scraper').call({
    businessType: 'Personal Injury Lawyer',
    location: 'Los Angeles, CA',
    maxResults: 50,
    enrichEmails: true,
    verifyEmails: true,
    outputFormat: 'hubspot'
});

const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${dataset.items.length} attorney leads`);
```

#### Run via REST API

```bash
curl -X POST "https://api.apify.com/v2/acts/muhammadafzal~lawyer-lead-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"businessType":"Family Lawyer","location":"Miami, FL","maxResults":20}'
```

#### Schedule a Daily Run

```bash
apify schedule create --actor muhammadafzal/lawyer-lead-scraper \
  --cron "0 9 * * 1" \
  --input '{"businessType":"Criminal Defense Attorney","location":"Houston, TX","maxResults":100}'
```

### FAQ

#### Why are some emails null?

Not all law firm websites list email addresses publicly. The actor crawls contact, about, team, and attorneys pages. If no email is found, the field is `null` and you still get the phone, address, and social links.

#### How does email verification work?

The actor performs DNS MX record lookup on each email's domain to confirm a mail server exists. Emails from domains with valid MX records are marked `deliverable`. This reduces bounce rates compared to unverified email lists.

#### What if Google Maps blocks the request?

The actor uses Apify's residential proxy pool by default. If you experience blocks, you can provide a custom proxy URL via the `proxyUrl` parameter using services like IPRoyal, Smartproxy, or Bright Data.

#### Can I search multiple cities at once?

Yes. Use the `locations` array parameter with multiple cities. The actor searches each location and combines results with deduplication enabled by default.

#### What CRM formats are supported?

`full` returns all fields. `hubspot` formats output for HubSpot CSV import. `salesforce` formats for Salesforce data import. All formats are exportable as CSV, JSON, or Excel from Apify's dataset.

### Integration Ideas

- **HubSpot**: Set `outputFormat: "hubspot"`, export dataset as CSV, import directly into HubSpot Contacts
- **Salesforce**: Set `outputFormat: "salesforce"`, export as CSV and use Data Import Wizard
- **Mailchimp**: Filter leads where `email_verified === true`, export emails for email outreach campaigns
- **Apollo/Outreach**: Use the `attorney_name` and `email` fields for personalized cold email sequences

### Changelog

- **v1.0** — Initial release with Google Maps search, email enrichment, DNS verification, social link extraction, attorney name extraction, multi-location batch mode, and HubSpot/Salesforce export formats

# Actor input Schema

## `businessType` (type: `string`):

Use this field to select the type of legal professional to find on Google Maps. The actor automatically constructs the search query — for example, selecting 'Personal Injury Lawyer' with location 'Los Angeles, CA' finds personal injury attorneys in that city. Select 'Criminal Defense Attorney' to build a DUI or felony defense law firm list. Choose 'Custom' to write your own search query via the searchQuery field instead.

## `location` (type: `string`):

Use this field to specify the city, state, or region to search for law firms in. Use 'City, ST' format for US locations — for example, 'Los Angeles, CA' for personal injury attorneys or 'Houston, TX' for immigration lawyers. You can also use ZIP codes, neighborhoods, or broader regions like 'Downtown Manhattan'. The more specific your location, the more targeted your attorney lead list.

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

Use this field when you want to search multiple cities or regions in a single run. Each location is searched separately and results are combined. Example: \['Chicago, IL', 'Houston, TX', 'Miami, FL']. Leave empty to use the single 'location' field instead. Great for building multi-city attorney lead lists in one run.

## `searchQuery` (type: `string`):

A raw Google Maps search query, used ONLY when Business Type is set to 'Custom'. For all other types, the search is built automatically from Business Type + Location. Write queries the same way you would type them into Google Maps — for example: 'workers compensation lawyers in Phoenix AZ', 'employment attorney Manhattan', or 'real estate attorney 90210'.

## `startUrls` (type: `array`):

Use this field when the user provides specific Google Maps place URLs to scrape directly. Format: \[{"url": "https://www.google.com/maps/place/..."}]. Do NOT use this when the user describes a practice area or location — use businessType + location instead.

## `maxResults` (type: `integer`):

The maximum number of law firm leads to collect and return. Set to a small number (3-5) first to verify data quality before scaling up. Google Maps typically returns up to 120 results per search query.

## `enrichEmails` (type: `boolean`):

When enabled, the actor visits each law firm website and scans contact pages, footers, and about pages to extract email addresses. Disable this option if you only need phone numbers and addresses, or want faster results without website crawling.

## `verifyEmails` (type: `boolean`):

When enabled, each extracted email address is checked using DNS (MX record lookup) and an SMTP handshake to confirm the mailbox exists and can receive mail. This adds roughly 1 extra minute to the run but significantly reduces bounce rates. Only applies when 'Find Email Addresses' is also enabled.

## `enrichSocials` (type: `boolean`):

When enabled, the actor scans each firm website for links to social media profiles including Facebook, Instagram, LinkedIn, and Twitter/X. These links are included in the output and are useful for multi-channel outreach and account-based marketing.

## `extractAttorneyNames` (type: `boolean`):

When enabled, the actor scans firm website 'About', 'Team', and 'Attorneys' pages to extract individual attorney names and titles (e.g., 'Managing Partner', 'Associate'). Adds attorney\_name and attorney\_title fields to each lead.

## `outputFormat` (type: `string`):

Controls the structure of the output dataset. 'full' returns all available fields. 'hubspot' reformats the data to match HubSpot's CSV import column names for direct upload. 'salesforce' reformats for Salesforce data import. All formats are available in Apify's dataset export (CSV, JSON, Excel).

## `deduplicateResults` (type: `boolean`):

When enabled, the actor removes duplicate law firms based on phone number or website URL. Useful when searching multiple locations that may overlap. Recommended for batch mode.

## `maxWebsitePages` (type: `integer`):

Maximum number of pages to crawl on each law firm website when enriching emails, socials, or attorney names. Higher values find more contacts but slow down the run. Default 5 is sufficient for most firm sites.

## `proxyUrl` (type: `string`):

Optional HTTP proxy URL for using third-party residential proxies instead of Apify's built-in proxies. Format: http://username:password@host:port. Compatible with IPRoyal, Smartproxy, Bright Data, and other rotating proxy services. Leave empty to use Apify's default residential proxies.

## Actor input object example

```json
{
  "businessType": "Personal Injury Lawyer",
  "location": "Chicago, IL",
  "searchQuery": "personal injury lawyers in Los Angeles, CA",
  "maxResults": 3,
  "enrichEmails": true,
  "verifyEmails": true,
  "enrichSocials": true,
  "extractAttorneyNames": true,
  "outputFormat": "full",
  "deduplicateResults": true,
  "maxWebsitePages": 5
}
```

# 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 = {
    "location": "Chicago, IL",
    "searchQuery": "personal injury lawyers in Los Angeles, CA",
    "maxResults": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammadafzal/lawyer-lead-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 = {
    "location": "Chicago, IL",
    "searchQuery": "personal injury lawyers in Los Angeles, CA",
    "maxResults": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("muhammadafzal/lawyer-lead-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 '{
  "location": "Chicago, IL",
  "searchQuery": "personal injury lawyers in Los Angeles, CA",
  "maxResults": 3
}' |
apify call muhammadafzal/lawyer-lead-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=muhammadafzal/lawyer-lead-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Lawyer & Attorney Lead Scraper — Verified Emails",
        "description": "Scrape lawyer & attorney contacts from Google Maps with verified emails, phones & social links. Export to HubSpot, Salesforce, or CSV. Built for legal SaaS sales, marketing & recruiting.",
        "version": "1.0",
        "x-build-id": "y1xz9c9SRy4g0xlqY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/muhammadafzal~lawyer-lead-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-muhammadafzal-lawyer-lead-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/muhammadafzal~lawyer-lead-scraper/runs": {
            "post": {
                "operationId": "runs-sync-muhammadafzal-lawyer-lead-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/muhammadafzal~lawyer-lead-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-muhammadafzal-lawyer-lead-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",
                "required": [
                    "businessType",
                    "location"
                ],
                "properties": {
                    "businessType": {
                        "title": "Business Type",
                        "enum": [
                            "Personal Injury Lawyer",
                            "Criminal Defense Attorney",
                            "Family Lawyer",
                            "Immigration Lawyer",
                            "Bankruptcy Attorney",
                            "Estate Planning Attorney",
                            "Corporate Lawyer",
                            "Employment Lawyer",
                            "Divorce Attorney",
                            "DUI Attorney",
                            "Real Estate Attorney",
                            "Custom"
                        ],
                        "type": "string",
                        "description": "Use this field to select the type of legal professional to find on Google Maps. The actor automatically constructs the search query — for example, selecting 'Personal Injury Lawyer' with location 'Los Angeles, CA' finds personal injury attorneys in that city. Select 'Criminal Defense Attorney' to build a DUI or felony defense law firm list. Choose 'Custom' to write your own search query via the searchQuery field instead.",
                        "default": "Personal Injury Lawyer"
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Use this field to specify the city, state, or region to search for law firms in. Use 'City, ST' format for US locations — for example, 'Los Angeles, CA' for personal injury attorneys or 'Houston, TX' for immigration lawyers. You can also use ZIP codes, neighborhoods, or broader regions like 'Downtown Manhattan'. The more specific your location, the more targeted your attorney lead list."
                    },
                    "locations": {
                        "title": "Multiple Locations (Batch Mode)",
                        "type": "array",
                        "description": "Use this field when you want to search multiple cities or regions in a single run. Each location is searched separately and results are combined. Example: ['Chicago, IL', 'Houston, TX', 'Miami, FL']. Leave empty to use the single 'location' field instead. Great for building multi-city attorney lead lists in one run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Custom Search Query",
                        "type": "string",
                        "description": "A raw Google Maps search query, used ONLY when Business Type is set to 'Custom'. For all other types, the search is built automatically from Business Type + Location. Write queries the same way you would type them into Google Maps — for example: 'workers compensation lawyers in Phoenix AZ', 'employment attorney Manhattan', or 'real estate attorney 90210'."
                    },
                    "startUrls": {
                        "title": "Start URLs (Direct Google Maps Place URLs)",
                        "type": "array",
                        "description": "Use this field when the user provides specific Google Maps place URLs to scrape directly. Format: [{\"url\": \"https://www.google.com/maps/place/...\"}]. Do NOT use this when the user describes a practice area or location — use businessType + location instead.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "The maximum number of law firm leads to collect and return. Set to a small number (3-5) first to verify data quality before scaling up. Google Maps typically returns up to 120 results per search query.",
                        "default": 50
                    },
                    "enrichEmails": {
                        "title": "Find Email Addresses",
                        "type": "boolean",
                        "description": "When enabled, the actor visits each law firm website and scans contact pages, footers, and about pages to extract email addresses. Disable this option if you only need phone numbers and addresses, or want faster results without website crawling.",
                        "default": true
                    },
                    "verifyEmails": {
                        "title": "Verify Email Deliverability",
                        "type": "boolean",
                        "description": "When enabled, each extracted email address is checked using DNS (MX record lookup) and an SMTP handshake to confirm the mailbox exists and can receive mail. This adds roughly 1 extra minute to the run but significantly reduces bounce rates. Only applies when 'Find Email Addresses' is also enabled.",
                        "default": true
                    },
                    "enrichSocials": {
                        "title": "Find Social Media Links",
                        "type": "boolean",
                        "description": "When enabled, the actor scans each firm website for links to social media profiles including Facebook, Instagram, LinkedIn, and Twitter/X. These links are included in the output and are useful for multi-channel outreach and account-based marketing.",
                        "default": true
                    },
                    "extractAttorneyNames": {
                        "title": "Extract Attorney Names & Titles",
                        "type": "boolean",
                        "description": "When enabled, the actor scans firm website 'About', 'Team', and 'Attorneys' pages to extract individual attorney names and titles (e.g., 'Managing Partner', 'Associate'). Adds attorney_name and attorney_title fields to each lead.",
                        "default": true
                    },
                    "outputFormat": {
                        "title": "Output Format",
                        "enum": [
                            "full",
                            "hubspot",
                            "salesforce"
                        ],
                        "type": "string",
                        "description": "Controls the structure of the output dataset. 'full' returns all available fields. 'hubspot' reformats the data to match HubSpot's CSV import column names for direct upload. 'salesforce' reformats for Salesforce data import. All formats are available in Apify's dataset export (CSV, JSON, Excel).",
                        "default": "full"
                    },
                    "deduplicateResults": {
                        "title": "Deduplicate Results",
                        "type": "boolean",
                        "description": "When enabled, the actor removes duplicate law firms based on phone number or website URL. Useful when searching multiple locations that may overlap. Recommended for batch mode.",
                        "default": true
                    },
                    "maxWebsitePages": {
                        "title": "Max Website Pages to Crawl",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of pages to crawl on each law firm website when enriching emails, socials, or attorney names. Higher values find more contacts but slow down the run. Default 5 is sufficient for most firm sites.",
                        "default": 5
                    },
                    "proxyUrl": {
                        "title": "Custom Proxy URL (optional)",
                        "type": "string",
                        "description": "Optional HTTP proxy URL for using third-party residential proxies instead of Apify's built-in proxies. Format: http://username:password@host:port. Compatible with IPRoyal, Smartproxy, Bright Data, and other rotating proxy services. Leave empty to use Apify's default residential proxies."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
