Skip to main content
Meta × Ecommerce OrdersRun this yourself

How to reconcile Meta Ads against your store's order table

This is the check we run first on every account, written out so you can run it without us. It takes about thirty minutes and needs two numbers: what Meta says it produced, and what your store's order table actually shows. The gap between them is the only honest measure of whether your tracking works — and if it comes back small, you do not need us.

Free30 minutesNo obligation

Specific to Meta × Ecommerce Orders

Meta purchases vs your order table: expect overlap, not parity

Send the order ID as the event_id on both the Pixel and Conversions API purchase, then compare Ads Manager purchases for a closed month against paid online orders. Meta reports aggregates, so the join is a total, not a per-order list. Meta claiming more than its click-driven share is normal under 1-day view; exceeding total online orders is breakage.

Meta never hands back a list of the orders it counted, so the order ID does a different job here: it is the event_id that lets Meta merge the browser and server copies of one purchase. Use the same form of the ID on both paths. A store that sends the short order number from the Pixel and the long internal order ID from the server produces two purchases per order, and nothing in Ads Manager labels them as duplicates.

The 1-day view part of the default setting credits orders from people who saw an ad in their feed and bought the next day through email, Google or a direct visit. Those orders are real, and Google and your email tool are claiming them too, so Meta's number is not meant to add up with the others. Ads Manager also places a purchase on the day of the impression or click rather than the order date; check whether your reporting view can switch to conversion time before comparing a month.

Pull Purchases and Purchase conversion value from Ads Manager for the closed month, with the attribution setting column visible, and check whether the value you send includes shipping and tax while your order total does not. Meta well above its click-only share is the view-through overlap. Meta above your total online orders, or Events Manager showing purchases that are not being deduplicated, is the common fault: mismatched event_id between Pixel and server.

Meta × Ecommerce Orders · what breaks

Why Meta and your store's order table disagree

  1. 01

    Refunds never subtracted

    The most common cause and the easiest to check. Sum refunds for the same period — if the platform figure is roughly your gross and your own figure is net, that difference is the whole gap.

  2. 02

    Purchase event firing on page refresh

    A confirmation page that re-fires on reload counts one order several times. Compare distinct order IDs against total conversions.

  3. 03

    Point-of-sale orders in the same table

    If you have a physical shop, counter sales sit in the same order table and will be counted as advertising conversions unless the channel is filtered.

  4. 04

    Post-purchase upsells arriving late

    If the conversion fires at checkout and an upsell adds revenue afterwards, the platform is under-reporting by the upsell take rate.

Meta × Ecommerce Orders · the fix

What you get from this — Meta × Ecommerce Orders

  • A number instead of a suspicion

  • The likely cause, narrowed

  • A basis for deciding

Meta × Ecommerce Orders · architecture

What each side is actually counting — Meta × Ecommerce Orders

  1. 1

    What Meta counts

    event_name from the standard set with exact casing, event_time in seconds, a shared event_id, an action_source, and hashed user_data that was normalized before hashing. Purchase additionally requires value and currency.

  2. 2

    How Meta attributes it

    fbclid arrives on the landing URL and is normally written into the _fbc cookie. If it isn't captured on landing, _fbc never exists — and _fbc is the strongest click signal Meta has, so its absence caps your match quality regardless of what else you send. Forward _fbp too, from the browser rather than regenerating it server-side.

  3. 3

    The window it uses

    Meta's default attribution is a 7-day click and 1-day view. View-through is included by default, which is a large part of why Meta claims more conversions than your other platforms — that overlap is expected rather than a fault.

  4. 4

    What your store's order table counts

    Paid orders with their totals, found in Shopify Admin → Orders, WooCommerce → Orders, or a direct query against the orders table.

  5. 5

    The filter that makes them comparable

    Financial status is paid, and the sales channel is online rather than point of sale.

Meta × Ecommerce Orders · events

Reading the gap — Meta × Ecommerce Orders

15%+ platform higherUsually the wrong event entirely — the platform is claiming more than you took. usually refunds, duplicate firing, or a second channel bleeding into the same conversion action.
20%+ platform lowerUsually structural — the platform is seeing fewer orders than you actually took. usually consent, ad blocking, or an identifier that never reached the order.

Meta × Ecommerce Orders · diagnose

Diagnostic order

  1. 01

    Confirm both numbers cover the same period and channel

  2. 02

    Refunds never subtracted

    The most common cause and the easiest to check. Sum refunds for the same period — if the platform figure is roughly your gross and your own figure is net, that difference is the whole gap.

  3. 03

    Purchase event firing on page refresh

    A confirmation page that re-fires on reload counts one order several times. Compare distinct order IDs against total conversions.

  4. 04

    Point-of-sale orders in the same table

    If you have a physical shop, counter sales sit in the same order table and will be counted as advertising conversions unless the channel is filtered.

  5. 05

    Read the Deduplicated indicator and the per-event match quality score, both read over seven days

    Match quality is where most Meta accounts lose attribution, and it's almost always normalization rather than coverage. An email hashed with a capital letter, or a phone hashed with brackets, produces a perfectly valid hash that matches nobody and errors nowhere. Normalize first, then hash, and read the score per event rather than overall.

Meta × Ecommerce Orders · prove

How to know you did it right — Meta × Ecommerce Orders

Source of truth

your store's order table — orders for a fully closed month

    Meta × Ecommerce Orders · free audit

    What we check in the free audit

    • Confirm both numbers cover the same period and channel
    • Refunds never subtracted
    • Purchase event firing on page refresh
    • Point-of-sale orders in the same table
    • Read the Deduplicated indicator and the per-event match quality score, both read over seven days

    Checked against

    your store's order table — orders for a fully closed month

    Get my free conversion tracking audit

    Free30 minutesNo obligation

    Meta × Ecommerce Orders · when not to buy

    When the answer is that you do not need us — Meta × Ecommerce Orders

    • If almost all of your orders come from a channel with no click behind it, no tracking work will reach them — and knowing that is worth more than a build.
    • If you're advertising a business type Meta restricts data collection for — health being the obvious one — the parameters you can legitimately send are narrower, and that constraint should shape the build rather than be worked around.

    Meta × Ecommerce Orders · what we deliver

    The method, step by step — Meta × Ecommerce Orders

    • Pull what Meta reports

      The deduplicated indicator and the per-event match quality score, both read over seven days.

    • Pull what your store's order table shows

      Export orders for a fully closed calendar month, filtered to paid and online. Count them, and sum the total after discounts and before shipping and tax.

    • Filter both to the same thing

      Financial status is paid, and the sales channel is online rather than point of sale.

    • Compare per record, not on totals

    FAQ

    Meta × Ecommerce Orders questions, answered

    For the comparison, view a 7-day click result alongside the default rather than changing what campaigns optimize toward. Check whether your Ads Manager offers the side-by-side attribution comparison.

    Free · 30 min

    Found a gap between Meta and your store's order table?

    Free30 minutesNo obligation