Meta CAPI. Implementation guide.
Three ways to ship Meta Conversions API on Shopify (native, GTM Server, managed tools), event deduplication that survives ops, and the event-match-quality target that actually matters.
Three paths, same destination.
Meta Conversions API is a server-to-server feed of conversion events from your store into Meta's ad system. On Shopify there are three deployment paths: Shopify's native integration (free, covers 80 percent of cases), Google Tag Manager Server (custom, unified with other channels, 40 to 80 dollars monthly hosting), and managed tools like Elevar or Littledata (200 to 500 dollars monthly, least effort). All three arrive at the same destination: server events landing in Meta Events Manager with a hashed-customer-data event-match-quality score, deduplicated against any remaining client-side pixel fires. Target an EMQ of 8.0 or higher; anything below 6.0 means the stack is technically wired but losing most of the attribution benefit.
Three paths by store size.
For stores under one million dollars in annual revenue, start with Shopify's native Meta integration. Since 2024 Shopify has shipped server-side CAPI events automatically when the Meta channel is connected; the setup is three clicks in the admin, and the quality is genuinely good for most DTC categories. It is free. It handles consent via Shopify's customer-privacy API. The tradeoff is flexibility: you do not control event parameters beyond what Shopify exposes, and the integration is per-channel, so if you also run Google, TikTok, and Pinterest ads you maintain four separate integrations.
For stores between one million and twenty million annual revenue, move to Google Tag Manager Server. This is the path most agencies and technical marketing teams default to. One server container, hosted on a subdomain of your store (typically sgtm.brand.com), forwards events to Meta CAPI, GA4, TikTok Events API, Pinterest CAPI, and any other destination you need. Hosting cost lands at 40 to 80 dollars per month on Google Cloud Run. Implementation effort is 2 to 4 developer days for the initial build, another 1 to 2 days per additional channel.
For stores above twenty million annual revenue, or for teams that do not have GTM expertise in-house, managed tools like Elevar and Littledata are worth the 200 to 500 dollar monthly subscription. They handle Shopify-specific edge cases (subscription renewals, draft orders, fraud-flagged orders), consent-mode integration, and support. The tradeoff is lock-in and cost; if the monthly spend exceeds what an in-house GTM maintainer would cost amortized, cut the subscription and run it yourselves.
Event-match-quality above 8.0.
Meta grades every CAPI event stream with an event-match-quality (EMQ) score from 0 to 10. It is Meta's measure of how confidently their ad system can match your event back to a Facebook or Instagram user. Higher EMQ translates to better attribution accuracy, which feeds Meta's lookalike and advantage-audience models, which improves real ROAS over 60 to 90 days. EMQ is the single most important output metric to watch in the first month of a CAPI deployment.
The field-by-field impact is well documented. Hashed email alone scores around 6.5. Adding hashed phone number climbs to 7.5. Adding first name and last name lifts it to 8.2. Adding city, state, zip, and country (all hashed with SHA-256 per Meta's customer-information parameters spec) lands at 9.0 or higher. Shopify passes all of these in the order object; a correctly configured server container hashes and forwards them. If your EMQ is stuck at 6.5, you are only sending email.
What hurts EMQ: unhashed data (Meta rejects with a warning), incorrect phone formatting (E.164 format required, not local format), and events fired too late. Meta's matching window is 72 hours; an event-id from a client-side pixel fired at checkout and a server CAPI event fired 4 days later at order-shipped will not deduplicate and will not lift EMQ. Fire the CAPI event at order-paid, not at order-shipped. Subscription renewals are a common source of this problem.
Shopify order number or bust.
Event deduplication is how Meta figures out that the client-side pixel fire and the server CAPI fire represent the same conversion and should be counted once. The mechanism is simple: both events carry an event_id field; Meta keeps the one with better match quality and discards the duplicate. The implementation is where most setups break. The dedup key must be identical across both sources and must be stable for the lifetime of the order.
Use Shopify's order number or order id. They are unique, stable, and available on both the client side (in the thank-you page Liquid) and the server side (in the order-paid webhook). Do not use the session id; sessions drop and reconnect. Do not use a GUID; GUIDs are per-event, not per-order. Do not use the customer email; emails can repeat across orders. The Shopify order number is the only field that survives every edge case we have run into across 50+ deployments.
After launch, validate dedup in Meta Events Manager. Open the events diagnostic view, filter to the last 7 days, check the "deduplicated" count on each event. Purchase events should show at least 80 percent dedup rate if both sources are live; anything below 60 percent means the event_id is not matching. Common fix: the client pixel is sending the order number with a "#" prefix ("#1001") and the server is sending the raw number (1001). Meta treats them as different strings; strip the prefix on both sides.
Where CAPI setups go wrong.
One, firing CAPI before consent is checked. The server receives the event, forwards to Meta, and ignores the consent banner state. This is a GDPR violation, a CCPA violation under the 2026 amendments, and depending on jurisdiction an actual fine risk. The fix is a consent-state check inside the server container that reads Google Consent Mode v2 signals before forwarding. Pair with our Consent Mode v2 for Shopify setup guide.
Two, sending unhashed PII. Meta rejects unhashed email, phone, and name fields and logs the rejection in Events Manager. The SHA-256 hashing must happen server-side before the event leaves your container. GTM Server has a built-in hashing function; custom Cloud Functions should use a tested SHA-256 library and normalize strings (lowercase email, E.164 phone, strip punctuation on names) before hashing. Meta's matching is case-sensitive on the pre-hash value.
Three, missing the value and currency fields. A purchase event without value and currency works, but Meta cannot optimize for ROAS-based bidding on a campaign without them. Shopify's order object provides these via the webhook; pass them through unchanged. Some stores pass value in cents instead of dollars; Meta expects dollars (or the equivalent in your currency) as a decimal number. Pass 99.99, not 9999.
Four, not firing AddToCart or InitiateCheckout events server-side. CAPI for purchase only gives Meta the bottom of funnel; the top-of-funnel signals (view-content, add-to-cart, initiate-checkout) matter for audience quality and retargeting. The minimum CAPI event set for a DTC store is PageView, ViewContent, AddToCart, InitiateCheckout, Purchase. Some stores additionally fire Lead (for email capture) and Subscribe (for newsletter signup), which improve modeled lookalikes.
Five, not running test events before launch. Meta provides a test-events tool in Events Manager. Fire a handful of test purchases, confirm they show up with high EMQ, confirm dedup works against simultaneous client pixel fires. Skipping this step means you find out about silent data loss 30 days into live traffic when ROAS in Ads Manager does not match the expected lift.
Two weeks, then compounding.
The CAPI lift pattern is consistent across our DTC client base. Days 1 through 7: EMQ climbs from the initial low to around 7.5 as Meta builds match confidence. Days 7 through 14: EMQ stabilizes at 8.5 or higher, and reported Meta ROAS in Ads Manager jumps 15 to 30 percent compared to the pre-migration baseline. Revenue has not changed; Meta can finally attribute conversions it was previously missing. Days 30 through 90: Meta's audience modeling improves on the higher-quality signal, which lifts real campaign efficiency by an additional 8 to 15 percent. The compounding effect pays for the implementation inside the first billing cycle for most stores.
Related posts: the full server-side tracking setup guide for the broader stack context. Consent Mode v2 for Shopify for the consent layer. Northbeam vs Triple Whale for the third-party attribution layer that sits on top of the platform-level CAPI.
Six answers.
What is Meta CAPI in plain English?
Meta Conversions API (CAPI) is a server-to-server connection between your store and Meta. Instead of the browser firing a Facebook pixel, your own server sends the purchase event directly to Meta's ads backend. That matters because browsers block pixels (ad blockers, iOS ITP, privacy extensions), while server-to-server traffic passes through untouched. CAPI is Meta's official replacement for the deprecation of third-party cookies and the workaround for iOS attribution limits. Any Shopify store running Meta ads in 2026 should have CAPI running; the question is how, not whether.
What is event-match-quality and what score should I target?
Event-match-quality (EMQ) is Meta's 0 to 10 score for how well your events match to real people on Facebook and Instagram. Higher EMQ means Meta's ad models can attribute more accurately, which translates to better audience targeting and lower cost per acquisition over time. A bare email-only CAPI setup scores around 6.5. Adding hashed phone number pushes it to 7.5. Adding first name, last name, city, state, zip, and country of residence pushes it to 9.0 or higher. The practical target is 8.0 minimum; 9.0+ is what mature DTC stores hit. Below 6.0 means your CAPI is technically working but not delivering most of the attribution benefit.
Should I use Shopify's native Meta integration or roll my own?
Start with Shopify's native integration. It covers the 80 percent case, is free, and includes server-side CAPI events by default in 2026. Roll your own only when you hit one of three limits. One, a headless frontend where Shopify Checkout does not cover the full funnel. Two, custom conversion values beyond what Shopify sends (subscription LTV, bundle discount math). Three, a multi-channel measurement stack where you want Meta CAPI, GA4, TikTok, and Pinterest running through the same server container for cost and maintainability reasons.
What is event deduplication and why does it break stores?
If a purchase fires from both the browser pixel and the server CAPI, Meta can double-count it. Event deduplication uses a shared event_id in both events; Meta's backend sees two events with the same id and keeps one. The common failure mode is using Shopify's order number for the client pixel but a different id (a GUID, a session id) for the server CAPI. Both events land, Meta cannot match them, the purchase counts twice, ROAS looks artificially high, and the internal team starts trusting the inflated number. Use Shopify's order number in both places, confirm dedup is working in Meta Events Manager within 48 hours.
Does Meta CAPI work during the 14-day attribution window for iOS?
Yes. Unlike client-side Meta pixel events on iOS Safari (which are capped at 7 days by Apple's Intelligent Tracking Prevention), server-side CAPI events retain Meta's full 28-day click / 1-day view attribution windows. This is one of the strongest reasons to run CAPI on iOS-heavy DTC audiences (fashion, beauty, lifestyle skew iOS at 65 to 80 percent). The practical effect is that a considered-purchase category (3 to 14 day decision window) captures conversions that a client-only setup silently loses.
Can Shopify stores use CAPI for ads other than Meta?
Conversions API is Meta's brand name; the pattern applies to every major ad platform under different names. Google has Enhanced Conversions for Web and Enhanced Conversions for Leads. TikTok has Events API. Pinterest has Conversions API. Snapchat has Conversions API. Each is a server-to-server feed of conversion events with hashed customer data. In a mature setup, the same Shopify order-paid event fires to all of them from one GTM Server container, with consent-state checks per destination so users who opted out of Meta but in to Google are handled correctly.
Attribution is infrastructure.
Our paid-acquisition engagements include a 2-week CAPI deployment across Meta, Google, TikTok, and Pinterest. Event-match-quality audit included. Scoped quote in 48 hours.