META·Meta Pixel·critical

Meta Purchase Missing Value

Your Meta Purchase events fire, but they arrive without `value` and `currency`. Meta counts the order. It cannot tell a $12 sticker sale from a $1,200 furniture sale. Every bid decision and every ROAS number on this account is built on order count, not order revenue.

CL
By Christopher LandaverdeCreator of AdLint · ad-tech tracking specialistUpdated

Why It Matters

Value-based optimization (Meta's "Value" purchase optimization goal) needs each Purchase event to carry the actual order total. When `value` is missing, Meta can't run value optimization at all. The campaign falls back to optimizing for purchase count, which treats a $5 add-on identically to a $500 cart. Spend chases volume, not revenue. The ROAS column in Ads Manager either reads zero or shows a number Meta calculated from a default value it inferred. Neither is real. Missing `currency` is the same shape of problem. Meta assumes USD when no currency is sent. Sites that operate in EUR, GBP, or anywhere multi-currency get their reported revenue mis-converted without warning, and the numbers in Ads Manager won't line up with the numbers in Shopify or the order management system. This usually happens because the Purchase tag was set up with a static value (often `value: 0` or `value: 1`) during QA and never rewired to the real order total. It also happens when the developer pulled the value from a CSS selector on the confirmation page that broke after a redesign.

How To Fix It

  1. Pass `value` and `currency` on every Purchase event. Source `value` from the confirmed order total in the order object or the platform's data layer. Do not hardcode it. Do not read it from a price string on the page.
  2. Use the correct ISO 4217 currency code (USD, EUR, GBP, etc).
  3. Include `content_ids` and `content_type: "product"` so Meta can attribute revenue back to specific catalog items for Advantage+ Shopping and dynamic ads.
  4. In Events Manager, open the Purchase event and check the Parameters tab. `value` and `currency` should appear with high coverage (Meta will warn if either is below ~90%).
  5. Spot-check three recent real orders: the value sent should match the order total in your commerce backend within rounding.

Example

Configuration
fbq('track', 'Purchase', { value: order.total, currency: 'USD', content_ids: order.skus });
For Your Client Report

This Meta Pixel is firing Purchase events without `value` and `currency` parameters. Per Meta's standard events reference, Purchase requires both parameters for value-based bid optimization and for accurate revenue reporting in Ads Manager. Without `value`, the optimizer cannot run the Value purchase optimization goal and falls back to optimizing for raw order count, treating low-margin and high-margin orders as equivalent. Without `currency`, Meta defaults to USD and mis-converts revenue from any other currency without flagging it, which causes Ads Manager revenue to diverge from the commerce backend. The typical root cause is a tag wired with a placeholder value during QA, or a value source (such as a DOM selector on the confirmation page) that broke during a later redesign. Fix: pass `value` from the confirmed order total and the correct ISO 4217 `currency`, verify parameter coverage in Events Manager, and reconcile three recent orders against the commerce backend. Source: developers.facebook.com/docs/meta-pixel/reference.

Drop this paragraph into your client deliverable. Sources back to the canonical platform documentation linked below.

References

Audit your own files for this check

AdLint runs this check (and 177 others) against your GTM, Google Ads, Meta, TikTok, LinkedIn, Pinterest, Twitter/X, and Snapchat exports. Everything stays in your browser. No uploads, no accounts.

Run a free audit