# Avvo Scraper - Lawyer Leads, Ratings, Phones & Firms (`scrapersdelight/avvo-scraper`) Actor

Scrape US attorney leads from Avvo by practice area and city: name, firm, full address, direct phone, firm website, Avvo Rating (1-10), client review score and count, years licensed, practice areas, awards and law schools. No login.

- **URL**: https://apify.com/scrapersdelight/avvo-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.90 / 1,000 per lawyer returneds

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## ⚖️ Avvo Scraper — Lawyer Leads, Avvo Ratings, Phones & Firms

**Export US attorney leads from Avvo's public directory — name, firm, full address, direct phone, firm website, Avvo Rating, client reviews, years licensed, practice areas, awards and law schools.**

> 🕒 Last updated: 2026-07-30 · 📊 30+ fields per lawyer · 🇺🇸 Every US state, city & practice area · 🚫 No login or API key · ⚡ Plain HTTP, fast & cheap · 💰 $0.90 per 1,000 lawyers, no start fee

Pick a **practice area** and a **city** (or a whole state) and get back a flat record per attorney — ready for your CRM, cold-call list, or ad-targeting file. Export to JSON, CSV, Excel or Google Sheets, or pull it via API.

***

### 📊 What you get — 30+ fields per lawyer

| Field | Example |
|---|---|
| 🆔 `lawyer_id` / `profile_url` | `966007` · `https://www.avvo.com/attorneys/10001-ny-michael-joseph-966007.html` |
| 👤 `name` / `job_title` | `Michael Howard Joseph` · `Attorney` |
| 🏢 `firm_name` | `Law Office of Michael H. Joseph, PLLC.` |
| 📍 `street_address` / `city` / `state` / `postal_code` | `18 West 33rd Street, Suite 400` · `New York` · `NY` · `10001` |
| ☎️ `phone` | `(212) 858-0503` — the firm's own published number |
| 📞 `avvo_call_tracking_phone` | `(866) 531-5383` — Avvo's routing number (kept separate on purpose) |
| 🌐 `website` | `https://www.newyorktriallawyers.org/` |
| ⭐ `avvo_rating` | `10` (Avvo's own 1–10 score) |
| 💬 `review_score` / `review_count` | `4.8` · `29` |
| 📅 `years_licensed` / `license_text` | `26` · `Personal Injury Lawyer Licensed for 26 years` |
| 🧭 `practice_areas` | `["Personal Injury","Car Accidents","Criminal Defense"]` |
| 🏆 `awards` | `["Super Lawyer"]` |
| 🎓 `law_schools` | `["Tulane University Law School"]` |
| 🖼️ `headshot_url` | profile photo URL |
| 💼 `is_pro` / `profile_type` | `true` · `subscriber` — flags attorneys who **pay** Avvo for visibility |
| 💬 `tagline` / `price_range` | the attorney's own pitch line |
| 🔎 `search_practice_area` / `search_city` / `search_state` / `search_county` | which search the row came from |
| 🔗 `source_url` / `page_number` / `scraped_at` | provenance |

Measured field fill across 129 lawyers in 3 markets: name/firm/address/state/ZIP **100%**, years licensed **100%**, practice areas **100%**, phone **95%**, Avvo Rating **96%**, law schools **95%**, headshot **94%**, review score+count **77%**, website **64%** (only lawyers who publish one).

***

### 🎯 Who it's for

- 📈 **Legal marketing & SEO agencies** — `is_pro` / `profile_type` tells you who already buys legal advertising, `website` gives you their current site to audit.
- 🧰 **Legal-tech & practice-management SaaS** (Clio, MyCase, Filevine-style) — attorneys are your ICP; segment by practice area, firm size proxy and years licensed.
- 🤝 **Expert witnesses, medical-record retrieval, litigation finance, court reporters** — reach the exact practice area that buys your service.
- 🎓 **Recruiters** — target by law school, years licensed and Avvo Rating.
- 📊 **Analysts** — map the competitive landscape of a legal market by rating, reviews and tenure.

***

### ▶️ How to use it

1. Click **Try for free**.
2. Enter **Practice areas** (e.g. `personal-injury`, `divorce-and-separation`, `criminal-defense`) — or leave empty to get **all lawyers**.
3. Enter **Locations** as `City, ST` (e.g. `Miami, FL`) or a bare state (`FL`) for a state-wide listing.
4. Set **Max lawyers** and click **Start**. Export from the **Dataset** tab or via API.

#### Input

| Field | What it does |
|---|---|
| `practiceAreas` | Avvo practice-area slugs. Empty = all lawyers in the location. |
| `locations` | `"New York, NY"` or `"NY"`. Every practice area is crossed with every location. |
| `startUrls` | Paste Avvo listing URLs directly (e.g. `https://www.avvo.com/all-lawyers/ca/los_angeles.html`). |
| `maxResults` | Stop after this many leads (`0` = no limit). |
| `maxPagesPerSearch` | Listing pages per search (20 lawyers per page). |
| `minAvvoRating` | Keep only attorneys rated ≥ N (1–10). Filtered rows are never delivered or charged. |
| `proxyConfiguration` | Defaults to Apify **RESIDENTIAL** — Avvo blocks most datacenter IPs. |
| `maxConcurrency` | How many searches to walk in parallel. |

#### Common practice-area slugs

`personal-injury` · `car-accident` · `truck-accident` (as `trucking-accident`) · `medical-malpractice` · `criminal-defense` · `dui-and-dwi` · `divorce-and-separation` · `child-custody` · `child-support` · `family` · `estate-planning` · `probate` · `immigration` · `bankruptcy-and-debt` · `foreclosure` · `employment-and-labor` · `wrongful-termination` · `workers-compensation` · `real-estate` · `business` · `litigation` · `tax` · `social-security` · `brain-injury` · `mesothelioma-and-asbestos` · `motorcycle-accident` · `speeding-and-traffic-ticket`

***

### ⚙️ How it works & limits

- **Source:** Avvo's public practice-area / city directory pages (`/{practice-area}-lawyer/{state}/{city}.html`, `/all-lawyers/{state}/{city}.html`), read over plain HTTP — no browser, no login, no API key. Each page holds up to 20 attorneys.
- **Deduplicated by attorney id.** Avvo's practice-area listings genuinely overlap (about 7 of 20 lawyers appear in both *personal injury* and *car accident* for the same city). The Actor claims each attorney id once per run, so an overlapping lawyer is delivered — and charged — exactly once.
- **Pagination stops honestly.** Past the last page Avvo 301-redirects back to page 1; the Actor treats that redirect as "no more results" instead of silently re-scraping the first page.
- **Location is Avvo's search location, not a strict address filter.** A "New York, NY" search also surfaces nearby-metro firms (Brooklyn, White Plains, Garden City) exactly as Avvo ranks them. Both the requested `search_city` and the firm's real `city` are in every row, so you can filter yourself.
- **Two phone numbers, clearly separated.** `phone` is the number the firm publishes in Avvo's structured data. `avvo_call_tracking_phone` is the pooled number behind Avvo's "Call" button — useful as a fallback, but it routes through Avvo, so it is never presented as the firm's direct line.
- **No email addresses.** Avvo's directory listings do not publish attorney emails, and this Actor does not guess or enrich them. Use `website` + an email-finder if you need addresses.
- **Listings only.** This Actor reads directory listings, not individual attorney profile pages or their reviews.
- **Proxy:** Avvo returns HTTP 403 to most datacenter IPs (measured: 3/12 pages loaded on datacenter vs 12/12 on US residential), so residential proxies are the default. Blocked pages are retried on a fresh session.

***

### ❓ FAQ

**Is this legal?** The Actor reads publicly available directory data that Avvo publishes and Google indexes. You are responsible for complying with Avvo's Terms of Service, and personal data you collect is your responsibility to handle lawfully (GDPR/CCPA, CAN-SPAM, TCPA and state bar advertising rules where applicable).

**Does it get emails?** No — Avvo's listings don't publish them. You get the firm `website` (64% of lawyers), which is the usual input to an email-finding tool.

**Can I scrape a whole state?** Yes — pass a bare state (`"TX"`) together with a practice area. `all-lawyers` needs a city.

**How do I get only the strongest attorneys?** Set `minAvvoRating` to 9 or 10. Filtered-out attorneys are never delivered or charged.

**How much does it cost?** $0.0009 per lawyer delivered — $0.90 per 1,000 — with **no** Actor-start fee. Duplicates and filtered rows are free.

**Can I export to Excel or Google Sheets?** Yes — the dataset exports to JSON, CSV, Excel or Google Sheets, or pull it via API.

### Notes & fair use

You are responsible for complying with Avvo's Terms of Service. This Actor reads publicly available attorney directory listings; any personal data you collect and how you use it is your responsibility.

# Actor input Schema

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

Avvo practice-area slugs, e.g. 'personal-injury', 'divorce-and-separation', 'criminal-defense', 'estate-planning', 'immigration', 'bankruptcy-and-debt', 'family', 'employment-and-labor', 'real-estate', 'business', 'medical-malpractice', 'car-accident', 'dui-and-dwi', 'workers-compensation', 'tax', 'probate', 'litigation'. Leave empty to scrape ALL lawyers in each location.

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

US cities as "City, ST" (e.g. "New York, NY") or a bare 2-letter state (e.g. "NY") for a state-wide listing. Every practice area is crossed with every location. A state on its own only works together with a practice area.

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

Paste Avvo directory listing URLs to scrape directly, e.g. https://www.avvo.com/personal-injury-lawyer/ny/new\_york.html or https://www.avvo.com/all-lawyers/ca/los\_angeles.html. Individual attorney profile URLs are not supported.

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

Stop after this many attorney leads in total (0 = no limit). You are only charged for leads actually delivered.

## `maxPagesPerSearch` (type: `integer`):

Listing pages to walk per practice-area/city combination. Each page holds up to 20 attorneys. The Actor stops early when Avvo runs out of results.

## `minAvvoRating` (type: `integer`):

Only keep attorneys whose Avvo Rating (1-10) is at least this value. 0 = keep everyone. Filtered-out attorneys are never delivered and never charged.

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

Avvo returns HTTP 403 to most datacenter IPs (measured: 3/12 pages loaded on datacenter vs 12/12 on residential), so US residential proxies are the default. Change this only if you know your IPs are not blocked.

## `maxConcurrency` (type: `integer`):

How many practice-area/city searches to walk in parallel. Pages inside one search are always fetched in order.

## Actor input object example

```json
{
  "practiceAreas": [
    "personal-injury"
  ],
  "locations": [
    "New York, NY"
  ],
  "startUrls": [],
  "maxResults": 20,
  "maxPagesPerSearch": 5,
  "minAvvoRating": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxConcurrency": 3
}
```

# Actor output Schema

## `records` (type: `string`):

The dataset of scraped Avvo attorneys (one item per lawyer).

# 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": [
        "personal-injury"
    ],
    "locations": [
        "New York, NY"
    ],
    "startUrls": [],
    "maxResults": 20,
    "maxPagesPerSearch": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/avvo-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": ["personal-injury"],
    "locations": ["New York, NY"],
    "startUrls": [],
    "maxResults": 20,
    "maxPagesPerSearch": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/avvo-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": [
    "personal-injury"
  ],
  "locations": [
    "New York, NY"
  ],
  "startUrls": [],
  "maxResults": 20,
  "maxPagesPerSearch": 5
}' |
apify call scrapersdelight/avvo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/avvo-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/T3GCIskp8recWpPMw/builds/zcEuxZ48VTQvWzMBl/openapi.json
