Zapier is the universal adapter: our webhook triggers a "Catch Hook" Zap, and from there every qualified call can fan out to any of Zapier's 6,000+ apps — Keap, ActiveCampaign, Close, Monday, Google Sheets, Slack, anything.
Integrations / Zapier
Every qualified call (passing your duration and screening rules) is delivered to Zapier within about a minute: caller number, duration, timestamps, the campaign that generated the call, ad click IDs when present, and a recording link.
Sent as JSON with content-type application/json. The recordingUrl opens in a signed-in callstracking.com session.
{
"type": "qualified_call",
"callId": "clx1abc...",
"source": "DNI",
"startedAt": "2026-08-14T17:21:09.000Z",
"qualifiedAt": "2026-08-14T17:23:41.000Z",
"durationSec": 152,
"fromE164": "+15551234567",
"toE164": "+12138321924",
"campaignId": "cmsam...",
"campaignName": "Google Ads — Plumbing",
"channel": "GOOGLE_ADS",
"recordingUrl": "https://callstracking.com/api/recordings/clx1abc...",
"clickIds": { "gclid": "..." },
"utm": { "utm_source": "google", "utm_campaign": "plumbing" }
}Every delivery is signed with your secret: header x-ct-signature: sha256=<hmac> over the raw body, plus x-ct-event: call.qualified. Platforms like Zapier and GoHighLevel can skip verification (the URL itself is secret); verify when posting to your own server:
// Node.js — verify the x-ct-signature header
import { createHmac } from "node:crypto";
const expected = "sha256=" +
createHmac("sha256", process.env.CT_WEBHOOK_SECRET)
.update(rawRequestBody) // the exact raw body string
.digest("hex");
const valid = expected === req.headers["x-ct-signature"];