# Avvo Scraper - US Attorney Directory & Lawyer Leads (`scrapesage/avvo-scraper`) Actor

Scrape Avvo attorney profiles by city & practice area: Avvo Rating, reviews & star breakdown, bar licenses & discipline, fees, offices, direct phone, website & optional emails. Fast directory mode, filters, monitoring. Export JSON, CSV, Excel. Independent tool, not affiliated with Avvo.

- **URL**: https://apify.com/scrapesage/avvo-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Other, Agents
- **Features:** Limited permissions
- **Stats:** 17 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.34 / 1,000 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.
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 Scraper - US Attorney Directory & Lawyer Leads (Ratings, Reviews & Contacts)

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Avvo or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "Avvo" is referenced only to describe the publicly available website this Actor collects data from.

Extract **complete Avvo attorney profiles** by city and practice area - including the proprietary **Avvo Rating (1–10)**, **client review score with the full star breakdown, review themes and Avvo's AI review summary**, the **most recent client reviews** with the attorney's replies, **peer endorsements**, **every bar license with its status and misconduct record**, **disciplinary actions**, **practice-area split**, **fees** (free consultation, contingency, hourly), **honors with years**, **work history, education and associations**, and **every office with its phone, fax and website**. Optionally find **contact emails on the firm's own website**.

No login, no cookies to supply, no API key. Search by practice area + city or state, or paste Avvo profile and directory URLs.

### Why this Avvo scraper?

Avvo is the **largest US attorney directory** - profiles for practically every licensed lawyer, in every practice area and city. This actor reads the whole profile and ships **a complete lawyer dataset**:

| Data | This actor |
| --- | --- |
| Avvo Rating (1–10) + Avvo's label (Superb, Excellent, Very Good…) | ✅ |
| Review score, review count **and the 5★→1★ breakdown** | ✅ |
| Review themes ("Case Results 22, Advocacy 14…") + Avvo's AI review summary | ✅ |
| Most recent client reviews (text, date, hired or not, attorney's reply) | ✅ |
| Peer endorsements (who, relationship, what they wrote) | ✅ |
| Every bar license: state, year, status (active, retired, in-house…), misconduct line | ✅ |
| Disciplinary actions (sanction, state, year, the attorney's own comment) | ✅ |
| The attorney's **direct phone** next to Avvo's call-tracking line, plus fax | ✅ |
| Every office (address, county, map coordinates, phones, website) | ✅ |
| Practice-area split (% of practice, years in each area) | ✅ |
| Fees: free consultation, contingency %, hourly rate, payment methods | ✅ |
| Honors & awards with years and issuers, work history, education, associations | ✅ |
| Firm website + LinkedIn / Facebook / X / Instagram / YouTube | ✅ |
| Contact **emails** from the firm's own website | ✅ opt-in |
| Lead score (0–100) per attorney | ✅ |

### What you get

One row per attorney. The main fields:

| Field | What it holds |
|---|---|
| `name`, `headline`, `primaryPracticeArea`, `profileUrl`, `imageUrl` | Who the attorney is and their Avvo profile |
| `avvoRating`, `avvoRatingLabel` | Avvo's 1–10 rating and its label |
| `clientReviewRating`, `reviewCount`, `reviewDistribution` | Review score (1–5), number of reviews, count per star |
| `reviewThemes`, `reviewsByPracticeArea`, `reviewSummary` | What clients mention most, reviews per practice area, Avvo's AI summary |
| `recentReviews` | The most recent reviews on the profile: rating, title, full text, author, date, `hiredAttorney`, the attorney's reply |
| `peerEndorsements`, `endorsementsGiven`, `endorsements` | Endorsements received / given and the endorsement texts |
| `isPro`, `isAdvertiser`, `claimStatus` | Avvo Pro member, advertiser, claimed or unclaimed profile |
| `licenseStatus`, `hasDisciplinaryRecord`, `disciplinaryActions` | "No misconduct found" or the disciplinary record and its details |
| `licenses`, `barStates`, `primaryState`, `yearsLicensed`, `admissionDate` | Every bar license with state, year, status and bar |
| `practiceAreas`, `practiceAreaBreakdown` | All practice areas, with % of practice and years per area |
| `fees`, `freeConsultation`, `consultationDetails`, `contingencyFee`, `hourlyRate`, `paymentMethods` | Fees and how they are paid |
| `honors`, `awards`, `awardCount`, `awardBadges` | Honors with year and issuer; Avvo badges such as Client's Choice with every year won |
| `workExperience`, `education`, `schools`, `associations`, `languages`, `legalCases`, `speakingEngagements`, `publications`, `bio` | Career and background |
| `firmName`, `phone`, `phoneType`, `trackingPhone`, `fax`, `website`, `bookingUrl` | Contact details (`bookingUrl` = a scheduling page the attorney lists instead of a website) |
| `street`, `city`, `state`, `postalCode`, `county`, `latitude`, `longitude`, `offices` | Main office and every other office |
| `linkedin`, `facebook`, `twitter`, `instagram`, `youtube` | Social profiles the attorney lists |
| `email`, `enrichedEmails`, `enrichedPhones` | From the firm's own website (opt-in) |
| `leadScore`, `searchLocation`, `searchPracticeArea`, `searchRank` | Lead score and where the attorney came from |

Fields an attorney's profile does not carry are left out of that row, never filled with placeholders.

### Use cases

- **Legal lead generation** - attorneys buy legal marketing, case-management and intake software, malpractice insurance, lead networks, virtual receptionists and CLE. Target by practice area and city, rank by `leadScore`, `avvoRating` and `reviewCount`, and contact through `phone`, `website` and `email`.
- **Referral and partnership scouting** - find well-reviewed specialists (`minAvvoRating`, `minReviews`) with a clean record (`hasDisciplinaryRecord: false`) in any city.
- **Recruiting & legal staffing** - filter by years licensed, bar states, practice-area mix, education and work history.
- **Market & competitive intelligence** - map attorney supply, fees (contingency %, hourly rates, free consultations) and reputation by city and practice area.
- **Due diligence & compliance** - check bar license status and disciplinary actions across a list of attorney profiles.
- **Law-firm M\&A and roll-ups** - build target lists of firms and solo practitioners by geography and specialty, with every office location.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) - the free plan is enough to try this actor.
2. Open **Avvo Scraper**, enter one or more **locations** (`Austin, TX`, `Texas`) and **practice areas** (`personal injury`, `divorce`, `DUI`), or paste Avvo URLs.
3. Click **Start** and watch attorneys stream into the dataset.
4. **Export** as JSON, CSV, Excel, XML or RSS - or pull results through the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "locations": ["Austin, TX", "Los Angeles, CA"],
    "practiceAreas": ["personal injury", "divorce"],
    "maxResults": 100,
    "includeProfileDetails": true,
    "includeReviews": true,
    "enrichEmails": false,
    "minAvvoRating": 8,
    "minReviews": 5,
    "monitorMode": false
}
```

- **locations** - `City, ST` (`Austin, TX`), `City, State` (`Austin, Texas`), the raw `st/city` slug (`tx/austin`), or a whole state (`Texas`, `CA`). Combined with every practice area.
- **practiceAreas** - everyday words or Avvo's own names: `personal injury`, `divorce`, `DUI`, `criminal defense`, `estate planning`, `family`, `immigration`, `bankruptcy`, `employment`, `real estate`, `car accidents`, `workers compensation`, `medical malpractice`… All of Avvo's 142 practice areas are understood, as are directory slugs such as `dui-dwi-lawyer`. Leave empty for every attorney in each location.
- **startUrls** / **urlsFromFile** - Avvo attorney profile URLs (`/attorneys/78701-tx-douglas-oconnell-87772.html`) or directory URLs (`/divorce-separation-lawyer/tx/austin.html`, also later pages such as `?page=3`). Upload or link a text file, or paste a list.
- **maxResults** *(default 100)* - total attorneys across all searches; with several searches the cap is shared fairly between them.
- **includeProfileDetails** *(default true)* - the full profile record. Turn off for a fast, low-cost directory sweep (name, firm, street, Avvo Rating, review score and count, years licensed, practice areas, the phone Avvo shows).
- **includeReviews** *(default true)* - recent review texts and endorsement texts. Counts, star breakdown, themes and the AI summary are always included.
- **enrichEmails** *(default false)* - visit each attorney's own website for contact emails and phone numbers.
- **minAvvoRating / minReviews / withPhoneOnly / withWebsiteOnly** - quality filters, applied before anything is billed.
- **monitorMode** + **monitorStoreName** - deliver only attorneys not delivered by earlier runs.

### Output

A real row (shortened - arrays cut to their first items):

```json
{
    "attorneyId": "87772",
    "name": "Douglas K. O'Connell",
    "headline": "Criminal Defense Lawyer",
    "primaryPracticeArea": "Criminal Defense",
    "profileUrl": "https://www.avvo.com/attorneys/78701-tx-douglas-oconnell-87772.html",
    "avvoRating": 10,
    "avvoRatingLabel": "Superb",
    "isPro": true,
    "claimStatus": "claimed",
    "clientReviewRating": 5,
    "reviewCount": 24,
    "reviewDistribution": { "fiveStar": 24, "fourStar": 0, "threeStar": 0, "twoStar": 0, "oneStar": 0 },
    "reviewThemes": [{ "theme": "Case Results", "count": 22 }, { "theme": "Advocacy", "count": 14 }],
    "reviewSummary": "Reviewers consistently praise the lawyer's exceptional effectiveness in securing dismissals, acquittals, and favorable outcomes...",
    "recentReviews": [{
        "rating": 5,
        "title": "So thankful for their help!",
        "text": "I was facing multiple felony and misdemeanor charges... Doug and Laurie and O'Connell West took the time to listen to me...",
        "author": "anonymous",
        "date": "2025-03-24",
        "hiredAttorney": true,
        "attorneyResponse": "We're so glad that we were able to help you!...",
        "attorneyResponseDate": "2025-03-25"
    }],
    "peerEndorsements": 5,
    "endorsements": [{ "endorserName": "Richard Wetzel", "endorserPractice": "Criminal defense lawyer", "relationship": "Worked together on matter", "text": "I endorse this lawyer. Doug is hard working and a creative lawyer." }],
    "licenseStatus": "No misconduct found",
    "hasDisciplinaryRecord": false,
    "yearsLicensed": 31,
    "admissionDate": "1994-11-17",
    "licenses": [{ "state": "Texas", "acquiredYear": 1994, "yearsLicensed": 31, "status": "Eligible to Practice in Texas", "misconduct": "No misconduct found", "bar": "State Bar of Texas", "admissionDate": "1994-11-17" }],
    "practiceAreas": ["Criminal Defense", "Military Law", "Personal Injury", "White Collar Crime", "Drug Crime", "Sex Crime"],
    "practiceAreaBreakdown": [{ "area": "Criminal Defense", "percent": 30 }, { "area": "Military Law", "percent": 20 }],
    "honors": [{ "year": 2026, "title": "Super Lawyer", "issuer": "Super Lawyers" }],
    "awardCount": 20,
    "education": [{ "school": "Wake Forest University School of Law", "degree": "Doctor of Jurisprudence/Juris Doctor (J.D.)", "year": 1994 }],
    "workExperience": [{ "title": "Founder & Managing Attorney", "organization": "O'Connell West, PLLC", "years": "2014 - Present" }],
    "firmName": "O'Connell West, PLLC",
    "phone": "(512) 649-8281",
    "phoneType": "Mobile",
    "trackingPhone": "(833) 348-3227",
    "fax": "(512) 547-7265",
    "website": "https://oconnellwest.com/team/doug-oconnell/",
    "linkedin": "https://www.linkedin.com/in/...",
    "street": "505 West 12th Street, Suite 200",
    "city": "Austin",
    "state": "TX",
    "postalCode": "78701",
    "county": "Travis",
    "latitude": 30.275017,
    "longitude": -97.745925,
    "officeCount": 3,
    "freeConsultation": true,
    "consultationDetails": "$0 first 60 minutes",
    "virtualConsultation": true,
    "paymentMethods": ["Cash", "Check", "Credit Card"],
    "leadScore": 87,
    "searchPracticeArea": "personal-injury-lawyer",
    "searchLocation": "Austin, TX",
    "searchRank": 2,
    "scrapedAt": "2026-10-07T21:30:12.000Z"
}
```

Three dataset views are ready in the Console: **Attorneys** (overview), **Contacts (lead list)** and **Ratings & reputation**.

### Good to know

- **Phones.** Avvo shows phone numbers for its **Pro** members; most other profiles only offer Avvo's message form, so those rows have no phone. On Pro profiles Avvo displays a call-tracking line that forwards to the attorney - `phone` holds the attorney's own number whenever Avvo publishes it, and `trackingPhone` holds Avvo's line. In the fast directory mode (`includeProfileDetails: false`) `phone` is the number Avvo shows on the listing card.
- **Emails** are never published on Avvo. With `enrichEmails` on, the headline `email` is an address on the attorney's own website domain (or a personal mailbox), preferring one with the attorney's name; every address found is in `enrichedEmails`.
- **Reviews.** Review counts, the star breakdown and themes cover all of an attorney's Avvo reviews; `recentReviews` holds the most recent ones shown on the profile (up to 5). Avvo's AI summary (`reviewSummary`) appears only on profiles where Avvo shows its "Client Insights" box.
- **Optional profile sections** - fees, social links, publications, speaking engagements, sample cases, awards - are included whenever the attorney filled them in on Avvo.
- **A city Avvo has no page for** is skipped and named in the run's status - it is never quietly replaced by the whole state. A practice-area term Avvo does not have is skipped with the closest Avvo names suggested.
- **Several searches in one run** share `maxResults` fairly, so a filter, a spending limit or a time limit can't use it all up on the first city.
- **Residential IPs are built in.** Avvo refuses datacenter connections, so the actor always loads Avvo through residential proxies; there is nothing to configure.

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

This Actor uses Apify's **pay-per-event** pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:

- **Attorney lead** - One attorney profile with Avvo Rating, client reviews, bar admissions, practice areas, firm contacts, and lead score.

The current price of each event is shown on the **Pricing** tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** - start runs, fetch datasets, manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[Python](https://docs.apify.com/api/client/python/)** - official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** - run it daily or weekly with `monitorMode` on to receive only new attorneys in a city or practice area.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** - trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

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

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

const run = await client.actor('scrapesage/avvo-scraper').call({
    locations: ['Austin, TX'],
    practiceAreas: ['personal injury'],
    maxResults: 100,
    minAvvoRating: 8,
});

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

### Integrate with any app

Connect the dataset to 5,000+ apps - no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** - multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** - push new attorney leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** - get notified when a monitored search finds new attorneys.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** - auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** - pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** - trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** - ask your assistant to "find top-rated personal injury lawyers in Austin with no disciplinary record and list their phone numbers" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready**: AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)**: an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp), with no account and no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)**: agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **legal & B2B lead-gen stack**:

- **[Martindale Scraper](https://apify.com/scrapesage/martindale-scraper)** - Martindale-Hubbell attorney & law firm leads.
- **[Super Lawyers Scraper](https://apify.com/scrapesage/superlawyers-scraper)** - peer-rated top attorneys.
- **[FindLaw Scraper](https://apify.com/scrapesage/findlaw-scraper)** - FindLaw attorney directory leads.
- **[Expertise.com Scraper](https://apify.com/scrapesage/expertise-scraper)** - curated "best of" local pros, including lawyers.
- **[Three Best Rated Scraper](https://apify.com/scrapesage/three-best-rated-scraper)** - top-3 hand-picked local businesses & lawyers.
- **[Court Records Scraper](https://apify.com/scrapesage/court-records-scraper)** - federal/state court case data.
- **[TaxBuzz Scraper](https://apify.com/scrapesage/taxbuzz-scraper)** - tax & accounting professional leads.
- **[Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper)** - emails, phones & socials from any website.

### Tips

- **Exhaust a market**: split a big city by practice area (`personal injury`, `car accidents`, `wrongful death`…) - each practice area is its own Avvo directory, so together they surface far more attorneys than one `all lawyers` sweep.
- **Highest-quality leads**: `minAvvoRating: 9` and `minReviews: 10` keep well-established attorneys only; `withPhoneOnly: true` keeps the ones you can call today.
- **Cheapest sweep**: `includeProfileDetails: false` reads only the directory cards - the fastest way to list every attorney in a city.
- **Slimmer CSV/Excel exports**: turn off `includeReviews` to drop the review and endorsement texts.
- **Steady lead feed**: `monitorMode: true` + a weekly Schedule delivers only attorneys you have not received before.

### FAQ

**How do I scrape Avvo lawyers for a specific city and practice area?** Put the city in `locations` (`Austin, TX`) and the area in `practiceAreas` (`divorce`, `personal injury`, `DUI`). Every location is combined with every practice area.

**Can I search a whole state?** Yes - use the state name or code (`Texas`, `CA`) as the location.

**Does it work without an Avvo API?** Yes. Avvo has no public API - this actor reads the public directory and profile pages, no key or login needed.

**Where do the emails come from?** Never from Avvo (it doesn't publish emails). With `enrichEmails` on, the actor visits the attorney's own website and collects the contact emails shown there - what any visitor to that site would see.

**Why do some attorneys have no phone?** Avvo shows phone numbers for its Pro members only; other profiles only offer Avvo's message form.

**How do I get only new attorneys on each run?** Turn on `monitorMode` and add a [Schedule](https://docs.apify.com/platform/schedules). The actor remembers everyone it delivered before and returns only new attorneys.

**Can I export to Google Sheets, CSV, or Excel?** Yes - one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**Is scraping Avvo legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and Avvo's terms.

### Data & lawful use

This Actor reads business and professional listings that the professionals themselves published to be found: names, roles, firms, ratings and the contact details shown on the public listing. Because those details belong to identifiable people, treat the output as personal data. If you are in the EU or UK you are the data controller for what you do with it: have a lawful basis (usually legitimate interest for B2B prospecting or market research), keep any outreach relevant to the professional's line of work, honour opt-outs and deletion requests, and do not use the output for spam.

Under [Apify's Standard Actor Contract](https://docs.apify.com/legal/standard-actor-contract), which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.

### Disclaimer

**This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Avvo or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.**

"Avvo" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official Avvo product, is not authorised or certified by Avvo, and does not distribute Avvo software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome - this actor is actively maintained.

# Actor input Schema

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

Where to search. Use <code>City, ST</code> (<code>Austin, TX</code>, <code>New York, NY</code>, <code>Los Angeles, CA</code>), the raw <code>st/city</code> slug (<code>tx/austin</code>), or a whole state (<code>Texas</code>, <code>CA</code>). Each location is combined with every practice area below. A city Avvo has no directory page for is skipped and named in the run's status (never swapped for the whole state).

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

Practice areas to search, combined with every location. Type everyday words or Avvo's own names - e.g. <code>personal injury</code>, <code>divorce</code>, <code>DUI</code>, <code>criminal defense</code>, <code>estate planning</code>, <code>family</code>, <code>immigration</code>, <code>bankruptcy</code>, <code>employment</code>, <code>real estate</code>, <code>car accidents</code>, <code>workers compensation</code>, <code>medical malpractice</code>, <code>wrongful death</code> - or an Avvo directory slug (<code>dui-dwi-lawyer</code>). All 142 Avvo practice areas are understood; a term Avvo does not have is skipped with the closest matches named in the status (nothing billed). Leave empty for every attorney in each location.

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

Direct Avvo URLs: attorney profiles (<code>https://www.avvo.com/attorneys/78701-tx-douglas-oconnell-87772.html</code>) or directory listings (<code>https://www.avvo.com/divorce-separation-lawyer/tx/austin.html</code>). Used in addition to the locations above. You can also link or upload a text file of URLs here.

## `urlsFromFile` (type: `string`):

Paste a list of Avvo URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically.

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

Maximum number of attorney records across all locations, practice areas and URLs. With several searches the cap is shared fairly between them.

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

Open each attorney's profile for the full record: Avvo Rating, review score + star breakdown, review themes and AI review summary, peer endorsements, every bar license with status and misconduct record, disciplinary actions, practice-area split, fees (free consultation, contingency, hourly), awards and honors with years, work history, education, associations, every office with its phone, fax and website, social links and bio. Turn off for a fast, low-cost sweep of the directory cards only (name, firm, street, Avvo Rating, review score + count, years licensed, practice areas, the phone Avvo shows).

## `includeReviews` (type: `boolean`):

Add the most recent client reviews shown on each profile (rating, title, full text, date, whether the client hired the attorney, the attorney's reply) and the peer endorsements (endorsing lawyer, relationship, text). Review counts, star breakdown, themes and the AI summary are always included; turn this off for slimmer CSV/Excel exports. Requires profile details.

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

For each attorney with a website, visit that website (the attorney's page, the home page and one contact page) to collect contact emails and phone numbers. Avvo itself never publishes emails. The headline <code>email</code> is only an address on the firm's own domain (or a personal mailbox), preferring the attorney's own; every address found is listed in <code>enrichedEmails</code>.

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

Only keep attorneys whose numeric Avvo Rating is at least this value (e.g. 9 for Superb). 0 = no minimum.

## `minReviews` (type: `integer`):

Only keep attorneys with at least this many client reviews. 0 = no minimum.

## `withPhoneOnly` (type: `boolean`):

Skip attorneys without a phone number. Avvo shows phone numbers for its Pro (paying) members; most other profiles only offer a message form.

## `withWebsiteOnly` (type: `boolean`):

Skip attorneys without a website (needs the profile page, so profile details are fetched).

## `monitorMode` (type: `boolean`):

Remember attorney IDs delivered by earlier runs (in a named key-value store) and deliver only attorneys not delivered before. Pair it with an Apify Schedule for a steady new-lead feed: the schedule starts the run, monitor mode skips everyone you already have.

## `monitorStoreName` (type: `string`):

Name of the key-value store that holds the monitor memory. Use different names to track independent searches separately (lowercase letters, digits and hyphens).

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

Avvo refuses datacenter and direct connections, so this actor always uses residential IPs (US by default). Leave as is unless you supply your own US residential proxies.

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

How many Avvo pages to load at the same time (1–3; higher values are treated as 3, the most one IP is given without being refused).

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "practiceAreas": [
    "personal injury"
  ],
  "urlsFromFile": "",
  "maxResults": 100,
  "includeProfileDetails": true,
  "includeReviews": true,
  "enrichEmails": false,
  "minAvvoRating": 0,
  "minReviews": 0,
  "withPhoneOnly": false,
  "withWebsiteOnly": false,
  "monitorMode": false,
  "monitorStoreName": "avvo-monitor",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "maxConcurrency": 3
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped attorney lead records as JSON items in the default dataset.

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "locations": [
        "Austin, TX"
    ],
    "practiceAreas": [
        "personal injury"
    ],
    "urlsFromFile": "",
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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 = {
    "locations": ["Austin, TX"],
    "practiceAreas": ["personal injury"],
    "urlsFromFile": "",
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/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 '{
  "locations": [
    "Austin, TX"
  ],
  "practiceAreas": [
    "personal injury"
  ],
  "urlsFromFile": "",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapesage/avvo-scraper --silent --output-dataset

```

## MCP server setup

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