Meta Conversions API (CAPI)
Meta's Conversions API is the server-to-server companion to the Meta Pixel. Where the Pixel reports browser-side events (button clicks, page views), CAPI reports the actual outcomes that the CRM observes after the form is submitted — lead created, lead accepted, lead enrolled.
This closes the attribution loop for ad campaigns: Meta sees not just "someone clicked the ad" but "someone clicked the ad and became a paying student", which lets the ad system optimize for the bottom-of-funnel events that actually matter to the school.
This tile is separate from the Meta (Facebook + Instagram) connection used for the Chat Inbox. They use different access tokens, different scopes, and a different Meta product — connect each one independently if you need both.
What it enables
Once connected, the CRM auto-dispatches two conversion events to your Meta Pixel:
| Event | When it fires | Used to optimize for |
|---|---|---|
Lead | A public form is submitted with a Meta fbclid or utm_source=meta attribution captured | Lead generation ads |
CompleteRegistration | A lead transitions into a status flagged is_won (e.g. Enrolled) | Conversion / purchase ads |
Dispatch is idempotent at the DB level — the same (lead, event) pair never fires twice, so retries during transient network failure can't double-count.
Connecting
Click Integrations → Meta Conversions API → Connect. The modal asks for three values:
- Pixel ID / Dataset ID — 8-20 digit numeric ID from Meta Events Manager → Data Sources → Settings.
- Access Token — long-lived system-user token from Meta App Dashboard → Business Settings → Users → System Users. The token needs the
ads_managementscope. Treat this like a password — it's stored encrypted at rest and never returned by the API. - Test Event Code (optional) — when you want validated traffic to appear under Events Manager → Test Events instead of going live, paste the code (format
TEST<digits>).
The CRM validates by making a single test event call before saving. If Meta rejects the credentials (wrong scope, expired token, mismatched Pixel ID), the modal surfaces the exact error.
Editing without re-typing
When you re-open the modal to update the Pixel ID or Test Event Code, you can leave the Access Token field blank — the previously stored token is kept. Only paste a new token if you're rotating it.
Test mode workflow
- Connect with a Test Event Code.
- Submit a public form, or move a lead into a won status.
- Open Meta Events Manager → Test Events within ~30s.
- You should see a
LeadorCompleteRegistrationevent with full first/last-name and email hashed per Meta's normalization rules (SHA-256, lower-case + trim). - Confirm, then clear the Test Event Code in the integration modal to start sending live events.
Attribution data we forward
For each conversion, we send the standard hashed user data (email, phone if present, first/last name) plus:
fbc— derived fromfbclidcaptured on the form session, if presentfbp— picked up from the Meta Pixel cookie when the form was loadedevent_source_url— the public form URLevent_id— a deterministic dedupe key paired with the Pixel's browser-side event so Meta merges them into a single attributed conversion
The combined Pixel + CAPI signal is what Meta calls Conversions API for Web — the recommended setup for 2026 attribution accuracy.
Permission
Connecting / disconnecting requires integrations.manage (admins auto-have it).
Disconnecting
Disconnect:
- Marks the integration row as
disconnected. - Clears the encrypted access token.
- Stops all future conversion-event dispatches immediately. In-flight events being retried in the queue finish or fail and don't resurrect the connection.
Related
- Forms — campaign attribution capture — how
utm_*/fbclid/gclidget on the form session - Reports — Form & Campaign Performance — the ROI report this loop powers
- Integrations overview