Company search
Find a company by name or registry number within a jurisdiction, with fuzzy matching that tolerates accents and messy input.
- $0.01 per verified company
- No contract
- Straight from the register
69 jurisdictions covered across official registers
Sample regions: United Kingdom, France, Germany, Sweden, Belgium, Brazil, Colombia, Argentina, California, Japan, Australia, SingaporeKlarna Bank AB
idSE · 5567370431 · active
What it does
Name or number, one endpoint
Search accepts a company name or a registry number and returns ranked matches. Identifier lookups never go through fuzzy name search. They hit a unique index, so a known number always resolves exactly.
- Accent-aware, fuzzy name matching
- Exact lookup by registry number
- Filter by jurisdiction and status
GB · 01234567
GB · 07654321
Built in
Free, and the entry point to everything else
Search is free and never counts against your quota. Use it to resolve a name to a company number, then fetch the profile or run a verify with the number you found.
- Cursor pagination, 1 to 100 results per page
- Free on every plan
- Coverage and status filters from the register
Official register
Integrate
One call. Set your base URL and key once: they work for every endpoint on the platform.
# All endpoints share one base URL and key. Set them once: export API_BASE="https://api.corpoapi.com" export API_KEY="ck_live_..." # or ck_test_... to return fixtures and never bill curl -X GET "$API_BASE/v1/search" \ -H "X-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d '/v1/search?q=Klarna&jurisdiction=se&limit=20'
Ship
Paste into Claude Code, Cursor, Codex, or any coding agent. It is already filled for the Company search endpoint: set <my_stack> and your API key, and everything else stays exactly as written.
# Corpo API Company search: integrate in 5 minutes You are integrating Corpo API's Company search endpoint into <my_stack>. Follow these steps exactly. Every URL, header, and value below is canonical. Do not paraphrase or "improve" them. ## 1. Provision an account - Sign up: https://app.corpoapi.com (no credit card required). - Or set credentials you already have: export API_BASE="https://api.corpoapi.com" export API_KEY="ck_live_..." ## 2. Make the call GET $API_BASE/v1/search Auth header: X-API-Key: ck_live_... (use ck_test_... for fixtures; test calls are never billed) Body: /v1/search?q=Klarna&jurisdiction=se&limit=20 Response: A ranked list of matching companies, each with name, company number, status and jurisdiction, plus a cursor for the next page. ## 3. Handle the result - 200: use the JSON response described above. - On error, branch on the stable `error` field, never the message text. - 429 = rate limited (back off and retry). 401 = invalid key. 422 = malformed body. - Webhook / async: none. Search returns synchronously and is never billed. ## 4. Hard rules, do not change - Base URL is $API_BASE (set above). Do not invent other hosts. - Auth header is `X-API-Key` (exact casing). - Read the full reference before writing code: https://docs.corpoapi.com ## 5. Pricing (public) - Per-call pricing is published at https://corpoapi.com/pricing.md. Read it there; do not hardcode a rate. When in doubt: https://docs.corpoapi.com
API reference
Company search takes one request and returns one JSON document. The response below came from the live API, not a mock.
GET /v1/search?q=Klarna&jurisdiction=se&limit=2
Sample response
Example response. Source metadata omitted for clarity.
{
"data": [
{
"id": "co_se5ddfb60e9dc0a6069e9ab4e4",
"jurisdiction": "se",
"company_number": "7720001457",
"company_number_scheme": "SE-ORGNR",
"legal_name": "Nordic Build Supply AB",
"display_name": null,
"legal_name_english": null,
"status": "dissolved",
"legal_form_code": "EK-ORGFO",
"address": {
"line1": "Box 32",
"city": "ARVIKA",
"postcode": "67101",
"region": null,
"country": "SE",
"raw": null
},
"match": {
"type": "name_prefix",
"identifier": null
}
},
{
"id": "co_seab172bec38144718ebadedba",
"jurisdiction": "se",
"company_number": "5561277533",
"company_number_scheme": "SE-ORGNR",
"legal_name": "Klarna Bank AB",
"display_name": null,
"legal_name_english": null,
"status": "merged",
"legal_form_code": "AB-ORGFO",
"address": {
"line1": null,
"city": "GÖTEBORG",
"postcode": "40508",
"region": null,
"country": "SE",
"raw": null
},
"match": {
"type": "name_prefix",
"identifier": null
}
}
],
"pagination": {
"limit": 2,
"next_cursor": "eyJvIjogMn0",
"has_more": true,
"total_estimate": 134,
"returned": 2
}
}
Price per call
Free
per call. Free. Search is never billed.
See every priceErrors
| Status | Code | When |
|---|---|---|
| 422 | invalid_parameter | q is shorter than two characters, or no jurisdiction is given. |
| 401 | invalid_api_key | The key is missing, revoked or not valid. |
| 429 | rate_limited | A rate limit window is exceeded. Retry-After says how long to wait. |
Rate limits
- Free: 5 requests per second, 100 per minute.
- Paying: 50 requests per second, 2,000 per minute.
- Limits are per key, on a fixed 1-second window and a 1-minute window.
- Exceeding either window returns 429 with a Retry-After header in seconds.
- A batch call counts as one request, however many items it carries.
Simple by design
69
Jurisdictions covered
$0.01
Per verified company
1 schema
Consistent company data
Transparent pricing
Pay-as-you go, 1 cent per company, forever.
100 free calls to get started, then $0.01 per verified company. No subscription.
Pay as you go
Usage
Pay as you go · No contract
100 free
starter calls · No card
Everything included
- 100 free calls to get started
- Search, coverage and usage are always free
- Failed and ambiguous lookups are never billed
- REST API and hosted MCP server
Failed and ambiguous lookups are never billed, and the same company is billed at most once a day.
FAQ
Common questions
Is company search free?
Can I search by company number?
Why did I get an ambiguous result?
From the blog: One OpenAPI spec, every surface.