OpenCorporates Scraper avatar

OpenCorporates Scraper

Pricing

from $3.00 / 1,000 company records

Go to Apify Store
OpenCorporates Scraper

OpenCorporates Scraper

Scrape OpenCorporates company records from 140+ jurisdictions by country or state code, or by company URL. Get status, type, address, industry codes, EIN/CIK, previous names, filings and officer counts. Add your own OpenCorporates login for directors, owners and incorporation dates.

Pricing

from $3.00 / 1,000 company records

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

16 hours ago

Last modified

Share

Get company registry records from OpenCorporates for any of 140+ jurisdictions, as clean rows you can open in Excel or feed to an API. Pick a jurisdiction code (gb, fr, nl, us_ca, ca_on, …) or paste company URLs, and get the name, company number, status, type, registered address, industry codes, identifiers such as EIN and SEC CIK, previous names, filings and officer counts. Turn on officer enrichment (includeOfficers, off by default, no account needed on your side) and each row also carries directors and officers with their dates, beneficial owners, incorporation and dissolution dates, and the official registry source.

Why Use This Scraper?

  • ✅ Bulk company lists by jurisdiction: 140+ countries, US states and Canadian provinces
  • ✅ Targeted lookups by company URL, mixed freely with jurisdictions
  • ✅ Every field shown on the company page, already structured: ISO dates, split address lines, typed identifiers
  • ✅ Industry codes (UK SIC, NACE, ISIC, NAF), EIN, SEC CIK, CAGE and previous company numbers where the registry has them
  • ✅ Optional officer enrichment: directors/officers, beneficial owners and incorporation dates, with no OpenCorporates account of your own
  • ✅ Pay per company record. Removed or empty company pages are skipped and never billed
  • ✅ No API key needed

Overview

The OpenCorporates Scraper is for compliance and KYB teams, sales and lead-generation teams, researchers and data buyers who need company registry data from many countries in one consistent format.

Each dataset row is one company. Fields that a registry does not publish come back as null (or an empty list), so every row has the same shape and exports cleanly to CSV.

Discovery works two ways: by jurisdiction, where the actor lists companies registered there (active and dissolved), or by the company URLs you paste. Keyword or name search is not offered.

Supported Inputs

Jurisdiction codes

FormatPatternExamples
Country{country}gb, fr, de, nl, ie, es, fi, no, dk, jp, au, nz, br, in, sg, hk
State or province{country}_{state}us_ca, us_ny, us_tx, us_fl, us_de, ca_on, ca_bc, ca_qc
All states of a country{country}us (every US state), ca (federal + every province)

An unknown code stops the run right away, with the list of valid country codes in the message.

Company URLs

{
"startUrls": [
"https://opencorporates.com/companies/gb/05957738",
"https://opencorporates.com/companies/us_ca/C0806592",
"https://opencorporates.com/companies/nl/17087985"
]
}

URLs without https://, with a trailing slash or with query parameters are accepted. Anything that is not a company page is skipped and named in the log.

Unsupported inputs

  • ❌ Name or keyword search (?q=apple)
  • ❌ Officer pages (/officers/...), filings pages, network graphs
  • ❌ Company lists filtered by status, industry or date. Filter the dataset after the run instead

Use Cases

AudienceUse case
Compliance / KYB teamsVerify registration status, registered address and officers of counterparties
Sales & lead generationBuild lists of registered businesses by country, state and industry code
Market researchersSize company populations by jurisdiction, type and industry
Due diligence & investigationsPull officer histories, beneficial owners and previous names
Data teamsEnrich CRM records with company numbers, EIN / CIK and registry links
AcademicsStudy company formation and dissolution across jurisdictions

How It Works

How It Works

  1. Input: jurisdiction codes, company URLs, or both
  2. Find: the actor lists companies registered in your jurisdictions
  3. Read: each company page is loaded and every field is read into a structured row
  4. Optional enrichment: with officer enrichment on, officers, owners and dates are added
  5. Output: one row per company, as JSON, CSV, Excel or through the API

Input Configuration

Input fields

FieldTypeRequiredNotes
jurisdictionsarray<string>one of the twoJurisdiction codes, e.g. gb, fr, us_ca
startUrlsarray<string>one of the twoopencorporates.com/companies/{jurisdiction}/{number} URLs
includeOfficersbooleanoptionalDirector/officer enrichment, charged additionally per enriched record. Default false
maxItemsintegeroptionalStop after this many companies. Default 1000
maxConcurrencyintegeroptionalCompany pages loaded in parallel. Default 15, max 20
startOffsetintegeroptionalSkip this many companies of the jurisdictions, to continue after an earlier run. Default 0
recordMaxAgeDaysintegeroptionalReturn companies collected in the last N days at once instead of loading them again. Default 30, 0 = always fresh
proxyobjectoptionalResidential proxies recommended. The default works out of the box

Common scenarios

1. All companies in a jurisdiction, capped

{
"jurisdictions": ["gb"],
"maxItems": 5000
}

2. Specific companies by URL

{
"startUrls": [
"https://opencorporates.com/companies/gb/05957738",
"https://opencorporates.com/companies/us_ca/C0806592"
]
}

3. With officers, owners and incorporation dates

{
"jurisdictions": ["us_ny"],
"includeOfficers": true,
"maxItems": 1000
}

Output Overview

Each row is one company:

  • Core: name, company number, status, company type, jurisdiction and its code
  • Address: the registered address as one string and as separate lines
  • Classification: industry codes in every scheme the registry publishes
  • Identifiers: EIN, SEC CIK, CAGE, previous company numbers and previous names
  • Agent: registered agent name and address (mostly US states)
  • Activity: latest accounts date, annual return date, recent filings with links
  • People: number of active and inactive officers and beneficial owners; with officer enrichment on, the names, roles and dates
  • Source (with officer enrichment): the official registry, its link and how fresh the data is
  • Meta: loginRequiredFields lists what OpenCorporates kept for signed-in users on that page, plus url and scrapedAt

Coverage depends on the registry: GB rows usually carry industry codes and accounts dates, US rows carry agents and filings, French rows carry NAF codes and employee bands, and some registries (Spain, for example) publish little more than name, number and type.

Output Samples

UK company, public fields

{
"name": "LIBRA INVESTMENT PROPERTY GROUP LIMITED",
"companyNumber": "05957738",
"status": "Active",
"incorporationDate": null,
"dissolutionDate": null,
"companyType": "Private Limited Company",
"jurisdiction": "United Kingdom",
"jurisdictionCode": "gb",
"registeredAddress": "Penycastell Farm, Bryn, Port Talbot, SA13 2PY, West Glamorgan, United Kingdom",
"registeredAddressLines": ["Penycastell Farm, Bryn", "Port Talbot", "SA13 2PY", "West Glamorgan", "United Kingdom"],
"agentName": null,
"agentAddress": null,
"industryCodes": [
"70.10: Activities of head offices (UK SIC Classification 2007)",
"70.10: Activities of head offices (European Community NACE Rev 2)",
"7010: Activities of head offices (UN ISIC Rev 4)"
],
"previousNames": ["£IBRA FINANCIAL SERVICES LIMITED"],
"previousCompanyNumbers": [],
"otherIdentifiers": [],
"latestAccountsDate": "2025-03-31",
"annualReturnLastMadeUpDate": "2015-10-05",
"registryPage": null,
"officersCount": 2,
"inactiveOfficersCount": 3,
"beneficialOwnersCount": 3,
"beneficialOwners": [],
"directorsOfficers": [],
"recentFilings": [],
"dataSource": null,
"otherAttributes": {},
"loginRequiredFields": ["incorporationDate", "ultimateBeneficialOwners", "directorsOfficers", "inactiveDirectorsOfficers", "dataSource"],
"url": "https://opencorporates.com/companies/gb/05957738",
"scrapedAt": "2026-10-30T06:55:52.802Z"
}

Same company, with officer enrichment (lists shortened)

{
"name": "LIBRA INVESTMENT PROPERTY GROUP LIMITED",
"companyNumber": "05957738",
"status": "Active",
"incorporationDate": "2006-10-05",
"jurisdictionCode": "gb",
"registryPage": "https://beta.companieshouse.gov.uk/company/05957738",
"officersCount": 2,
"inactiveOfficersCount": 3,
"beneficialOwnersCount": 3,
"beneficialOwners": ["Mr David Ian Bromley", "Mr David Ian Bromley-Cornfield", "Mrs Elizabeth Davies"],
"directorsOfficers": [
{ "name": "DAVID IAN BROMLEY-CORNFIELD", "position": "director", "startDate": "1 Oct 2010", "endDate": null, "isActive": true, "isCorporate": false, "link": "https://opencorporates.com/officers/201499282" },
{ "name": "PHOENIX AUDIT LIMITED", "position": "secretary", "startDate": "5 Oct 2006", "endDate": "5 Oct 2009", "isActive": false, "isCorporate": true, "link": "https://opencorporates.com/officers/201499267" }
],
"dataSource": {
"name": "UK Companies House",
"url": "https://beta.companieshouse.gov.uk/company/05957738",
"lastUpdateFromSource": "29 October 2026",
"lastChangeRecorded": "28 September 2026",
"nextUpdateFromSource": "Daily"
},
"loginRequiredFields": []
}

California company, public fields (identifiers and filings)

{
"name": "APPLE INC.",
"companyNumber": "0806592",
"status": "Active",
"companyType": "Stock Corporation - CA - General",
"jurisdiction": "California (US)",
"jurisdictionCode": "us_ca",
"registeredAddress": "ONE APPLE PARK WAY, CUPERTINO, 95014, CA, United States",
"agentName": "C T CORPORATION SYSTEM",
"agentAddress": "330 N BRAND BLVD STE # 700, GLENDALE, CA, 91203, UNITED STATES",
"previousCompanyNumbers": ["C0806592"],
"otherIdentifiers": [
{ "type": "US Federal CAGE number", "value": "58839" },
{ "type": "SEC CIK number", "value": "320193" },
{ "type": "US EIN number", "value": "942404110" }
],
"officersCount": 25,
"inactiveOfficersCount": 29,
"recentFilings": [
{ "date": "28 Jan 2022", "title": "PUBLICLY TRADED DISCLOSURE", "url": "https://opencorporates.com/filings/1070407905" }
]
}

Key Output Fields

Company core

  • name, companyNumber, status, companyType, jurisdiction, jurisdictionCode
  • incorporationDate, dissolutionDate: ISO YYYY-MM-DD (officer enrichment)

Address and agent

  • registeredAddress (one string), registeredAddressLines (array)
  • agentName, agentAddress

Classification and identifiers

  • industryCodes: e.g. "70.10: Activities of head offices (UK SIC Classification 2007)"
  • otherIdentifiers[]: {type, value}, e.g. EIN, SEC CIK, CAGE
  • previousNames, previousCompanyNumbers

Activity

  • latestAccountsDate, annualReturnLastMadeUpDate
  • recentFilings[]: {date, title, url}

People

  • officersCount, inactiveOfficersCount, beneficialOwnersCount
  • directorsOfficers[] (officer enrichment): {name, position, startDate, endDate, isActive, isCorporate, link}
  • beneficialOwners[] (officer enrichment)

Source and meta

  • dataSource (officer enrichment): {name, url, lastUpdateFromSource, lastChangeRecorded, nextUpdateFromSource}
  • registryPage: link to the company in the official registry (officer enrichment)
  • otherAttributes: any extra registry field, e.g. numberOfEmployees, alternativeNames, branch
  • loginRequiredFields: fields held back for signed-in users on that page
  • url, scrapedAt

FAQ

Which jurisdictions are supported?

140+, including most European countries, Japan, Australia, New Zealand, Brazil, India, Singapore, Hong Kong, every US state and the Canadian provinces. Use the two-letter country code, or country_state for US states and Canadian provinces. us alone covers all US states.

Do I need an OpenCorporates account?

No. Every field this actor offers is available without an account of your own. The base record covers what OpenCorporates shows to visitors: name, number, status, type, address, industry codes, identifiers, previous names, filings and officer counts. Officer enrichment (includeOfficers: true, off by default) adds officer names and dates, beneficial owners, incorporation and dissolution dates, and the registry source — the actor signs in with its own account pool, so you never supply credentials.

What does officer enrichment cost?

One extra event per enriched company record, on top of the base record price. It is off by default; turn includeOfficers on when you need officers, owners or incorporation dates. Enrichment is charged only on rows that actually carry it: if it is unavailable, or runs out partway through a very large run, the remaining rows come with the public fields and no enrichment charge.

Can I search by company name?

No. Find companies by jurisdiction, or paste the company URLs you already have.

Can I mix jurisdictions and URLs?

Yes. Both run together and each company appears once, matched on jurisdiction and company number.

How many results can I get, and how fast?

A jurisdiction can return tens of thousands of companies, so set maxItems. In our test runs the default settings loaded about 750 companies a minute. Companies already collected in the last 30 days are returned almost at once: a repeat run of 300 companies finished in seconds.

Can I get the next batch of companies after a run?

Yes. Run again with startOffset set to the number of companies you already have, for example "startOffset": 1000 after a run of 1,000. The order can change when OpenCorporates updates its listings, so continue soon after the earlier run; a few companies may repeat or be missed if a lot of time has passed.

How fresh is the data?

Companies loaded for any run in the last 30 days are reused instead of being loaded again, which makes repeat lookups much faster. Each row's scrapedAt shows when it was collected. Set recordMaxAgeDays lower for fresher data, or to 0 to load every company fresh.

What am I billed for?

One event per company row in the dataset, plus one officer-enrichment event for each row that was actually enriched. Pages that no longer exist or hold no company record are skipped and not billed, and maxItems is never exceeded. Free-plan users get up to 100 companies per run.

Why are some fields null?

Either the registry does not publish them, or OpenCorporates shows them only to signed-in users. In the second case the field name appears in loginRequiredFields.

Support

Found a bug or need a field that is missing? Open an issue on the Issues tab or email muhamed@didovic.dev.

Additional Services

Need a custom export, a jurisdiction-specific field, scheduled monitoring of a company list, or delivery into your own database? I build tailored versions: muhamed@didovic.dev.

Explore More Scrapers

🤖 For AI Agents & LLM Apps

Reference for agents calling this actor through the Apify MCP server or the Apify API (actor: memo23/opencorporates-scraper).

Purpose: company registry records from OpenCorporates by jurisdiction code or company URL, one row per company.

Minimal input:

{ "jurisdictions": ["gb"], "maxItems": 50 }

Lookup input:

{ "startUrls": ["https://opencorporates.com/companies/us_ca/C0806592"] }

Output fields: name, companyNumber, status, incorporationDate, dissolutionDate, companyType, jurisdiction, jurisdictionCode, registeredAddress, registeredAddressLines[], agentName, agentAddress, industryCodes[], previousNames[], previousCompanyNumbers[], otherIdentifiers[{type,value}], latestAccountsDate, annualReturnLastMadeUpDate, registryPage, officersCount, inactiveOfficersCount, beneficialOwnersCount, beneficialOwners[], directorsOfficers[{name,position,startDate,endDate,isActive,isCorporate,link}], recentFilings[{date,title,url}], dataSource{...}, otherAttributes{}, loginRequiredFields[], url, scrapedAt.

Behaviour an agent should know:

  • Always set maxItems: one jurisdiction can hold millions of companies. Billing is per row, plus per enriched row when officer enrichment is on.
  • Jurisdiction codes are lowercase: gb, fr, us_ca, ca_on. us means every US state. Unknown codes fail the run within seconds.
  • Missing values are null or [], never placeholder text.
  • Officer names, beneficial owners and incorporation dates come through the built-in officer enrichment: set includeOfficers: true (default false). Without it the officer counts are still returned.
  • Billing: apify-default-dataset-item per row; officer-enrichment additionally per row that was actually enriched (only when includeOfficers is true). Rows that could not be enriched are billed as base rows only.
  • No name search. To look up one company, pass its URL in startUrls.

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by OpenCorporates Ltd. All trademarks are the property of their owners.

Without officer enrichment the actor reads only pages that OpenCorporates shows to any visitor. With officer enrichment it reads what a standard signed-in account can see; it does not bypass authentication or access paid features. You are responsible for making sure your use complies with OpenCorporates' terms of use, data-protection law (GDPR, CCPA and others) and your organisation's own obligations, especially when processing personal data such as officer names.


SEO Keywords

opencorporates scraper, opencorporates api alternative, company registry scraper, company registry data, business registry export, kyb data, company verification, company number lookup, directors and officers data, beneficial owners data, uk company data, companies house data, us secretary of state data, business entity search, registered agent lookup, sic code company list, nace code company list, ein lookup, sec cik lookup, company incorporation date, dissolved companies list, bulk company data, b2b company list by country