# Super Lawyers Scraper - Top Attorney Directory (`jungle_synthesizer/superlawyers-scraper`) Actor

Scrape peer-reviewed attorney profiles from SuperLawyers.com. Extract names, firms, practice areas, contact info, selection years, education, and social links. Filter by state and practice area.

- **URL**: https://apify.com/jungle\_synthesizer/superlawyers-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation, Business, Other
- **Stats:** 19 total users, 3 monthly users, 89.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Super Lawyers Directory Scraper

Scrape peer-reviewed attorney profiles from [SuperLawyers.com](https://www.superlawyers.com/) — the curated legal directory where the top 5% of attorneys per state earn selection through a multiphase peer-review process. Extract names, firm details, practice areas, contact information, education, selection years, social links, and the firm's own SuperLawyers identifier across all 50 U.S. states and Washington D.C.

Because every listed attorney has passed independent vetting, this dataset is higher-signal than bulk legal directories. You are getting top-rated attorneys, not raw unfiltered listings.

***

### What Data Does the Super Lawyers Scraper Extract?

The scraper outputs up to 25 fields per attorney record. A two-phase crawl strategy controls depth and cost: the fast listing phase extracts structured data from JSON-LD blocks on directory pages; the optional profile enrichment phase visits individual profile pages for extended fields including biography, focus area percentages, selection year history, bar activity, and social links.

#### Output Fields

| Field | Description |
|---|---|
| `name` | Attorney full name |
| `job_title` | Professional title (e.g. "Attorney at Law") |
| `award` | Award status (e.g. "Selected to Super Lawyers", "Selected to Rising Stars") |
| `firm_name` | Law firm name |
| `firm_legal_name` | Firm legal name (may differ from display name) |
| `practice_areas` | List of practice area strings — profile enrichment only |
| `focus_areas` | Practice focus areas with percentage breakdowns (e.g. "50% Personal Injury - General: Plaintiff") — profile enrichment only |
| `phone` | Attorney or firm phone number |
| `street_address` | Office street address |
| `city` | Office city |
| `state` | Two-letter U.S. state code |
| `zip` | Office ZIP code |
| `website` | Attorney or firm website URL — profile enrichment only |
| `law_school` | Law school attended |
| `selection_years` | Years selected to Super Lawyers (e.g. `["2018", "2021", "2024"]`) — profile enrichment only |
| `bar_activity` | Bar and professional organization memberships — profile enrichment only |
| `bio` | Full biography text — profile enrichment only |
| `linkedin_url` | LinkedIn profile URL — profile enrichment only |
| `facebook_url` | Facebook page URL — profile enrichment only |
| `twitter_url` | Twitter/X profile URL — profile enrichment only |
| `photo_url` | Attorney headshot photo URL |
| `profile_url` | Full SuperLawyers profile URL |
| `firm_profile_url` | SuperLawyers firm profile URL — profile enrichment only |
| `firm_id` | SuperLawyers firm identifier (the UUID in the firm profile URL) — profile enrichment only |

Results are available in three pre-built dataset views: **Attorney Overview** (name, firm, location, practice areas, award status), **Contact Details** (phone, address, website, LinkedIn), and **Full Attorney Profile** (all 25 fields).

***

### Input Options

#### Output Shape — One Row Per Attorney, or One Row Per Firm

`groupBy` controls the shape of the dataset:

| Value | Output |
|--------------|--------|
| `attorney` (default) | One row per attorney. Unchanged from previous versions — existing consumers need no edits |
| `firm` | One row per firm, carrying the firm's name, SuperLawyers firm profile, address, phone, website, the union of its attorneys' practice areas and selection years, an `attorney_count`, and a nested `attorneys` array |

**Firms are grouped on SuperLawyers' own firm ID**, not on a firm-name string. Every enriched profile links to the firm's own profile page and that URL carries a UUID, so three attorneys whose pages spell the firm "Carpenter & Zuckerman", "Carpenter and Zuckerman, LLP" and "CZ Law" still collapse into one row. Each firm record reports how it was identified in `firm_id_source`:

| `firm_id_source` | Meaning |
|------------------|---------|
| `firm_id` | Grouped on SuperLawyers' own firm identifier. Unambiguous |
| `firm_name` | The profile published no firm link, so a normalised firm name was used. Carries the ambiguity any name-based match carries |
| `null` | The attorney published no firm at all; the row is a firm of one |

Two things worth knowing before you use it:

- **Firm output requires profile enrichment**, and turns it on automatically. Listing pages carry only name, profile URL, state and practice area — no firm at all.
- **`maxItems` counts output rows in both modes.** `maxItems: 100` with firm output returns **100 firms**, the same way it returns 100 attorneys in the default mode. Reaching 100 firms takes somewhat more than 100 profile fetches, since some attorneys share a firm — those attorneys are absorbed into a firm row rather than adding one. You are billed per attorney absorbed into the firms you receive, so a firm-mode run costs a little more than an attorney-mode run of the same `maxItems`, and returns correspondingly more data per row.

**`attorney_count` is the attorneys this run found at the firm, not the firm's full roster.** The crawl stops once it has the firms you asked for, so a firm near the end of the run may be represented by one attorney even if it has twenty. Raise `maxItems`, or narrow by city and practice area, if you need fuller membership per firm.

Set `includeAttorneys: false` for smaller records when you only need firm-level fields.

#### Filter by State

Select one or more U.S. states using two-letter abbreviations. Supports all 50 states and DC. Defaults to all states when left empty — use with a `maxItems` limit to avoid unexpectedly large runs.

#### Filter by Practice Area

Filter by one or more of 36 legal practice categories including:

- Personal Injury
- Criminal Defense
- Business Litigation
- Family Law / Divorce
- Employment & Labor
- Estate Planning & Probate
- Immigration
- Bankruptcy
- Medical Malpractice
- Intellectual Property
- Civil Rights
- Mergers & Acquisitions
- DUI / DWI
- Workers' Compensation
- Cannabis Law

Leaving the practice area filter empty crawls a default set of 15 major categories for the selected states.

#### Filter by City

Narrow results to a specific city using a URL-compatible slug (e.g. `los-angeles`, `new-york`). Combine with a state filter for precise targeting. Check the SuperLawyers URL structure to confirm the correct slug — not all city spellings match.

#### Profile Enrichment

Enable `enrichProfiles` to visit each attorney's individual profile page. This adds biography text, focus area percentages, selection year history, bar association memberships, and social links. Enrichment roughly doubles crawl time and cost per record.

#### Direct Profile URLs

Provide a list of specific `profiles.superlawyers.com` URLs to scrape individual attorneys without running a full directory crawl.

#### Example Input — Targeted State/Practice Area Search

```json
{
  "states": ["CA", "TX", "NY"],
  "practiceAreas": ["personal-injury-plaintiff", "medical-malpractice"],
  "city": "los-angeles",
  "enrichProfiles": true,
  "maxItems": 500,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

#### Example Input — Direct Profile Scrape

```json
{
  "profileUrls": [
    { "url": "https://profiles.superlawyers.com/california/beverly-hills/lawyer/sark-ohanian/4b5a5762-cdab-46c8-87a5-240a0ed26c57.html" }
  ],
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

***

### Sample Output

**Listing mode (`enrichProfiles: false`) — data from directory JSON-LD:**

```json
{
  "name": "John A. Smith",
  "job_title": "Attorney at Law",
  "award": "Selected to Super Lawyers",
  "firm_name": "Smith & Associates LLP",
  "firm_legal_name": "Smith & Associates LLP",
  "practice_areas": null,
  "focus_areas": null,
  "phone": "(310) 555-0100",
  "street_address": "1234 Wilshire Blvd Suite 500",
  "city": "Los Angeles",
  "state": "CA",
  "zip": "90017",
  "website": null,
  "law_school": "UCLA School of Law",
  "selection_years": null,
  "bar_activity": null,
  "bio": null,
  "linkedin_url": null,
  "facebook_url": null,
  "twitter_url": null,
  "photo_url": "https://cdn.superlawyers.com/image/upload/.../john-smith.png",
  "profile_url": "https://profiles.superlawyers.com/california/los-angeles/lawyer/john-a-smith/uuid.html",
  "firm_profile_url": "https://profiles.superlawyers.com/california/los-angeles/lawfirm/smith-associates/uuid.html"
}
```

**Profile enrichment mode (`enrichProfiles: true`) — additional fields populated:**

```json
{
  "practice_areas": ["Personal Injury - General: Plaintiff", "Civil Litigation", "Medical Malpractice"],
  "focus_areas": [
    "50% Personal Injury - General: Plaintiff",
    "30% Medical Malpractice: Plaintiff",
    "20% Civil Litigation: Plaintiff"
  ],
  "website": "https://smithlaw.com/",
  "selection_years": ["2020", "2021", "2022", "2023"],
  "bar_activity": ["California State Bar Association, Member", "Los Angeles County Bar Association"],
  "bio": "John A. Smith is a trial lawyer specializing in...",
  "linkedin_url": "https://www.linkedin.com/in/john-smith/",
  "facebook_url": "https://www.facebook.com/smithlaw/",
  "twitter_url": "https://twitter.com/smithlaw"
}
```

**Firm output mode (`groupBy: "firm"`) — one row per firm:**

```json
{
  "firm_name": "Carpenter & Zuckerman",
  "firm_id": "523839ab-6969-45ce-8ac4-2aed1f8e98b0",
  "firm_profile_url": "https://profiles.superlawyers.com/california/beverly-hills/lawfirm/carpenter-and-zuckerman/523839ab-6969-45ce-8ac4-2aed1f8e98b0.html",
  "firm_id_source": "firm_id",
  "attorney_count": 3,
  "phone": "310-555-0100",
  "street_address": "8827 West Olympic Boulevard",
  "city": "Beverly Hills",
  "state": "california",
  "zip": "90211",
  "website": "https://www.cz.law/",
  "practice_areas": ["Personal Injury - General: Plaintiff", "Medical Malpractice"],
  "selection_years": ["2022", "2023", "2024"],
  "attorneys": [
    { "name": "Jane Smith", "job_title": "Partner", "phone": "310-555-0100", "profile_url": "https://profiles.superlawyers.com/..." }
  ]
}
```

***

### Use Cases

- **Legal marketing agencies** building targeted outreach lists for litigation support services, expert witness platforms, and bar association events
- **Law firms** researching competitor positioning, practice area concentration, and geographic coverage before entering a new market
- **LegalTech and SaaS companies** enriching CRM records with verified attorney contact data and credentials
- **Recruiters and headhunters** targeting peer-vetted attorneys with specific practice specialties and multi-year selection records
- **Insurance and financial services** firms identifying high-value legal contacts by specialty and region
- **Research teams** analyzing attorney distribution, geographic concentration, and practice area trends across the U.S. legal market

***

### Pricing

Pay-per-result (PPE). You are charged per attorney profile returned. Profile enrichment mode visits two pages per attorney (listing + profile) versus one for listing-only, so it costs more per record.

***

### Limitations

- **Cloudflare handled.** SuperLawyers.com turns away most automated tools; this actor gets through.
- **Crawl speed.** Cloudflare challenge resolution adds a 10-second wait per page. Concurrency is capped at 2 to avoid rate limits. Large runs (all states, all practice areas) can take several hours.
- **Profile enrichment cost.** Listing-phase data is reliable for contact outreach. Enable enrichment only when you specifically need biographies, focus area percentages, or selection year history.
- **City filter format.** The `city` field must match SuperLawyers' URL slug exactly (e.g. `los-angeles`, not `Los Angeles`). Empty results usually indicate a slug mismatch.
- **Directory scope.** Only attorneys selected to Super Lawyers or Rising Stars appear — approximately the top 5% per state. This is not a complete attorney directory.
- **Focus areas and bar activity** are extracted from HTML and may be absent if SuperLawyers updates their page structure. JSON-LD fields (name, firm, phone, address) are more stable.

***

### Frequently Asked Questions

**How do I scrape attorney data from SuperLawyers.com?**
Configure the state and practice area filters, set a `maxItems` limit, and run the actor. The default configuration (California, all major practice areas, 100 records) completes in under 10 minutes.

**What is Super Lawyers and why is the data high-quality?**
Super Lawyers selects attorneys through peer nominations, independent research, and peer evaluations. Less than 5% of attorneys in a state receive the designation in a given year. The directory represents practicing attorneys at the top of their fields — not bulk unfiltered listings.

**Can I scrape a specific attorney's profile?**
Yes. Provide one or more `profiles.superlawyers.com` URLs in the `profileUrls` input field. The actor scrapes those profiles directly without running a directory crawl.

**Does it scrape Rising Stars as well?**
Yes. Both "Selected to Super Lawyers" and "Selected to Rising Stars" designations appear in the directory and are scraped. The `award` field distinguishes them.

***

Need a custom feature or a different data field? Get in touch via the Apify Store contact form.

***

**Further reading:** [How to Find Attorney Contact Data Without Paying ZoomInfo Prices](https://orbtop.com/articles/how-to-find-attorney-contact-data/)

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

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

Select one or more U.S. states to search. Defaults to all states if empty.

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

Filter by legal practice area. Leave empty to crawl all practice areas.

## `city` (type: `string`):

Filter by city name (must match SuperLawyers city slug, e.g. 'los-angeles', 'new-york'). Works best combined with a state filter.

## `enrichProfiles` (type: `boolean`):

When enabled, visits each attorney's profile page to extract full details: firm address, the firm's SuperLawyers ID, award status, bio, focus areas, selection years, bar activity, and social links. Recommended — listing pages only provide name, profile URL, state, and practice area.

## `groupBy` (type: `string`):

One row per attorney (default), or one row per firm. Firm rows carry the firm's name, SuperLawyers firm profile, address, phone, website, the practice areas of all its attorneys, an attorney\_count, and a nested attorneys array. Firms are grouped on SuperLawyers' own firm ID, not on a firm-name string. Firm output requires profile enrichment and turns it on automatically. maxItems counts OUTPUT ROWS in both modes — with firm output it is a number of firms.

## `includeAttorneys` (type: `boolean`):

With firm output, nest each firm's attorneys inside its record. Turn off for smaller records when you only need firm-level fields. Ignored when the output shape is one row per attorney.

## `profileUrls` (type: `array`):

Specific SuperLawyers attorney profile URLs to scrape. Bypasses search when provided. Accepts URLs from profiles.superlawyers.com.

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

Maximum number of attorney profiles to scrape. Set to 0 for unlimited.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "states": [
    "CA"
  ],
  "enrichProfiles": false,
  "groupBy": "attorney",
  "includeAttorneys": true,
  "maxItems": 100
}
```

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "states": [
        "CA"
    ],
    "city": "",
    "enrichProfiles": false,
    "groupBy": "attorney",
    "includeAttorneys": true,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/superlawyers-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "states": ["CA"],
    "city": "",
    "enrichProfiles": False,
    "groupBy": "attorney",
    "includeAttorneys": True,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/superlawyers-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "states": [
    "CA"
  ],
  "city": "",
  "enrichProfiles": false,
  "groupBy": "attorney",
  "includeAttorneys": true,
  "maxItems": 100
}' |
apify call jungle_synthesizer/superlawyers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/superlawyers-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/8WvffghmVgdodMxbu/builds/3YKhkhZwQEd1Ikguz/openapi.json
