Detection: Bid cap set higher than the account's actual target CPA
Key: cost_cap_vs_aov_mismatch
Severity: High
Confidence: 85%
Shipped: v1.2, May 2026
Runtime: Requires Meta OAuth (the bid_strategy and bid_amount_cents fields aren't in CSV exports).
What this detection looks for
We fire one finding per ad set when all of these are true:
- The ad set is ACTIVE with monthly spend projecting to ≥ $1,000
bid_strategyis notUNKNOWN(CSV path withholds)- The account has ≥ 30 purchases in the audit window with positive total purchase value (so we can compute an AOV)
- The ad set's bid strategy is either:
LOWEST_COST_WITHOUT_CAP, ORCOST_CAPwithbid_amountmore than 1.2 × the implied target CPA (AOV ÷ 2.5)
Why this matters
Common Thread Collective's audit point #4: cost cap should equal AOV ÷ target_ROAS. Many accounts run Lowest Cost without a cap (Meta will chase any conversion at any cost), or carry caps set months ago against a stale AOV. The result is systematic ROAS leak — Meta optimizes against a target that's wider than the account's actual margin allows.
We use target ROAS = 2.5 as the default. That's the most-common DTC target band; profitable accounts often run higher. The 1.2× overshoot factor allows reasonable buffer above the strict target without flagging every conservative cap.
How we estimate the recoverable dollars
target_cpa = account_AOV ÷ 2.5
overshoot_threshold = target_cpa × 1.2
monthly_recoverable = ad_set_spend × 0.20 × (30 / audit_days)
The 20% factor is the Common Thread Collective–cited typical efficiency loss when bid strategy isn't aligned with target margins. Conservative end of the range.
What would change our mind
- Different target ROAS. Some accounts profitably run at 1.8× or even 1.5× ROAS (high-LTV subscription, replenishment products). The default 2.5× is conservative for those. Treat the dollar estimate as a ceiling.
- Recent re-strategy. A bid strategy changed in the last 7 days may be tuning. Re-audit in 2 weeks; if it still fires, the cap is genuinely mis-calibrated.
- Cost cap above AOV/ROAS but spend is well below cap. If Meta isn't actually bidding to the cap (auction is finding cheaper inventory), the cap-vs-AOV mismatch isn't directly costing money. Look at recent CPA vs the cap — if CPA is far below the cap, the mismatch is paper-only.
What to do about it
- Compute your true target CPA:
AOV × profit_margin × repeat_factor. For a DTC brand with $50 AOV, 40% margin, 1.5× repeat factor: target CPA = $50 × 0.4 × 1.5 = $30. - Update the bid strategy on the affected ad sets. Move Lowest-Cost-Without-Cap to Cost Cap with the computed value; lower existing Cost Caps that exceed it.
- Re-feed the ad set. Meta needs ~7 days to re-stabilize against the new cap. Expect CPA to dip first, then volume to follow.
References
- Common Thread Collective: 27-Point Facebook Ads Audit (point #4)
- Pilothouse Q1 2026 Technical Review (bid-strategy section)