Wrong Purchase Values Are Silently Wrecking Your ROAS
A pixel that doesn't fire gets caught in a week. A pixel that fires with the wrong value runs for years — flattering ROAS by 15–25%, teaching the algorithm to love coupon hunters, and turning every year-over-year comparison into fiction. The audit takes 20 minutes.

Wrong values never error — they redefine ROAS silently. The audit: pull 20 identical orders in your store admin and Events Manager and check five things — total vs subtotal, tax/shipping inclusion, discount handling, currency, and browser-vs-server value parity (dedup keeps ONE copy; if they differ, revenue depends on a race). The honest policy: value = post-discount product revenue excluding tax and shipping, first charge only for subscriptions, refunds handled knowingly either way, account currency on both channels, identical to the cent. Then re-audit every sale period and platform change — discount bugs only surface when discounts exist. Value-based bidding amplifies whatever you feed it: tax-inflated values literally optimize toward heavy carts in high-tax jurisdictions.
• Wrong values don't error, don't warn, and don't look broken — they just quietly redefine ROAS while every dashboard renders normally. • The root cause is almost never code — it's the absence of a written value policy: tax in or out, discounts pre or post, refunds counted or not, on BOTH channels. • The honest defaults: value = post-discount product revenue, excluding tax and shipping, first charge only for subscriptions, account currency always. • Broken dedup is a value bug too: two copies with different values means your ROAS depends on which copy Meta keeps. • Run the 20-minute audit: 20 real orders, admin vs Events Manager, five checks. Most stores fail on the first discounted order. • Value optimization (highest-value bidding) amplifies whatever your values teach it — feed it tax-inflated numbers and it optimizes toward heavy, expensive-to-ship carts.
Why this bug survives for years
A pixel that doesn't fire gets noticed in a week — the numbers crater and someone panics productively. A pixel that fires with the wrong value can run for years, because nothing looks broken: conversions count correctly, campaigns "perform," and ROAS is a plausible number that happens to be a fiction. The store comparing this January to last January is comparing two different value definitions and calling the delta "performance." And it compounds: value-based bidding optimizes toward whatever you feed it — send tax-and-shipping-inflated values and Meta dutifully learns to prefer heavy carts shipping to high-tax jurisdictions, which is not a customer-acquisition strategy anyone chose on purpose. If your ROAS moved and nothing else did, the value pipeline belongs on the suspect list.
The 20-minute audit (do this before reading further)

Twenty orders, five checks — the audit that most stores running six figures have never done once.
Pull the same twenty orders in your store admin and in Events Manager (Test Events for a live one — Meta's event reference documents what value and currency should look like on the wire). You're answering five questions: does value match the order total, the subtotal, or something else? Does it move when tax and shipping move? What happens on a discounted order? Is currency the account's currency — every time? And do the browser and server copies of the same purchase carry the same number? That last one matters more than it looks: deduplication keeps one copy and discards the other, so if your plugin sends the total and your webhook sends the subtotal, your reported revenue depends on a race you've never watched.
The six-decision value policy
Six decisions, one page of policy — the single highest-leverage document most ad accounts don't have.

One store, one month, five ROAS numbers — none of them lies, they just answer different questions. Pick ONE.
Defending the recommendations
Tax and shipping out, because ROAS should measure revenue you keep a margin on — a $100 product shipped for $30 to a 25%-VAT country books $162.50 with them in, and that 62% flattery scales into real budget decisions. Post-discount, because the alternative teaches the algorithm that your 40%-off buyers are full-price customers — then the sale ends and your "performance" mysteriously collapses with it. Refunds: ignoring them is simple and fine at low refund rates; sending refund adjustments is accurate and worth it above ~5% — the only wrong answer is not knowing which one your stack does. Subscriptions at first-charge value, because stuffing projected LTV into the purchase event corrupts every cohort you'll ever compare — LTV belongs in your bidding strategy and margins math, not in the event stream. Account currency always: mixed currencies don't throw errors, they silently mis-scale — a EUR value on a USD account is just... a different number. Whatever you decide: one page, written down, enforced identically on browser and server. That document outperforms most tracking tools.
Sale-period sanity and the ongoing check
Two recurring moments deserve a calendar entry. Sale periods: discount handling bugs only surface when discounts exist, so audit five orders during every major sale — the "our ROAS crashed right after Black Friday" story is often just pre-discount values reverting to truth. Platform changes: checkout updates, new payment methods, and plugin versions all touch the value pipeline; re-run the 20-order audit after each. And keep perspective on which dashboard is for what: Meta's value data drives optimization, your store admin remains the revenue truth, and the two serve different jobs even when perfectly configured. The win isn't making Meta match your accountant — it's making Meta's number mean one consistent thing, so the machine optimizes toward money you actually keep.

Meta accepts whatever you send — the policy you never wrote is the bug you can't find.
Frequently asked questions
Should the Facebook purchase value include tax and shipping?+
Why is my Facebook ROAS higher than my actual revenue suggests?+
Should purchase value be before or after discounts?+
How do refunds affect Meta purchase values?+
What value should subscription businesses send?+
What happens if my pixel sends the wrong currency?+
Can broken deduplication cause wrong values?+
Does value optimization make wrong values worse?+
How often should I audit purchase values?+
My values look right in Test Events but ROAS still seems inflated?+
Should Meta's revenue number match my Shopify admin exactly?+
Honest numbers, capable account
Whitelisted infrastructure — rails worthy of a value pipeline you can defend in any meeting.