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
- Sign in to Meta Business Suite and open Events Manager (left sidebar, under Data Sources).
- Select your Pixel. The Pixel ID (also shown as Dataset ID) is a numeric value displayed at the top of the overview page.
- Open the Settings tab for the Pixel and scroll to Conversions API.
- Click Generate access token. Copy the token immediately — it is shown only once.
- (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
- In the Management UI, go to Integrations → Add Integration.
- Select Meta Conversions API from the catalogue.
- Give the integration a name (for your reference).
- 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
- Fill in the required fields:
| Field | Required | Description |
|---|---|---|
pixel_id | Yes | Your Meta Pixel ID (numeric). |
access_token | Yes | Conversions API access token. |
api_version | Yes | Meta Graph API version (default v25.0). |
action_source | Yes | Where the conversion occurred (typically website). |
test_event_code | No | Test event code for validation. Remove before production. |
- Choose which pipeline(s) this integration should run on.
- Select consent categories (defaults to marketing).
- Click Save.
Event mapping
By default, Signal applies the blueprint mappings below. The exact set depends on the preset you chose.
Retail preset
| Signal event | Meta event |
|---|---|
page | PageView |
Products Searched | Search |
Product Viewed | ViewContent |
Product Added to Wishlist | AddToWishlist |
Product Added | AddToCart |
Checkout Started | InitiateCheckout |
Payment Info Entered | AddPaymentInfo |
Order Completed | Purchase |
Lead Submitted | Lead |
Travel preset
| Signal event | Meta event |
|---|---|
page | PageView |
Destination Searched | Search |
Listing Viewed | ViewContent |
Listing Saved | AddToWishlist |
Booking Started | InitiateCheckout |
Payment Info Entered | AddPaymentInfo |
Booking Completed | Purchase |
Lead Submitted | Lead |
B2B / SaaS preset
| Signal event | Meta event |
|---|---|
page | PageView |
Signed Up | CompleteRegistration |
Lead Submitted | Lead |
Contact Requested | Contact |
Trial Started | StartTrial |
Subscription Started | Subscribe |
Application Submitted | SubmitApplication |
Donation Made | Donate |
Automotive preset
| Signal event | Meta event |
|---|---|
page | PageView |
vehicle_searched | Search |
vehicle_viewed / vehicle_compared | ViewContent |
vehicle_saved | AddToWishlist |
brochure_downloaded | Download |
finance_quote_requested / trade_in_valued | Lead |
test_drive_booked / service_appointment_booked | Schedule |
dealer_contacted | Contact |
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:
| Capability | Field | Notes |
|---|---|---|
| Hashed email | user_data.em | SHA-256 (lowercase, trimmed) of traits.email |
| Hashed phone | user_data.ph | SHA-256 (digits only, country code) of traits.phone |
| Hashed first / last name | user_data.fn / user_data.ln | SHA-256 of traits.first_name / traits.last_name |
| Hashed city / region / postal / country | user_data.ct / st / zp / country | SHA-256 of traits.address.* |
| External ID | user_data.external_id | user_id or anonymous identifier |
| Browser ID | user_data.fbp | First-party _fbp cookie, self-generated if absent |
| Click ID | user_data.fbc | Derived from the fbclid URL parameter |
| Client IP | user_data.client_ip_address | Forwarded from the original request |
| User-Agent | user_data.client_user_agent | Forwarded from the original request |
Hashing is performed by Signal before delivery — raw PII never leaves your infrastructure.
Consent
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
- In Meta Events Manager, open your Pixel and go to Test events. Copy the test event code into the Signal integration’s
test_event_codefield. - In the Management UI, go to Pipelines → your pipeline → Live Events.
- Trigger a test event on your site.
- The event appears in the Signal live feed; click to see the exact payload sent to Meta.
- The same event appears in Meta’s Test events tab within a few seconds.
- Once validated, clear the
test_event_codeso 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.
- Confirm the integration is enabled on the pipeline.
- Confirm marketing consent is granted (events without consent are silently dropped).
- Check Live Events — if events aren’t reaching Signal, the issue is upstream (Datafly.js install).
- If reaching Signal but not Meta, check the delivery status; an
OAuthExceptionusually 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.