GC Organization Name Resolution API
View this project on GitHub
Resolves free-text Government of Canada organization names to a canonical gc_orgID. Takes messy strings like "CRA", "Bibliothèque et Archives Canada", or email addresses like "user@inspection.gc.ca" and returns the numeric ID from the GC Organization Names and Codes dataset on open.canada.ca.
Usage
For now, the API can be found at https://gcorgs.cdssandbox.xyz. It is rate limited to 50 requests per second and no more than 1000 names in one POST.
POST /resolve
Resolve a batch of names. Returns one result per input.
curl -X POST https://gcorgs.cdssandbox.xyz/resolve \
-H 'Content-Type: application/json' \
-d '{"names": ["Bibliothèque et Archives Canada", "CRA", "Department of Unicorns"]}'
{
"results":[
{
"abbreviation":"LAC",
"abreviation":"BAC",
"appellation_legale":"Bibliothèque et Archives Canada",
"gc_orgID":2262,
"harmonized_name":"Library and Archives Canada",
"input":"Bibliothèque et Archives Canada",
"legal_title":"Library and Archives Canada",
"matched":true,
"nom_harmonise":"Bibliothèque et Archives Canada"
},
{
"abbreviation":"CRA",
"abreviation":"ARC",
"appellation_legale":"Agence du revenu du Canada",
"gc_orgID":2303,
"harmonized_name":"Canada Revenue Agency",
"input":"CRA",
"legal_title":"Canada Revenue Agency",
"matched":true,
"nom_harmonise":"Agence du revenu du Canada"
},
{
"abbreviation":null,
"abreviation":null,
"appellation_legale":null,
"gc_orgID":null,
"harmonized_name":null,
"input":"Department of Unicorns",
"legal_title":null,
"matched":false,
"nom_harmonise":null
}
]
}
GET /resolve and GET /name
Two simplified endpoints intended for use with Excel's WEBSERVICE() and Google Sheet's IMPORTDATA() functions. GET /resolve returns the gc_orgID as plain text, or an empty string on no match. The result can be passed to GET /name to resolve to a canonical name. The two-step process encourages users to store the unique gc_orgID alongside the name of the department.
The optional field parameter controls what is returned by GET /name:
| field value | Returns | | --- | --- | | name (default) | Harmonized name | | abbreviation | Abbreviation (empty string if none on record) | | legal_title | Legal title from the reference standard |
French synonyms are accepted: nom, abreviation, appellation_legale. An unrecognised field value returns 400. An absent field defaults to name.
GET /resolve?name=Agriculture
-> 2222
GET /name?gc_orgID=2222&lang=en
-> Agriculture and Agri-Food Canada
GET /name?gc_orgID=2222&lang=fr
-> Agriculture et Agroalimentaire Canada
GET /name?gc_orgID=2222&lang=en&field=abbreviation
-> AAFC
GET /name?gc_orgID=2222&lang=fr&field=abbreviation
-> AAC
GET /name?gc_orgID=2222&lang=en&field=legal_title
-> Department of Agriculture and Agri-Food
GET /name?gc_orgID=2222&lang=fr&field=legal_title
-> Ministère de l'Agriculture et de l'Agroalimentaire
GET /name?gc_orgID=2270&lang=en&field=abbreviation
-> (200, no abbreviation on record)
Examples
Excel
You can use this API from Excel to automatically resolve organizations in a workbook without having to use PowerQuery or any external tools. Simply cut and paste the formulas below into your workbook.
# Returns the gc_orgID of the name in cell A1
=WEBSERVICE("https://gcorgs.cdssandbox.xyz/resolve?name=" & ENCODEURL(A1))
# Returns the English name corresponding to the gc_orgID in cell A2
=WEBSERVICE("https://gcorgs.cdssandbox.xyz/name?lang=en&gc_orgID=" & A2)
# Returns the French name
=WEBSERVICE("https://gcorgs.cdssandbox.xyz/name?lang=fr&gc_orgID=" & A2)
# Returns the English abbreviation (e.g. "PHAC") instead of the full name
=WEBSERVICE("https://gcorgs.cdssandbox.xyz/name?lang=en&field=abbreviation&gc_orgID=" & A2)
Note that the =WEBSERVICE() function only works in Excel on Windows. It does not work in Excel for Mac. This is a limitation of Excel for Mac, not a limitation of this project.
Google Sheets
The same API calls work in Google Sheets, using the =IMPORTDATA() function and providing a delimiter that doesn't exist in any canonical organization names.
# Returns the gc_orgID of the name in cell A1
=IMPORTDATA("https://gcorgs.cdssandbox.xyz/resolve?name=" & ENCODEURL(A1))
# Returns the English name corresponding to the gc_orgID in cell A2
=IMPORTDATA("https://gcorgs.cdssandbox.xyz/name?lang=en&gc_orgID=" & A2, "\")
# Returns the French name
=IMPORTDATA("https://gcorgs.cdssandbox.xyz/name?lang=fr&gc_orgID=" & A2, "\")
# Returns the English abbreviation (e.g. "PHAC") instead of the full name
=IMPORTDATA("https://gcorgs.cdssandbox.xyz/name?lang=en&field=abbreviation&gc_orgID=" & A2, "\")
Online
You can see some rudimentary examples of how to use the API to improve data quality when collecting information from users here:
-
Suggest a correction to an organization name (source)
-
Infer an organization name from a user's email (source)
2026-08-05