How to Track Purchases on Facebook Ads: A Practical Guide for Lebanon & UAE Advertisers

How to Track Purchases on Facebook Ads

Quick answer: Install the Meta Pixel and Conversions API on your website, and link them with a shared event ID to avoid double-counting. If any orders happen off-website — Cash on Delivery, WhatsApp, Instagram DMs, or a sales team closing leads — upload those separately through Meta’s Offline Conversions API, since they never pass through a checkout page.

To track purchases on Facebook ads, install the Meta Pixel and the Conversions API on your website, link them with a shared event ID so Meta doesn’t count the same sale twice, and confirm both are firing correctly in Events Manager. If your business takes orders through Cash on Delivery, WhatsApp, Instagram DMs, or a lead form instead of a full website checkout, you also need to upload those completed sales separately through Meta’s Offline Conversions API — otherwise a large share of your real revenue never reaches Meta at all, which is the single biggest tracking gap I see on accounts in Lebanon and the UAE.

The rest of this guide breaks down exactly how to set up each piece, depending on which of these funnels actually describes your business.

Why “Purchase” Means Something Different Depending on Your Funnel

Before touching any code, decide which of these three funnel types actually describes your business:

  • Online checkout businesses (Shopify, WooCommerce, or a custom site where the customer pays and completes checkout on your website)
  • Order-on-request businesses (customer messages you on WhatsApp or Instagram, agrees on price, and pays cash or bank transfer on delivery)
  • Lead-generation businesses (customer fills a form or calls, and the “sale” happens later, offline, through a sales team)

Each one needs a different combination of tools. I’ll walk through all three, since covering only the first one is exactly where most guides on this topic fall short.

The Foundation: Pixel and Conversions API, Working Together

For any business with a website, two systems need to report the same Purchase event: the Meta Pixel (which fires from the customer’s browser) and the Conversions API, or CAPI (which sends the same event from your server). Meta’s own Conversions API documentation explains why both matter — browser-based tracking alone now misses a meaningful share of events due to iOS privacy settings, ad blockers, and in-app browsers on Instagram and Facebook itself.

Running both together is often called hybrid tracking. Whichever path gets through, Meta receives the purchase. On the accounts I manage, adding CAPI on top of an existing Pixel-only setup typically recovers a noticeable share of purchases that the Pixel alone was silently missing.

Step 1: Get the Business Manager Setup Right First

Before any tracking code goes live, confirm you have:

  • Admin access to your Meta Business Manager
  • A verified domain under Business Settings > Brand Safety > Domains
  • Admin or developer access to your website’s backend

Domain verification specifically gets skipped constantly, and without it, you lose the ability to prioritize which conversion events matter most under iOS 14.5+ traffic restrictions.

Step 2: Install the Pixel

  • Shopify: Go to Settings > Apps and Sales Channels > Facebook & Instagram, and connect your pixel directly. No code required.
  • WooCommerce: Install the official Facebook for WooCommerce plugin, which places the Pixel and fires standard events automatically.
  • Custom-built sites: Add the Pixel through Google Tag Manager rather than pasting code directly into your theme. It’s easier to update later without a developer.

Whatever method you use, the Purchase event needs to carry a real order value and currency — not a blank or hardcoded number. A Purchase event firing with no value attached cannot report ROAS, no matter how correctly it’s installed otherwise.

Step 3: Turn On the Conversions API

Your setup path depends on your platform. Shopify and the WooCommerce plugin both include native CAPI support you can switch on directly in their settings. For a custom-built site, a server-side Google Tag Manager container, or a middleware tool such as Stape, forwards events to Meta without needing custom backend development.

Step 4: Link Pixel and CAPI With a Shared Event ID

This is the step I find missing on the majority of accounts I take over. If Pixel and CAPI both report the same purchase without a shared identifier, Meta counts it twice, and your reported conversions look better than your actual sales. The fix is to generate one ID per order — most platforms already use the order ID for this — and send that identical ID on both the browser event and the server event.

Shopify and the official WooCommerce plugin handle this automatically. On a custom build, check the “Event Deduplication” column inside Events Manager before trusting any purchase number from that account.

Step 5: Verify Before You Trust the Numbers

Two checks, every time:

  • Meta Pixel Helper (Chrome extension) confirms the Pixel fires on the right page with the right parameters.
  • Events Manager > Test Events shows both Pixel and CAPI events arriving as you walk through a real test order.

Tracking Purchases When There’s No Online Checkout

This is the part most guides skip entirely, and it’s the part that matters most for a large share of businesses in Lebanon and the UAE.

If your customer orders through WhatsApp or Instagram DM, agrees on a price, and pays cash or bank transfer on delivery, there is no checkout page to fire a Pixel event from. The purchase still needs to reach Meta, or your campaign will optimize toward the wrong signal.

The correct tool here is Meta’s Offline Conversions API. It lets you upload completed orders — customer phone number or email, order value, and date — directly from a spreadsheet or your order-management system back into Events Manager, matched to the original ad exposure. Meta hashes the customer data before matching it, so this doesn’t require exposing raw personal data to the platform.

A mistake I see constantly on COD-heavy accounts: the “Purchase” event fires the moment the customer confirms the order on WhatsApp, before the item is even delivered. If a meaningful share of COD orders get refused or returned at the door, which happens often in this market, your reported conversions overstate your actual completed sales. Fire (or upload) the Purchase event once delivery and payment are confirmed, not at the moment of order intent.

Tracking “Purchases” for Lead-Generation and Service Businesses

If you sell a service — real estate, clinics, education, B2B — your website Purchase event doesn’t exist at all. What you have instead is a Lead event when someone submits a form, and the actual sale happens later, often weeks later, through a sales conversation.

For this funnel, upload the closed deal back to Meta through the same Offline Conversions API, once your sales team confirms the deal in your CRM. This closes the loop between which ad, audience, or creative actually produced paying customers, not just form fills. Without this step, you’re optimizing your budget toward lead volume, which is a weaker signal than what you actually care about, revenue.

Getting the Purchase Value Right

Meta’s optimization is only as good as the value you attach to each Purchase event. Two things worth checking specifically for this region:

  • Currency consistency. If you sell in AED, USD, or LBP across different pages or campaigns, confirm the currency parameter on your Purchase event matches what was actually charged. A mismatched currency code silently distorts your reported ROAS.
  • Value-based optimization. If your average order value varies significantly by product, Meta’s Value Optimization campaign type can bid toward higher-value customers specifically, but only if your Purchase event is passing accurate, itemized values consistently.

Improving Your Event Match Quality Score

Inside Events Manager, next to each event source, Meta shows an Event Match Quality (EMQ) score out of 10. This is the metric almost nobody checks, and it directly affects how well Meta can connect a purchase back to the person who actually saw your ad.

Adding hashed email, phone number, and external ID parameters to your Purchase event — most CMS integrations do this automatically once enabled — pushes EMQ higher. On accounts where I’ve taken EMQ from the low 4s to 6 or above, reported cost-per-purchase has dropped without a single change to the ad creative or targeting, simply because Meta could finally match more of the purchases that were already happening.

Why Your Ads Manager Numbers Won’t Match Your Store or CRM

This comes up on nearly every client call, so it’s worth stating plainly: your Meta purchase count and your actual store revenue are not supposed to match exactly.

  • Attribution window. Meta’s default is a 7-day click and 1-day view window. A sale from someone who clicked six days ago and bought today still counts as a Meta conversion, even if your own analytics tool uses a different rule.
  • Cross-device matching. Meta can connect a purchase to an ad seen on a different device, if both were logged into the same Facebook or Instagram account. Most website analytics tools can’t do this at all.
  • Refunds. A refunded order rarely gets removed from Meta’s reported purchase count unless you specifically send a refund event back through the API.

In practice, expect Meta’s platform-reported purchases to run higher than what your own order system shows for the same period. Use Meta’s numbers to optimize inside the platform, since that’s what its algorithm is actually reading, and use your own store or CRM data as the real source of truth for profitability.

Mistakes I Still Find on Client Audits

  • Purchase event firing on the cart page instead of the confirmation page, inflating conversions from people who never completed the order
  • COD “Purchase” events firing at order confirmation instead of at delivery, overstating completed sales
  • No Offline Conversions upload at all for WhatsApp or DM-based orders, leaving a large share of real revenue invisible to Meta
  • CAPI installed without a shared event ID, silently double-counting purchases
  • Domain left unverified, limiting which conversion events get prioritized under Aggregated Event Measurement

Frequently Asked Questions

How do I track Facebook ad purchases if most of my customers pay Cash on Delivery?

Upload completed and paid orders through Meta’s Offline Conversions API, using the customer’s phone number or email plus order value, once delivery is confirmed rather than at the moment the order is placed.

Can I track a sale that happened over WhatsApp instead of my website?

Yes. There is no Pixel event to fire since no checkout page loads, so the order needs to be uploaded afterward through Offline Conversions, matched against the customer’s contact details.

Do I need both the Pixel and the Conversions API, or is one enough?

Use both together. CAPI alone can work as a fallback, but running Pixel and CAPI together, properly deduplicated with a shared event ID, consistently captures more verified purchases than either one running alone.

Why does my reported cost-per-purchase change after I improve Event Match Quality, even with the same ads running?

A higher EMQ score means Meta can match more of your existing purchases back to the people who actually saw your ad. The sales were already happening; better matching simply lets Meta report them accurately, which often lowers your reported cost-per-purchase without any change to targeting or spend.

Does a refunded or returned COD order still count as a purchase on Meta?

Yes, unless you actively remove it. Meta doesn’t automatically detect refunds or returns; you need to send a corresponding refund event back through the API, or exclude undelivered orders from your Offline Conversions upload in the first place.

Where to Go From Here

Accurate purchase tracking on Facebook ads isn’t a one-time install, especially in a market where a meaningful share of sales close outside the checkout page entirely. If your funnel includes COD, WhatsApp orders, or a sales team closing leads offline, standard Pixel-only tracking will always undercount what your ads are actually producing.

If you’d rather have this audited and fixed than piece it together yourself, our Meta Ads management service includes a full tracking review as part of onboarding. You can also read how we approach conversion tracking on Snapchat Ads for a comparison of how attribution windows differ platform to platform, or get in touch directly if you want a second opinion on an existing setup.

Written by Elias Saliba | Founder, Adchievers

Elias is a performance marketing specialist with over ten years of experience running paid campaigns across Google, Meta, TikTok, LinkedIn, Snapchat, and X for 250+ clients in 28+ countries, including agencies and direct advertisers across Lebanon and UAE. He has personally overseen more than $30M in managed ad spend and writes from direct, real-world campaign experience.

Boost your Business Today

Get in touch with our consultants!

Scroll to Top