Justia Lawyer Profiles, Reviews & Office Locations Scraper
Pricing
from $1.25 / 1,000 attorney results
Justia Lawyer Profiles, Reviews & Office Locations Scraper
Scrape attorney profiles from the Justia Lawyer Directory. Extract names, contacts, office locations, practice areas, education, experience, awards, bar admissions, peer endorsements and Justia Lawyer Ratings. Search by state, city, practice area or scrape profile URLs.
Pricing
from $1.25 / 1,000 attorney results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Justia Lawyer Directory Scraper
Scrape public US attorney profiles from the Justia Lawyer Directory - one of the largest free legal directories in the United States. The actor returns 55+ structured fields per attorney, including identity, contact details, multiple offices with weekly hours, practice areas with sub-specialties, full education and bar admissions, awards, professional associations, peer endorsements, the Justia Lawyer Rating breakdown, badges, and social profiles.
Why use this actor
- Richest field set on the market - every section Justia exposes: badges, biography, practice areas (with sub-areas), additional practice areas, video conferencing, fees, jurisdictions (with bar ID + admission year), languages, professional experience, education (school + degree + year), awards, professional associations, speaking engagements, certifications, publications, websites, videos, social profiles, multiple offices (each with name, address, phone, hours), peer endorsements, rating breakdown, and the Justia Lawyer Rating.
- Two modes - search by state(s) + practice area(s) + city, OR paste your own Justia directory / category / profile URLs.
- Precise filters - narrow by Justia Lawyer Rating, free consultation, or top-rated status, so you only pay for the records you actually want.
- Output that's ready for downstream tools - stable
type:idkey for idempotent upserts, clean JSON, typed arrays + objects.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (build URL from filters) or url (paste Justia links). |
states | array | ["California"] | One or more US states (full name or 2-letter code). Search mode only. |
practiceAreas | array | ["Personal Injury"] | One or more practice areas (e.g. "Personal Injury", "Criminal Law", "Family Law"). "All" / empty = no area filter. Search mode only. |
cities | array | [] | Optional city filter. Combines with each state. |
startUrls | array | - | One or more Justia URLs (directory listing, category, or attorney profile). URL mode only. |
fetchDetails | boolean | true | Open each profile to add 40+ fields (badges, bio, practice areas, offices, education, experience, awards, peer reviews, rating breakdown). |
fetchVcard | boolean | false | Also download the .vcf file to add a structured vCard block (fax, name parts, organization). |
minRating | number | - | Only keep attorneys with at least this Justia Lawyer Rating (0-10 scale). |
freeConsultationOnly | boolean | false | Only keep attorneys who offer a free consultation. |
topRatedOnly | boolean | false | Only keep attorneys with the maximum Justia rating (10.0). |
maxItems | integer | 20 | THE cap for the run. Stop after this many records. 0 = unlimited. |
maxPages | integer | 0 | Max pages per directory URL. Does NOT cap the run (defers to maxItems). 0 = unlimited. |
proxy | object | Residential (US) | Network connection. Residential is the default and is recommended; it requires a paid Apify plan. |
Example inputs
Search by state + practice area
{"mode": "search","states": ["California", "New York"],"practiceAreas": ["Personal Injury", "Family Law"],"fetchDetails": true,"maxItems": 200}
Drill into a city
{"mode": "search","states": ["California"],"practiceAreas": ["Personal Injury"],"cities": ["San Francisco"],"fetchDetails": true,"maxItems": 50}
Direct profile URLs
{"mode": "url","startUrls": ["https://lawyers.justia.com/lawyer/christopher-adamson-10198","https://lawyers.justia.com/lawyer/alan-ahdoot-83686"],"fetchDetails": true,"fetchVcard": true}
Scrape a whole directory page (with pagination)
{"mode": "url","startUrls": ["https://lawyers.justia.com/lawyers/personal-injury/california"],"fetchDetails": true,"maxItems": 500}
Output
Each record is one attorney profile (type = "profile"). Every record includes stable identifiers - type, id (numeric), url, and profileUrl - so the recommended idempotency key for deduplication / upserts is type + ":" + id.
Top-level convenience fields
| Field | Type | Notes |
|---|---|---|
type, id, url, profileUrl, slug | string / number / string | Stable identifiers. slug is the URL slug without the numeric id. |
name, jobTitle, jobTitles[] | string / string[] | Identity + tagline. |
primaryPhone, telephones[] | string / string[] | Aggregated across header + offices. |
profileImage | string | Avatar URL. |
justiaRating, topRated | number / boolean | Justia Lawyer Rating (0-10 scale). topRated = rating ≥ 10. |
clientReviewCount, clientReviewRating | number | Counts shown on the profile. |
ratingBreakdown | object | Per-criterion scores: Legal Knowledge, Legal Analysis, Communication Skills, Ethics and Professionalism (0-5 scale). |
yearsOfExperience | number | From the profile header facts. |
city, state, breadcrumb[] | string / array | Geographic context from the breadcrumb. |
badges[], claimedProfile, offersVideoConferencing, connectPro, liiPlatinum, hasSocialMedia | array / booleans | From the Badges section. |
biography | string | Multi-paragraph biography. |
practiceAreas[] | array of {area, subAreas[]} | Each area with its sub-specialty list. |
additionalPracticeAreas[] | array of strings | Additional areas not in the main list. |
videoConferencing[] | array of strings | FaceTime, Zoom, Microsoft Teams, RingCentral, etc. |
fees[], freeConsultation, contingentFees | array / booleans | Fees + consultation model. |
jurisdictions[] | array of {name, organization, idNumber, since} | Bar admissions with ID + admission year. |
languages[] | array of {language, modalities[]} | Spoken / written modalities per language. |
experience[] | array of {role, organization, startDate, endDate} | Professional experience entries. |
education[] | array of {school, degree, field, startDate, endDate, honors} | Law school + undergraduate. |
awards[] | array of {title, organization, year} | Honors and recognitions. |
associations[] | array of {organization, role} | Professional associations. |
speakingEngagements[] | array of {title, date, description} | CLEs + speaking engagements. |
certifications[] | array of {title, organization, year} | Certifications. |
publications[] | array of {title, details[]} | Publications. |
websites[], websiteDetails[] | array / array of {type, title, url, description} | Firm websites + blogs. |
videos[] | array of strings | Video URLs (YouTube, Vimeo). |
socialProfiles[] | array of strings | Facebook, X, LinkedIn, Instagram, Avvo, Martindale, Lawyers.com, etc. |
offices[] | array of {name, label, telephone, address, officeHours[]} | Every office with full address + weekly hours. |
addresses[], officeHours[] | array | Top-level convenience: every office address, plus the first office's hours. |
peerReviews[] | array of {reviewerName, reviewerProfileUrl, date, rating, text} | Lawyer-to-lawyer endorsements. |
emailContactUrl, vcardUrl | string | Contact-form URL and vCard download URL. |
vcard | object | (Optional, fetchVcard:true) Parsed vCard with fax, name parts, organization, structured address, URLs. |
sourceUrl, scrapedAt, metadata | string / object | Run bookkeeping. |
Example record (excerpt)
{"type": "profile","id": 10198,"url": "https://lawyers.justia.com/lawyer/christopher-adamson-10198","profileUrl": "https://lawyers.justia.com/lawyer/christopher-adamson-10198","slug": "christopher-adamson","name": "Christopher Adamson","jobTitle": "Award-Winning Personal Injury Lawyer","primaryPhone": "(866) 540-4527","justiaRating": 10.0,"topRated": true,"ratingBreakdown": {"Legal Knowledge": 5.0,"Legal Analysis": 5.0,"Communication Skills": 5.0,"Ethics and Professionalism": 5.0},"yearsOfExperience": 20,"badges": ["Claimed Lawyer Profile", "Offers Video Conferencing", "LII Platinum", "Social Media"],"claimedProfile": true,"offersVideoConferencing": true,"liiPlatinum": true,"freeConsultation": true,"contingentFees": true,"practiceAreas": [{ "area": "Personal Injury","subAreas": ["Animal & Dog Bites", "Brain Injury", "Car Accidents", "Construction Accidents", "Motorcycle Accidents", "Premises Liability", "Truck Accidents", "Wrongful Death"] }],"jurisdictions": [{ "name": "California", "idNumber": "238500", "since": "2005" }],"languages": [{ "language": "English", "modalities": ["Spoken", "Written"] }],"education": [{ "school": "Loyola Law School, Loyola Marymount University", "degree": "J.D.", "endDate": "2005" },{ "school": "University of California - Los Angeles", "degree": "B.A.", "endDate": "2002" }],"offices": [{"name": "Adamson Ahdoot LLP","label": "San Jose Office","telephone": "(866) 552-1841","address": { "street": "3165 Olin Ave #2", "city": "San Jose", "region": "CA", "postalCode": "95117", "country": "US" },"officeHours": [ { "day": "Monday", "hours": "Open 24 hours" } ]}],"peerReviews": [{ "reviewerName": "Alan Ahdoot", "date": "March 12, 2024", "rating": 10.0,"text": "caring and experienced advocate. Breadth of knowledge and experience coupled with compassion and empathy." }],"socialProfiles": ["https://www.facebook.com/AdamsonAhdootLLP/","https://www.linkedin.com/in/christopher-adamson-4731526/"],"vcardUrl": "https://lawyers.justia.com/lawyer/christopher-adamson-10198/vcard","emailContactUrl": "https://lawyers.justia.com/lawyer/christopher-adamson-10198/contact"}
Cost control
See the Store page for current rates. Two settings drive what a run costs:
- Fetch full profile. When on, each attorney's profile page is retrieved to add the 40+ detail fields, and that retrieval is billed per attorney. When off, you get the listing fields only and nothing extra is billed.
- Max items. The hard cap on records for the run. Set it deliberately.
For cheap discovery, run with Fetch full profile off, pick the attorneys you care about, then re-run those profile URLs in URL mode with it on. Runs that return no records are not billed for results.
Scheduling & automation
Each record has a stable type + ":" + id key so scheduled runs can power idempotent upserts into your CRM, warehouse, or lead database.
Common recurring workflows:
- Weekly state-level refresh - re-run the same
states + practiceAreascombination to detect new attorneys or profile updates. - Monthly enrichment sync - re-scrape previously stored profile URLs (URL mode) to refresh phones, addresses, ratings, and offices.
- Change monitoring - track competitive movements in a specific vertical (DUI in Texas, Immigration in New York, etc.).
- Lead pipeline replenishment - automatically append newly discovered attorneys into outbound or enrichment workflows.
Notes on data coverage
- The actor returns everything Justia exposes publicly on the profile page. Optional fields may be
nullfor attorneys who haven't claimed / filled those sections. - Justia does not publish attorney email addresses on the profile page itself - only an
emailContactUrl(a contact form) and avcardUrl(a.vcffile with the address + phone). To enrich emails yourself, follow the firmwebsites[]and look for a publicmailto:on the firm's own contact page. - The Justia Lawyer Rating is a peer-endorsement score (0-10 scale).
ratingBreakdownis the per-criterion 0-5 breakdown. - The actor runs on a Residential (US) connection by default, which requires a paid Apify plan. Leave the Proxy field at its default unless you have a reason to change it.