In Meta Conversions API, every 'Purchase' event strictly mandates both the 'value' (numeric float, e.g. 89.50) and 'currency' (3-letter uppercase ISO 4217 code, e.g. 'USD') parameters inside the custom_data object. If either parameter is missing, null, or formatted as a string with currency symbols ('$89.50'), Meta degrades your ad account's Value Optimization bidding models.
1. The Number One Warning in Events Manager
In Meta Events Manager, the single most common diagnostic warning across all ad accounts is: 'Purchase event is missing value or currency parameter'.
When this warning appears, Meta's Value Optimization (VO) algorithm is disabled for that ad set. The platform cannot calculate ROAS and reverts to basic conversion volume bidding, treating an $800 luxury order identically to a $10 phone case and degrading advertising efficiency.
- VO Bidding Disabled: Inability to run 'Maximize Value of Conversions' campaigns.
- ROAS Columns Empty: Ads Manager displaying dashes (`-`) instead of calculated ROAS numbers.
- Formatting Bugs: Developers accidentally placing `value` at the root payload instead of inside `custom_data`.
2. Comparative Analysis: Standard Tracking vs CAPI Control
The table below outlines the architectural and financial differences between passive conversion tracking and active signal governance:
| Implementation Attempt | Why It Fails | The Correct Formatting |
|---|---|---|
| Currency with Symbol: '"currency": "$"' | Not a valid ISO 4217 code | Must be 3 uppercase letters: `"currency": "USD"` |
| Value as String with Symbol: '"value": "$89.00"' | Non-numeric string parsing error | Must be pure numeric float: `"value": 89.00` |
| Value at Root JSON Level | Meta only inspects `custom_data` object | Must nest inside `custom_data: { value, currency }` |
| Missing Currency Completely | Meta cannot determine monetary denomination | Always supply standard base currency code |
3. Correct custom_data Object Structure
Ensure your purchase event contains a clean, validated `custom_data` block:
// Correct custom_data Object in CAPI Payload
{
"event_name": "Purchase",
"custom_data": {
"currency": "USD", // 3-letter ISO 4217 uppercase string
"value": 149.95, // Pure numeric float (NOT a string)
"content_type": "product",
"contents": [
{
"id": "SKU_7721",
"quantity": 1,
"item_price": 149.95
}
]
}
}
How to Deploy CAPI Control to Fix This Today
- Step 1: Open Meta Events Manager > Diagnostics and verify if the 'Missing value/currency' warning is active.
- Step 2: Inspect your backend payload formatter to ensure `value` is parsed with `parseFloat()`.
- Step 3: Deploy CAPI Control to automatically validate and format custom_data objects.
- Step 4: Re-enable Value Optimization bidding in Meta Ads Manager.
Frequently Asked Questions
Can the conversion value be 0.00?
While technically accepted, Meta recommends passing a minimum value of 0.01 for Purchase events to avoid triggering algorithm warnings.
What happens if a customer pays in GBP but my ad account is in USD?
Pass `"currency": "GBP"` with the actual GBP amount. Meta's API handles real-time currency conversion into your ad account's base currency automatically.
Do ViewContent and AddToCart require value and currency?
They are optional for ViewContent and AddToCart, but highly recommended to help Meta evaluate mid-funnel intent.
Ready to steer Meta & Google toward your most profitable traffic?
Drop in CAPI Control in under 2 minutes. Transmit 100% of conversion signals free forever, or activate autonomous signal AI agents to get 3x better ad traffic.