How it works
What gets tracked
| Checkout Champ event | Datalyr event | Has revenue |
|---|---|---|
| Order paid | purchase | Yes |
| Upsell purchase | purchase | Yes |
| Refund | refund | Yes (-) |
| Chargeback | chargeback | Yes (-) |
| Subscription rebill | recurring | Yes |
| Subscription cancellation | cancellation | No |
card_last4 = 0000) route to a sandbox datasource and never pollute production reporting. They also skip CAPI forwarding so no test events fire to Meta / Google / TikTok.
Setup
1. Connect Checkout Champ in Datalyr
Go to Sources → Add Checkout Champ. Copy the dl.js Global Head Script shown in the modal. You’ll also see five postback URLs — keep the modal open while you configure CC.2. Paste the Global Head Script into CC
CC dashboard → Account Settings → Global Scripts. Paste the Datalyr script. It runs on every funnel page and:- Restores the visitor’s ID + Meta click signals from the
_dl_*URL params the storefront stamped. - Captures email on form blur (Klaviyo embeds, lead forms, checkout email field) so the postback can be attributed even if the visitor_id bridge missed.
3. (If using Shopify) Update your storefront dl.js init
AddcheckoutChampDomains to the existing dl.js init on your Shopify storefront:
<a href> pointing at one of those domains gets ?_dl_vid=…&_dl_fbc=…&_dl_fbp=…&_dl_fbclid=…&_dl_fbclid_at=…&_dl_gclid=… appended automatically. Force-flushes events on click so identify() lands before the browser navigates away. autoIdentify defaults on when this is set.
4. Create five Export Profiles in Checkout Champ
CC dashboard → CRM → Affiliate Setup → Affiliate Pixels (or Export Profiles, depending on your CC plan). One profile per event type, all pointing at the same workspace URL with a differentevent_type query parameter.
Copy each URL from the Datalyr modal:
- Purchase —
event_type=purchase - Refund —
event_type=refund - Chargeback —
event_type=chargeback - Recurring (subscription rebill) —
event_type=recurring - Cancellation —
event_type=cancellation
[orderId], [emailAddress], [firstName], etc.). The advanced-matching fields (first_name, last_name, phone, city, zip, country, ip, user_agent) are the biggest free EMQ lift for Meta CAPI — include them all from day one.
5. Place a test order
Use CC’s test card flow (card number ending0000). Walk the funnel end-to-end. Within 5 minutes you should see:
- CC postback in sandbox — confirms the worker received and parsed the postback. View in Datalyr’s events sandbox.
- No Shopify webhook for the same order — confirms the Shopify
source_namededup is working.
Meta Pixel deduplication
When you connect a Meta Pixel to Datalyr, the Global Head Script automatically fires the browser Purchase event on the CC thank-you page with the sameevent_id as the server-side CAPI postback, so Meta deduplicates the pair and counts each purchase once. You don’t need to add your own Purchase pixel to CC — and if you already have one, remove it to avoid duplicate Purchase events in Events Manager (see Troubleshooting).
Per-upsell browser dedup is not yet covered: the thank-you-page Purchase pixel dedupes the primary order. Upsell purchases still forward to Meta server-side via CAPI; only the browser co-fire is primary-order-only for now.
Known limitations (v1)
- GDPR consent on the CC side — the merchant’s responsibility. Datalyr doesn’t manage CC’s consent banner.
- Chargebacks more than 90 days after the original purchase — fall outside the materialized view window. They still land in raw events and forward to Meta in real time, but won’t backfill the per-hour chargeback metric against the original order’s hour.
order.source_namevalue from CC’s Shopify push-back — verified per merchant during the first test order. If your CC plugin uses a non-standard source name, Datalyr support will add it to the dedup allow-list.
Troubleshooting
The postback never arrives. Confirm the Export Profile URL is exactly what the Datalyr modal shows. Common typos: missing?event_type=… query string, public_id swapped for workspace UUID.
Postback arrives but identity is “cold” (no fbclid/UTMs). Either the visitor_id bridge didn’t carry (likely the storefront’s checkoutChampDomains config doesn’t include the CC funnel domain) OR identify() never fired on the storefront. Check the Sources page for a verifier run, or contact support with the test order ID.
The same order shows up in BOTH Datalyr’s CC source AND Shopify source. The Shopify dedup didn’t trigger. Send Datalyr support the Shopify order’s source_name value and the order’s note_attributes array so we can extend the dedup allow-list.
Duplicate Purchase events in Meta Events Manager. You have a second Meta Pixel firing Purchase on your CC pages (a pixel you added directly in CC, or via GTM) in addition to Datalyr’s. Datalyr’s Global Head Script already fires the browser Purchase with the same event_id as the CAPI postback, so Meta dedupes those two — but a third, separately-configured pixel won’t share that event_id. Remove the extra Purchase pixel from CC and let Datalyr handle it. If you intentionally run your own pixel and need it included in dedup, contact support.
Multi-currency revenue numbers look wrong. Datalyr stores raw amount + currency and normalizes to USD via a daily FX rate. If you see this within the first 24 hours of the integration going live, the FX feed may not have populated yet — refresh tomorrow.
Footnotes
- Conditional on visit-to-purchase within 7 days (the cookie window the visitor_id bridge uses) OR pre-purchase email capture (lead form, Klaviyo, logged-in account). iOS Safari ITP may degrade visitor_id-bridge effectiveness for repeat visitors past 7 days — email-stitch still applies. ↩