AilaLawyer APIailalawyer.com ↗
Search immigration lawyers on AilaLawyer.com by location, language, and practice area. Retrieve profiles with credentials, AILA membership year, and contact info.
What is the AilaLawyer API?
The AilaLawyer.com API provides 3 endpoints to search, filter, and retrieve detailed profiles of immigration attorneys listed on AilaLawyer.com. Starting with get_form_options, you can fetch valid filter values for states, countries, languages, and practice areas, then pass those IDs directly to search_lawyers to get paginated results including attorney names, firm names, locations, and profile identifiers used to pull full records.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/2dc488ce-97ce-4b46-9e00-4c0dd5b95dd2/get_form_options' \ -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 ailalawyer-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: AilaLawyer SDK — search immigration lawyers and view their profiles."""
from parse_apis.ailalawyer_api import AilaLawyer, LawyerNotFound
client = AilaLawyer()
# Fetch available search filters (states, languages, countries)
filters = client.searchfilters.get()
print(f"Available states: {filters.states[0].label}, {filters.states[1].label}, ...")
print(f"Available languages: {filters.languages[0].label}, {filters.languages[1].label}, ...")
# Search for lawyers in California (state ID "5"), limited to 3 results
for summary in client.lawyersummaries.search(state="5", limit=3):
print(summary.name, "-", summary.location, "-", summary.firm)
# Drill into the first result's full profile
summary = client.lawyersummaries.search(state="5", limit=1).first()
if summary:
lawyer = summary.details()
print(f"Full name: {lawyer.full_name}")
print(f"Firm: {lawyer.firm_name}")
print(f"Bar admissions: {lawyer.bar_admissions}")
print(f"Practice areas: {lawyer.practice_areas}")
print(f"Member since: {lawyer.member_since}")
# Typed error handling for a missing attorney
try:
bad_summary = client.lawyersummaries.search(state="5", limit=1).first()
if bad_summary:
bad_summary.details()
except LawyerNotFound as exc:
print(f"Lawyer not found: a={exc.a}, p={exc.p}")
print("exercised: searchfilters.get / lawyersummaries.search / summary.details / LawyerNotFound")
Retrieve all available filter options for the lawyer search form: US states, Canadian provinces, countries, languages, and practice areas. Each option contains a value (ID to pass to search_lawyers) and a human-readable label. Practice areas may be empty if the site does not expose them on the homepage form.
No input parameters required.
{
"type": "object",
"fields": {
"states": "array of objects with value and label keys representing US states and Canadian provinces",
"countries": "array of objects with value and label keys representing countries",
"languages": "array of objects with value and label keys representing languages",
"practice_areas": "array of objects with value and label keys representing practice areas"
},
"sample": {
"data": {
"states": [
{
"label": "Alabama",
"value": "1"
},
{
"label": "Alaska",
"value": "2"
},
{
"label": "Alberta",
"value": "57"
}
],
"countries": [
{
"label": "USA",
"value": "1"
},
{
"label": "Canada",
"value": "2"
},
{
"label": "Afghanistan",
"value": "155"
}
],
"languages": [
{
"label": "English",
"value": "0"
},
{
"label": "Spanish",
"value": "89"
},
{
"label": "Afrikaans",
"value": "91"
}
],
"practice_areas": []
},
"status": "success"
}
}About the AilaLawyer API
Endpoints and Data Coverage
The API exposes three endpoints that work in sequence. get_form_options returns four lookup arrays — states, countries, languages, and practice_areas — each containing value and label keys. These values are the correct IDs to pass as filter parameters in search_lawyers, ensuring searches match the directory's own taxonomy rather than free-text guesses.
Searching for Attorneys
search_lawyers accepts up to eight optional parameters including zip, city, state, country, miles (radius), language, practice, and last (last name). Results come back in pages of up to 25, with a pagination object exposing current_page, total_pages, and total_count. Each lawyer summary in the lawyers array includes name, firm, geographic location, and the a (attorney ID) and p (firm ID) fields required to fetch a full profile.
Attorney Detail Records
get_lawyer_details takes the a and p IDs from search results and returns a richer profile: full_name, first_name, last_name, firm_name, address_lines, phone, website, law_school, languages spoken, and member_since (the year the attorney joined AILA). The phone field may be empty if the attorney has not published a number, and website is only present when listed.
Filter Workflow
Because search_lawyers uses numeric IDs for state, country, language, and practice, the correct workflow is to call get_form_options first, map human-readable labels to their value fields, then pass those values as query parameters. Setting language to 0 signals any language. The miles parameter scopes results to a radius around a zip or city, useful for building proximity-based lookups.
The AilaLawyer API is a managed, monitored endpoint for ailalawyer.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ailalawyer.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 ailalawyer.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?+
- Build a referral tool that surfaces immigration lawyers near a given ZIP code filtered by practice area
- Aggregate AILA member attorney contact info including phone and website by state or province
- Filter attorneys who speak a specific language to serve non-English-speaking clients
- Display law school credentials and AILA membership year to compare attorney backgrounds
- Power a CRM enrichment workflow that resolves firm names and addresses from attorney IDs
- Compile a regional directory of immigration lawyers for a legal aid or nonprofit platform
- Support last-name lookup to verify whether a specific attorney is listed in the AILA directory
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does AilaLawyer.com have an official developer API?+
What does `get_lawyer_details` return beyond what `search_lawyers` provides?+
search_lawyers returns summary fields: name, firm, location, and the a and p IDs. get_lawyer_details adds phone, website, law_school, member_since (AILA membership year), spoken languages, and full address_lines. You need both the attorney ID (a) and firm ID (p) from search results to call this endpoint.Does `search_lawyers` return results beyond the first page?+
pagination metadata including total_pages and total_count. Multi-page traversal is not built into the current endpoint. You can fork this API on Parse and revise it to accept a page parameter and iterate through additional pages.Can I retrieve attorney reviews or client ratings through this API?+
Are Canadian attorneys included, or is this US-only?+
get_form_options returns both US states and Canadian provinces in the states array, and search_lawyers accepts a country parameter populated from the countries lookup. Coverage depends on what attorneys are listed in the AilaLawyer.com directory, which is primarily AILA members.