Send events to Meta and GTM
Configure event destinations and check duplicates.
You can send the same event to CJM and integrations already present in the browser. Meta Pixel must be loaded for Meta. GTM requires a dataLayer and container tags that process the events. Enabling a destination does not install those tools.
From the dashboard
- Open Events → Configured events and select the event to configure.
- Under Send to, enable Meta and/or Google Tag Manager.
- Explicitly select a Meta event name such as Lead or Purchase. The selector indicates Standard or Custom.
- Enter the GTM event name your container should handle. If omitted, the CJM name is used.
- Save, reload, and test with all four consent signals granted.
In current code, enabling Meta without selecting a name can leave isStandard unset even when the derived label says Standard. Explicitly select the standard event and verify sending.
From JavaScript
track and trackEcommerce accept destination options. Run this only after a confirmed purchase:
window.CJMPixel.trackEcommerce('purchase', {
transaction_id: 'ORD-2026-1001',
currency: 'EUR',
value: 89.9,
items: [{ item_id: 'SKU-001', item_name: 'Zaino', price: 89.9, quantity: 1 }]
}, {
destinations: {
meta: { eventName: 'Purchase', isStandard: true },
gtm: { eventName: 'purchase' }
}
});For Meta, isStandard: true uses fbq('track', ...); otherwise it uses trackCustom. Browser forwarding passes data without automatically converting items into Meta product fields. Server ecommerce mapping is separate. The exported ECOMMERCE_META_EVENT_MAP is a developer convenience, not an automatically applied destination.
For GTM, ecommerce first clears the previous ecommerce object, then pushes:
{
event: 'purchase',
event_id: 'PIXEL_GENERATED_ID',
ecommerce: { /* data supplied to trackEcommerce */ }
}Generic events place their data at the top level alongside event and event_id. Avoid those keys in custom data because they can override the name and identifier.
Consent and availability
Browser forwarding requires all four consent signals. This is stricter than ordinary CJM sending. If fbq or dataLayer is unavailable when sending, that destination is skipped; there is no automatic replay once it loads.
Identifiers and duplicates
The Pixel adds eventId, passes it to Meta as eventID, and exposes it in the dataLayer as event_id. CJM server rules can reuse it for server-side Meta delivery. Check that the Meta Pixel and event name match on both destinations; a shared ID cannot fix inconsistent configuration.
CJM does not generically suppress two manual calls or overlapping rules for one action. A dataLayer event_id alone does not configure GTM/GA4 deduplication. Check the flow before adding another Meta or GA4 tag to the same event.
Verify
Check the CJM name, dataLayer push/GTM preview, and the destination Meta event. If only CJM receives it, check consent, loaded libraries, Send to, and names. For delivery from CJM servers, see Server rules.