[{"data":1,"prerenderedAt":501},["ShallowReactive",2],{"guide-facebook-conversion-tracking-setup":3},{"id":4,"title":5,"answer":6,"authorId":7,"body":8,"category":417,"ctaVariant":418,"dataset":417,"description":419,"examples":420,"extension":421,"faqs":422,"heroImage":447,"intro":448,"meta":449,"navigation":450,"path":451,"publishedAt":452,"seo":453,"sources":454,"stats":475,"stem":499,"updatedAt":452,"__hash__":500},"blog\u002Fblog\u002Ffacebook-conversion-tracking-setup.md","Facebook Conversion Tracking Setup (Full Guide)","Facebook conversion tracking works best as a redundant pair: install the Meta Pixel in the browser and run the Conversions API server-side, sharing the same events. Meta's 2025 best-practice guidance is to use the Conversions API in addition to the Pixel and send matching events from both. To avoid double counting, send an identical event_id and event_name from each channel; Meta only deduplicates within a 48-hour window.","likit-sae-lee",{"type":9,"value":10,"toc":402},"minimark",[11,16,20,158,161,165,168,171,180,184,192,195,199,202,210,214,217,220,223,227,230,233,244,247,251,254,257,265,269,272,275,278,282,285,288,295,299,302,310,314,317,389,392,396,399],[12,13,15],"h2",{"id":14},"the-whole-chain-in-one-view","The whole chain in one view",[17,18,19],"p",{},"Facebook conversion tracking is not a single toggle. It is a chain of steps, and a weak link anywhere breaks the numbers you make decisions on. Before we go deep on each part, here is the full sequence so you can see where you are and what still needs doing.",[21,22,23,42],"table",{},[24,25,26],"thead",{},[27,28,29,33,36,39],"tr",{},[30,31,32],"th",{},"Step",[30,34,35],{},"What you do",[30,37,38],{},"Where",[30,40,41],{},"Why it matters",[43,44,45,60,74,88,102,116,130,144],"tbody",{},[27,46,47,51,54,57],{},[48,49,50],"td",{},"1",[48,52,53],{},"Install the Meta Pixel",[48,55,56],{},"Website \u002F tag manager",[48,58,59],{},"Captures browser-side actions",[27,61,62,65,68,71],{},[48,63,64],{},"2",[48,66,67],{},"Add the Conversions API",[48,69,70],{},"Your server \u002F CRM",[48,72,73],{},"Recovers events the browser loses",[27,75,76,79,82,85],{},[48,77,78],{},"3",[48,80,81],{},"Define standard events",[48,83,84],{},"Both channels",[48,86,87],{},"Lets Meta report and optimize",[27,89,90,93,96,99],{},[48,91,92],{},"4",[48,94,95],{},"Add value and currency",[48,97,98],{},"Purchase and value events",[48,100,101],{},"Enables revenue optimization",[27,103,104,107,110,113],{},[48,105,106],{},"5",[48,108,109],{},"Deduplicate",[48,111,112],{},"Shared event_id + event_name",[48,114,115],{},"Prevents double counting",[27,117,118,121,124,127],{},[48,119,120],{},"6",[48,122,123],{},"Verify",[48,125,126],{},"Events Manager Test Events",[48,128,129],{},"Confirms events arrive correctly",[27,131,132,135,138,141],{},[48,133,134],{},"7",[48,136,137],{},"Check EMQ",[48,139,140],{},"Events Manager",[48,142,143],{},"Improves matching and attribution",[27,145,146,149,152,155],{},[48,147,148],{},"8",[48,150,151],{},"Pick the optimization event",[48,153,154],{},"Ads Manager",[48,156,157],{},"Aims delivery at the tracked action",[17,159,160],{},"The rest of this guide walks each step in order. It is deliberately a hub: for the deeper mechanics of individual pieces, follow the linked standalone guides rather than expecting every detail duplicated here. The goal is that by the end, an ad set optimizing for Purchase is being fed clean, deduplicated, well-matched Purchase events, and you can prove it.",[12,162,164],{"id":163},"why-run-the-pixel-and-the-conversions-api-together","Why run the Pixel and the Conversions API together",[17,166,167],{},"The single most important concept in modern conversion tracking is redundancy. The Meta Pixel lives in the browser, and the browser is a hostile place for tracking. Ad blockers strip it out. Apple's iOS privacy features and browser tracking-prevention limit what it can send. Ordinary network failures drop the occasional request. None of this is a bug in your setup; it is the environment the Pixel operates in.",[17,169,170],{},"The Conversions API solves this from the other side. It is a server-side connection that sends marketing data directly from your server, website, app or CRM to Meta. Because it does not run in the user's browser, it is not exposed to ad blockers or browser-level privacy limits in the same way. Crucially, server events sent through the Conversions API are processed just like Pixel events: Meta treats them equivalently for measurement, reporting and optimization. That is what makes the redundant model work. You send the same conversions through two independent paths, and whichever path a given event survives, Meta receives it.",[17,172,173,174,179],{},"This is not a workaround people invented. It is Meta's own stated best practice: use the Conversions API in addition to the Meta Pixel, and share the same events using both tools. You will see inflated claims online about exactly how many extra conversions this recovers, with figures ranging widely. None of those percentages come from official Meta documentation, so treat them with suspicion and do not build a business case on a specific recovery number. The honest framing is simpler: two channels covering the same events capture more than one channel alone, which is why Meta recommends running both. For the trade-offs between the two, see ",[175,176,178],"a",{"href":177},"\u002Fblog\u002Ffacebook-pixel-vs-conversions-api","facebook-pixel-vs-conversions-api",".",[12,181,183],{"id":182},"step-1-install-the-meta-pixel","Step 1: Install the Meta Pixel",[17,185,186,187,191],{},"Everything starts with the Pixel, because it is the browser half of the pair and the reference point deduplication is built around. Installation means placing the base Pixel code on every page of your site, then firing specific event code when meaningful actions happen. If your Pixel is not firing at all, or firing inconsistently, no amount of server-side work downstream will save the data. The dedicated ",[175,188,190],{"href":189},"\u002Fblog\u002Fmeta-pixel-setup","meta-pixel-setup"," guide covers installation in full, from placing the base code through your tag manager to confirming each event fires exactly once.",[17,193,194],{},"At this stage your only goal is a base Pixel that loads on every page and a plan for which actions you will track as events. Do not skip ahead to the Conversions API until the Pixel is confirmed working in Events Manager, because the server side reuses the same event definitions. It also pays to decide early which events belong on which pages, so the same map guides both the browser and the server implementation. A short, documented list of the events you will fire and the parameters each one carries is the single most useful artifact you can bring into the steps that follow. Getting the browser layer right first gives you a known-good baseline to compare the server layer against later.",[12,196,198],{"id":197},"step-2-add-the-conversions-api","Step 2: Add the Conversions API",[17,200,201],{},"With the Pixel in place, add the server-side channel. A website Conversions API event is a structured payload your server sends to Meta. Its core fields are event_name, event_time in Unix seconds, action_source, and user_data containing hashed customer information, plus an event_id used for deduplication. For web events specifically, Meta requires action_source, event_source_url and client_user_agent, and it will reject events that carry only overly broad parameters, such as geographic data on its own. In other words, a server event has to describe a real interaction with enough specificity to be useful, not just a vague signal.",[17,203,204,205,209],{},"The user_data object is where matching happens, and the personal fields inside it must be hashed before they leave your server: email, phone and name are normalized and SHA-256 hashed, while identifiers such as the IP address and user agent travel to help Meta place the event. Getting that formatting right is what separates an event Meta can attribute from one it merely records. The implementation details, from choosing a direct integration versus a partner setup to hashing customer data correctly, live in the ",[175,206,208],{"href":207},"\u002Fblog\u002Ffacebook-conversions-api-setup","facebook-conversions-api-setup"," guide. What matters for the chain is this: every event you already fire from the Pixel should have a server-side counterpart sending the same event_name, and you must plan from the start to attach a shared event_id to each pair. That decision cannot be bolted on later without rework, because deduplication depends on it. Set up the server events to mirror the browser events deliberately, action for action.",[12,211,213],{"id":212},"step-3-choose-the-right-standard-events","Step 3: Choose the right standard events",[17,215,216],{},"Standard events are a fixed vocabulary, not a free-form label. Meta's official Pixel reference defines 17 of them: Purchase, Lead, AddToCart, ViewContent, InitiateCheckout, AddPaymentInfo, AddToWishlist, CompleteRegistration, Search, StartTrial, Subscribe, Schedule, Contact, Donate, FindLocation, CustomizeProduct and SubmitApplication. Using the correct standard event name for each action is what lets Meta report on it cleanly and optimize delivery toward it. If you invent an arbitrary custom event where a standard one exists, you lose that built-in support and make your own reporting harder.",[17,218,219],{},"Map your funnel to this vocabulary honestly. A product page is ViewContent, adding to cart is AddToCart, starting checkout is InitiateCheckout, a completed sale is Purchase, and a submitted enquiry form is Lead. Fire each one at the moment it genuinely happens, from both the Pixel and the Conversions API, using the identical event_name on both sides so they can be paired and deduplicated later.",[17,221,222],{},"Value-carrying events accept value and currency, and e-commerce events additionally accept content_ids, contents and content_type. According to the reference, value and currency apply to events including Purchase, AddToCart, AddPaymentInfo, AddToWishlist, InitiateCheckout, ViewContent, Search, CompleteRegistration, Lead, StartTrial and Subscribe, while content_ids apply to AddToCart, Purchase, InitiateCheckout, ViewContent, Search, AddPaymentInfo and AddToWishlist. Passing content parameters ties each conversion to specific products, which is what powers catalog and dynamic-product reporting.",[12,224,226],{"id":225},"step-4-make-value-and-currency-load-bearing","Step 4: Make value and currency load-bearing",[17,228,229],{},"If revenue matters to you, and it almost always does, value and currency are not optional extras. Meta requires both on the Purchase event, and on any event that uses value optimization. Without them, the system records that a conversion happened but has no idea what it was worth, which makes return-on-ad-spend bidding and value optimization impossible.",[17,231,232],{},"The exact browser syntax is simple:",[234,235,240],"pre",{"className":236,"code":238,"language":239},[237],"language-text","fbq('track', 'Purchase', {currency: \"USD\", value: 30.00});\n","text",[241,242,238],"code",{"__ignoreMap":243},"",[17,245,246],{},"Send the real transaction total, dynamically, for each purchase. A hardcoded placeholder value is one of the most damaging tracking mistakes because it looks fine in Events Manager while silently teaching Meta's optimization the wrong economics. On the server side, the same value and currency must travel in the Conversions API payload for the paired event, so that whichever channel survives, the revenue figure is present and consistent. Mismatched values between the two channels for the same conversion create confusion, so derive them from the same source of truth, your order record, on both sides.",[12,248,250],{"id":249},"step-5-deduplicate-with-a-shared-event_id-and-event_name","Step 5: Deduplicate with a shared event_id and event_name",[17,252,253],{},"This is the make-or-break step of a dual setup. Because you are now sending the same conversion through two channels, Meta needs a way to recognize the browser event and the server event as one. It uses two matching rules together: the Pixel's eventID must equal the Conversions API event_id, and the Pixel's event must match the Conversions API event_name. When both line up, Meta collapses the pair into a single conversion.",[17,255,256],{},"Two constraints shape how this behaves. First, deduplication only happens within a 48-hour window after Meta first receives an event with a given event_id, and when it sees a duplicate it generally keeps the one that arrived first. Second, there is an alternative key using FBP plus external_id with a matching event_name, but it reliably removes duplicates only when the browser event is sent first and the server event second; it will not remove the server event if the browser event never arrives within 48 hours. That fragility is exactly why the shared, explicit event_id is the recommended primary approach.",[17,258,259,260,264],{},"Get this wrong and your conversions double. A missing or mismatched event_id means Meta counts the browser event and the server event separately, inflating your results and deflating your apparent cost per result, which corrupts every downstream decision. The full mechanics, including how to generate and pass the ID, are in ",[175,261,263],{"href":262},"\u002Fblog\u002Fmeta-pixel-capi-deduplication","meta-pixel-capi-deduplication",". Generate that ID once, at the moment the action happens, and pass the identical string to both the Pixel call and the server payload; never let each channel mint its own. The one rule to carry away: the same event_id and the same event_name, on both channels, every time.",[12,266,268],{"id":267},"step-6-verify-in-events-manager-test-events","Step 6: Verify in Events Manager Test Events",[17,270,271],{},"Never assume the chain works; prove it. Events Manager includes a Test Events tool, reached through Data Sources and your Pixel, that shows events arriving in real time. For browser events, enter your site URL and interact with the site while watching the actions appear. For server events, generate a test ID and include it as test_event_code in the Conversions API payload, then trigger the same actions and confirm they show up.",[17,273,274],{},"For each key action, check four things: that it appears at all, that its source is labelled Browser, Server or both, that value, currency and event_id are present where they should be, and that a paired event from both channels shares the same event_id. Seeing the same Purchase from both Browser and Server with one matching ID is the visual confirmation that deduplication is wired correctly. One useful nuance: server events sent with a test_event_code still flow into Events Manager and are used for targeting and measurement, so they are not discarded, but you must still remove the test code before production so live traffic is not labelled as test data.",[17,276,277],{},"Because Meta's Business Help Center pages for these tools return only localized titles rather than full text to external readers, the exact tab names and button placement in the UI may differ slightly from any screenshot, and can change over time. Trust what you see live in your own Events Manager over any static walkthrough, and confirm current wording directly in the tool.",[12,279,281],{"id":280},"step-7-check-event-match-quality","Step 7: Check Event Match Quality",[17,283,284],{},"Once events are arriving, look at how well they match. Event Match Quality, or EMQ, is scored out of 10 and reflects how effectively the customer information you send can be matched to Meta accounts. The stakes are concrete: events that cannot be matched can only be used for basic measurement, not for attribution or for delivery optimization. A conversion Meta cannot attribute is a conversion your campaigns cannot learn from.",[17,286,287],{},"You improve EMQ by sending more, and higher-quality, hashed customer parameters. Meta specifically recommends email, phone, name and IP address to improve matching effectiveness, and richer identifiers such as external_id and the fbp and fbc cookies help as well. The server side is usually where you can add the most, because your CRM or checkout holds email and phone that the browser may not expose. Prioritize the fields you can supply reliably on every event rather than chasing every possible parameter once; a stable set of well-formatted identifiers that arrives with each conversion does more for matching than an occasional rich payload.",[17,289,290,291,179],{},"Be careful with the numeric folklore here. Official documentation confirms the out-of-10 scale but does not publish the specific target buckets you will read on third-party blogs, such as aim for six-plus or treat below five as poor, nor could official pages confirm claims that EMQ is calculated only on the last 48 hours of data or that external_id is the single highest-impact field. Treat all of those as unverified. The reliable, official guidance is directional: send more high-quality matchable fields and your matching improves. For a deeper look, see ",[175,292,294],{"href":293},"\u002Fblog\u002Fmeta-event-match-quality-emq","meta-event-match-quality-emq",[12,296,298],{"id":297},"step-8-select-the-conversion-event-as-your-optimization-goal","Step 8: Select the conversion event as your optimization goal",[17,300,301],{},"The final link closes the loop between tracking and delivery. In Ads Manager, choose your conversion location, for example Website, and then select the specific conversion event, such as Purchase or Lead, as the ad set performance goal. This is what tells Meta to optimize delivery toward that action, using your tracked events as the signal it learns from.",[17,303,304,305,309],{},"The non-negotiable rule is that the tracking setup and the optimization event must reference the same event. If your ad set optimizes for Purchase, your Purchase event must be firing cleanly and deduplicated. Optimizing for a conversion you do not track well, or tracking an event you never optimize toward, wastes the entire chain you just built. When the tracked event and the optimization goal are the same and the data feeding it is clean, Meta's delivery system can genuinely find the people most likely to take that action. For the broader picture of how tracking sits inside a campaign, the pillar guide ",[175,306,308],{"href":307},"\u002Fblog\u002Fhow-to-run-a-facebook-ad","how-to-run-a-facebook-ad"," puts these pieces in context.",[12,311,313],{"id":312},"common-tracking-failures-and-how-to-catch-them","Common tracking failures and how to catch them",[17,315,316],{},"Most conversion-tracking problems trace back to one of a few recurring faults, and each has a tell you can look for in Test Events or your reporting.",[21,318,319,332],{},[24,320,321],{},[27,322,323,326,329],{},[30,324,325],{},"Symptom",[30,327,328],{},"Likely cause",[30,330,331],{},"Where to look",[43,333,334,345,356,367,378],{},[27,335,336,339,342],{},[48,337,338],{},"Conversions look too high",[48,340,341],{},"Missing or mismatched event_id",[48,343,344],{},"Test Events: are pairs merging?",[27,346,347,350,353],{},[48,348,349],{},"No conversions at all",[48,351,352],{},"Pixel not firing",[48,354,355],{},"Base Pixel and event code on page",[27,357,358,361,364],{},[48,359,360],{},"Revenue missing or wrong",[48,362,363],{},"No value\u002Fcurrency, or a hardcoded value",[48,365,366],{},"Event parameters in Test Events",[27,368,369,372,375],{},[48,370,371],{},"Poor attribution despite events",[48,373,374],{},"Low EMQ, few matchable fields",[48,376,377],{},"EMQ score and user_data fields",[27,379,380,383,386],{},[48,381,382],{},"Server events rejected",[48,384,385],{},"Broad-only parameters, missing required fields",[48,387,388],{},"action_source, event_source_url, client_user_agent",[17,390,391],{},"The recurring theme is that the system will happily show you data that looks plausible while being quietly wrong, which is why verification is a step and not an afterthought. Double-counted conversions are especially insidious because they make campaigns look like they are winning. Build a habit of spot-checking Test Events after any change to your site, tag manager or server integration, and reconcile Meta's reported conversions against your own back-end order or lead count periodically. A small, steady gap usually reflects normal attribution differences; a sudden divergence right after a deploy is the signal to open Test Events and trace which channel changed.",[12,393,395],{"id":394},"why-this-matters-for-reaching-your-audience","Why this matters for reaching your audience",[17,397,398],{},"Accurate conversion tracking is not a compliance chore; it decides whether your budget finds the right people. Consider the scale of a single market. In Malaysia, Facebook's advertising reach stood at 23.0 million in late 2025, equal to 63.7% of the total population and 86.4% of adults aged 18 and over, while Instagram reached 16.1 million, or 44.6% of the population, according to DataReportal's Digital 2026 report. The same report puts Malaysia's internet penetration at 98.0%, with 35.4 million internet users and 30.7 million social media user identities.",[17,400,401],{},"Those numbers describe an enormous addressable audience, and Meta's optimization is what narrows it to the fraction most likely to convert. That narrowing is only as good as the conversion signal you feed it. Clean, deduplicated, well-matched events let the system learn who buys; broken tracking sends it chasing noise across tens of millions of people. Whether you are running in Malaysia or anywhere else, the value of getting this chain right scales directly with the size of the audience you are trying to reach, which is precisely why keeping research, creative generation and launch measurement joined up, on a platform like AdPlay.ai or your own stack, pays off. Set the tracking up once, verify it properly, and every campaign after that inherits a foundation you can trust.",{"title":243,"searchDepth":403,"depth":403,"links":404},2,[405,406,407,408,409,410,411,412,413,414,415,416],{"id":14,"depth":403,"text":15},{"id":163,"depth":403,"text":164},{"id":182,"depth":403,"text":183},{"id":197,"depth":403,"text":198},{"id":212,"depth":403,"text":213},{"id":225,"depth":403,"text":226},{"id":249,"depth":403,"text":250},{"id":267,"depth":403,"text":268},{"id":280,"depth":403,"text":281},{"id":297,"depth":403,"text":298},{"id":312,"depth":403,"text":313},{"id":394,"depth":403,"text":395},null,"neutral","Set up Facebook conversion tracking end to end: install the Pixel, add the Conversions API, define standard events, deduplicate, and verify in Events Manager.",[],"md",[423,426,429,432,435,438,441,444],{"question":424,"answer":425},"Do I need both the Meta Pixel and the Conversions API, or is one enough?","Meta's official recommendation is to run both and share the same events. The Pixel tracks in the browser, where ad blockers, iOS and browser privacy limits, and simple network failures can drop events before they reach Meta. The Conversions API sends the same events server-side, where those browser-level interruptions do not apply, so the two channels together capture more of the same conversions than either alone. Server events sent through the Conversions API are processed just like Pixel events for measurement, reporting and optimization. One channel is workable if you have no server access, but a deduplicated dual setup is the current best practice and the more reliable foundation for optimization.",{"question":427,"answer":428},"What is deduplication and why does it matter so much?","When you run the Pixel and Conversions API together, the same purchase can arrive twice, once from the browser and once from your server. Deduplication is how Meta recognizes those as one event instead of counting two. It works when the Pixel eventID matches the Conversions API event_id and both channels send the same event_name. Meta only deduplicates within a 48-hour window after it first receives an event with that event_id, and it generally keeps whichever arrived first. If the IDs do not match or one is missing, your conversions inflate and your cost per result looks artificially low, which quietly corrupts every optimization decision built on top of it.",{"question":430,"answer":431},"Which standard event should I use for my conversion?","Use the standard event that names what actually happened, drawn from Meta's fixed vocabulary of 17. A completed sale is Purchase, a form submission is Lead, a cart add is AddToCart, a product page view is ViewContent, and a checkout start is InitiateCheckout. Others include CompleteRegistration, AddPaymentInfo, AddToWishlist, Search, StartTrial, Subscribe, Schedule and Contact. Standard events matter because Meta can only optimize delivery and report cleanly on events it recognizes. Arbitrary custom events do not receive the same built-in reporting and optimization support, so map your key actions to standard events wherever one fits, and reserve custom events for genuinely bespoke actions.",{"question":433,"answer":434},"Why are currency and value required on Purchase?","Currency and value are the parameters that turn a conversion count into revenue data. Meta requires currency and value on the Purchase event, and on any event that uses value optimization, because without them the system knows a sale happened but not how much it was worth. Value optimization and return-on-ad-spend bidding both depend on those two fields being present and accurate. The browser syntax is straightforward: fbq('track', 'Purchase', {currency: \"USD\", value: 30.00}). For e-commerce you can also pass content_ids, contents and content_type so Meta ties the conversion to specific products. Send the real transaction value, not a static placeholder, or your revenue reporting and value-based bidding will be wrong.",{"question":436,"answer":437},"How do I test that my events are actually working?","Use the Test Events tool in Events Manager, under Data Sources and your Pixel. For browser events, enter your site URL and browse the site while watching events appear live. For server events, generate a test ID and include it as test_event_code in the Conversions API payload, then confirm each action shows up with the right event_name, value, currency and event_id, and whether the source is Browser, Server or both. Seeing the same event from both sources with a matching event_id confirms deduplication is wired correctly. Remove test_event_code before going to production. Note that server events sent with a test code still flow into Events Manager and are used for measurement, so they are not thrown away.",{"question":439,"answer":440},"What is Event Match Quality and what score should I aim for?","Event Match Quality, or EMQ, is scored out of 10 and reflects how effectively the customer information you send can be matched to Meta accounts. Better matching means better attribution and optimization; events that cannot be matched can only be used for basic measurement, not for attribution or delivery optimization. You raise EMQ by sending more high-quality hashed customer parameters such as email, phone, name and IP address. Meta's official documentation confirms the out-of-10 scale but does not publish the specific numeric thresholds (such as aim for 6-plus or 7.5 to 9 for Purchase) that circulate on third-party blogs, so treat those buckets as unofficial and focus on steadily adding more matchable fields.",{"question":442,"answer":443},"Will running two channels double-count my conversions?","Only if deduplication is misconfigured. When the Pixel and Conversions API send the same event with a matching event_id and event_name, Meta collapses the pair into one conversion. Double counting happens when the event_id is missing, differs between channels, or arrives outside the 48-hour window Meta uses for deduplication. There is also an alternative key based on FBP plus external_id with a matching event_name, but it reliably removes duplicates only when the browser event arrives first and the server event second, and it will not remove the server event if the browser event never arrives within 48 hours. The safe approach is a shared, identical event_id on every paired event.",{"question":445,"answer":446},"How does conversion tracking connect to my ad set optimization?","Tracking is the input; optimization is the output. Once events flow in cleanly, go to Ads Manager, choose your conversion location such as Website, and select the specific conversion event, for example Purchase or Lead, as the ad set performance goal. That tells Meta to optimize delivery toward the action you actually care about, using the tracked events as the signal. The critical rule is that the optimization event and the tracked event must be the same one. If you optimize for Purchase but only reliably fire ViewContent, delivery chases the wrong signal. Clean tracking with a matching optimization goal is what lets Meta's delivery system find the people most likely to convert.","\u002Fimages\u002Fblog\u002Ffacebook-conversion-tracking-setup-hero.webp","You have a Pixel firing, a few conversions showing up, and a nagging sense the numbers are not complete. That gap is normal: browser-only tracking quietly loses events, and closing it means running the Pixel and the Conversions API together, correctly deduplicated. This guide walks the full chain in order so your reported conversions match reality and your ad sets optimize toward the right event.",{},true,"\u002Fblog\u002Ffacebook-conversion-tracking-setup","2027-07-16",{"title":5,"description":419},[455,459,462,465,468,471],{"label":456,"url":457,"year":458},"Meta for Developers - Conversions API Best Practices","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmarketing-api\u002Fconversions-api\u002Fbest-practices\u002F","2025",{"label":460,"url":461,"year":458},"Meta for Developers - Handling Duplicate Pixel and Server Events","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocumentation\u002Fads-commerce\u002Fconversions-api\u002Fdeduplicate-pixel-and-server-events",{"label":463,"url":464,"year":458},"Meta for Developers - Meta Pixel Standard Events Reference","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmeta-pixel\u002Freference\u002F",{"label":466,"url":467,"year":458},"Meta for Developers - Conversion Tracking (Meta Pixel implementation)","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmeta-pixel\u002Fimplementation\u002Fconversion-tracking\u002F",{"label":469,"url":470,"year":458},"Meta for Developers - Using the Conversions API","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmarketing-api\u002Fconversions-api\u002Fusing-the-api\u002F",{"label":472,"url":473,"year":474},"DataReportal - Digital 2026 Malaysia","https:\u002F\u002Fdatareportal.com\u002Freports\u002Fdigital-2026-malaysia","2026",[476,480,483,486,489,493,496],{"label":477,"value":478,"source":479},"Standard events in the official Pixel reference","17","Meta for Developers, 2025",{"label":481,"value":482,"source":479},"Deduplication window after the first event with a given event_id","48 hours",{"label":484,"value":485,"source":479},"Event Match Quality scale","out of 10",{"label":487,"value":488,"source":479},"Required parameters on a Purchase event","currency + value",{"label":490,"value":491,"source":492},"Facebook ad reach in Malaysia, late 2025","23.0 million","DataReportal, 2026",{"label":494,"value":495,"source":492},"Instagram ad reach in Malaysia, late 2025","16.1 million",{"label":497,"value":498,"source":492},"Malaysia internet penetration","98.0%","blog\u002Ffacebook-conversion-tracking-setup","WWo5rKN73CajaMo2yEjPpHDM2hB-8lxwfA9ZnfwlWbY",1786093700823]