How to analyze Meta Ads performance
Analysing a Meta account well is mostly about narrowing correctly. Establish which conversion event the account is actually optimising for, restrict yourself to the ads carrying the bulk of the spend, compare against the account's own history rather than a published benchmark, and drill one level at a time until you can name the campaign, ad set or ad behind the number. Most bad Meta analysis goes wrong in the first step, by judging every campaign against the same KPI.
To analyze a Meta account properly, work through:
- The conversion event each campaign actually optimises for
- The ads making up the first 90% of spend — ignore the long tail
- The account's own 90-day baseline as the yardstick
- Delivery metrics: CPM, CTR, frequency, with spend as context
- Conversion metrics against the right KPI for each objective
- At least two breakdowns — placement, device, or age and gender
- Trend direction, not just the period total
Judge each campaign against its own objective
Applying one KPI across an entire account is the most common analysis error, and it makes good campaigns look broken. Evaluate against what the campaign was actually set up to do.
| Campaign objective | Judge it on | Do not judge it on |
|---|---|---|
| Sales / purchase | ROAS, CPA, revenue | Reach or CPM alone |
| Lead generation | Cost per lead, lead volume | ROAS |
| Traffic | CPC, CTR, landing page views | Conversions |
| Video views | Cost per ThruPlay, hook rate | ROAS or CPA |
| Awareness | CPM, reach, frequency | CPA or ROAS |
The analysis, step by step
Step 1
Establish the real conversion event
Read the conversion event from the ad set configuration rather than inferring it from campaign names. Names drift from configuration constantly, and a wrong assumption here invalidates everything downstream. On an account mixing objectives, group the ad sets by event and apply each group's metric separately rather than blending them.
If a campaign optimises for something other than purchase — registration, lead, add-to-cart — do not convert that count into revenue. One configuration worth knowing: some accounts route genuine purchases through the registration event because a third-party profit tracker sends them that way, so the event name means the opposite of what it says. Confirm what it represents in this account before reading anything into it.
Step 2
Narrow to the ads that matter
Sort ads by spend descending and keep those making up the first 90% of cumulative spend. Those are the ads capable of moving an account-level number; the tail cannot. Analysing everything equally wastes the effort on ads that will never matter.
- Filter to active entities. The insights API returns anything that spent in the window, including entities you have since paused, which quietly distorts every aggregate.
- Fetch every page of results before drawing conclusions. Ad-level data paginates, and a partial page produces confidently wrong totals.
Step 3
Build the baseline before judging anything
"Is this CPM high?" has no answer without a reference. Pull 90 days of the account's own history and use that as the yardstick. Published benchmarks tell you little, because they average across verticals, geographies, objectives and funnel positions that have nothing to do with your account.
The thresholds we work to are hook rate at or above 40% good and under 25% poor, CTR at or above 1.25% good and under 0.65% poor, and CPM within 20% of the spend-weighted average. These are our working numbers, not an industry standard — treat your own trailing 90 days as the real benchmark.
Step 4
Read delivery and conversion together
Delivery metrics explain conversion metrics. Looked at alone, either one misleads. Walk them as a chain: CPM tells you the cost of reach, CTR tells you whether the ad lands, CVR tells you whether the page and offer hold up, and CPA or ROAS is the output of all three.
- High CPM with weak conversion — expensive audience that is not converting. Targeting or creative, not budget.
- Low CTR with weak conversion — the ad is not resonating. Check comments for negative sentiment before assuming it is the creative concept.
- Healthy metrics but a declining trend — check frequency alongside CTR over a 14-day window before calling it fatigue.
Step 5
Drill down one level at a time
Never conclude from an aggregate. If the question is about a campaign, look at its ad sets; if about an ad set, look at its ads. At each level, quantify the child's contribution to the parent so the finding is specific — "this ad set is 72% of campaign spend but 40% of conversions" is actionable in a way that "the campaign is underperforming" is not.
Step 6
Segment, but respect the sample
Check at least two breakdowns — placement and position, device, or age and gender. Placement cost differences are often large enough to change a decision, and Advantage+ audience expansion frequently delivers outside the intended target.
Hold segment-level conclusions to at least 100 impressions and 3 conversions. Below that, say the segment is low-confidence rather than recommending on it. Also remember that breakdowns show how Meta distributed your budget — they are not levers. You cannot move budget between placements or age brackets; you can only build new ad sets or apply exclusions.
Step 7
Look at the trend, not the total
A date range reported as one number hides the shape. Pull daily data and compare the last 7 days against the previous 7, noting the direction of each key metric. The most valuable output is an inflection point with a date attached — "CTR began declining on the 12th, three days before CPA started rising" establishes a sequence, which is most of the way to a cause.
A worked example
Illustrative example. The numbers below are made up to show the method. They are not a client account and not a benchmark.
An account looks flat at the top level — ROAS 2.6 against 2.7 the month before. Drilling in tells a different story.
| Level | Share of spend | Share of revenue | Read |
|---|---|---|---|
| Campaign A — prospecting | 58% | 41% | Carrying the account's volume, below its weight on return |
| Campaign B — retargeting | 19% | 38% | Small but efficient; ROAS likely flattered by view-through |
| Campaign C — new launch | 23% | 21% | Roughly proportional, still inside learning |
The flat account-level number was hiding two opposite movements. Prospecting weakened and retargeting strengthened, and they cancelled out. Reporting the aggregate alone would have described a stable month that did not happen.
Before acting on Campaign B's efficiency, check the attribution split. Retargeting campaigns with very high ROAS are frequently credited on view-through conversions, which means true incremental return is lower than reported. Scaling on that number is a common and expensive mistake.
Campaign C needs patience, not a decision. If it has not spent at least 2× AOV or 4× CPA, it has not exited learning and the figures are not yet stable enough to judge.
And there is a dependency to check before cutting prospecting: it feeds the audience pool that retargeting converts. Cutting A to fund B would likely raise B's CPA within a week or two.
What not to conclude too quickly
A few readings that look rigorous but are not:
- Comparing against an industry benchmark. Your account's own history is the only reference that controls for vertical, geography, objective and funnel position.
- Averaging rate metrics. CTR, CPM, ROAS, reach and frequency cannot be summed or averaged across rows — they must be queried at the level you intend to report.
- Judging on a small sample. Below 3–5 conversions per ad set per week, the ranking is noise.
- Treating a breakdown as a lever. Placement and demographic splits describe delivery; they are not budget controls.
- Reading an aggregate as a verdict. Flat top-line numbers routinely conceal two offsetting movements.
- Trusting reported ROAS at face value on retargeting or Advantage+ Shopping aimed at existing customers.
How to automate this analysis
The expensive part of this process is not the judgement — it is assembling the data at four levels, pulling two breakdowns, building the 90-day baseline and reconciling conversion events before any thinking starts.
GoMarble connects to the account and runs that assembly, then explains why metrics moved rather than only charting that they did. You get the drill-down and the contribution quantified, with the entity named.
The shape of it
- Connect the ad account
- Ask in chat or Slack, or let scheduled monitoring raise it
- Movement is measured against the account's own baseline
- Root-cause analysis names the campaign, ad set or creative responsible
- The recommended action comes attached — AI Agents execute it on approval
Keep the judgement about whether a flagged change matters. Automate everything before it.
Meta performance analysis checklist
- ☐ Read the conversion event from configuration, not campaign names
- ☐ Group mixed-objective accounts and apply each group's KPI separately
- ☐ Restrict analysis to the first 90% of spend
- ☐ Filter to active entities only
- ☐ Fetch all pages before computing totals
- ☐ Build the 90-day account baseline
- ☐ Check CPM, CTR and frequency with spend as context
- ☐ Check the conversion metric appropriate to each objective
- ☐ Drill one level deeper and quantify the contribution
- ☐ Check at least two breakdowns
- ☐ Discard segment conclusions below 100 impressions or 3 conversions
- ☐ Compare 7 days against the prior 7 and note the inflection date
- ☐ Check attribution window and view-through share before trusting ROAS
Questions people actually ask
What metrics actually matter when analysing Meta Ads?
How far back should I look when analysing performance?
Why does Meta's reported ROAS differ from what I see in Shopify?
Should I analyse at campaign, ad set or ad level?
How do I know if a difference between two ad sets is real?
Where this method comes from
The sequence and the thresholds on this page come from the methodology GoMarble's agents run when analysing a Meta account — objective-contextual evaluation, the 90%-of-spend focus, hierarchical drill-down with quantified contribution, mandatory breakdowns, and the statistical significance floors. Benchmark figures are ours, from accounts we operate, and are working thresholds rather than industry standards.
Related
Let GoMarble run the analysis.
Connect Meta and ask. You get the drill-down, the contribution quantified and the entity named — not another dashboard.