Home/Tools

Ad Scale Scatter: plot every Meta ad on spend against CPA

Plot every ad on log spend by CPA to separate what scales, what waits, and what to kill. Free, runs entirely in your browser, and your data is never uploaded to a server.

About this tool

What Ad Scale Scatter calculates

Ad Scale Scatter classifies every ad in an account as SCALE, WAIT, or KILL by testing whether its conversion count is statistically better or worse than your CPA target predicts at its spend level. Each ad becomes a dot on a log-spend by CPA scatter, so the handful of ads absorbing most of the budget are readable at a glance instead of buried in an Ads Manager table.

The formula

For each ad, expected conversions = spend divided by your CPA target. Conversion counts are treated as Poisson-distributed, so the standard error is the square root of that expected count. The z-score is actual conversions minus expected, divided by the standard error.

An ad is KILL when its conversions fall below expected minus z times the standard error, SCALE when they rise above expected plus the same margin, and WAIT otherwise. The confidence setting picks the z threshold: 1.28 (80%, loose), 1.645 (90%, the default), or 1.96 (95%, strict). CPA is spend divided by conversions; ROAS is revenue divided by spend when a revenue column is mapped. The point of the significance test: a $200 ad with zero conversions is noise, while a $20,000 ad 20% over target is a real decision.

Expected input

Upload an ads export CSV with a header row (up to 500,000 rows). Columns are auto-detected case-insensitively and can be remapped by hand. Three are required:

  • Ad name: accepts ad_name, ad name, creative, or ad.
  • Spend: accepts amount_spent, amount spent, spend, cost, or budget.
  • Conversions: accepts purchases, website_purchases, omni_purchases, conversions, results, customers, orders, subscriptions, signups, registrations, or leads.
  • Optional: campaign_name and adset_name (keyword filters and placement drill-down), date as YYYY-MM-DD (timeline scrubbing and daily CPA trends), and revenue such as purchases_conversion_value (enables ROAS).

Assumptions and limits

  • Everything runs in the browser. The CSV is never uploaded to a server.
  • Ads are aggregated by ad name, so identical names across campaigns merge into one dot.
  • Ads with zero conversions are counted but not plotted, and ads below your minimum-spend filter are excluded from classification.
  • On first load the CPA target auto-sets to the account's spend-weighted CPA; adjust it to your actual allowable CPA before trusting the verdicts.
The framework behind it
What is a good hook rate on Meta ads?
The scatter tells you which ads to kill. Hook rate tells you why a video ad landed there: whether it died at the first frame or somewhere later.
Tools·Frameworks·Writing·About·Work with me
Curtis Howland LLC
Durham, NC · (859) 612-9160 · curtis@curtishowland.com · Contact