osler.com APIwww.osler.com ↗
Search and retrieve detailed profiles of lawyers at Osler, Hoskin & Harcourt LLP. Filter by office, role, practice area, and bar admission year.
curl -X GET 'https://api.parse.bot/scraper/e89d5907-bb2a-49c9-a5de-3d56c43b6dcc/search_lawyers?page=1&role=Partner&office=toronto&bar_years=1995%2C2000%2C2005&practice_area=Capital+Markets&per_page=10' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed Python client. Install the CLI, sign in, then pull this API’s generated client:
pip install parse-sdk parse login parse add --marketplace osler-com-api
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: Osler People API — search lawyers, drill into profiles."""
from parse_apis.Osler_People_API import Osler, Office, Role, LawyerNotFound
client = Osler()
# Search for partners in the Toronto office, capped at 5 results.
for lawyer in client.lawyer_summaries.search(office=Office.TORONTO, role=Role.PARTNER, limit=5):
print(lawyer.name, "|", lawyer.role, "|", lawyer.office)
# Drill into the first result's full profile.
summary = client.lawyer_summaries.search(practice_area="Capital Markets", limit=1).first()
if summary:
full_profile = summary.details()
print(full_profile.name, full_profile.email)
for admission in full_profile.bar_admissions:
print(f" Bar: {admission.jurisdiction}, {admission.year}")
print(f" Languages: {full_profile.languages}")
print(f" Expertise: {full_profile.expertise[:3]}")
# Fetch a lawyer directly by slug.
try:
lawyer = client.lawyers.get(slug="sandra-abitan-ad-e")
print(lawyer.name, lawyer.role, lawyer.office)
except LawyerNotFound as exc:
print(f"Not found: {exc}")
# Filter by bar admission year — find recently admitted lawyers in Montreal.
for recent in client.lawyer_summaries.search(office=Office.MONTREAL, bar_years="2020,2021", limit=3):
print(recent.name, recent.role)
print("exercised: lawyer_summaries.search / summary.details / lawyers.get / bar_years filter")
Search for lawyers at Osler with optional filters. Returns paginated results with a configurable number of results per page (up to 100). The site serves 10 results per server page, so larger per_page values trigger multiple internal fetches. When bar_years is specified, each result is enriched with bar admission data and only lawyers admitted in any of the specified years are returned.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| role | string | Filter by role category. |
| query | string | Free-text search query matching lawyer names. |
| office | string | Filter by office location. |
| per_page | integer | Number of results per page, between 1 and 100. |
| bar_years | string | Comma-separated list of bar admission years to filter by (e.g. '2019,2020,2021'). When specified, only lawyers admitted in any of these years are returned. Requires fetching each profile individually, so responses are slower. |
| practice_area | string | Filter by practice area name (e.g. 'Capital Markets', 'Artificial Intelligence', 'Mergers and Acquisitions'). Case-insensitive. Numeric IDs are also accepted for backward compatibility. |
{
"type": "object",
"fields": {
"page": "integer",
"results": "array of lawyer summaries with name, slug, role, office, phone, bio_snippet, and optionally bar_admissions",
"per_page": "integer",
"total_pages": "integer",
"total_results": "integer"
},
"sample": {
"data": {
"page": 1,
"results": [
{
"name": "Jane Doe",
"role": "Associate, Disputes",
"slug": "jane-doe",
"phone": "+1 (555) 012-3456",
"office": "Toronto",
"bio_snippet": "Jane Doe is an associate in the Disputes Group..."
}
],
"total_pages": 1,
"total_results": 7
},
"status": "success"
}
}About the osler.com API
The Osler API provides 2 endpoints to search and retrieve lawyer profiles from Osler, Hoskin & Harcourt LLP, one of Canada's largest law firms. The search_lawyers endpoint returns paginated results with up to 10 lawyers per page, each including name, role, office, phone, and bio snippet. The get_lawyer_profile endpoint returns a full individual profile with 9 distinct fields including bar admissions, education, expertise areas, and languages spoken.
Searching Lawyers
The search_lawyers endpoint accepts optional filters for office, role, practice_area, and query (free-text name search). Results are paginated at 10 per page; use the page parameter to navigate. The response includes total_results and total_pages alongside an array of lawyer summaries. Each summary contains name, slug, role, office, phone, and a bio_snippet.
Filtering by Bar Admission Year
The bar_years parameter accepts a comma-separated list of years (e.g., 2019,2020,2021). When supplied, each result is enriched with a bar_admissions field and only lawyers admitted in one of those years are returned. This filter can be combined with office or practice_area to narrow results further. The practice_area filter takes a numeric ID — for example, 6989 for Capital Markets.
Full Lawyer Profiles
The get_lawyer_profile endpoint takes a slug — the URL path segment from the lawyer's profile page — and returns a complete record. Fields include name, role, email, phone, office, biography, education (array of credentials), expertise (array of practice area names), and languages. This endpoint is the right choice when you need structured contact details, full biography text, or a list of areas of expertise for a specific individual.
Coverage and Scope
The directory covers lawyers listed on the Osler website across all offices. Profile completeness varies by individual — some profiles may not include email addresses or language data if the source profile omits them. Pagination behavior and available filter IDs for practice_area reflect the categorizations used on the Osler site.
The osler.com API is a managed, monitored endpoint for www.osler.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when www.osler.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 www.osler.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 filtered directory of Osler lawyers by Canadian office location for a legal referral tool.
- Identify junior associates admitted to the bar in specific years using the
bar_yearsfilter. - Pull structured
educationandexpertisearrays fromget_lawyer_profileto populate a CRM or knowledge base. - Match client needs to lawyers by querying specific
practice_areaIDs such as Capital Markets. - Extract
languagesfields to route multilingual clients to appropriate counsel. - Aggregate
bio_snippetandroledata fromsearch_lawyersto compare lawyers across offices in bulk. - Monitor changes to individual lawyer profiles over time by periodically calling
get_lawyer_profilewith known slugs.
| 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 | 250 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 Osler provide an official public developer API?+
What does search_lawyers return when I use the bar_years filter versus not using it?+
bar_years, each result in the array contains name, slug, role, office, phone, and bio_snippet. When bar_years is specified, results are additionally filtered to only lawyers admitted in those years, and each object gains a bar_admissions field with structured admission data.How does pagination work in the search endpoint?+
total_results and total_pages so you can calculate how many requests are needed to walk the full result set. Increment the page parameter to retrieve subsequent pages.