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 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.

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.