Send UTM parameters to Zapier, Make or your own endpoint, lead by lead
The moment TraceLead records a lead, a signed webhook posts its attribution to Zapier, Make or your own endpoint: channel, source, medium, UTM campaign and landing page. No contact details, no form answers, no visitor ids.
No card needed. No lead caps on any plan.
Added by TraceLead's hidden fields. The name and email stay in your form.
- Channel
- Paid search
- Source / medium
- google / cpc
- Campaign
- brand-uk
- Click ID
- gclid
Why UTM parameters rarely reach Zapier
A form tool's Zapier trigger sends what the form holds. Unless something filled hidden fields with the campaign, the Zap gets the name and message and no source.
TraceLead can send the source by itself. When a visitor who accepted cookies sends a form with a mapped hidden field, the snippet reports the lead with its first-touch attribution, and TraceLead posts that to every webhook on the site.
- Up to 3 webhooks per site, each with its own signing secret, shown once.
-
https://only. Addresses that resolve to private, loopback or link-local networks, and URLs with credentials, are refused. -
Signed with HMAC-SHA256 over the timestamp and body, in
X-TraceLead-Signature. - Three retries with back-off, and the last 20 attempts per webhook on the site page with status code and timing.
- Only owners and admins can add, test or remove a webhook.
How to send lead source data to Zapier or Make
Four steps. The webhook needs the TraceLead tag on your site and lead collection left on in the site's collection settings.
The full webhooks guide-
Get a webhook address
In Zapier, start a Zap with Webhooks by Zapier → Catch Hook. In Make, add a Custom webhook. Or use your own
https://endpoint. -
Add it in TraceLead
On your site's page, open Lead webhooks, paste the URL and choose Add webhook. Copy the signing secret now: it is shown once.
-
Send a test event
Send test event posts a sample lead with
"test": trueand shows the result in the delivery log, so Zapier or Make can learn the fields before a real lead arrives. -
Verify the signature at your endpoint
Recompute the signature and reject anything older than five minutes. In PHP:
$expected = 'sha256='.hash_hmac('sha256', $timestamp.'.'.$body, $secret); if (! hash_equals($expected, $signature) || abs(time() - (int) $timestamp) > 300) { http_response_code(401); exit; }Answer with any
2xxwithin 5 seconds. Redirects are not followed.
What each lead webhook contains
A POST with Content-Type: application/json and exactly these keys, in this order. Empty values are null.
Never sent: names, email addresses, phone numbers, form answers, IP addresses, user agents, full referrer URLs, click id values, and the visitor and session ids TraceLead uses for counting.
| Key | Holds | Test event |
|---|---|---|
| event | Always lead.created | "lead.created" |
| event_id | Unique per lead, so a repeated delivery can be ignored (0 on a test event) | 0 |
| site_public_id | The public id of the site the lead came from | "tl_abcdefghij1234567890" |
| occurred_at | When the form was sent, UTC | ISO 8601, UTC |
| form_id | The form's id or name attribute | "contact" |
| page_path | The path of the page the form was sent from | "/contact" |
| channel | The first-touch channel, such as paid_search | "paid_search" |
| source | The first-touch source, such as google | "google" |
| medium | The first-touch medium, such as cpc | "cpc" |
| utm_campaign | The campaign from the UTM tags | "tracelead-test" |
| utm_term | The keyword, when your ads tag it | null |
| utm_content | The ad or link variant | null |
| utm_id | The campaign id from the UTM tags | null |
| click_id_type | Which click id was present (gclid, msclkid…), never its value | "gclid" |
| referrer_host | The site that sent the first visit, hostname only | "www.google.com" |
| landing_page | The first page seen, sensitive parameters removed | "/pricing?utm_campaign=tracelead-test" |
| first_touch_at | When the first visit happened, UTC | ISO 8601, UTC |
| test | true only for "Send test event" | true |
Headers: X-TraceLead-Event: lead.created, X-TraceLead-Timestamp (Unix seconds) and X-TraceLead-Signature: sha256=….
Attribution without personal data. No names, emails, form values, IP addresses or user agents. Ever.
No privacy workarounds. Nothing before consent, no fingerprinting, no ad-blocker bypass, no cross-site identity.
Made in the UK. GBP pricing, UK consent rules in mind, and a person who answers email.
Questions, answered
Anything else? Email us and a person replies.
How do I send UTM parameters to Zapier?
Create a Zap with "Webhooks by Zapier" and the Catch Hook trigger, copy its URL, and add it under Lead webhooks on your site's page in TraceLead. Each new lead then arrives in Zapier with its channel, source, medium, UTM campaign, term and content, landing page and first-touch time, ready to map into a CRM, sheet or Slack message.
Can I send lead source data to Make.com?
Yes. Make's custom webhook accepts the request as it is: paste the webhook address from Make into TraceLead and use "Send test event" so Make can learn the structure. The same works for n8n, a Slack workflow or your own endpoint.
What does a lead source webhook contain?
The attribution of one lead: the channel, source and medium of the first visit, the UTM campaign, term, content and id, which kind of click id was present, the referring host, the landing page, the page and form it was sent from, and the times. It never contains the visitor's answers, contact details or any visitor or session id.
How do I verify the webhook signature?
Each request carries X-TraceLead-Timestamp and X-TraceLead-Signature. Compute the HMAC-SHA256 of the timestamp, a dot and the raw body with your signing secret, compare it with the signature in constant time, and reject requests more than five minutes old. The guide has PHP and Node.js examples.
What happens if my endpoint is down?
A failed delivery is retried three times, after about 10 seconds, 1 minute and 5 minutes. After 50 failed attempts in a row the webhook is switched off and the organisation's owners get an email; switch it back on from the site page once the endpoint works.
Does the webhook include the gclid?
No. It says which click id was present, such as gclid, but not its value. If you need the gclid itself, for an offline conversion import, add a tl_gclid hidden field to the form so it travels with the enquiry.
More features
Every new lead's source, posted where you work.
Install the tag, keep at least one mapped hidden field in your form, add the webhook URL on the site page and press Send test event.
No card needed. Cancel any time.
Site page → Lead webhooks → Add webhook
https://hooks.zapier.com/hooks/catch/…
POST, Content-Type: application/json
X-TraceLead-Event: lead.created
X-TraceLead-Timestamp: 1760262067
X-TraceLead-Signature: sha256=<hex HMAC-SHA256 of "{timestamp}.{body}">