Attribution · n8n template
Facebook CAPI — Server-Side Lead Tracking
Sends Lead and Purchase events straight from your CRM to the Facebook Conversions API, so conversions still report when the browser pixel is blocked.
The problem
Browser pixels miss a large share of conversions — iOS privacy settings, ad blockers and cookie banners all suppress them. Facebook then optimises against incomplete data, and your reported cost per lead is wrong in a direction that makes you turn off campaigns that were actually working.
What this workflow does
This template fires server-side from your CRM the moment a lead genuinely converts. Every piece of personal data is SHA-256 hashed inside n8n before it leaves your infrastructure, which is what the Conversions API requires. Events carry a deduplication ID so they reconcile with the browser pixel instead of double-counting, and rejected events raise a Slack alert rather than failing silently.
How it works
- Your CRM posts a conversion event to the webhook.
- A Code node normalises and SHA-256 hashes email, phone and name — raw PII never leaves n8n.
- The event is sent to the Conversions API with an event_id that matches the browser pixel for deduplication.
- The Facebook response is checked for events_received.
- Anything rejected posts to Slack with the payload so it can be fixed the same day.
What it connects
- n8n
- Facebook Conversions API
- GoHighLevel
- Slack
Get the template
The download is the raw n8n JSON. Import it via Workflows → Import from File, replace the YOUR_* placeholders with your own IDs, and connect your own credentials. Nothing is pre-filled and no account of ours is referenced.