Funnel tracking: PageView, lead capture, qualification, and booking events sent to Meta
Browser pixel + CAPI: Hybrid setup means iOS/ad blocker users still report conversions to Meta
Hashed PII: Email, phone, and name are SHA-256 hashed before they leave your team's server
Customizable event names: Map SalesCal events to Meta's standard events (Lead, Schedule) or your own custom event names
Per-form exclusion: Opt specific booking pages out of pixel tracking when you don't want them in your ad data
SalesCal fires Meta events two ways at once:
Browser pixel — the Meta fbevents.js script loads on your public booking page and fires fbq('track', ...) for each event
Conversions API (CAPI) — the same event is sent server-side from a SalesCal edge function, carrying hashed prospect details
Both events share an event_id so Meta deduplicates them. If a user blocks the browser pixel, the CAPI event still gets through.
Go to Settings > Integrations
Find Meta Pixel and click Connect
The "Add Meta Pixel" dialog appears. Fill in:
Pixel Name — a label for your own reference (e.g. "Q2 Campaign Pixel")
Pixel ID (Dataset ID) — the 15–18 digit ID from Meta Events Manager
CAPI Access Token — generate this in Meta Events Manager → Settings → Conversions API
Test Event Code (optional) — paste this from Events Manager when you want to verify events live in the Test Events tab
Click Add Pixel
After the first pixel is saved, manage everything else from Settings > Integrations > Meta Pixel.
In Meta Events Manager:
Pixel ID: top of your dataset settings — labeled "Dataset ID"
CAPI Access Token: Settings tab → Conversions API → Generate Access Token. Treat this like a password — anyone with it can write events to your pixel.
SalesCal trigger | Default Meta event | When it fires |
|
| A prospect lands on a public booking page |
|
| Email captured on the booking form |
|
| Form passes qualification rules |
|
| Meeting time confirmed |
Each event has two modes:
Meta standard event — map to one of Meta's predefined events (Lead, Schedule, Purchase, etc.). Use this for ad optimization where standard events have first-class support
Custom event — fire your own event name (e.g. "SalesCal_Lead"). Use this when you need separate data streams from other pixels firing similar events
Configuration lives at Settings > Integrations > Meta Pixel — pick the mode and event name per trigger.
By default, every booking page fires the pixel. If you have internal or test forms that shouldn't pollute your ad data, exclude them:
Open the booking event in the dashboard
The exclusion list is team-wide — managed alongside other meta-pixel settings
Excluded events still book normally; they just don't fire the pixel
This is useful for staging events, internal sales-team links, or low-quality channels you don't want optimizing against.
For each event, the server-side CAPI call includes:
Field | Value |
| SHA-256(lowercase trimmed email) |
| SHA-256(digits-only phone) |
| SHA-256(lowercase trimmed first/last name) |
| SHA-256(lowercase city / state, no spaces) |
| SHA-256(2-letter ISO code) |
| SHA-256(SalesCal lead UUID) |
| Prospect's IP from the booking request |
| Browser user-agent string |
| Meta's click ID and browser ID cookies if present |
PII fields are hashed in your team's server before transit. Meta receives only the hashes, which it matches against its own hashed user graph for attribution.
If you set a Test Event Code, every CAPI call includes it and the event appears in the Meta Events Manager Test Events tab. Use this to verify everything wires up before turning the pixel loose on real traffic. Remove the test code (clear the field and save) for production attribution.
Confirm the Pixel ID matches your dataset (not your old pixel from a different campaign)
Check the CAPI Access Token — regenerating one in Meta will silently invalidate the previous token
Look at the Sync Log tab if visible — disabled triggers no-op silently and won't error
The CAPI Access Token is missing or expired — re-enter it
Your edge function logs (Supabase) will show the actual error from Meta
Meta needs at least one user identifier to match. Make sure the booking form captures email or phone, otherwise CAPI sends an event with no matchable PII.
Check the per-event mode and event-name configuration — a "Custom event" mode with a typo'd name will fire successfully but show up as a custom event in Meta rather than as Lead/Schedule/etc.
Go to Settings > Integrations > Meta Pixel
Click the delete icon next to the pixel
Confirm
The pixel record is removed and tracking stops immediately. Events already in Meta are not deleted — that's a Meta-side cleanup.
The CAPI Access Token is stored encrypted at rest
Browser pixel never carries PII; only the hashed CAPI call does
Per-form exclusion lets you keep regulated forms (e.g. healthcare, financial) out of ad tracking
Trigger logs are pruned after 30 days
You can connect more than one Meta Pixel per team. All active pixels fire on every event (subject to per-form exclusion). Use this when:
You run multiple ad accounts and need attribution in each
You're migrating from one pixel to another and want overlap during the cutover
Google Tag Manager — for arbitrary tag firing (not just Meta)
Hyros Integration — for SQL-level ad attribution across Meta, Google, TikTok
Qualification Rules — controls when "Qualified" vs "Disqualified" fires