Meta ads audit checklist: a monthly review from one export
Once a month, check your Meta account the same way. One Ads Manager export covers the eight checks below. Run them in the same order each time.
For each check, you get the columns you need, what to work out in Google Sheets or Excel, and what to change. The thresholds are our audit's rules of thumb. They compare your ads with your own account. They are not targets that every account should hit, so adjust them to your own margins.
Step 1: Export the right file
Every check uses the same file, so get the export right first.
A good first row reads: Campaign name, Ad set name, Ad name, Day, Amount spent (INR), Impressions, Reach, Link clicks, Results, Result type. Next, work out two account numbers. Account cost per result is total Amount spent divided by total Results. Account ROAS is total Purchases conversion value divided by total Amount spent. If your ads optimise for different result types, work these out separately for each Result type.
- Open Ads Manager and pick the Ads tab. Ad level gives you the most checks.
- Set the date range to the last 30 days.
- Choose Breakdown, then By time, then Day.
- In the Columns menu, include Amount spent, Impressions, Reach, Frequency, Results, Result type, Cost per result, Link clicks, CTR (link click-through rate), Purchases, Purchases conversion value, Purchase ROAS (return on ad spend) and Delivery status.
- For video ads, also add 3-second video plays and ThruPlays.
- Click Export table data and save as .csv or .xlsx.
- For the placement check, export a second file using Breakdown, By delivery, Placement.
Step 2: Find wasted spend and ads to pause
Columns: Ad name, Amount spent, Results, Purchases conversion value, Delivery status. Use a pivot table to add up each ad's 30 days into one row.
Our audit's rule of thumb counts two kinds of waste. First, ads that spent at least the larger of Rs 1,000 or twice the account cost per result, with no results. Second, the extra cost on ads whose cost per result is more than twice the account's. That extra is the ad's spend minus what its results would have cost at the account rate.
For example, say your account spent Rs 2,00,000 for 1,000 results, so your cost per result is Rs 200. An ad that spent, for example, Rs 1,500 with no results counts as waste. Another ad that spent, for example, Rs 10,000 for 20 results has a cost per result of Rs 500 in this example. For example, at Rs 200 each, those 20 results should have cost Rs 4,000, so Rs 6,000 of that ad's spend is extra.
Then list what to pause. Pause ads that are still running (check Delivery status) with no results, or with ROAS under half the account's. An ad's ROAS is its Purchases conversion value divided by its Amount spent.
- Pause the ads with no results first, then the low ROAS ones.
- Do not pause the only live ad in an ad set until a replacement is ready.
- Write your waste total at the top of your sheet. That is the number to beat next month.
Step 3: Scale winners and move budget
Columns: Ad set name, Amount spent, Purchases, Purchases conversion value, Frequency. Pivot by ad set and work out each ad set's ROAS.
Our audit's rule of thumb for scaling is ROAS at least 1.3 times the account's, frequency at or under 2.5, and enough purchases that you can trust the number. A handful of sales could just be luck. Daily rows cannot be added up into a 30-day frequency, so read Frequency at ad set level in Ads Manager for the same date range.
For example, if account ROAS is 2.0 and an ad set is at 2.8 (1.4 times) with frequency 1.8, raise its daily budget by about 20%, from Rs 5,000 to Rs 6,000.
Budget moves come from the same table. Move money from the weakest ad sets to the strongest. Cap each move at 20% of that ad set's budget, and write it in rupees a day.
- Sort ad sets by ROAS, lowest first.
- Cut up to 20% from each weak ad set. For example, Rs 4,000 a day becomes Rs 3,200 a day.
- Add the freed money (for example, Rs 800 a day) to the strongest ad set that passed the scaling rule, keeping that raise within 20% as well.
- Log the date of every change and let it run before you judge it.
Step 4: Check creative fatigue, hook rate and hold rate
Columns: Ad name, Day, Impressions, Link clicks, Amount spent, Frequency, 3-second video plays, ThruPlays.
The fatigue check compares each ad with itself: its first 7 days of delivery against its last 7 days. Only judge ads that ran at least 7 days and got at least 1,000 impressions in each window. For each window, work out link CTR (Link clicks divided by Impressions) and CPM (Amount spent divided by Impressions, times 1,000).
Our audit's rule of thumb flags fatigue when link CTR falls 30% or more while frequency is not falling, or when CPM rises 25% or more. For example, if link CTR falls from 1.0% to 0.6%, that is a 40% drop and the ad needs a new version.
Hook rate is 3-second video plays divided by Impressions. Hold rate is ThruPlays divided by 3-second video plays. Only judge video ads with at least 1,000 impressions. Our audit's rules of thumb flag hook rate under 25% and hold rate under 15%.
- Fatigued ad: make a new version with a different opening and keep the offer.
- Low hook rate: change the first three seconds, meaning the first frame, the first line and the on-screen text.
- Good hook, low hold rate: the middle drags. Cut the video shorter or show the product and proof earlier.
Step 5: Fix structure and placements
Columns: Campaign name, Ad set name, Ad name, Delivery status, Amount spent. Our structure check is named after Meta's Andromeda ad delivery system and looks for three problems, listed below.
For placements, open your second export and add up Amount spent and Results by Placement. Our audit's rule of thumb flags any placement that takes 10% or more of spend at a cost per result 1.5 times the account's or worse. For example, if account cost per result is Rs 200, a placement that takes 15% of spend at Rs 320 gets flagged. First check that your creative suits that placement's format. If it does and the cost stays high, edit the placements in the ad set.
- Ad sets with fewer than 3 live creatives. Add different concepts, not small edits of one ad.
- A campaign split into more than 5 ad sets that each take under 10% of its spend. Merge them into fewer ad sets.
- The same creative running in more than one place, often with ad names ending in Copy. Keep one and pause the others.
Step 6: Make it a monthly habit
Run the checks on the same date each month and keep one sheet tab per month. You should see your waste total fall over time.
For a quick first pass before you build the sheet, upload the same export to the free Ads Audit at the free Ads Audit. It gives you a free score out of 100 from your own export, with your three biggest issues, in about a minute. It needs no login to your ad account. The file is stored encrypted, never used to train AI models, and deleted 30 days after upload.
Questions
Should I export at ad level or campaign level?
Ad level, from the Ads tab. It allows the most checks, and a pivot table can roll it up to ad sets and campaigns.
Are these thresholds targets every account should hit?
No. They are our audit's rules of thumb, and they compare each ad with your own account's numbers.
Why do I need the Day breakdown?
The fatigue check compares an ad's first 7 days with its last 7 days. You cannot split those windows without daily rows.
My video columns are empty. What now?
Add 3-second video plays and ThruPlays from the Columns menu before you export. Image ads will stay blank, and that is fine.
If you run this checklist once a month, you catch waste before it adds up. For a free score from your own export, try the Ads Audit at the free Ads Audit.
Written by Monastic Media, Surat. The thresholds above are our audit's rules of thumb, not industry standards.