# Avvo Lawyers Scraper (`parsebird/avvo-lawyers-scraper`) Actor

Extract lawyer profiles from Avvo directory pages: name, Avvo Rating, client reviews, practice areas, contact info, education, bar admissions, and awards. No API key needed.

- **URL**: https://apify.com/parsebird/avvo-lawyers-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.89 / 1,000 lawyer profiles

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

### Avvo Lawyers Scraper

Avvo Lawyers Scraper extracts structured attorney data from [Avvo.com](https://www.avvo.com/) directory pages — no API key, no browser automation, no manual copy-pasting from search results.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Point it at any Avvo state + practice-area directory URL and get names, Avvo ratings, client ratings, contact details, education, bar admissions, awards, and full biographies for every attorney listed — up to 10,000 profiles per run.
</td>
</tr></table>
<br>

##### Copy to your AI assistant

```
Use the Apify Actor "parsebird/avvo-lawyers-scraper" (Avvo Lawyers Scraper) via the ApifyClient: client.actor("parsebird/avvo-lawyers-scraper").call(run_input={"startUrl": "https://www.avvo.com/personal-injury-lawyer/ca.html", "maxLawyers": 100, "maxListingPages": 20, "proxyConfiguration": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"]}}); inputs are startUrl (string, an Avvo state/practice-area directory URL, required), maxLawyers (integer, default 20, max 10000), maxListingPages (integer, default 10, max 200), and proxyConfiguration (object, defaults to Apify RESIDENTIAL proxy); output items include name, rating, avvoRating, clientRating, reviewCount, practiceAreas, location, firmName, phone, consultationPhone, email, website, streetAddress, city, state, postalCode, licenseYear, yearsLicensed, licenseStates, barAdmissions, languages, education, awards, certifications, bio, tagline, profileUrl, lawyerId, isSponsored, isPro, sourceListingUrl, and scrapedAt; API docs at https://apify.com/parsebird/avvo-lawyers-scraper/api and get an API token at https://console.apify.com/settings/integrations.
```

### What does Avvo Lawyers Scraper do?

Avvo is the largest online lawyer directory in the United States, listing attorney profiles by state and practice area with Avvo Ratings, client reviews, and detailed background information. Avvo Lawyers Scraper crawls a directory listing page you choose (for example, "Bankruptcy & Debt Lawyers in Alabama" or "Personal Injury Lawyers in California"), then opens each attorney's full profile to pull the fields that only exist there — biography, education, bar admissions, languages, and awards.

- ⚖️ **Two-step extraction** — directory listing pages give ratings and contact info fast; individual attorney profile pages fill in biography, education, licensing history, and credentials.
- 📊 **30+ structured data fields** per lawyer — name, Avvo Rating (0–10), client star rating, review count, practice areas, full address, phone numbers, website, license year, years licensed, licensed states, bar admissions, languages, education, awards, certifications, and biography.
- 🔍 **Any state + practice area combination** — works with any public Avvo directory URL (bankruptcy, personal injury, family law, criminal defense, and 20+ other practice areas across all 50 states).
- 🚦 **Sponsored vs. organic detection** — each record is flagged `isSponsored` and `isPro` so you can separate paid placements from organic listings.
- 🌐 **Built-in proxy rotation** — residential proxy support handles Avvo's Cloudflare protection automatically.
- ⏱️ **Scheduling and monitoring** — run this Actor on a recurring [Apify schedule](https://docs.apify.com/platform/schedules) to track new attorneys, rating changes, or review growth in a market over time.
- 🔌 **Full API access** — trigger runs and pull results programmatically via the [Apify API](https://docs.apify.com/api/v2) or official [Python](https://docs.apify.com/api/client/python/) and [JavaScript](https://docs.apify.com/api/client/js/) clients.
- 📁 **Export anywhere** — download results as JSON, CSV, Excel, HTML, or XML, or push them directly into Google Sheets, Airbyte, Zapier, Make, and other [Apify integrations](https://apify.com/integrations).

### What data can you extract from Avvo?

| Field | Description |
|-------|-------------|
| `name` | Attorney's full name |
| `rating` | Best available rating value (Avvo Rating if present, otherwise client rating) |
| `avvoRating` | Avvo's proprietary 1–10 rating, when available |
| `clientRating` | Aggregated client review score (0–5 stars), when available |
| `reviewCount` | Number of reviews or ratings shown |
| `practiceAreas` | Practice areas or legal specialties |
| `location` | Combined office city, state, and ZIP |
| `firmName` | Law firm or office name, when distinct from the attorney's name |
| `phone` | Public office phone number |
| `consultationPhone` | Avvo's tracked "call for a consultation" number |
| `email` | Public email address, when listed |
| `website` | External attorney or firm website |
| `streetAddress`, `city`, `state`, `postalCode` | Office address components |
| `licenseYear` | Earliest year the attorney was admitted to the bar |
| `yearsLicensed` | Years since first bar admission |
| `licenseStates` | All states or jurisdictions the attorney is licensed in |
| `barAdmissions` | Bar associations and professional memberships |
| `languages` | Languages listed on the profile |
| `education` | Law schools and universities attended |
| `awards` | Awards, honors, and Avvo badges (Super Lawyer, Client's Choice, Top Contributor, etc.) |
| `certifications` | Board certifications and specialty credentials |
| `bio` | Full biography or profile summary |
| `tagline` | Short marketing tagline shown on the listing |
| `profileUrl` | Canonical Avvo profile URL |
| `lawyerId` | Avvo's internal lawyer ID |
| `isSponsored` / `isPro` | Whether the listing is a paid placement / Pro (subscriber) profile |
| `sourceListingUrl` | The directory page this record was found on |
| `scrapedAt` | ISO timestamp of when the record was collected |

### How to scrape Avvo lawyer directories

1. Open the [Avvo Lawyers Scraper](https://apify.com/parsebird/avvo-lawyers-scraper) page and click **Try for free**.
2. Go to [avvo.com](https://www.avvo.com/find-a-lawyer), pick a practice area and state, and copy the resulting directory URL (e.g. `https://www.avvo.com/bankruptcy-debt-lawyer/al.html`).
3. Paste it into the **Avvo directory URL** field.
4. Set **Max lawyer profiles** and **Max directory pages** to control run size and cost.
5. For larger runs, keep **Proxy configuration** on Residential (the default) — Avvo blocks most datacenter IPs.
6. Click **Start** and watch results populate the dataset in real time.
7. Export the finished dataset as JSON, CSV, Excel, or HTML from the **Storage** tab, or pull it via the [API](https://docs.apify.com/api/v2).

### How much does it cost to scrape Avvo?

Avvo Lawyers Scraper uses Apify's [pay-per-event pricing](https://docs.apify.com/platform/actors/publishing/monetize#pay-per-event-pricing) — you're charged only for lawyer profiles actually saved to the dataset, not for compute time.

| Plan | Price per 1,000 lawyer profiles |
|------|----------------------------------|
| Free | $1.29 |
| Bronze | $1.09 |
| Silver | $0.99 |
| Gold | $0.89 |

A run with the default `maxLawyers: 20` costs a fraction of a cent to a few cents depending on your plan. Scraping 10,000 profiles on the Free plan costs about $12.90. Every [Apify account](https://console.apify.com/sign-up) includes monthly platform usage credits that can cover this cost.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | Alabama bankruptcy directory URL | Public Avvo lawyer directory URL, such as a state and practice-area page |
| `maxLawyers` | Integer | No | 20 | Maximum number of lawyer profiles to save, from 1 to 10000 |
| `maxListingPages` | Integer | No | 10 | Maximum number of Avvo directory pages to process, from 1 to 200 |
| `proxyConfiguration` | Object | No | Apify Proxy (Residential) | Proxy settings for reliable collection; residential routing is recommended for larger runs |

#### Usage examples

**Basic extraction** — collect up to 20 bankruptcy lawyer profiles from Alabama:

```json
{
  "startUrl": "https://www.avvo.com/bankruptcy-debt-lawyer/al.html",
  "maxLawyers": 20
}
```

**Larger practice-area collection** — collect up to 100 personal injury lawyer profiles while allowing the Actor to process more directory pages:

```json
{
  "startUrl": "https://www.avvo.com/personal-injury-lawyer/ca.html",
  "maxLawyers": 100,
  "maxListingPages": 20
}
```

**Recurring collection with residential proxy routing** — a higher result limit for a scheduled market-monitoring run:

```json
{
  "startUrl": "https://www.avvo.com/family-lawyer/tx.html",
  "maxLawyers": 500,
  "maxListingPages": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Output example

```json
{
  "name": "Ronald C. Sykstus",
  "rating": 10,
  "avvoRating": 10,
  "clientRating": 4.9,
  "reviewCount": 318,
  "practiceAreas": ["Bankruptcy and Debt", "Military Law", "Chapter 13 Bankruptcy"],
  "location": "Huntsville, AL, 35801",
  "firmName": null,
  "phone": "(256) 539-9899",
  "consultationPhone": "(256) 666-5980",
  "website": "http://www.securityclearancedefenselawyer.com/",
  "city": "Huntsville",
  "state": "AL",
  "postalCode": "35801",
  "licenseYear": 1988,
  "yearsLicensed": 38,
  "licenseStates": ["Tennessee", "Alabama", "District of Columbia", "Illinois"],
  "barAdmissions": ["National Association of Consumer Advocates", "National Association of Veterans Advocates"],
  "languages": ["English"],
  "education": ["Northern Illinois University College of Law", "University of Arizona"],
  "awards": ["Super Lawyer", "Client's Choice", "Top Contributor"],
  "certifications": ["Board Certified in Consumer Bankruptcy Law"],
  "profileUrl": "https://www.avvo.com/attorneys/35801-al-ronald-sykstus-721004.html",
  "lawyerId": "721004",
  "isSponsored": false,
  "isPro": true,
  "sourceListingUrl": "https://www.avvo.com/bankruptcy-debt-lawyer/al.html",
  "scrapedAt": "2026-07-12T06:26:43.470Z"
}
```

Download results as **JSON, CSV, Excel, HTML, or XML** from the Storage tab, or fetch them programmatically via the API.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/avvo-lawyers-scraper").call(run_input={
    "startUrl": "https://www.avvo.com/personal-injury-lawyer/ca.html",
    "maxLawyers": 100,
    "maxListingPages": 20,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item["rating"], item["phone"])
```

#### JavaScript

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/avvo-lawyers-scraper').call({
    startUrl: 'https://www.avvo.com/personal-injury-lawyer/ca.html',
    maxLawyers: 100,
    maxListingPages: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use cases

- **Legal marketing agencies** building prospect lists of attorneys by practice area and state for outreach campaigns.
- **Legal tech and SaaS platforms** enriching their own directories or CRMs with structured attorney data.
- **Market researchers** analyzing attorney density, average ratings, or review volume across states and practice areas.
- **Referral networks and legal marketplaces** benchmarking competitor rosters and pricing pages.
- **Recruiters and legal staffing firms** sourcing candidate profiles with education, bar admissions, and experience history.

### How it works

1. The Actor fetches your chosen Avvo directory URL and detects the total number of listing pages.
2. It walks the directory (`?page=2`, `?page=3`, ...) up to your `maxListingPages` limit, extracting each attorney's name, rating, review count, practice areas, and contact details directly from the listing.
3. For every attorney collected, it fetches the individual profile page to pull biography, education, bar admissions, languages, license history, and awards.
4. Records are pushed to the dataset incrementally as they're collected, so you can inspect results while the run is still in progress.
5. The run stops automatically once it reaches `maxLawyers`, runs out of directory pages, or hits your Actor spending limit.

### Is it legal to scrape Avvo?

Yes — Avvo Lawyers Scraper only collects data that is already publicly visible on Avvo.com directory and profile pages, without requiring login or bypassing any paywall. Web scraping of publicly available data is generally considered legal, as established in cases such as *hiQ Labs v. LinkedIn*. That said, you're responsible for using the collected data in compliance with applicable laws (such as GDPR or CCPA) and Avvo's own [terms of service](https://www.avvo.com/support/terms). Read more in Apify's [guide to the legality of web scraping](https://apify.com/is-web-scraping-legal).

### Related Actors

- [BBB Scraper](https://apify.com/parsebird/bbb-scraper) — extract accredited business profiles and ratings from the Better Business Bureau.
- [Owler Company Scraper](https://apify.com/parsebird/owler-company-scraper) — pull company profiles, competitors, and revenue estimates from Owler.
- [UK Companies House Scraper](https://apify.com/parsebird/uk-companies-house-scraper) — bulk company registry data for UK-registered businesses.
- Browse the full [ParseBird Actor catalog](https://apify.com/parsebird) for more data extraction tools.

### FAQ

**Do I need an Avvo account or API key?**
No. The Actor reads publicly available directory and profile pages — no login or API key is required.

**Why do some fields come back empty?**
Not every attorney profile lists every field. Non-Pro (non-subscriber) profiles, for example, typically don't show a consultation phone number or website, and only some attorneys have a listed biography or board certification. Empty fields reflect what's actually published on Avvo, not a scraping error.

**What does `rating` mean versus `avvoRating` and `clientRating`?**
`avvoRating` is Avvo's own 1–10 attorney rating; `clientRating` is the aggregated client review score (out of 5 stars). `rating` returns whichever is available, preferring `avvoRating` — use the specific field if you need one or the other.

**Can I scrape a specific city instead of a whole state?**
Avvo's directory is organized by state and practice area, not city, at the URL level. Use `maxListingPages` and post-filter the `city` field in your results if you need city-level data.

**Can I schedule recurring runs?**
Yes. Use [Apify's scheduler](https://docs.apify.com/platform/schedules) to run this Actor daily, weekly, or at any interval, and pair it with the [API](https://docs.apify.com/api/v2) or [webhooks](https://docs.apify.com/platform/integrations/webhooks) to pipe fresh results into your own systems.

**I found a bug or a missing field — where do I report it?**
Open an issue on the Actor's **Issues** tab in Apify Console. Include the directory URL you ran and we'll take a look.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/avvo-lawyers-scraper/changelog.md

# Actor input Schema

## `startUrl` (type: `string`):

Public Avvo lawyer directory URL, such as a state and practice-area page (e.g. https://www.avvo.com/bankruptcy-debt-lawyer/al.html).

## `maxLawyers` (type: `integer`):

Maximum number of lawyer profiles to save, from 1 to 10000.

## `maxListingPages` (type: `integer`):

Maximum number of Avvo directory pages to process, from 1 to 200. Each page lists up to 20 lawyers.

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

Proxy settings for reliable collection. Residential routing is recommended, especially for larger runs, since Avvo blocks most datacenter IPs.

## Actor input object example

```json
{
  "startUrl": "https://www.avvo.com/bankruptcy-debt-lawyer/al.html",
  "maxLawyers": 20,
  "maxListingPages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrl": "https://www.avvo.com/bankruptcy-debt-lawyer/al.html",
    "maxLawyers": 20,
    "maxListingPages": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/avvo-lawyers-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 = {
    "startUrl": "https://www.avvo.com/bankruptcy-debt-lawyer/al.html",
    "maxLawyers": 20,
    "maxListingPages": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/avvo-lawyers-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 '{
  "startUrl": "https://www.avvo.com/bankruptcy-debt-lawyer/al.html",
  "maxLawyers": 20,
  "maxListingPages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parsebird/avvo-lawyers-scraper --silent --output-dataset

```

## MCP server setup

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