IntegrationsAdvertisingMeta Conversions API

Meta Conversions API

Datafly Signal delivers events to Meta (Facebook and Instagram) server-to-server via the Conversions API, with full user_data matching to maximise Event Match Quality. This is the current Meta integration; the older meta_capi blueprint remains available for accounts already configured against it.

If you are configuring Meta for the first time, use Meta Conversions API (this page). The legacy Meta CAPI blueprint is functionally similar but ships an older default mapping set.

Prerequisites

Before configuring Meta Conversions API in Signal, you need:

  • A Meta Business Manager account with admin access
  • A Meta Pixel (also called a Dataset) connected to your business
  • A Conversions API access token for that Pixel
  • (Optional) A test event code for validating the integration before going live

Get your Meta credentials

  1. Sign in to Meta Business Suite and open Events Manager (left sidebar, under Data Sources).
  2. Select your Pixel. The Pixel ID (also shown as Dataset ID) is a numeric value displayed at the top of the overview page.
  3. Open the Settings tab for the Pixel and scroll to Conversions API.
  4. Click Generate access token. Copy the token immediately — it is shown only once.
  5. (Optional) Open the Test events tab and copy the Test event code (e.g. TEST12345) so you can validate without affecting reporting.

For long-lived tokens used in production, generate via a System User in Business Settings → Users → System Users, assign the Pixel as an asset with Manage Pixel permission, and generate a token with the ads_management and business_management scopes.

See Meta’s Conversions API setup guide for full details.

Configure the integration in Signal

  1. In the Management UI, go to Integrations → Add Integration.
  2. Select Meta Conversions API from the catalogue.
  3. Give the integration a name (for your reference).
  4. Choose a preset that matches your business:
    • Retail — full e-commerce funnel (search, view, wishlist, cart, checkout, purchase, lead)
    • Travel — search, view, save, booking start, booking complete, lead
    • B2B / SaaS — registration, lead, contact, trial, subscribe, application, donate
    • Automotive — vehicle search, view, save, brochure, finance/trade-in, test drive, dealer contact, service appointment
  5. Fill in the required fields:
FieldRequiredDescription
pixel_idYesYour Meta Pixel ID (numeric).
access_tokenYesConversions API access token.
api_versionYesMeta Graph API version (default v25.0).
action_sourceYesWhere the conversion occurred (typically website).
test_event_codeNoTest event code for validation. Remove before production.
  1. Choose which pipeline(s) this integration should run on.
  2. Select consent categories (defaults to marketing).
  3. Click Save.

Event mapping

By default, Signal applies the blueprint mappings below. The exact set depends on the preset you chose.

Retail preset

Signal eventMeta event
pagePageView
Products SearchedSearch
Product ViewedViewContent
Product Added to WishlistAddToWishlist
Product AddedAddToCart
Checkout StartedInitiateCheckout
Payment Info EnteredAddPaymentInfo
Order CompletedPurchase
Lead SubmittedLead

Travel preset

Signal eventMeta event
pagePageView
Destination SearchedSearch
Listing ViewedViewContent
Listing SavedAddToWishlist
Booking StartedInitiateCheckout
Payment Info EnteredAddPaymentInfo
Booking CompletedPurchase
Lead SubmittedLead

B2B / SaaS preset

Signal eventMeta event
pagePageView
Signed UpCompleteRegistration
Lead SubmittedLead
Contact RequestedContact
Trial StartedStartTrial
Subscription StartedSubscribe
Application SubmittedSubmitApplication
Donation MadeDonate

Automotive preset

Signal eventMeta event
pagePageView
vehicle_searchedSearch
vehicle_viewed / vehicle_comparedViewContent
vehicle_savedAddToWishlist
brochure_downloadedDownload
finance_quote_requested / trade_in_valuedLead
test_drive_booked / service_appointment_bookedSchedule
dealer_contactedContact

To customise, edit the integration’s Field Mappings in the Management UI.

Identity

Signal sends the following identity signals to Meta, subject to consent and availability:

CapabilityFieldNotes
Hashed emailuser_data.emSHA-256 (lowercase, trimmed) of traits.email
Hashed phoneuser_data.phSHA-256 (digits only, country code) of traits.phone
Hashed first / last nameuser_data.fn / user_data.lnSHA-256 of traits.first_name / traits.last_name
Hashed city / region / postal / countryuser_data.ct / st / zp / countrySHA-256 of traits.address.*
External IDuser_data.external_iduser_id or anonymous identifier
Browser IDuser_data.fbpFirst-party _fbp cookie, self-generated if absent
Click IDuser_data.fbcDerived from the fbclid URL parameter
Client IPuser_data.client_ip_addressForwarded from the original request
User-Agentuser_data.client_user_agentForwarded from the original request

Hashing is performed by Signal before delivery — raw PII never leaves your infrastructure.

This integration is gated on the marketing canonical consent category. Events without marketing consent are not delivered.

To change: in the integration’s settings, click Consent and adjust.

Verify it’s working

  1. In Meta Events Manager, open your Pixel and go to Test events. Copy the test event code into the Signal integration’s test_event_code field.
  2. In the Management UI, go to Pipelines → your pipeline → Live Events.
  3. Trigger a test event on your site.
  4. The event appears in the Signal live feed; click to see the exact payload sent to Meta.
  5. The same event appears in Meta’s Test events tab within a few seconds.
  6. Once validated, clear the test_event_code so events count toward reporting.

Deduplication with the browser pixel

If you are running both Signal server-side delivery and the Meta Pixel client-side during a migration, deduplicate events to prevent double-counting. Pass the same event_id to both, and Meta will deduplicate matches received within 48 hours.

const eventId = crypto.randomUUID();
fbq('track', 'Purchase', { value: 129.99, currency: 'GBP' }, { eventID: eventId });
datafly.track("Order Completed", { event_id: eventId, total: 129.99, currency: "GBP" });

Once server-side delivery is healthy you can remove the browser pixel entirely.

Troubleshooting

Events aren’t appearing in Meta.

  1. Confirm the integration is enabled on the pipeline.
  2. Confirm marketing consent is granted (events without consent are silently dropped).
  3. Check Live Events — if events aren’t reaching Signal, the issue is upstream (Datafly.js install).
  4. If reaching Signal but not Meta, check the delivery status; an OAuthException usually means the access token has been revoked.

Low Event Match Quality. Add user identity signals via datafly.identify() — email and phone are the highest-impact fields.

Invalid parameter errors. Inspect the payload in Live Events. Verify event_name, event_time, and action_source are present.

See also