Open Corporates logo
OpenCorporates is a database with information about approximately 100 million companies worldwide, obtained from a wide range of data sources, and which can be accessed via an API. Data are available either as share-alike attribution open data, or commercially.

Among the main data offered by the API, you can find the legal name of the company, the identifier given to the company by the company register, the date the company was incorporated, the previous or alternative names of a company, registered address, and other details.

The contents of this section are based on the current online documentation available at the OpenCorporates API. An always up-to-date version is available there. The objective of this section is to provide a general overview of the main data models used by the API as well as the main types of resources and calls that are made available by it.

The API by default returns JSON, a lightweight but powerful way of representing data that is natively understood by Javascript (and therefore perfect for widgets, etc), with excellent libraries for all programming languages. It’s also fairly easy to understand for humans.

For example the response to is:

An example of JSON code generated by OpenCorporates API.

Partial output from OpenCorporates API.

Main API characteristics:

Identifiers. Resources are identified with an OpenCorporates URL (which provides access to the HTML version). For example click here to see the record for BP plc. (click here to access this data in the OpenCorporates API). The format does not currently comply with Linked Data principles, although this may be addressed later in the project.

Versioning. The API uses a versioning system. If a version number is supplied, that version will be used, provided it is still supported. If no version number is supplied, the current version will be used.

The v0.1 form of the GET request to get information about a company is, for example:

The unversioned form is:

To get information about an existing version, the versions method call can be used. For example:,

Pagination. Those calls returning a number of results (e.g. searches, or filings for a company) return a paginated response. By default 30 objects are returned, together with the current page number, and total number of pages. For users with an API key, the number per page can be increased (to up to 100) by supplying a :per page query parameter, and the page number is specified with the :page query parameter (the :page parameter is limited to 100 to ensure that the API is as fast as possible for all users).

Provenance. Provenance is attached to multiple objects, including statements and placeholders, but also the links between, for example, placeholders and companies, or between placeholders and statements.

Source. Detailed responses include the provenance of the data as a source object.

Filters. Date and term filters can be specified. Date filters can be supplied either as a specific date or as a date range.

If a date range is given it should be in the form 2009-08-22:2012-01-08. Either the start date or the end date may be omitted to make the date range unbounded at the start or end, e.g.:2012-01-08 would represent any date before 8 Jan 2012.

Term filters can be supplied as a single term, a comma separated list (the record must match all terms; e.g. foo,bar,baz), or a pipe separated list (the record need only match one term; e.g. foo|bar|baz).

Search results. All method calls that return search results are case insensitive, and return results in a predefined order (alphabetical, temporal, etc., depending on the type of objects returned). All these results can be ordered differently to this default ordering, by using the ranking provided by the ElasticSearch search index.

This can be done by passing the order=score query parameter to those calls. Additionally, results can be restricted by a number of ‘facets’.