OpenCorporates Global Company Search
Pricing
from $1.00 / 1,000 company fetcheds
OpenCorporates Global Company Search
Search 200M+ companies from 140+ jurisdictions via the OpenCorporates API. Retrieve company registration data, officers, directors, addresses, and legal status for due diligence, lead generation, and compliance.
Pricing
from $1.00 / 1,000 company fetcheds
Rating
0.0
(0)
Developer

ryan clinton
Actor stats
0
Bookmarked
16
Total users
9
Monthly active users
3 hours ago
Last modified
Categories
Share
Search the world's largest open database of companies -- over 200 million companies from 140+ jurisdictions -- via the official OpenCorporates API. This Apify actor retrieves structured company registration data including names, registration numbers, incorporation dates, legal status, registered addresses, and officer details. Run it on demand or on a schedule to power compliance checks, competitive intelligence, and corporate research workflows.
Why use this actor?
- Largest open company database in one query. OpenCorporates aggregates data from 140+ official government registries worldwide, giving you a single search interface for 200M+ companies instead of checking each registry individually.
- Zero infrastructure required. The actor runs on Apify's cloud platform with automatic retries, rate-limit handling, and exponential backoff built in. No servers to provision, no API client code to write.
- Structured, export-ready output. Results land in a clean Apify dataset you can download as JSON, CSV, Excel, or XML -- or pipe directly into Google Sheets, Zapier, Make, Slack, and thousands of other tools.
- Schedule and automate. Use Apify Schedules to run recurring searches on any cron pattern for ongoing corporate monitoring, compliance screening, or market research.
- Chain with other actors. Combine results with UK Companies House lookups, VAT validation, sanctions screening, or LEI verification to build end-to-end due diligence pipelines.
Key features
- 200M+ companies, 140+ jurisdictions -- search across the United States (all 50 states), United Kingdom, Germany, France, Australia, Canada, and dozens more in a single query
- Jurisdiction-level filtering -- narrow results with jurisdiction codes like
us_cafor California,gbfor the United Kingdom, ordefor Germany - Country-level filtering -- use broader two-letter country codes (
us,gb,de) when you do not need state or province precision - Company status filtering -- filter by Active, Inactive, or Dissolved to focus on the companies that matter to your use case
- Officer and director search -- enable the
includeOfficersoption to retrieve directors and officers matching your query alongside company results - Automatic pagination -- fetches up to 100 results per run, paginating through the API with a 1.5-second delay between pages to respect rate limits
- Exponential backoff retries -- automatically handles HTTP 429 rate-limit responses with escalating wait times (10s, 20s, 30s) and up to 3 retries per request
- Clean address formatting -- combines street address, locality, region, postal code, and country into a single human-readable string
- Dry-run mode -- runs without an API key to validate your input configuration and show registration instructions before committing to live API calls
How to use
Using the Apify Console
- Navigate to the OpenCorporates Global Company Search actor page on Apify.
- Click Start to open the input form.
- Enter your Search Query -- a company name, keyword, or partial name (e.g., "Tesla", "Acme Corp").
- Optionally set Jurisdiction Code, Country Code, or Company Status filters.
- Paste your OpenCorporates API Key into the API Key field (get one at opencorporates.com/api_accounts/new).
- Toggle Include Officers/Directors if you need officer data.
- Set Max Results (1--100) depending on how many records you need.
- Click Start and view results in the Dataset tab when the run completes.
Using the Apify API -- JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('ryanclinton/opencorporates-search').call({query: 'Tesla',countryCode: 'us',status: 'Active',apiKey: 'YOUR_OPENCORPORATES_API_KEY',maxResults: 50,includeOfficers: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Using the Apify API -- Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('ryanclinton/opencorporates-search').call(run_input={'query': 'Tesla','countryCode': 'us','status': 'Active','apiKey': 'YOUR_OPENCORPORATES_API_KEY','maxResults': 50,'includeOfficers': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsfor item in items:print(item)
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | String | Yes | -- | Company name or keyword to search for (e.g., "Google", "Tesla Motors") |
jurisdictionCode | String | No | -- | Two-letter jurisdiction code (e.g., us_ca for California, gb for UK, de for Germany). Leave empty to search all jurisdictions |
countryCode | String | No | -- | Two-letter country code for broader geographic filtering (e.g., us, gb, de) |
status | String | No | All | Filter by company status: Active, Inactive, or Dissolved |
apiKey | String | Yes | -- | Your OpenCorporates API key (stored securely). Get one at opencorporates.com |
includeOfficers | Boolean | No | false | Also search for officers/directors matching the query |
maxResults | Integer | No | 25 | Maximum number of results to return (1--100) |
Example input JSON
{"query": "Goldman Sachs","countryCode": "us","status": "Active","apiKey": "YOUR_OPENCORPORATES_API_KEY","includeOfficers": true,"maxResults": 25}
Tips for input configuration
- Use
jurisdictionCodefor state-level precision (e.g.,us_nyfor New York) andcountryCodefor broad country-level filtering. You can use both together. - Start with a small
maxResults(10--25) to validate your query before scaling up to 100. - The
apiKeyfield is marked as secret -- it will not appear in run logs or shared configurations.
Output
Company result example
{"companyName": "TESLA, INC.","companyNumber": "C3259768","jurisdictionCode": "us_ca","jurisdiction": "US - CA","incorporationDate": "2003-07-01","dissolutionDate": null,"companyType": "Domestic Stock","registryUrl": "https://bizfileonline.sos.ca.gov/search/business","status": "Active","registeredAddress": "3500 Deer Creek Road, Palo Alto, CA, 94304, US","source": "California Secretary of State","opencorporatesUrl": "https://opencorporates.com/companies/us_ca/C3259768","officers": null}
Officer result example (when includeOfficers is enabled)
{"resultType": "officer","name": "Elon Musk","position": "chief executive officer","startDate": "2008-10-15","endDate": null,"companyName": "TESLA, INC.","companyNumber": "C3259768","jurisdictionCode": "us_ca","opencorporatesUrl": "https://opencorporates.com/officers/123456789"}
Output fields reference
| Field | Type | Description |
|---|---|---|
companyName | String | Official registered name of the company |
companyNumber | String | Registration number assigned by the official registry |
jurisdictionCode | String | Jurisdiction code in OpenCorporates format (e.g., us_ca, gb) |
jurisdiction | String | Human-readable jurisdiction label (e.g., "US - CA", "GB") |
incorporationDate | String/null | Date the company was incorporated (YYYY-MM-DD) |
dissolutionDate | String/null | Date the company was dissolved, if applicable |
companyType | String/null | Legal entity type (e.g., "Domestic Stock", "Limited Company") |
registryUrl | String/null | URL of the official government registry page |
status | String/null | Current company status (e.g., "Active", "Dissolved") |
registeredAddress | String/null | Formatted registered address combining street, locality, region, postal code, and country |
source | String/null | Name of the official registry publisher (e.g., "California Secretary of State") |
opencorporatesUrl | String | Direct URL to the company's OpenCorporates profile page |
officers | Array/null | Officer data (null for company search results; officers are returned as separate dataset items) |
resultType | String | Present only on officer results -- always set to "officer" |
Use cases
- KYC and due diligence -- verify company existence, registration status, and registered addresses across 140+ jurisdictions as part of Know Your Customer workflows
- Competitive intelligence -- track competitor registrations, monitor new incorporations in your industry, and identify corporate structures across multiple countries
- Compliance screening -- check whether counterparties are active, dissolved, or inactive before entering business relationships
- Corporate genealogy research -- trace company histories, dissolution dates, and officer tenures to understand corporate evolution over time
- Lead generation and enrichment -- find companies matching specific criteria and enrich lead databases with official registry data
- Academic and journalistic research -- investigate corporate structures, cross-border registrations, and officer networks for research publications
- M&A target identification -- search for companies by type, jurisdiction, and status to identify potential acquisition targets
- Supply chain verification -- confirm that suppliers and vendors are properly registered and active in their stated jurisdictions
- Officer network mapping -- use the officer search to discover connections between individuals and companies across jurisdictions
API & integration
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('ryanclinton/opencorporates-search').call(run_input={'query': 'Alphabet Inc','countryCode': 'us','maxResults': 10,'apiKey': 'YOUR_OPENCORPORATES_API_KEY',})for item in client.dataset(run['defaultDatasetId']).list_items().items:print(f"{item['companyName']} -- {item['jurisdiction']} -- {item['status']}")
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('ryanclinton/opencorporates-search').call({query: 'Alphabet Inc',countryCode: 'us',maxResults: 10,apiKey: 'YOUR_OPENCORPORATES_API_KEY',});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((item) => {console.log(`${item.companyName} -- ${item.jurisdiction} -- ${item.status}`);});
cURL
curl "https://api.apify.com/v2/acts/ryanclinton~opencorporates-search/runs" \-X POST \-H "Content-Type: application/json" \-H "Authorization: Bearer YOUR_APIFY_TOKEN" \-d '{"query": "Alphabet Inc","countryCode": "us","maxResults": 10,"apiKey": "YOUR_OPENCORPORATES_API_KEY"}'
Platform integrations
This actor works with all standard Apify integrations:
- Webhooks -- trigger downstream actions when a run completes
- Schedules -- automate recurring searches on any cron pattern
- Google Sheets -- export results directly to a spreadsheet
- Zapier / Make / n8n -- connect to thousands of apps for automated workflows
- Slack -- receive notifications when new results are available
How it works
- Input validation -- the actor reads your input parameters and verifies that a search query is provided. If no API key is supplied, it enters dry-run mode and outputs registration instructions.
- Build search parameters -- jurisdiction code, country code, and status filters are normalized to lowercase and added to the API request.
- Company search -- the actor queries the OpenCorporates API v0.4.8
/companies/searchendpoint with pagination (up to 100 results per page). It fetches pages sequentially with a 1.5-second delay between each request. - Rate-limit handling -- if the API returns HTTP 429, the actor waits with exponential backoff (10s, 20s, 30s) and retries up to 3 times per request. HTTP 401 errors throw immediately with a clear message about invalid API keys.
- Data transformation -- raw API responses are mapped to a clean output schema. Registered addresses are formatted into single strings. Jurisdiction codes are converted to human-readable labels.
- Officer search (optional) -- if
includeOfficersis enabled, the actor makes a separate request to the/officers/searchendpoint. Officer results are tagged withresultType: "officer"and pushed to the same dataset. - Output -- all results are pushed to the Apify dataset, ready for download or integration.
Input Query|v[Validate Input] --> No API key? --> [Dry-Run Output]|v[Build API Params]|v[Search /companies/search] --pagination--> [Next Page] --1.5s delay-->| || <-- 429? --> [Exponential Backoff Retry] || |v v[Transform Company Data] <---------------------+|v[Push Companies to Dataset]|vincludeOfficers? --yes--> [Search /officers/search]| || v| [Tag with resultType: "officer"]| || v| [Push Officers to Dataset]|v[Done]
Performance & cost
| Metric | Value |
|---|---|
| Memory allocation | 256 MB |
| Timeout | 3,600 seconds (1 hour) |
| Typical run time (25 results) | 10--20 seconds |
| Typical run time (100 results with officers) | 30--60 seconds |
| Estimated cost per run (25 results) | ~$0.001 |
| Estimated cost per run (100 results) | ~$0.003 |
| Estimated cost for 1,000 runs/month | ~$1.00 |
| API delay between pages | 1.5 seconds |
| Max retries on rate limit | 3 attempts with exponential backoff |
The actor runs on minimal compute resources. On the Apify Free plan, you receive $5 of platform credits per month, which supports thousands of runs of this actor. You also need an OpenCorporates API key -- visit opencorporates.com/api_accounts/new to sign up and check their current pricing and rate limits.
Limitations
- API key required. The actor requires a valid OpenCorporates API key. Without one, it runs in dry-run mode and does not return company data.
- Rate limits apply. OpenCorporates enforces rate limits on their API. The actor handles these automatically, but very high-volume usage may require an upgraded API plan.
- Maximum 100 results per run. The
maxResultsparameter caps at 100. For larger datasets, run multiple queries with different filters or jurisdiction codes. - Officer search is single-page. The officer endpoint fetches only the first page of results (up to the
maxResultslimit) without pagination. - Data freshness varies by jurisdiction. OpenCorporates updates its database from official registries on different schedules. Major jurisdictions are typically updated weekly or monthly, but some smaller registries may lag.
- No direct company lookup by number. The actor searches by name or keyword. It does not support looking up a specific company by its exact registration number.
- Address formatting depends on registry data. Not all registries provide complete address information. Some fields may be null or incomplete depending on the jurisdiction.
Responsible use
- Respect OpenCorporates terms of service. Ensure your usage complies with the OpenCorporates API terms. Commercial use may require a paid API plan.
- Handle personal data carefully. Officer names and positions are personal data. Process them in accordance with applicable data protection laws such as GDPR, CCPA, or equivalent regulations in your jurisdiction.
- Do not use for harassment or discrimination. Company and officer data should be used for legitimate business purposes such as due diligence, compliance, research, and verification -- never for stalking, harassment, or discriminatory practices.
- Verify critical information at primary sources. For formal KYC, AML, or legal proceedings, always cross-reference OpenCorporates data against the original government registry to confirm accuracy and currency.
- Use reasonable request volumes. Avoid unnecessarily high-frequency runs that could strain the OpenCorporates API. Use filters and appropriate
maxResultsvalues to retrieve only the data you need.
FAQ
Do I need an OpenCorporates API key to use this actor? Yes. The actor requires a valid API key to fetch live data. Without one, it runs in dry-run mode and returns instructions for obtaining a key. Sign up at opencorporates.com/api_accounts/new.
Is the OpenCorporates API key free? OpenCorporates offers API plans starting with a free tier for basic access. Visit their website to check current pricing, rate limits, and plan options for your use case.
What jurisdictions does OpenCorporates cover?
Over 140 jurisdictions worldwide, including all 50 US states, the United Kingdom, Germany, France, Canada, Australia, the Netherlands, and many more. Use the jurisdictionCode or countryCode filters to target specific regions.
What is the difference between jurisdictionCode and countryCode?
countryCode is a broad two-letter filter (e.g., us returns companies from all US states). jurisdictionCode is more specific -- for example, us_ca returns only California companies and us_ny returns only New York companies.
How do I search for companies in a specific US state?
Set jurisdictionCode to the state code in the format us_xx -- for example, us_ca for California, us_ny for New York, or us_de for Delaware.
What happens if I hit the OpenCorporates rate limit? The actor automatically handles HTTP 429 rate-limit responses. It waits with exponential backoff (10 seconds, then 20, then 30) and retries up to 3 times per request before moving on.
Can I run this actor on a schedule? Yes. Use Apify Schedules to run the actor on any cron pattern -- daily, weekly, or custom intervals. This is ideal for ongoing corporate monitoring or compliance checks.
How do I get officer data in the results?
Set includeOfficers to true in the input. The actor will perform an additional search against the OpenCorporates officers endpoint. Officer results appear in the same dataset with a resultType: "officer" field.
Are company and officer results mixed in the same dataset?
Yes. Company results have the standard company fields, while officer results include a resultType: "officer" field. You can filter by the presence of resultType to separate them.
Can I combine this with other Apify actors? Absolutely. Use the Apify API or platform integrations to chain this actor with other actors -- for example, run a company search and then pass the results to a sanctions screening actor or a VAT validation actor.
What output formats are available? Results are stored in an Apify dataset and can be exported as JSON, CSV, Excel (XLSX), XML, or RSS. You can also access them programmatically via the Apify API.
Is this actor suitable for KYC/AML compliance workflows? The data comes from official government registries aggregated by OpenCorporates and can be a useful component of due diligence workflows. However, for formal KYC/AML processes, always verify critical information against primary registry sources.
Related actors
| Actor | Description | Link |
|---|---|---|
| UK Companies House | Search UK Companies House for detailed company data, filings, and officer information | apify.com/ryanclinton/uk-companies-house |
| EU VAT Validator | Validate European Union VAT numbers via the official VIES service | apify.com/ryanclinton/eu-vat-validator |
| GLEIF LEI Lookup | Look up Legal Entity Identifiers (LEIs) to verify company identity in financial transactions | apify.com/ryanclinton/gleif-lei-lookup |
| OpenSanctions Search | Search global sanctions and politically exposed persons (PEP) lists | apify.com/ryanclinton/opensanctions-search |
| OFAC Sanctions Search | Search the US Treasury OFAC sanctions list for designated individuals and entities | apify.com/ryanclinton/ofac-sanctions-search |
| SEC Insider Trading | Track SEC Form 4 insider trading filings for public companies | apify.com/ryanclinton/sec-insider-trading |