FindLaw.com Lawyer Directory Scraper
Pricing
from $2.50 / 1,000 results
FindLaw.com Lawyer Directory Scraper
Scrape lawyers.findlaw.com — one row per firm with every office address (lat/long), every attorney on staff, practice areas, website, and price range. Multi-select practice × state × city, or paste any FindLaw URL. JSON/CSV, billed per result.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Muhamed Didovic
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn FindLaw.com into a structured US law-firm dataset. Scrape every law firm + attorney profile from any FindLaw listing URL — name, legal name, full street address with real lat/long coordinates, multiple offices, telephone, practice areas, employees (attorneys at the firm with their own profile URLs), website, LinkedIn, price range, description — straight out of the page. JSON or CSV out, no compute charge per run, just per result.
How it works

✨ Why use this scraper?
Building a US legal-marketing list? Mapping firm density by practice area + state? Need a clean firm dataset with all branch offices and named attorneys?
- 🎯 Three ways to start. Pick practice areas + US states + optional cities from the dropdowns (multi-select cartesian product), paste any FindLaw URL — listings or direct profile pages — or combine both. URLs always win.
- 🏢 Firm-centric data shape. One row per firm/profile with
name,legalName, full address, geo coordinates, multiple offices (locations[]), and the entire roster of attorneys at the firm (employees[]) with their individual FindLaw profile URLs. - 📍 Real coordinates, not just zip codes. Each row carries
coordinates.latitude+coordinates.longitudeparsed straight from the JSON-LDgeoblock — drop firms onto a map without a geocoding step. - 🌐
websiteandlinkedinseparated. First non-social URL goes towebsite, any LinkedIn URL goes tolinkedin— the fullsameAs[]array is preserved too. - 🏛 All branch offices captured.
locations[]contains every office the firm lists — main + satellites — each with its own street address, postal code, and phone number. - 👥 Attorneys nested.
employees[]lists each attorney at the firm with theirname,jobTitle,image, and individual FindLawprofileUrl— useful as a hop list if you also want per-attorney data. - ⚡ Two output modes. Default fetches each firm's detail page for the full ~25-field profile. Lite mode skips per-firm fetches entirely — one listing fetch yields ~30 rows with name + phone + city/state. ~30× faster, ~30× cheaper.
- 🛡 Cloudflare-aware, zero browser automation. Three-stack TLS race (impit + got-scraping + curl-impersonate Chrome 131) handles the anti-bot layer without spinning up a headless Chromium.
- 📤 Clean exports. One row per firm. No padding rows, no duplicate office rows. JSON + CSV exported automatically.
🎯 Use cases
| Team | What they build |
|---|---|
| Legal marketing / SaaS GTM | Outbound lists for vendors selling to small/mid law firms — by state, city, and practice area |
| Legal-tech research | Firm-density maps, average roster size, branch-office distribution per metro |
| Lead-gen / referral networks | Build local firm directories or referral matchmaking by practice area + city |
| Competitive intelligence | Competitor benchmarking — staffing levels, branch-office expansion, practice-area coverage |
| Journalists / academic research | Studies on legal-services access by region |
| Existing platforms enriching their data | Patching firm records with verified phone, full address, geo coords, named attorneys, and website |
📥 Supported inputs
The scraper accepts inputs in two mutually-exclusive modes — URLs take strict precedence over filters:
⚠️ Precedence rule. If
startUrlshas any non-empty entry, the practice-area / state / city dropdowns are completely ignored. To use the dropdowns, leavestartUrlsempty.
Mode 1 — Paste FindLaw URLs (highest priority)
Drop one or more lawyers.findlaw.com URLs into startUrls. Each URL is classified automatically:
| URL pattern | Behaviour |
|---|---|
https://lawyers.findlaw.com/{practice-area}/{state}/{city}/ | Listing — extracts firm links + walks pagination |
https://lawyers.findlaw.com/{practice-area}/{state}/ | Listing (state-level) |
https://lawyers.findlaw.com/{practice-area}/ | Listing (national) |
https://lawyers.findlaw.com/{state}/ | Listing (browse by state) |
https://lawyers.findlaw.com/{state}/{city}/{firm-slug}-{base64-id}/ | Firm detail — routed straight to the profile parser |
Easiest workflow: apply your filters on lawyers.findlaw.com in the browser, copy the URL from the address bar, paste into startUrls.
Mode 2 — Practice area + US state (+ optional city) dropdowns
All three dropdowns are multi-select. The scraper expands the cartesian product:
- Practice areas — 31 options (
family-law,criminal-law,personal-injury-plaintiff,real-estate-law, etc.) - U.S. states — all 50 states + DC
- Cities (optional) — narrow to specific cities (e.g.
los-angeles,san-francisco)
{family-law, divorce} × {ca, ny} × {los-angeles, new-york}→ 8 listing URLs (cartesian product)
Edge cases:
- States selected, no practice area → state-level browse listings (one per state).
- Practice area(s) selected, no states → national listings (one per practice area).
- No filters at all → falls back to a default LA family-law listing.
Not supported:
- FindLaw legal articles, Q&A, and the Marketing Solutions site (the scraper targets
lawyers.findlaw.comprofiles only) - Hosts outside
lawyers.findlaw.com
🔄 How it works
- Resolve start URLs. Synthesize listing URLs from the practice-area + state + city dropdowns (cartesian product) — or use
startUrlsif set (URL always wins). - Classify each URL as a listing or a firm profile.
- Fetch each listing and pull every firm profile link from the embedded JSON-LD
CollectionPage > mainEntity.itemListElement[]. ~30 firms per listing page. - Follow pagination by walking
?page=Nuntil either norel="next"link exists ormaxItemsis reached. - Fetch each firm detail page in parallel through a global sliding window.
- Parse the JSON-LD
LegalServiceblock for name, description, phone, full address, geo coordinates, multiple offices, employees, practice areas, website. Inline the main address intolocations[0](FindLaw uses an@idreference there). - Push one row per firm to the dataset and export
data.csv+data.jsonat the end.
🪶 Lite mode
Toggle liteMode on and the scraper extracts data directly from each listing page's embedded LegalService items — no per-firm detail HTTP calls. Trade-off:
- ~30× faster + ~30× cheaper. One listing fetch yields ~30 rows.
- Smaller field set.
name,telephone,image,addressLocality(city),addressRegion(state),addressCountry,priceRange. Not in lite mode: description, geo coordinates, multiple offices, employees, practice areas, website, LinkedIn, full street address.
Use lite mode for cheap, large-scale lead-gen runs where you only need name + phone + city. Use full mode for CRM enrichment, competitive intelligence, or any workflow that needs offices, employees, practice areas, or website data.
⚙️ Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array | ["https://lawyers.findlaw.com/family-law/california/los-angeles/"] | Optional FindLaw URLs to crawl directly. Listing pages and firm-profile URLs both supported. Takes precedence over the dropdowns below. |
searchByCategory | array (enum) | ["family-law"] | Practice-area slugs (31 options). Multi-select. Combined with states + cities as a cartesian product. |
searchByLocation | array (enum) | ["california"] | US state slugs (51 options including DC). Multi-select. Empty = national listings. |
searchByCity | array (string) | ["los-angeles"] | Optional city slugs. Multi-select. When set, narrows to /{practice-area}/{state}/{city}/. |
liteMode | boolean | false | Skip per-firm detail fetches; emit one row per listing card. ~30× faster but smaller field set. |
maxItems | integer | 1000 | Hard cap on firm profiles collected. Listings paginate ~30 per page. |
maxConcurrency / minConcurrency | integer | 10 / 1 | Parallel HTTP request limits. |
maxRequestRetries | integer | 5 | Retries before a request is given up. |
proxy | object | Apify residential, US | Proxy configuration. FindLaw serves Cloudflare on listing + detail pages — a US residential pool is strongly recommended. |
📊 Output overview
Each scraped firm is one single dataset row of type: "firm". There are no separate rows for offices or employees — both are nested arrays on the same firm row, so the dataset row count equals the firm count exactly.
📦 Output sample
One row per firm (trimmed to the most useful fields):
{"type": "firm","firmId": "Mzc1MjA3NV8x","id": "Mzc1MjA3NV8x","url": "https://lawyers.findlaw.com/california/los-angeles/the-law-offices-of-teresa-a-beyers-Mzc1MjA3NV8x/","profileUrl": "https://lawyers.findlaw.com/california/los-angeles/the-law-offices-of-teresa-a-beyers-Mzc1MjA3NV8x/","name": "The Law Offices of Teresa A. Beyers","legalName": "The Law Offices of Teresa A. Beyers","description": "The Law Offices of Teresa A. Beyers, a Los Angeles, United States Law Firm - Family Law, Divorce, Custody","bioSummary": "The Law Offices of Teresa A. Beyers, a Los Angeles, United States Law Firm - Family Law, Divorce, Custody","image": "https://lawyers.findlaw.com/static/c/images/.../the_law_offices_of_teresa_a_beyers.jpg","telephone": "+1-213-933-6681","primaryPhone": "2139336681","address": "355 S Grand Ave Ste 2450, Los Angeles, CA","streetAddress": "355 S Grand Ave Ste 2450","addressLocality": "Los Angeles","addressRegion": "CA","city": "Los Angeles","state": "CA","postalCode": "90071","addressCountry": "US","coordinates": { "latitude": 34.052536, "longitude": -118.2526779 },"practiceAreas": ["Family Law", "Divorce", "Custody", "Child Support"],"areaServed": ["California"],"numberOfEmployees": 1,"employees": [{"name": "Teresa A. Beyers","jobTitle": null,"profileUrl": "https://lawyers.findlaw.com/california/los-angeles/teresa-a-beyers-Mzc1MzQy.../","image": "https://lawyers.findlaw.com/static/c/images/.../teresa_a_beyers.jpg"}],"locations": [{"name": "The Law Offices of Teresa A. Beyers - Main Office","streetAddress": "355 S Grand Ave Ste 2450","addressLocality": "Los Angeles","addressRegion": "CA","postalCode": "90071","addressCountry": "US","telephone": "+1-213-933-6681","profileUrl": null},{"name": "The Law Offices of Teresa A. Beyers - Newport Beach Office","streetAddress": "620 Newport Center Dr # 1100","addressLocality": "Newport Beach","addressRegion": "CA","postalCode": "92660","addressCountry": null,"telephone": "213-933-6681","profileUrl": "https://lawyers.findlaw.com/california/newport-beach/the-law-offices-of-teresa-a-beyers-NTM3ODk0NV8x/"}],"website": "https://www.teresabeyersfamilylaw.com","linkedin": null,"sameAs": ["https://www.teresabeyersfamilylaw.com"],"priceRange": "Varies based on case specifics","currenciesAccepted": "USD","ogImage": "https://lawyers.findlaw.com/static/c/images/.../teresa_a_beyers.jpg","scrapedAt": "2026-05-09T22:25:01.117Z"}
🗂 Key output fields
| Group | Fields |
|---|---|
| Identifiers | type, firmId, id (alias), url / profileUrl, scrapedAt |
| Firm | name, legalName, description (full), bioSummary (first sentence), image, numberOfEmployees |
| Contact | telephone (formatted), primaryPhone (digits-only 10-digit form), address (composed), streetAddress, addressLocality / city, addressRegion / state, postalCode, addressCountry, coordinates.{latitude,longitude} |
| Practice | practiceAreas[] (e.g. ["Family Law", "Divorce", "Custody"]), areaServed[] (e.g. ["California"]) |
| Offices | locations[].{name, streetAddress, addressLocality, addressRegion, postalCode, addressCountry, telephone, profileUrl} — main + every branch office |
| Attorneys | employees[].{name, jobTitle, profileUrl, image} — every attorney at the firm with their individual FindLaw profile URL |
| Web presence | website (first non-social URL), linkedin (LinkedIn URL if present), sameAs[] (full outbound link list) |
| Commercials | priceRange (e.g. "$200-400 per hour" or "Varies based on case specifics"), currenciesAccepted |
❓ FAQ
Which FindLaw URLs are supported?
Listing URLs at every level (/{practice-area}/{state}/{city}/, /{practice-area}/{state}/, /{practice-area}/, /{state}/) and direct firm/attorney profile URLs (/{state}/{city}/{firm-slug}-{base64-id}/). FindLaw articles, Q&A, and the Marketing Solutions site are skipped.
Do I have to paste a URL or can I just pick from dropdowns?
Either works, but URLs take strict precedence. If startUrls has any entry, the dropdowns are completely ignored (a warning is printed in the run log). To use the dropdowns, leave startUrls empty.
Why is this a "firm" scraper, not an "attorney" scraper?
FindLaw's listings + JSON-LD are firm-centric (LegalService schema). Each row is one firm/profile with attorneys nested in employees[]. If you want one row per attorney, walk the employees[].profileUrl URLs in a follow-up run.
What's locations[] vs address / streetAddress?
The top-level address/streetAddress is the firm's primary office. locations[] carries every office (including the primary one as locations[0]). For multi-office firms, locations[] is where the satellite offices are.
When should I enable liteMode?
Enable for cheap, large-scale lead-gen runs where you only need name + phone + city/state. One listing fetch yields ~30 rows (~30× faster and cheaper than full mode). Disable for CRM enrichment, market intelligence, or any workflow that needs the offices/employees/practice areas.
Why is my run getting blocked?
FindLaw serves Cloudflare on every page. The scraper's three-stack TLS race (impit + got-scraping + curl-impersonate Chrome 131) handles that without browser automation, but only the curl-impersonate stack reliably gets through. Keep the default RESIDENTIAL + country: US proxy on; if you turn the proxy off you'll see 403s immediately.
Can I scrape private pages or recruiter-only views? No. The scraper accesses only publicly available firm and attorney profiles — no logged-in content, no FindLaw Pro / advertising-only features.
How do I limit results?
Set maxItems. The actor stops queuing new firms as soon as the cap is reached.
💬 Support
- For issues or feature requests, please use the Issues tab on the actor's Apify Console page.
- Author's website: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
🛠 Additional services
- Custom output shape, additional fields, or one-off datasets: muhamed.didovic@gmail.com
- Need a similar scraper for another legal directory (Avvo, Justia, Martindale, Lawyers.com, Super Lawyers)? Drop an email — Avvo is already shipped.
- For API access (no Apify fee, just a usage fee for the API): muhamed.didovic@gmail.com
🔎 Explore more scrapers
If this FindLaw Scraper was useful, see other scrapers and actors at memo23's Apify profile — covering job boards, real estate, social media, and more. (Avvo lawyer directory scraper also available.)
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by FindLaw, Thomson Reuters, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available firm and attorney profile pages on lawyers.findlaw.com — no authenticated endpoints, no FindLaw Pro / advertising-only features, no content behind a logged-in session. Users are responsible for ensuring their use complies with lawyers.findlaw.com's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any state-bar rules around the marketing or use of attorney data in their jurisdiction.
SEO Keywords
findlaw scraper, scrape findlaw, findlaw api, lawyers.findlaw.com scraper, Apify findlaw, us law firm directory scraper, law firm directory api, attorney directory scraper, lawyer leads scraper, legal marketing leads, attorney contact data, lawyer contact info scraper, us law firm database, law firm search api, legal directory scraper, legal vertical lead generation, avvo alternative scraper, justia alternative scraper, martindale alternative scraper, super lawyers alternative scraper, lawyers.com alternative scraper, attorney email scraper, law firm leads, solo practitioner data, small law firm leads, law firm practice areas data, law firm geo coordinates, multi-office law firm data, law firm employee roster, attorney roster scraper, law firm pricing data