CRM Enrichment API: Keep Records Fresh
For RevOps and data teams keeping a CRM or internal database up to date.
| Endpoint | Returns |
|---|---|
GET /v1/person | A full enriched profile by LinkedIn URL, username, or internal ID |
GET /v1/company | A full enriched company record by LinkedIn URL, username, company ID, or internal ID |
POST /v1/people/bulk-enrich | Up to 100 profiles enriched in one request, mixed identifier types |
POST /v1/people/bulk | Up to 500 profiles enriched in one request by internal ID |
POST /v1/monitors | A signed webhook the moment a tracked record changes |
A CRM record enriched once at the moment of import is accurate for exactly as long as the person does not change jobs, and people change jobs constantly. Most enrichment integrations only run at the point of ingest, which means every record silently decays afterward with no mechanism to catch it.
/v1/people/bulk-enrich accepts up to 100 profiles per call, mixing identifier types freely, an id, a username, or a raw linkedin_url per entry, since real CRM data rarely has a clean single identifier for every row. Unmatched identifiers are skipped rather than failing the whole batch, so a backfill job can run against a messy existing database without pre-cleaning every row first.
For larger backfills
/v1/people/bulk takes up to 500 internal IDs per request, for the case where records are already resolved to a Kooperativa ID (typically after a first enrichment pass) and the task is a full-database refresh rather than initial matching against a mixed set of identifiers.
The part a batch job can't do: catching changes as they happen
Bulk enrichment solves staleness at a point in time. It doesn't solve the record that changes an hour after the batch job runs. /v1/monitors closes that gap: subscribe once to a person or company URL, choose which events matter (job_changed, title_changed, headline_changed, location_changed, skills_changed for people; staff_changed, description_changed for companies), and get an HMAC-SHA256 signed webhook the moment a change is detected, retried up to 5 times with exponential backoff if your endpoint is briefly down.
Because the license is flat-rate rather than credit-metered, there's no cost calculation involved in deciding whether a record is worth monitoring or worth a full nightly re-enrichment. The rate limit (500 requests/minute per workspace) is the only ceiling, and it applies the same way to a one-off lookup and a 500-record bulk batch.
curl -X POST "https://kooperativa.io/api/v1/people/bulk-enrich" \
-H "Authorization: Bearer ik_live_..." \
-H "Content-Type: application/json" \
-d '{
"profiles": [
{ "linkedin_url": "https://www.linkedin.com/in/satyanadella" },
{ "username": "williamhgates" },
{ "id": "f9413465-..." }
]
}'Get started
Try Kooperativa
One API key. Every endpoint on this page, and every other one, included on the same flat license with unlimited requests.
