FindLaw APIlawyers.findlaw.com ↗
Retrieve client reviews and aggregate ratings from FindLaw attorney and law firm profiles. One record per review card, with star ratings, author names, and review text.
What is the FindLaw API?
The FindLaw Attorney Reviews API exposes one endpoint, get_attorney_reviews, that returns client review records from any lawyers.findlaw.com attorney or law firm profile. Each response includes up to 10 review records per page along with 9 response fields covering the aggregate rating, total review count, reviewer display names, individual star ratings, and review text. Use it to compare attorney reputations, track review trends, or build legal research tools.
curl -X GET 'https://api.parse.bot/scraper/ff145871-e760-4fb9-bff1-1b55e0c3cc79/get_attorney_reviews?url=https%3A%2F%2Flawyers.findlaw.com%2Ftexas%2Fsan-antonio%2Fmack-injury-attorneys-NTI4OTM4NV8x&fetch_all=true&max_reviews=12' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace lawyers-findlaw-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: FindLaw Attorney Reviews — fetch profile stats and iterate reviews."""
from parse_apis.lawyers_findlaw_com_api import FindLaw, AttorneyNotFound
client = FindLaw()
profile_url = "https://lawyers.findlaw.com/texas/san-antonio/mack-injury-attorneys-NTI4OTM4NV8x"
# Fetch the profile wrapper for aggregate rating and review count.
try:
profile = client.profiles.get(url=profile_url)
except AttorneyNotFound as e:
print("Profile not found:", e.url)
raise SystemExit(1)
print(f"{profile.profile_name}: {profile.overall_rating} stars ({profile.reviews_count} reviews)")
# Iterate individual reviews via the paginator, capped at 5 total items.
for review in client.reviews.list(url=profile_url, limit=5):
print(f" [{review.rating}/5] {review.author} ({review.date_text}): {review.body[:80]}")
print("exercised: profiles.get / reviews.list")
Returns the client reviews displayed on a FindLaw attorney or law-firm profile's Reviews tab, one record per review card in site order (newest first), 10 reviews per site page. Accepts the profile URL, its /reviews URL, or a /profile/view/<id> URL. One call fetches the profile page (for profile_name, overall_rating, reviews_count) plus one review page; with fetch_all=true it walks review pages from page 1 (one request per page, at most 50 pages) and stops early once max_reviews records are collected. page is ignored when fetch_all is true and page 1 is reported. has_more is true when further review pages exist or when max_reviews dropped records. A profile with no client reviews, or a page past the last page, returns an empty reviews array with count 0 and has_more false. A URL that is not a lawyers.findlaw.com profile URL, or a well-formed profile URL the site does not recognize, returns a not-found input error. date_text is the site-supplied formatted date (the browser may render the calendar day one earlier depending on the viewer's timezone). Syndicated reviews (source AV) are shown by the site as a single text block of the form 'headline: review text'; for those rows the leading headline is returned as title and the remaining text as body. title is null when the card shows no headline (all FL and MDC reviews, and AV rows without a leading 'headline:' segment). attorney_response and permalink are always null because FindLaw review cards show no public attorney reply or per-review link; verified is null unless the site marks the review verified.
| Param | Type | Description |
|---|---|---|
| urlrequired | string | Full lawyers.findlaw.com attorney or law-firm profile URL, its /reviews URL, or a https://lawyers.findlaw.com/profile/view/<id>_1 URL. |
| page | integer | 1-based review page number (10 reviews per page). Ignored when fetch_all is true. |
| fetch_all | boolean | When true, fetch every review page from page 1 (capped at 50 pages) and return all reviews in one response. |
| max_reviews | integer | Maximum total number of reviews to return (positive integer). Omitted means no cap. With fetch_all=true, page fetching stops once this many reviews are collected. |
{
"type": "object",
"fields": {
"page": "integer, the review page returned (1 when fetch_all is true)",
"count": "integer, number of reviews in this response",
"reviews": "array of review records: review_id (string, FindLaw's review id), rating (integer 1-5), author (display name as shown, e.g. first name plus last initial, or Anonymous), date_text (site-formatted date), date_iso (YYYY-MM-DD or null), title (string headline split from the leading 'headline:' segment of syndicated AV review text, or null when the card shows no headline), body (review text; for AV rows the text after the headline), engagement (relationship label as shown, e.g. Hired Attorney / Consulted Attorney / Hired Law Firm, optionally with reviewee name and service years), verified (true or null), attorney_response (null), permalink (null), source (review origin directory code: FL, MDC or AV)",
"has_more": "boolean, true when further review pages exist or max_reviews dropped records",
"max_reviews": "integer cap supplied, or null",
"total_pages": "integer, total review pages reported by the site",
"profile_name": "string or null, attorney or firm name shown on the reviews page",
"pages_fetched": "integer, number of review pages requested from the site",
"reviews_count": "integer or null, total review count shown on the profile",
"overall_rating": "number or null, aggregate rating shown on the profile"
},
"sample": {
"data": {
"page": 1,
"count": 6,
"reviews": [
{
"body": "My case was very complex and took a lot of time to handle and close out. But, Mr. Mack and his team worked so hard to find a solution and fight back.",
"title": null,
"author": "Kiara R.",
"rating": 5,
"source": "FL",
"date_iso": "2025-03-28",
"verified": null,
"date_text": "Mar. 28, 2025",
"permalink": null,
"review_id": "11856715",
"engagement": "Hired Law Firm 2020-2025",
"attorney_response": null
}
],
"has_more": false,
"max_reviews": null,
"total_pages": 1,
"profile_name": "Mack Injury Attorneys",
"pages_fetched": 1,
"reviews_count": 6,
"overall_rating": 4.3
},
"status": "success"
}
}About the FindLaw API
What the API Returns
The get_attorney_reviews endpoint accepts any valid lawyers.findlaw.com attorney or law firm profile URL — including /reviews variant URLs — and returns a structured list of client review records in the same order they appear on the profile (newest first). Each review record in the reviews array contains a review_id string (FindLaw's own identifier), an integer rating from 1 to 5, an author field showing the display name as it appears on the profile, and the review text content. The response also surfaces the attorney or firm name in profile_name, the aggregate overall_rating as a decimal, and reviews_count for the total number of reviews on that profile.
Pagination and Bulk Fetching
FindLaw paginates reviews at 10 per page. By default, get_attorney_reviews returns one page at a time; supply the page integer parameter to request a specific page. Set fetch_all to true to collect every page in a single call (capped at 50 pages), with the results merged into one reviews array. The max_reviews parameter caps the total records returned regardless of pagination — useful when you only need a sample. The response always includes total_pages, pages_fetched, and a has_more boolean so you can tell whether additional records exist.
Coverage and Scope
The endpoint covers attorneys and law firms listed on lawyers.findlaw.com. Any profile URL format supported by the site — including the alphanumeric slug form and /profile/view/<id> URLs — is accepted as the url input. The count field in each response reports how many reviews are included in that specific call, distinct from the reviews_count field which reflects the total shown on the profile page.
The FindLaw API is a managed, monitored endpoint for lawyers.findlaw.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when lawyers.findlaw.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official lawyers.findlaw.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate attorney reputation scores by comparing
overall_ratingandreviews_countacross multiple FindLaw profiles - Monitor new client reviews over time by fetching page 1 and comparing
review_idvalues against a local store - Build a legal directory that surfaces recent client feedback using the
author,rating, and review text fields - Identify attorneys with the highest volume of 5-star reviews by fetching all pages with
fetch_all=trueand filtering onrating - Research sentiment trends for a practice area by collecting review text across profiles in a specific city or specialty
- Validate attorney credibility in a due-diligence workflow by checking
reviews_countandoverall_ratingbefore referrals
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does FindLaw offer an official developer API for attorney profile data?+
What does the `get_attorney_reviews` endpoint return for a profile with no reviews?+
profile_name, overall_rating, reviews_count, and total_pages — with an empty reviews array and count of 0. has_more will be false.Does the API return attorney bio, practice areas, contact details, or bar admission records?+
Is there a limit to how many reviews can be fetched in one call?+
fetch_all=true, the endpoint collects up to 50 pages (500 reviews). The optional max_reviews parameter lets you set a lower cap. The has_more field indicates when additional reviews exist beyond what was returned.Can I search for attorneys by name, location, or practice area through this API?+
lawyers.findlaw.com profile URL; it does not expose a search or directory-listing endpoint. You can fork it on Parse and revise to add a search endpoint if your workflow requires discovery by name or location.