Noise vs dispute

A $180 gap on a $40k campaign is a footnote. A $3,900 gap at 15% is what you hold before AP releases. Use the bands before you escalate.

What gets measured

Agency-reported spend and ROAS next to MMP (AppsFlyer-shaped) spend and ROAS, joined on campaign name after trim. You get spend gap, ROAS gap, disputed total, and a band per row.

ok

Absolute spend gap under your materiality floor. Default $500. Skip it on the call. Keep moving.

noise

Gap clears materiality, but stays within a normal percentage of the larger spend side. Default ≤12%. Attribution windows, fees baked into agency spend, and week boundaries create this band all the time.

Document it. Leave the war room closed.

dispute

Material and above the noise percentage. Ask for the agency line that maps to that campaign name. Hold those dollars until names and numbers match.

Why start at 12%

Writeups that compare network dashboards to MMP exports often treat roughly 10–20% as expected measurement difference, not fraud. Agency vs MMP is a different join, but the same habit holds: chase outliers.

Raise the noise % if your agency always bills fees inside spend. Lower it if finance wants a tight leash. The slider is in the workspace.

Matching in v1

Exact campaign name after trim. No fuzzy match yet.

So Meta_US_Broad and Meta US Broad do not join. You get two rows or a silent miss. Fix naming, then trust the disputed total.

Honest limits

This pack does not prove the agency overbilled. It does not replace Meta-vs-MMP science or a warehouse. It gives finance a holdback schedule by Thursday from the rows you typed. One agency of record. Exact names only.