Skip to content

Server-side events · Setup reference

Conversions API Tag for Google Tag Manager (server-side), by Meta checker

Meta's open-source server GTM tag template reads events claimed by the GA4 client in your tagging server, renames GA4 events to Meta standard events, and POSTs them to the Conversions API. It hashes plain customer data for you and reads fbp/fbc from the _fbp/_fbc cookies or the fbclid on page_location. Dedup with the browser pixel only works if you pass an event_id parameter on the GA4 event that matches the pixel's eventID.

Read from the official documentation on 9 November 2026. Sources are listed at the end.

Check your own setup

Good fit. Copy the JSON body the tag sends (e.g. from server-container Preview) into capi-event-checker. It checks fbc/fbp format, that event_time is within 7 days, action_source, that em/ph etc. are hashed, that event_id is present for dedup, and value/currency on Purchase. It does not inspect your GTM containers, the GA4 client, or whether the web pixel uses the same eventID.

Open the Meta CAPI Event Checker

Endpoint and authentication

POST https://graph.facebook.com/{API_VERSION}/{PIXEL_ID}/events

Tag fields Pixel ID and API Access Token (a Conversions API access token generated in Events Manager); the template appends it as the access_token query parameter.

Standard event names

Spelled exactly as Server-side GTM + Meta expects them. A near miss is treated as a different event.

EventUse it for
PageViewfrom GA4 page_view (also gtm.dom)
ViewContentfrom GA4 view_item
Searchfrom GA4 search; search_term -> custom_data.search_string
AddToCartfrom GA4 add_to_cart
AddToWishlistfrom GA4 add_to_wishlist
InitiateCheckoutfrom GA4 begin_checkout
AddPaymentInfofrom GA4 add_payment_info
Purchasefrom GA4 purchase; value, currency and transaction_id (-> custom_data.order_id) are read from the event
Leadfrom GA4 generate_lead
CompleteRegistrationfrom GA4 sign_up

Required and recommended fields

FieldWhat it needs
Pixel IDtag field (required)
API Access Tokentag field (required)
Action Sourcetag field or an action_source event parameter; Meta requires action_source on every server event
event_idcopied from the GA4 event's event_id parameter. Nothing generates it for you, so add it on the web GA4 tag and to the pixel's eventID.
page_location / user_agent / ip_overridemapped to event_source_url, client_user_agent and client_ip_address. Meta requires event_source_url and client_user_agent for website events.

Match keys and hashing

KeyNormalise and hash
user_data.email_address -> emTemplate trims, lowercases and SHA-256 hashes unless the value is already a 64-character hex hash
user_data.phone_number -> phThe template removes only the first "+", "-", space, "(" and ")" it finds (template.tpl line 263 uses a plain string replace), then SHA-256 hashes. "+1 (555) 444-1234" becomes "1555 4441234" and won't match. Send digits only, with country code (15554441234), or a pre-hashed x-fb-ud-ph
user_data.address.first_name/last_name/city/region/postal_code/country -> fn/ln/ct/st/zp/countryTemplate SHA-256 hashes (trim + lowercase). It does not apply Meta's full normalisation, e.g. state codes or 5-digit US zips.
x-fb-ud-* parameters (em, ph, fn, ln, ge, db, external_id...)Used as-is: x-fb-ud-ge, db and external_id are passed through unhashed, so hash them yourself

Click ids

Click idWhere it comes from
fbcFrom x-fb-ck-fbc or the _fbc cookie. If page_location carries ?fbclid=, the template builds fb.<subdomainIndex>.<timestampMillis>.<fbclid>.
fbpFrom x-fb-ck-fbp or the _fbp cookie
Extend Meta Pixel cookies (fbp/fbc)Optional checkbox: after a 2xx response the tag re-sets _fbc/_fbp as first-party cookies with a default max-age of 90 days.

Deduplication

Time limits and batch sizes

How to test before you trust it

Why events arrive but don't attribute

Sources

Platforms change these rules without notice. If a source says something different from this page, the source wins.

Other platforms

All platforms