OpenCorporates alternative · API

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 OpenCorporates API limit (50 calls a day, 200 per month on the free key) 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 is a free company data API that covers all three. The rest of this page is the request-level diff.

OpenCorporates API limit, in numbers

OpenRegistry OpenCorporates
Free 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 API (Bearer token from /account)
import requests

resp = requests.get(
  "https://openregistry.sophymarine.com/api/v1/companies",
  params={
    "q": "monzo bank",
    "jurisdiction": "GB",
  },
  headers={"Authorization": "Bearer YOUR_TOKEN"},
)
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.

What this replaces. The Python wrapper around the OpenCorporates API, plus a per-registry HTTP client for the cases where OC's data was too stale, plus the fan-out coordinator across them. One MCP endpoint replaces the lot.

When OpenCorporates is still the right pick

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.

About this page. OpenRegistry is published by Sophymarine, so this comparison is written by a party with a commercial interest in one of the tools on it. Figures and product claims for the other vendors come from each vendor's own public material, linked inline where applicable. Reviewed 2026-04-29. Corrections welcome at hello@sophymarine.com.