Skip to content
Browse documentation

Meta Conversions API

Send approved conversions server-side to a Meta dataset, with fbc built from the click's fbclid, hashed e-mail and phone, a test event code and full delivery logging.

Last updated 4 min read

On this page

A Meta Conversions API destination reports every matching conversion to your Meta dataset (pixel) from the server, so Meta's bidding learns from real results even when browsers block the pixel. Destinations are on Integrations → Conversion APIs (/app/integrations?tab=conversion-apis) and need the Admin role.

Before you start#

  • Dataset (pixel) ID — Events Manager → Data sources → your dataset → Settings.
  • Access token — Events Manager → Settings → Conversions API → Generate access token.
  • Meta clicks should carry fbclid. Meta appends it to your ad's website URL; when that URL is a TrackCrown tracking link, the tracker stores it (from the link itself, or from the landing page in url=).

Add a destination#

  1. Open Integrations → Conversion APIs.
  2. On the Meta Conversions API tile click Add.
  3. Fill in the form:
FieldNotes
NameOptional; defaults to Meta Conversions API.
Dataset (pixel) ID5–20 digits.
Access tokenStored encrypted; only a hint is shown again. When editing, leave it empty (Unchanged) to keep it.
SendApproved conversions, or Approved and pending.
ValueRevenue (default), Sale amount, Payout or No value.
OfferAll offers, or one offer.
Event codeEmpty = every non-private event; or one event code, e.g. sale.
Event namesOptional, one per line: our event code = Meta event name.
Test event codeOptional. While set, events only appear under Test events in Events Manager.
StatusActive or Paused.
  1. Save.

Event names#

An event code without a line in Event names uses these defaults; any other code is sent as the code itself:

Event codeMeta event
default, lead, installLead
sale, purchase, order, depositPurchase
signup, registrationCompleteRegistration
Text
default = Lead
sale = Purchase
trial = StartTrial

Test it#

  1. Enter a Test event code from Events Manager → Test events and save.
  2. In the destination's menu choose Send test event. TrackCrown posts one synthetic event (the default event name, value 1 USD) with your test code and shows Meta's answer, e.g. Meta accepted the test event (test-…). Without a test event code the test is refused, so it never counts as a real conversion.
  3. When real conversions look right under Test events, clear the test event code to go live.

What is sent#

Each conversion becomes one POST to https://graph.facebook.com/v21.0/<dataset ID>/events:

JSON
{
  "data": [{
    "event_name": "Purchase",
    "event_time": 1791624662,
    "event_id": "8a6a2d0e-3c55-4c7e-9a43-0c1c2d8f0b11",
    "action_source": "website",
    "event_source_url": "https://shop.example.com/summer?cid=0192a6c3f1e04b7e9c2d8a1f3b5c7d9e",
    "user_data": {
      "client_ip_address": "198.51.100.20",
      "client_user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) …",
      "fbc": "fb.1.1791624530123.IwAR2xYz…",
      "em": ["<sha256>"],
      "ph": ["<sha256>"],
      "external_id": ["<sha256 of the click ID>"]
    },
    "custom_data": { "value": 49.9, "currency": "USD", "order_id": "ORDER-1001" }
  }],
  "test_event_code": "TEST12345"
}
FieldSource
event_idThe conversion ID. Meta de-duplicates against your browser pixel when it sends the same event ID.
event_timeConversion time (Unix seconds).
event_source_urlThe landing page the click was redirected to.
client_ip_address, client_user_agentThe attributed click (IP falls back to the conversion's IP).
fbcfb.1.<click time in ms>.<fbclid> — from the click, or the postback's fbclid=.
emSHA-256 of the lower-cased e-mail from the postback's email= or em= (64-character hex hashes are passed through).
phSHA-256 of the phone digits from phone= or ph= (at least 6 digits; already-hashed values passed through).
external_idSHA-256 of the TrackCrown click ID.
value, currencyPer Value, in the conversion's currency. Omitted for No value.
order_idThe advertiser's order ID (txid / adv_txid).

The access token is added to the request only; it is never stored in the delivery log.

Delivery, retries and the log#

  • Conversions are queued like postbacks and sent by the worker within seconds of approval (or of creation, with Approved and pending).
  • 429, 5xx and network errors are retried after 1 min, 5 min, 30 min, 2 h and 6 h. Other 4xx answers (wrong token, dataset or payload) fail immediately.
  • Every delivery — the token-free payload, Meta's response, attempts — is in the postback log.
  • Each destination card shows Sent 7 d, Failed 7 d and the last result.

Manage a destination#

Destination menu: Edit, Send test event, Pause / Resume, Delete.

Conversion-API destinations are managed only here; they are not part of the REST API's /postbacks endpoints.

Troubleshooting#

ProblemFix
HTTP 400/401 in the logThe token is invalid or lacks access to the dataset — generate a new one.
Events have no fbcThe click carried no fbclid. Use the tracking link as the ad's website URL, or send fbclid= with the postback.
Low match qualitySend email= and phone= with conversions.
Duplicate events in MetaSend the conversion ID as the browser pixel's event ID, or use only one of the two.
Nothing is sentCheck Status, Send, the Offer / Event code filter, and that the event is not private.

See also: TikTok Events API · Ad costs & ROAS · Server-to-server postback reference.

Something unclear or missing in this article?Tell us