OpenCorporates API alternative
The OpenCorporates REST API has shipped since 2010 and is the closest thing the open-company-data category has to a default. It works. The reason most people read pages like this one is usually one of three: the free tier is too thin for production, the data is not live enough, or they want to drop the integration into an AI agent without writing a custom HTTP client. OpenRegistry covers all three. The rest of this page is the request-level diff.
Free-tier limits
| OpenRegistry | OpenCorporates | |
|---|---|---|
| Anonymous calls | 20 req/min/IP, no signup | Not offered (key required) |
| Free signed-in calls | 30 req/min/user | 50/day, 200/month per OC's API docs |
| Commercial use on free tier | Allowed | Open-data / public-benefit projects only |
| Cap on registries per call | Cross-border fan-out: free 3, Pro 10, Max 30 distinct countries per 60s | One jurisdiction per call (manual fan-out client-side) |
| Auth model | OAuth 2.1 with Dynamic Client Registration (RFC 7591) | API token in the query string |
The numbers above for OpenCorporates come from the api.opencorporates.com documentation page. The standard paid plan goes to 500 calls a month, and higher volume needs a custom quote.
Same query, both APIs
OpenCorporates
# Python — OpenCorporates v0.4 REST import requests resp = requests.get( "https://api.opencorporates.com/v0.4/companies/search", params={ "q": "monzo bank", "jurisdiction_code": "gb", "api_token": "YOUR_OC_TOKEN", }, ) data = resp.json() companies = data["results"]["companies"] # Each row: {"company": {"name": ..., "jurisdiction_code": ..., "company_number": ..., ...}} # Schema is OpenCorporates' own, not Companies House's.
OpenRegistry, REST
# Python — OpenRegistry REST, anonymous import requests resp = requests.get( "https://openregistry.sophymarine.com/api/v1/search", params={ "q": "monzo bank", "jurisdiction": "GB", }, ) results = resp.json()["results"] # Each row carries the unified envelope plus jurisdiction_data, which is # the raw Companies House payload, field names and all.
OpenRegistry, MCP
// claude_desktop_config.json { "mcpServers": { "openregistry": { "url": "https://openregistry.sophymarine.com/mcp", "transport": "http" } } }
That config block is the entire integration. The agent calls
search_companies, get_company_profile,
get_persons_with_significant_control, and the rest as
native tools. No HTTP wrapper, no API token plumbing, no rate-limit
bookkeeping until you actively want a paid tier.
Why MCP changes the picture
Most company-data APIs predate LLM agents. To wire one in you write a small wrapper that translates the agent's tool call into the vendor's REST schema, and you carry the API key plus rate-limit logic yourself. That layer is duplicate work, and it breaks every time the model or the vendor schema shifts.
OpenRegistry implements the Model Context Protocol directly. Tools are schema-typed JSON-RPC over Streamable HTTP. Claude Desktop, Cursor, Cline, Goose, Zed, Continue: the same configuration shape, the same tool inventory, no glue.
When OpenCorporates is still the right pick
- Bulk catalogue work. Dump every company name in jurisdiction X for offline analysis. OC's normalised dump under an open-data licence is hard to beat for that.
- Pure research and journalism. Public-benefit applicants get free API access on terms OpenRegistry does not offer.
- Coverage-first KYB triage. When breadth matters more than depth and live freshness, OC's longer list of registers earns its keep.
For most production AI-agent and compliance-pipeline workloads, where you need live data, raw filings, an MCP transport, and a commercial-OK free tier, OpenRegistry is the lower-friction option. The country pages cover the per-jurisdiction detail.