Watch any professional profile or company for changes and receive signed webhooks when something updates.
Subscribe to any profile or company URL. When a change is detected (job title, company, headline, headcount), Kooperativa sends a signed POST to your webhook_url.
Tip
Free : no credits charged for creating, listing, or deleting monitors, nor for webhook deliveries. You only pay for the initial enrichment calls to get profile IDs.
How it works
Create a monitor with a profile or company URL and your webhook endpoint
Kooperativa detects changes as profiles are ingested from the data lake
A signed webhook fires immediately. No polling needed.
Available events
Person events
Company events
Webhook payload
{
"id" : "c1c882c8-f172-4c00-8efc-be6fa9e3add4" ,
"event" : "person.job_changed" ,
"monitor_id" : "45e0bba8-196d-4f5e-aecc-52332ca832e2" ,
"timestamp" : "1752918000" ,
"diff" : {
"old_company" : "Microsoft" ,
"new_company" : "OpenAI" ,
"old_title" : "CEO" ,
"new_title" : "Board Member"
}
}
Signature verification
Every delivery includes these headers:
Verify webhook signature js import crypto from "crypto" ;
function verifyWebhook ( req , secret ) {
const timestamp = req.headers[ "x-kooperativa-timestamp" ];
const signature = req.headers[ "x-kooperativa-signature" ];
const expected = crypto
. createHmac ( "sha256" , secret)
. update ( `v0:${ timestamp }:${ JSON . stringify ( req . body ) }` )
. digest ( "hex" );
return expected === signature;
}
Caution
Always verify the webhook signature before processing the payload. Reject any request where the signature does not match, as it may be forged or replayed.
Retry policy
If your endpoint doesn’t respond with 2xx within 30 seconds, Kooperativa retries up to 5 times:
Tip
Make your webhook handler idempotent . It may receive the same delivery more than once. Use the X-Kooperativa-Request-Id header to deduplicate.