# Setting Up Meta Pixel Conversion Webhook

> Send call conversions to Meta through the Conversions API, server to server, so Meta can attribute calls to ads without relying on the browser pixel.

Source: https://callgrid.com/knowledge-base/setting-up-meta-pixel-conversion-webhook
Last updated: 2026-10-28
Topics: Integrations, Conversion Pixel

## Overview

The **Meta Pixel** webhook template sends call conversions to Meta through the Conversions API (server to server). It lets Meta attribute calls to ads without relying on the browser pixel alone, which ad blockers and iOS restrictions often block.

It is an integration webhook: **Integrations > Webhooks > New Webhook**, Template Mode **Conversion Pixel**, template **Meta Pixel**. It fires only on campaigns where it is attached on the **General** tab.

Nothing is sent to Meta automatically. A call being marked billable or converted reaches Meta only if a Meta Pixel webhook on that event is attached to the call's campaign.

## Prerequisites

- A Meta Business account with a Meta Pixel (dataset) in Events Manager.
- The **Pixel ID** and a Conversions API **access token** (Events Manager > your pixel > **Settings** > **Conversions API** > **Generate access token** under Set up manually; the link appears only for users with developer privileges on the business). After your first qualifying call, check the webhook's response on the call to confirm Meta accepted the event.
- The **Meta pixel installed on the landing page**. The `fbc` and `fbp` values come from cookies the Meta pixel sets, so the page must load the Meta SDK.
- The CallGrid tracking script on the landing page with a number pool, so visitor data such as `fbc`, `fbp`, user agent, IP and zip reach the call as tags. The script reads the Meta `_fbc` and `_fbp` cookies and sends them as `fbc` and `fbp`; create custom tags `fbc` and `fbp` to receive them.

## Setup

![Meta Pixel webhook setup with the Conversions API request](https://callgrid.com/api/media/file/kb-MetaPixel-setup.png)

1. Go to **Integrations > Webhooks** and click **New Webhook**.
2. **Name** it, for example `Meta CAPI - Medicare`.
3. **Event**: choose the outcome Meta should optimize on:
  - **Call Converted**: a sale or appointment, usually set by a postback.
  - **Call Billable**: the call met the buyer's billable criteria. Fires when the call ends (or live, if a postback made it billable).
  - **Call Answered** or **Call Ended** only for upper-funnel signals.
4. **Template Mode**: Conversion Pixel, then **Meta Pixel**.
5. Enter the Pixel ID and access token where the template asks for them.
6. Review the request body (below), then **Save Webhook**.
7. Open each campaign that should report to Meta and add the webhook under **General > Webhooks**.

## Payload

![Meta Pixel webhook request body and test variables](https://callgrid.com/api/media/file/kb-MetaPixel-payload.png)

The template was upgraded on 2026-09-03 to improve Meta's match quality. The recommended fields:

| Meta field | CallGrid value |
| --- | --- |
| `event_name` | `Contact` |
| `event_time` | `[[number:UTCUnixTime]]` |
| `user_data.ph` | `[[hash:InboundNumber]]` |
| `user_data.fbc` | `[[tag:fbc]]` |
| `user_data.fbp` | `[[tag:fbp]]` |
| `user_data.client_ip_address` | `[[tag:VisitorIpAddress]]` |
| `user_data.st` | `[[lchash:InboundStateCode]]` |
| `user_data.zp` | `[[hash:VisitorZipCode]]` |

Macros: `[[hash:...]]` is SHA-256 of the value, `[[lchash:...]]` is SHA-256 of the lowercased, whitespace-stripped value, and `[[number:...]]` sends a number instead of a string. Meta requires hashed customer identifiers, so keep `ph`, `st` and `zp` hashed.

To send a value, add `custom_data` with `value` and `currency` from a revenue tag. If Meta should record a purchase rather than a contact, change `event_name` to match the event your ad set optimizes for.

## Testing

![Webhook Testing panel with Run Webhook](https://callgrid.com/api/media/file/kb-Webhook-testing.png)

![](https://callgrid.com/api/media/file/MetaTest.png)

1. In the webhook editor, fill the test variables with sample values.
2. Run the test request and confirm Meta returns success.
3. In Meta Events Manager, open **Test Events** and confirm the event arrives (use Meta's test event code in the payload while testing, then remove it).
4. Place a real call through a tracked landing page and confirm the event appears with good Event Match Quality.

## Best practices

- Run the browser pixel and this server-side event together, and keep event names consistent between them.
- Watch **Event Match Quality** in Events Manager; missing `fbc`, `fbp` or IP lowers it.
- Rotate access tokens and update the webhook when you do.
- CallGrid does not retry failed webhooks. If the token expires, events during that window are lost; check Events Manager for gaps after any token change.

## Troubleshooting

| Symptom | Check |
| --- | --- |
| No events in Meta | Webhook attached on the campaign General tab; the chosen event actually happened on the call |
| Events arrive but low match quality | `fbc` and `fbp` empty: Meta SDK not on the lander, tracking script missing, or pool miss |
| Meta rejects the request | Pixel ID or token wrong or expired; unhashed identifiers |
| Duplicate conversions | Several webhooks on the same event attached to the campaign, or both Call Billable and Call Converted sent with the same event name |

## Do it with AI

**Ask Griddy, Claude or ChatGPT.** Try: "Show me the Meta Pixel webhook response on my last converted call." Claude and ChatGPT need the CallGrid connector turned on (setup guides for [Claude](https://callgrid.com/knowledge-base/callgrid-mcp-connect-to-claude-desktop) and [ChatGPT](https://callgrid.com/knowledge-base/callgrid-mcp-connect-to-chatgpt)).

The connector is read only. It looks things up and reads your data. You make the changes in CallGrid.
