Justia Lawyer Scraper — Attorney Leads
Pricing
from $20.00 / 1,000 lawyer records
Justia Lawyer Scraper — Attorney Leads
Scrape Justia lawyer and law firm profiles with practice areas, locations, contact details, ratings, and structured attorney lead data.
Pricing
from $20.00 / 1,000 lawyer records
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Features
Share
Justia Lawyer Directory Scraper — Attorney Leads
Extract attorney profiles from the Justia Lawyer Directory with practice areas, contact details, bar admissions, education, ratings, and reviews. Filter by practice area and geographic location, or supply direct Justia directory listing URLs.
Use Cases
- Legal lead generation — build lists of licensed attorneys by practice area and city/county for sales outreach
- Attorney prospecting — find lawyers with published phone, website, and office address for CRM enrichment
- Legal-tech data enrichment — feed attorney directories, comparison tools, and matching platforms
- Market research — analyze attorney distribution by practice area, geography, rating, and law school
- Recruitment — source attorneys by specialization for law firm hiring or expert-network platforms
Input
The actor supports two input modes. When startUrls are given, practiceArea and location are ignored. An empty input runs the Console example (family law in Los Angeles).
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | [] | Direct Justia lawyer listing or profile URLs (must contain justia.com/lawyers) |
practiceArea | enum | none (prefilled family-law) | Practice-area slug (e.g., criminal-law, personal-injury, bankruptcy) |
location | string | none (prefilled california/los-angeles) | Geographic slug in state/city or state/county format |
maxResults | integer | 50 | Maximum lawyer records to extract (1–10,000) |
scrapeProfileDetails | boolean | true | Visit each lawyer's profile page to enrich with bar admissions, law school, and additional contact info |
URL formats accepted in startUrls
- Practice area:
https://www.justia.com/lawyers/family-law - Location:
https://www.justia.com/lawyers/california/los-angeles - Combined:
https://www.justia.com/lawyers/family-law/california/los-angeles - County:
https://www.justia.com/lawyers/california/los-angeles-county
Individual profile URLs (lawyers.justia.com/lawyer/...) are not accepted as start URLs; use the directory page that lists the lawyer.
Example inputs
{"practiceArea": "family-law","location": "california/los-angeles","maxResults": 100,"scrapeProfileDetails": true}
{"startUrls": [{ "url": "https://www.justia.com/lawyers/criminal-law/illinois/chicago" }],"maxResults": 200}
{"practiceArea": "personal-injury","location": "texas/houston","maxResults": 50,"scrapeProfileDetails": false}
Output
Each dataset item is a lawyer record with the following fields:
| Field | Type | Example |
|---|---|---|
lawyer_name | string | null | "Jane A. Roe" |
firm_name | string | null | "Roe & Partners LLP" |
practice_areas | string[] | null | ["Family Law","Divorce"] |
city | string | null | "Los Angeles" |
state | string | null | "CA" |
phone | string | null | "(213) 555-0100" |
email | string | null | "jane@roelaw.com" |
website | string | null | "https://roelaw.com" |
address | string | null | "500 Market St, Los Angeles, CA 90013" |
rating | number | null | 4.8 |
reviews_count | number | null | 23 |
bar_admissions | string[] | null | ["State Bar of California"] |
law_school | string | null | "UCLA School of Law" |
profile_url | string | null | "https://www.justia.com/lawyers/jane-roe-12345" |
scraped_at | string (ISO 8601) | "2026-07-05T12:00:00.000Z" |
source_url | string | "https://www.justia.com/lawyers/family-law/california/los-angeles" |
Fields are filled only from what Justia publishes. email is usually null because most Justia profiles use a contact form instead of a public address. practice_areas, reviews_count, bar_admissions, law_school, and the office address come from the profile page, so they need scrapeProfileDetails: true. rating is on a 5-point scale (Justia's 10-point peer rating is divided by two).
Pricing
This Actor uses pay-per-event pricing. These are the current Apify Store event prices:
| Event | Free | Bronze | Silver | Gold, Platinum, Diamond | When it is charged |
|---|---|---|---|---|---|
lawyer-found | $0.025001 | $0.024375 | $0.023750 | $0.020000 | One unique attorney record saved to the dataset. |
apify-actor-start | $0.006251 | $0.006094 | $0.005938 | $0.005000 | Actor start; one event per started GB of memory (2 at the default 2 GB). |
Example: 50 records on the Free tier cost about $1.26 (50 × $0.025001 plus 2 start events). Each lawyer is charged once, only after its record is saved; failed pages and blocked requests are never charged, and the run stops cleanly at your maxTotalChargeUsd. Apify platform usage and network access are included in the event prices.
API & Integration
Run the actor via API:
curl -X POST "https://api.apify.com/v2/acts/muhammadafzal~justia-lawyer-directory-scraper/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"practiceArea":"family-law","location":"california/los-angeles","maxResults":50}'
Export results:
$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
Integrate with Zapier, Make, n8n, Airbyte, LangChain, or any tool that consumes Apify datasets.
Reliability & Anti-Blocking
- Browser rendering with a bounded session pool and polite 1–3 s delays between requests
- Network routing handled by the Actor with a per-run US session; older
customProxyUrlinput values are ignored - 3-layer extraction: JSON-LD structured data → DOM parsing with multi-selector fallback → profile-page enrichment (one profile request per lawyer)
- Pagination auto-follow (
a[rel="next"],?page=N) - Honest endings: the run stops at
maxResults, at the charge limit, or about a minute before the run timeout, and writes the stop reason, delivered count, and charged events to theOUTPUTrecord. If every listing page is blocked or fails, the run ends as failed with no result charges.
Notes
- Justia's directory contains hundreds of thousands of attorney profiles across all US states. Large extraction jobs (10,000+ records) should set
scrapeProfileDetails: falsefor speed, then re-enrich a subset. - Practice-area slugs follow Justia's URL convention (kebab-case). Common slugs are pre-listed in the input schema dropdown; custom slugs can be typed manually.
- The actor is MCP-ready: AI agents (Claude, GPT, Cursor) can call it with a single
practiceArea+locationpair and receive structured JSON.
FAQ
How many lawyers can I extract per run?
Up to 10,000 per run with maxResults. With profile details on, expect roughly 5–10 profiles per minute; very large jobs should run with scrapeProfileDetails: false, or be split by city or county.
Does it return lawyer email addresses?
Only when a profile publishes one, which is rare. Justia usually routes contact through a form, so email is mostly null; phone, website, and office address are much more common.
Can I use my own proxy?
No. Network routing is handled by the Actor and is included in the price. Proxy fields from older inputs are ignored.
Legal & Compliance
This actor scrapes publicly available attorney profile data from the Justia Lawyer Directory. Ensure your use complies with Justia's Terms of Service and applicable data-protection laws (GDPR, CCPA) when handling contact information. Output is intended for B2B lead generation and research purposes.
Last verified: 2026-10-27