# FindLaw Lawyer Scraper \[Only $0.9/1K💰] | Leads | Legal Data (`ahmed_jasarevic/lawyers-findlaw-scraper`) Actor

Scrape FindLaw attorney and law firm leads: name, firm, phone, address with geo, practice areas, ratings and credentials. For legal lead generation and law firm databases. From $0.0009 per record.

- **URL**: https://apify.com/ahmed_jasarevic/lawyers-findlaw-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 10 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.88 / 1,000 results

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## FindLaw Lawyer Directory Scraper — Attorney & Law Firm Leads

Extract **attorney and law-firm leads from the FindLaw lawyer directory** (lawyers.findlaw.com — Thomson Reuters) for **legal lead generation**, legal intake CRMs, and law firm databases. Returns one structured row per firm or attorney with **name, firm, practice areas, street address (with lat/long), phone, website, FindLaw rating, review count, staff attorneys, bar admissions, education and profile URL**. **$0.0009 per result — the cheapest FindLaw actor verified on Apify.**

### Main Use Cases

- **Legal lead generation** — prospect attorneys by practice area + city for marketing outreach and intake.
- **Legal intake CRMs** — feed firm phone numbers, websites and office geo-coordinates directly into your CRM.
- **Building a law firm database** — 1.2M+ FindLaw listings, filtered by practice, state and city, as clean structured rows.
- **Legal marketing data** — track FindLaw ratings and review counts across markets for law-firm marketing agencies.
- **Legal recruiting & market research** — who practices what, in which cities, with what credentials and ratings.

### How It Works

![FindLaw Scraper workflow: from practice areas and states to structured attorney and law firm lead records](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-lawyers-findlaw.webp)

Looking for a **FindLaw scraper** or a practical **FindLaw API alternative**? Target practice areas and states, or paste directory URLs, and collect attorney and law firm leads: names, firms, practice areas, addresses with geo coordinates, phones, websites, ratings, review counts, bar admissions and education. Ideal for legal lead generation, intake CRMs and law-firm databases.

Use the dataset to prospect by practice and city, enrich CRM records and compare credentials. Export as JSON, CSV or Excel, or pull results through the Apify API. Start with one practice and state, then pay from $0.90 per 1,000 records.

### Build Law Firm & Attorney Databases Without an Official API

FindLaw publishes **1.2M+ law firm listings** and exposes **no public API** for directory data. This actor turns the public directory into structured leads: **name, firm, job title, practice areas, address + lat/lon, phone, website, FindLaw rating + review count, staff attorneys, bar admissions, education, price range and profile URL** — with `recordType` distinguishing `firm` vs `attorney` rows.

Input is flexible:

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `practiceAreas` | array | No\* | `["divorce"]` | Practice-area URL slugs (e.g. `divorce`, `criminal-law`, `dui-dui`). One listing crawled per practice × state × city combo. |
| `states` | array | No\* | `["california"]` | US state URL slugs (e.g. `california`, `texas`, `florida`, `new-york`). |
| `cities` | array | No | `[]` | City URL slugs (e.g. `los-angeles`, `houston`). Empty = crawl state-level listings. |
| `startUrls` | array | No | `[]` | Extra FindLaw listing/hub/profile URLs, in addition to the combos above. |
| `includeProfileDetails` | boolean | No | `true` | Visit each attorney/firm profile for practice areas, geo, staff attorneys, bar admissions, education, price range. Off = fast listing-only scrape (~40 records/request). |
| `maxItems` | integer | No | `100` | Max attorney/firm records (free users capped at 10). |
| `maxPagesPerListing` | integer | No | `5` | How many `?page=N` result pages to follow per listing URL. |
| `maxCitiesPerHub` | integer | No | `0` | How many city listings to expand from each practice/state hub (0 = auto-sized from Max items). |
| `maxRequestsPerCrawl` | integer | No | `500` | Safety cap on total requests per run. |
| `proxy` | object | No | `{"useApifyProxy": true}` | **On by default** — residential proxy recommended for reliable collection. |

\* Either `practiceAreas`+`states` or `startUrls` must be used.

#### Example input

```json
{
  "practiceAreas": ["divorce"],
  "states": ["california"],
  "cities": ["los-angeles"],
  "maxItems": 50,
  "includeProfileDetails": true
}
```

### Understand the Output: Attorney Contact Data, Ratings & Credentials

One JSON object per attorney/firm:

```json
{
  "recordType": "attorney",
  "name": "Dena A. Kleeman",
  "firm": "Kleeman Kremen Family Lawyers",
  "jobTitle": "Attorney",
  "practiceAreas": ["Family Law", "Divorce"],
  "address": "499 North Canon Dr. Suite 200, Beverly Hills, CA, 90210",
  "addressParts": {
    "street": "499 North Canon Dr. Suite 200",
    "city": "Beverly Hills",
    "state": "CA",
    "zip": "90210",
    "country": "US",
    "latitude": null,
    "longitude": null
  },
  "offices": [],
  "phone": "424-319-6943",
  "email": null,
  "website": "https://kleemanlaw.com/",
  "contactUrl": "https://lawyers.findlaw.com/california/beverly-hills/dena-a-kleeman-Mjg4NTkwNl8x/contact/",
  "reviewUrl": "https://lawyers.findlaw.com/california/beverly-hills/dena-a-kleeman-Mjg4NTkwNl8x/review/",
  "rating": null,
  "reviewCount": null,
  "attorneys": [],
  "barAdmissions": ["California", "U.S. Federal Courts", "U.S. District Court Northern District of California"],
  "education": ["Stanford Law School", "Wesleyan University"],
  "priceRange": "Free Consultation, Varies based on case specifics",
  "profileUrl": "https://lawyers.findlaw.com/california/beverly-hills/dena-a-kleeman-Mjg4NTkwNl8x/",
  "sourceListingUrl": "https://lawyers.findlaw.com/divorce/california/los-angeles/"
}
```

#### Data fields

| Field | Description |
|---|---|
| `recordType` | `firm` or `attorney` |
| `name` / `firm` / `jobTitle` | Attorney or firm name, employer, title |
| `practiceAreas` | From the profile's practice-area data |
| `address` / `addressParts` | Street, city, state, zip, country, lat/long |
| `offices` | Every branch office on multi-location firms (firm profiles) |
| `phone` | Normalized office phone |
| `email` | Always `null` (FindLaw hides emails behind a contact form) |
| `website` | Firm website from `sameAs` links |
| `contactUrl` / `reviewUrl` | Per-profile contact and review pages |
| `rating` / `reviewCount` | FindLaw aggregate rating |
| `attorneys` | Staff attorneys on firm profiles |
| `barAdmissions` / `education` | Bar admissions and law school (profile mode) |
| `priceRange` | e.g. "Free Consultation…" where listed |
| `profileUrl` / `sourceListingUrl` | Provenance |

Download the dataset as JSON, CSV, HTML, or Excel, or pull it via the Apify API. Two dataset **views** are available: `overview` (name, firm, type, phone, address, rating, website, profile) and `credentials` (bar admissions, education, offices, price range — populated with enrichment on).

### Integrations & Automation — Schedule Legal Lead Generation

The actor runs on the Apify platform with **API access, scheduling, webhooks, Zapier/Make/n8n integrations**, and monitoring. For **ongoing lead generation**, schedule a monthly run per practice area × state and feed the dataset into your CRM or outreach tool. Turn **enrichment off** for cheap, fast sweeps (a city listing page yields ~40 records per request) and turn it on for the full credential rows. Recurring runs keep ratings, review counts and new listings fresh.

### Related Actors

- [FindLaw Attorney Directory Scraper (moving_beacon-owner1)](https://apify.com/moving_beacon-owner1/findlaw-attorney-directory-scraper) — FindLaw attorneys with profile filters
- [FindLaw Scraper — Lawyer & Law Firm Leads (b2b_leads)](https://apify.com/b2b_leads/Findlaw-Real-Time-Data-Scraper) — FindLaw leads actor on the Store
- [FindLaw Scraper - Cheap (scrapestorm)](https://apify.com/scrapestorm/findlaw-scraper---cheap) — FindLaw listings by URL
- [Avvo Scraper | US Lawyer Directory (fatihtahta)](https://apify.com/fatihtahta/avvo-scraper) — adjacent US attorney directory
- [Attorney Contact List & Lawyer Directory Data — Justia (jungle_synthesizer)](https://apify.com/jungle_synthesizer/justia-scraper) — the other major free directory, for cross-source coverage

### FAQ

#### Why use this actor instead of an official API?

FindLaw has **no public API** for its 1.2M+ listing directory — even the premium-profile product doesn't expose bulk data. This actor reads the public directory pages directly at **$0.0009 per result** (+$0.001 per enriched profile) — pay per record, no subscription.

#### What are alternatives to this actor / FindLaw data?

Avvo, Justia, Martindale-Hubbell and SuperLawyers are the other major US lawyer directories, each with Apify actors (linked above). FindLaw is the largest sub-directory of the Thomson Reuters network, so this actor covers firms + attorneys in one dataset — many competing actors are attorneys-only.

#### Can I get attorney emails with this actor?

**No — and no FindLaw scraper honestly can reliably:** FindLaw does not publish attorney emails; they sit behind a per-profile contact form. This actor returns `contactUrl` (the profile's contact page) and the firm `website` for outreach instead. Any actor claiming email extraction from FindLaw is either scraping the firm's own website or is not reading FindLaw.

#### Is scraping FindLaw legal?

This actor reads publicly served directory pages at polite concurrency with retries — no login and no access-challenge bypass. Respect FindLaw's Terms of Service and applicable law; you are responsible for how you use the data, including telemarketing/outreach rules (e.g. TCPA).

#### Why do some profiles lack ratings or geo data?

FindLaw only includes ratings, geo coordinates and staff lists when the firm provided them — some profiles genuinely lack them. In listing-only mode (`includeProfileDetails: false`), `offices`, `barAdmissions`, `education` and `attorneys` come back empty by design.

#### Known limitations

- Email addresses are never public on FindLaw (see above).
- The `all-cities` page does not provide city-level listings, so it is skipped — crawl specific cities instead.
- A state hub exposes 140+ cities, so wide runs lean on `maxItems` and `maxRequestsPerCrawl` to stop.

### For AI Agents & LLM Apps

**Purpose:** Returns FindLaw attorney and law-firm records as JSON rows (`recordType`: `firm` or `attorney`), either listing-only or fully enriched.

**Minimal working input:**

```json
{ "practiceAreas": ["divorce"], "states": ["california"], "maxItems": 10 }
```

**Variant inputs — fast listing-only sweep:**

```json
{ "practiceAreas": ["personal-injury-plaintiff"], "states": ["texas"], "cities": ["houston"], "maxItems": 100, "includeProfileDetails": false }
```

**Output fields (per record):** `recordType`, `name`, `firm`, `jobTitle`, `practiceAreas`, `address`, `addressParts` (street/city/state/zip/country/latitude/longitude), `offices`, `phone`, `email` (always null), `website`, `contactUrl`, `reviewUrl`, `rating`, `reviewCount`, `attorneys`, `barAdmissions`, `education`, `priceRange`, `profileUrl`, `sourceListingUrl`.

**Behaviors an agent should know:**

- `practiceAreas`/`states` follow FindLaw **URL slug format** (lowercase, hyphenated: `dui-dui`, `new-york`) — not display names.
- A state hub lists 140+ cities; `maxCitiesPerHub: 0` auto-sizes expansion from `maxItems`, which is the safe default for wide runs.
- `includeProfileDetails: false` returns ~40 records per request (fast/cheap) but leaves `offices`, `barAdmissions`, `education`, `attorneys` empty and may leave `rating`/`reviewCount` as listing-level values.
- `email` is always `null` — outreach goes through `contactUrl` and `website`.
- Billing: pay-per-result — **$0.0009 per record; +$0.001 per enriched profile** when `includeProfileDetails` is on.

### Legal & Compliance Disclaimer

This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by FindLaw / Thomson Reuters**. It reads only publicly served FindLaw directory pages at polite concurrency — no login bypass. Users are responsible for compliance with FindLaw's Terms of Service, applicable data-protection law, and outreach/telemarketing rules (e.g. TCPA, CAN-SPAM) when using contact data. Phone numbers and firm websites should not be used for unsolicited commercial outreach in violation of applicable law.

### SEO Keywords

findlaw scraper, findlaw lawyer directory data, attorney contact list, law firm leads, attorney lead generation, legal lead generation, law firm database, personal injury leads, divorce lawyer data, legal intake crm, attorney contact data, law firm marketing data, attorney ratings reviews, bar admission data, law firm phone website, scrape attorneys by state, findlaw api alternative, avvo alternative, legaltech data, lawyer geo coordinates, json csv excel export

# Actor input Schema

## `practiceAreas` (type: `array`):

Practice-area URL slugs, e.g. divorce, criminal-law, personal-injury-plaintiff, family-law, dui-dui. One listing is crawled per practice x state x city combo. Leave empty when you only use Start URLs.

## `states` (type: `array`):

US state URL slugs, e.g. california, texas, florida, new-york. Leave empty when you only use Start URLs.

## `cities` (type: `array`):

City URL slugs, e.g. los-angeles, houston. Leave empty to crawl state-level listings.

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

Extra FindLaw listing or profile URLs to scrape, in addition to the practice/state/city combos above. Use {"url": "..."} objects.

## `includeProfileDetails` (type: `boolean`):

Visit each attorney/firm profile to extract practice areas, geo coordinates, staff attorneys, bar admissions and education. Turn off for a fast listing-only scrape.

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

Maximum attorney/firm records to return. Free users are capped at 10.

## `maxPagesPerListing` (type: `integer`):

How many ?page=N result pages to follow per listing URL.

## `maxCitiesPerHub` (type: `integer`):

How many city listings to expand from each /<practice>/<state>/ hub. A state hub lists 100+ cities, so crawling them all would crowd out the profile requests. Leave at 0 for automatic sizing based on Max items.

## `maxRequestsPerCrawl` (type: `integer`):

Safety cap on total requests per run. Each enriched record costs one profile request on top of the listing pages.

## `proxy` (type: `object`):

FindLaw may limit repeated requests, so the proxy is on by default. Leave the group on 'Account default' unless you know your account's groups - an unavailable group fails the run. Turn the proxy off only for local testing.

## Actor input object example

```json
{
  "practiceAreas": [
    "divorce"
  ],
  "states": [
    "california"
  ],
  "cities": [],
  "startUrls": [],
  "includeProfileDetails": true,
  "maxItems": 100,
  "maxPagesPerListing": 5,
  "maxCitiesPerHub": 0,
  "maxRequestsPerCrawl": 500,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "practiceAreas": [
        "divorce"
    ],
    "states": [
        "california"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/lawyers-findlaw-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 = {
    "practiceAreas": ["divorce"],
    "states": ["california"],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/lawyers-findlaw-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "practiceAreas": [
    "divorce"
  ],
  "states": [
    "california"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call ahmed_jasarevic/lawyers-findlaw-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/lawyers-findlaw-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/syfyrGuh86qbhYeKI/builds/KNlSCRbWdaxtn0ScT/openapi.json
