FindLaw Attorney Directory Scraper
Pricing
from $9.99 / 1,000 results
FindLaw Attorney Directory Scraper
Scrapes individual attorneys from FindLaw by state, city, and practice area, providing names, contact details, addresses, practice areas, reviews, ratings, badges, and profile URLs. Filters out firm listings and supports multi-city searc
Pricing
from $9.99 / 1,000 results
Rating
0.0
(0)
Developer
Jamshaid Arif
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Extract individual attorney profiles from FindLaw's lawyer directory by state, city and practice area. Returns name, email, phone, office address, practice areas, review counts and badges, one row per attorney.
FindLaw mixes law-firm listings into its attorney search results. This actor identifies firm pages from the search card before fetching them, so you get individual attorneys without paying for requests to firm profiles you don't want.
What you get
Each record in the dataset:
| Field | Notes |
|---|---|
name | As shown on the profile |
profile_type | attorney, firm, or unknown (see below) |
email | Publisher-declared where possible; see email_source |
email_source | mailto, jsonld, form_field, base64, page_text, or contact:… if it came from the contact page. The first two are strongest. |
email_is_generic | true for shared inboxes like info@, intake@, leads@ — deliverable, but not a person |
phone | Normalised to (305) 555-0100 |
street, city, state, zip | Office address |
website | Firm site, when listed |
practice_areas | Cleaned list |
practice_area_shares | { "Divorce": 60, ... } when the profile gives percentages |
review_count, rating | From the search card or profile schema |
is_super_lawyers, has_free_consultation, badges | Search-card badges |
attorneys_at_firm | Roster, when the page is a firm |
found_in_city | Which city listing surfaced this profile |
profile_url, profile_id | Stable FindLaw identifiers |
Input
| Field | Default | Notes |
|---|---|---|
| Practice area | criminal-law | The slug from the FindLaw URL. Use Custom practice area for anything not in the list — copy it from lawyers.findlaw.com/<slug>/... |
| State | florida | |
| Cities | (empty) | Empty scrapes every city in the state. Otherwise one name per entry. A [texas] entry switches state for the entries after it, so one list can span the country. |
| Profile type | attorneys | firms or both also available |
| Fetch contact page | on | Most emails live only on the contact form page. Off halves requests, finds far fewer emails. |
| Max results | — | Stop after N records. Good for a test run. |
| Max cities | — | Scrape the first N of the list |
| Max pages per city | 50 | Safety cap |
| Stale pages | 4 | Move to the next city after this many consecutive pages with no unseen profiles. Neighbouring cities list the same firms, so this saves a lot of requests. 0 walks to the end. |
| Requests per second | 1.5 | Shared across workers, capped at 3 |
| Concurrency | 3 | Hides latency; does not raise the request rate. Capped at 5. |
| Proxy | off | One sticky session per worker |
Example
{"practiceArea": "personal-injury-plaintiff","state": "texas","cities": ["Houston", "Dallas", "Austin", "[florida]", "Miami", "Tampa"],"profileType": "attorneys","maxResults": 500}
How firm filtering works
Two layers. The search card title is checked first — a corporate form (PLLC, LLP, Law Offices of, a bare trailing Law or Firm) drops the card before any request is spent. Anything that reaches the profile page is classified again from its structured data, name shape, and whether it lists a roster of attorneys.
Profiles the classifier cannot call confidently are kept and labelled unknown, never dropped silently. Filter on profile_type if you want only the confident ones.
Behaviour worth knowing
Duplicates are by profile ID. FindLaw sometimes carries two profiles for the same person (a personal one and a firm-attached one). Both are returned; dedupe on name + phone if that matters to you.
Some phone numbers are FindLaw call-tracking lines, not the firm's published number. They forward correctly, but they're rented numbers assigned per listing. Spot-check against the firm's own site if you need the real line.
Migrations resume cleanly. City progress and seen-profile IDs are kept in actor state, so a run moved between servers picks up at the interrupted city without re-scraping or duplicating.
Aborts are clean. An aborted run finishes its current page, pushes what it has, and exits. The interrupted city is left unmarked so a rerun with the same state resumes there.
Rate limiting is deliberate. The request rate is a shared token bucket across all workers and is capped at 3 requests/second. Raising concurrency does not raise the rate. This keeps runs predictable and avoids the 429 back-offs that make a fast run slower than a steady one.
Pay-per-event
When run under pay-per-event pricing, the actor charges one attorney-scraped event per record pushed and stops when your spend limit is reached. Records are pushed in batches of 100, so the overshoot is at most one batch.
Compliance — read before running
This actor collects publicly listed professional contact information from a directory where attorneys publish it in order to be contacted. It does not log in, bypass paywalls, or access anything not visible to an anonymous visitor.
That said, the following are your responsibility as the user, not the actor's:
- FindLaw's Terms of Use. FindLaw (Thomson Reuters) restricts automated access in its terms. Review them before running at scale and decide for yourself whether your use is acceptable.
- How you use the contact data. Attorney emails and phones are subject to anti-spam and privacy law where the recipient is located and where you are — CAN-SPAM in the US, GDPR/UK GDPR if any subject is in Europe, CCPA for California residents, and state bar rules on solicitation if you are yourself a lawyer. Unsolicited bulk email to addresses gathered this way is regulated in most jurisdictions.
- Apify's Terms of Service, which govern what may be run on the platform.
The defaults (1.5 requests/second, 3 workers) are conservative on purpose. The actor is not built to evade blocking beyond ordinary browser-like request headers; if FindLaw rate-limits or blocks a run, it backs off and retries a few times, then stops.
Known gaps
- Practice-area slugs other than
criminal-lawandpersonal-injury-plaintiffin the dropdown have not all been verified against live FindLaw URLs. A wrong slug returns no cities. Use Custom practice area with a slug copied from a real URL to be sure. - City name → URL conversion follows FindLaw's convention (
St Petersburg→st-petersburg,Castleton-on-Hudson→castleton-on-hudson). A city with no directory page returns 404, is logged, and the run continues. - Review and rating fields depend on what the search card and profile schema expose; many profiles have neither.