Company Data API: What to Check Before You Integrate
By Kooperativa Engineering
A company data API takes an identifier or a set of filters and returns structured facts about companies. The feature pages for these products look alike: the same list of fields and the same promise of fresh data. The differences show up when you send your own accounts through the API, so this guide lists what to check and how to run the test.
Start with the identifier
Company names are ambiguous and domains change, so look for a stable ID that comes back on every record and that you can store in your CRM. Our company endpoint accepts four identifiers: a profile URL, a username (the company slug), a numeric company_id and an internal id. Every response carries the company_id that the people endpoints take.
curl "https://kooperativa.io/api/v1/company?username=stripe" \
-H "Authorization: Bearer ik_live_..."staff_count and fetched_at sit side by side, so the date of the number travels with it. The full record also carries locations, specialities and the logo.
{
"data": {
"company_id": "2135371",
"username": "stripe",
"name": "Stripe",
"website": "https://stripe.com",
"founded_year": 2010,
"staff_count": 17115,
"hq_city": "South San Francisco",
"hq_country_code": "US",
"industries": ["Technology, Information and Internet"],
"fetched_at": "2026-08-10T07:19:03.319Z"
}
}What a record should carry
Compare the fields by what you will do with them. Each group raises one question that decides whether you can use it.
| Field group | Fields in the response | Question to ask |
|---|---|---|
| Identity | name, website, username, company_id | Is there an ID that never changes? |
| Size | staff_count | Who measured it, and as of when? |
| Location | hq_city, hq_country_code, locations | Is the headquarters separate from other offices? |
| Classification | industries, specialities | Which taxonomy, and does the people side use the same one? |
| Timing | fetched_at | Is there a date on every record? |
| Not in our records | revenue, funding, technology stack, contact details | Do you need any of these? If so, plan a second source. |
Freshness belongs on the record
A claim such as "updated daily" describes a dataset and says little about the one company you care about. Look for a timestamp on each record and a written refresh rule. Ours is fetched_at on every record. The two detail endpoints refresh a company older than 90 days before answering and fall back to the stored record if the refresh fails.
When you need the live state of one account, the real-time endpoint queries the live source for $0.001 per call. A not-found answer is billed there, and a failure on our side is not.
Coverage and misses
No dataset holds every company, so ask how a miss is handled. When one of our detail endpoints returns 404 for a company we do not hold yet, the lookup is queued for retrieval, so the same call can succeed later. The real-time endpoint answers immediately for a fee. Whatever the vendor, count the misses in your own test and decide whether that rate is acceptable for your accounts.
Search and its sharp edges
Search starts from criteria and returns a list. Three habits cause most of the empty or noisy result sets. Country must be an ISO 2-letter code, and a full name such as "United States" returns zero results without an error. Industry labels on companies come from a newer taxonomy than the labels on people, so "Software Development" on a company is "Computer Software" on a person. And the name filter is a fuzzy text search, so confirm a match on website or headquarters before you store the ID.
curl -X POST "https://kooperativa.io/api/v1/companies/search" \
-H "Authorization: Bearer ik_live_..." \
-H "Content-Type: application/json" \
-d '{"industry": "Software Development", "country": "US", "min_staff": 50, "per_page": 50}'From the company to its people
The company ID is also the key to the people side. Headcount by seniority, current and past employees, decision makers and hiring signals all take it. If your use case needs people at the account, check that the same vendor covers them, because a second vendor means a second set of identifiers to reconcile. If you only need firmographics, this is no reason to choose one provider over another.
Errors, limits and pricing
Read the error documentation before the pricing page. Every error response from our API carries a stable code you can switch on: 404 when we do not hold the company, 451 when a record was withdrawn at its owner's request, 429 with a Retry-After header when you pass the workspace limit of 500 requests per minute, and 503 when something upstream failed and a retry is the right response.
A flat license of $499 a month covers every standard endpoint with no per-request charge, and only the two real-time endpoints are metered. Compare that with a per-request price at the volume you expect, because the answer changes with the number of accounts you refresh.
Run a 20-account test
Take 20 accounts: ten you know well, five small ones and five that changed recently. Send each through the lookup by ID and compare size and headquarters with your own records. Note the age of fetched_at on each one. Count the 404s, and check whether the same companies come back from a filtered search. An afternoon with that table tells you more than a demo does, because it uses your accounts and not the vendor's.
Where a company data API is the wrong tool
If you need revenue, funding rounds or the technology a company runs, our records do not hold them and you need a different source. If a contract depends on a size threshold, use the company's own accounts and not an external count. And for a handful of named accounts, reading each company's own site costs less than an integration.
Frequently asked questions
What is a company data API?
A company data API returns structured facts about companies, such as name, website, size, headquarters and industry. You send an identifier to look up one company or a set of filters to search for many.
What data does a company data API return?
It depends on the provider. Ours returns identity fields, a staff count, headquarters and office locations, industries and specialities, and a fetched_at timestamp on every record. It does not hold revenue, funding, technology stack or contact details.
How do I test the accuracy of a company data API?
Send 20 accounts through it, including ten you know well, and compare size, headquarters and industry with your own records. Record the age of each record and count the not-found answers.
Can a company data API also return the people who work there?
Some can. With ours, the company ID from a lookup works in the headcount, current-employees, past-employees, decision-makers and hiring-signals endpoints.
Get started
Try Kooperativa
One API key. Person and company enrichment, structured search, and monitors under one flat license.