Dentons APIdentons.com ↗
Access Dentons' Montréal office roster via 3 endpoints. Returns lawyer names, titles, emails, practice areas, office contacts, and Québec bar admission years.
What is the Dentons API?
The Dentons Montréal API provides 3 endpoints for retrieving professional directory data from Dentons' Montréal office. Use list_montreal_lawyers to page through the roster or fetch it all at once, list_all_montreal_lawyers to get a unified list with emails and office phone numbers in a single call, and get_lawyer_bar_admission to pull bar admission records — including the Québec bar year — from any individual profile URL.
curl -X GET 'https://api.parse.bot/scraper/a8423948-a69c-4e6a-9b3f-b1eb42617d63/list_montreal_lawyers?page=1' \ -H 'X-API-Key: $PARSE_API_KEY'
Lists professionals from Dentons' people directory, scoped to the Montréal office by default. By default returns one page at a time: each lawyer's name, title, practice areas, and profile URL, plus total (the directory's own count for the applied filters), total_pages and has_more. Use page and page_size to paginate; omitting them returns page 1 with 20 results. Both must be plain integers (page_size 1–100); a non-integer or out-of-range value returns a validation error rather than data. Setting all=true returns the entire filtered roster (currently 106 professionals for Montréal with no other filter) in a single upstream request and ignores page and page_size; the response then reports page 1, page_size equal to the number of rows, total_pages 1 and has_more false. A non-boolean value for all returns a validation error. Three optional filters narrow the roster and combine with AND: office (an office location, defaulting to Montréal), profession (the site's position facet: Partner, Associate, Counsel or Business Services) and practice_area (one of the site's ~41 practice facets, e.g. Tax or Corporate). Each accepts the site's facet code or its label; labels match case- and accent-insensitively (e.g. 'montreal'). Supplying any filter costs one extra upstream request to load the site's facet list. The applied filters are echoed in filters.<name> as {input, code, label}; office is always echoed. A filter value matching no site code or label yields an empty result (lawyers [], total 0) with code and label null for that filter, never the unfiltered set. Note the site has no 'Notary' position: Notary Services exists only as a practice_area and currently has no Montréal professionals.
| Param | Type | Description |
|---|---|---|
| all | boolean | When true, returns the entire filtered roster in one request and ignores page and page_size. |
| page | integer | Page number (1-indexed). Ignored when all is true. |
| office | string | Office location filter: the site's office facet code or its label, e.g. 'Edmonton' or 'Montréal' (accent- and case-insensitive). Omit for the Montréal office. |
| page_size | integer | Number of results per page (1–100). Ignored when all is true. |
| profession | string | Profession filter: the site's position facet code or its label (Partner, Associate, Counsel, Business Services). Omit for all professions. |
| practice_area | string | Practice area filter: the site's practice facet code or its exact English label, e.g. 'Tax' or 'Corporate'. The applied label is echoed in filters.practice_area.label. Omit for all practice areas. |
{
"type": "object",
"fields": {
"page": "current page number (1 when all is true)",
"total": "total number of professionals matching the applied filters, as reported by the directory",
"filters": "applied filters keyed by office / profession / practice_area, each {input (caller value or null for the default office), code (site facet code, null if unresolved), label (site label, null if unresolved)}; only supplied filters appear besides office",
"lawyers": "array of lawyer objects, each with name, title, practice_areas, and profile_url",
"has_more": "whether more pages are available (false when all is true)",
"page_size": "number of results per page (equals the number of rows when all is true)",
"total_pages": "total number of pages (1 when all is true)"
},
"sample": {
"data": {
"page": 1,
"total": 3,
"filters": {
"office": {
"code": "8E017717MONTR",
"input": null,
"label": "Montréal"
},
"profession": {
"code": "E8CC721CPARTN",
"input": "e8cc721cpartn",
"label": "Partner"
},
"practice_area": {
"code": "960DD10DTAX",
"input": "960DD10DTAX",
"label": "Tax"
}
},
"lawyers": [
{
"name": "Sylvain Bélair",
"title": "Partner",
"profile_url": "https://www.dentons.com/en/sylvain-belair",
"practice_areas": [
"Development Zoning and Planning in Canada",
"Infrastructure and PPP in Canada",
"Litigation and Dispute Resolution in Canada",
"Real Estate in Canada",
"Tax in Canada"
]
}
],
"has_more": false,
"page_size": 5,
"total_pages": 1
},
"status": "success"
}
}About the Dentons API
Directory Endpoints
list_montreal_lawyers returns a paginated view of the Montréal office roster. Each record includes name, title, practice_areas (array), and profile_url. The response envelope carries total, total_pages, page, page_size, and has_more for cursor-style pagination. Set page_size between 1 and 100, or pass all=true to retrieve every professional in a single response — in that mode has_more is false and total_pages is 1.
Full Roster with Contact Data
list_all_montreal_lawyers takes no inputs and returns a unified lawyers array covering the full Montréal directory (currently ~106 entries). Each object adds email, office, and an offices array of objects containing office, phone, and mobile — contact fields not available in the basic list endpoint. The response also exposes count and pages_fetched so callers can verify completeness.
Bar Admission Lookup
get_lawyer_bar_admission accepts any profile_url returned by the directory endpoints and resolves bar admission data for that individual. The response includes an admissions array of raw admission strings (e.g. 'Québec, 2013', 'New York, 2010') and a convenience field quebec_bar_year holding the 4-digit Québec admission year or null if not listed. Non-lawyer professionals such as paralegals or managers may return an empty admissions array.
The Dentons API is a managed, monitored endpoint for dentons.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when dentons.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 dentons.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 searchable internal directory of Dentons Montréal lawyers filtered by practice area
- Extract email addresses and direct phone numbers for all Montréal office professionals via list_all_montreal_lawyers
- Audit which lawyers hold active Québec bar admissions by querying get_lawyer_bar_admission across the roster
- Track seniority signals by collecting Québec bar admission years from individual profiles
- Identify professionals admitted in multiple jurisdictions using the admissions array
- Populate a CRM with structured contact data including mobile and office phone numbers from the offices field
- Monitor roster changes over time by comparing total and count across periodic snapshots
| 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.