The 100-ad QA checklist
Launching one ad, you eyeball it. Launching a hundred, a single wrong setting repeats a hundred times and spends real money before anyone notices. This is the check order that catches the expensive mistakes first: structure before creative, tracking before copy, and everything before the ads are unpaused. Work top to bottom, tick as you go, and treat any unchecked box as a reason not to publish.
Before you build anything
The destination ad sets exist and are configured
Optimisation event, budget, schedule and audience are set on the ad set, not left at defaults. Building ads into an ad set you still plan to edit means editing twice.
The optimisation event is the one you actually want
Purchase, not Add to Cart, unless you have a deliberate reason. This single field decides who Meta shows the ads to, and it is the most consequential thing on the page.
Budget can support the number of ads you are about to create
Divide the daily budget by the number of ad sets, then by the number of ads in each. If a cell cannot reasonably produce results in a week, you are buying noise.
Dynamic creative status is known for every destination ad set
A dynamic creative ad set accepts exactly one ad. Pushing a batch into one fails on every ad after the first, usually with an unhelpful error.
The right page and Instagram account are connected
Especially on a new ad account or after a permissions change. The wrong page publishes ads under someone else's brand.
Creative
Every ratio you intend to place has been exported
Do not let Meta crop a 1:1 into a 9:16. Export the ratios you want, or accept that placements will show something you did not design.
Files are named so the ad names will make sense
Concept, variant and ratio in the file name. If the file is called final_v3_REAL.mp4, the reporting will be unreadable in six weeks.
Text on image leaves room for the placement UI
Stories and Reels overlay controls on the top and bottom of the frame. Keep key text inside the safe area.
First frame earns the stop
Motion, a face, or a pattern interrupt in the first second. A slow open is the most common reason a good ad underperforms.
Advantage plus enhancements are opted out where the creative is tested
If you are measuring the creative you shipped, Meta must not adjust brightness, add music, reframe or rewrite text on it. Verify what was applied after publish, do not assume the toggle held.
No stock or placeholder assets in the batch
One placeholder that reaches delivery costs more in brand damage than the whole test earns.
Copy
Primary text, headline and description are all set
Blank descriptions are filled in by Meta's automations on some placements, which means you did not write your own ad.
The offer in the ad matches the offer on the landing page
The most common conversion killer is a headline promising something the page does not repeat in the first screen.
Claims are ones you can back up
Meta enforces this, and so does the FTC. Personal attributes, health claims and before and after implications are the usual rejection causes.
No unfilled merge tokens or bracket placeholders
Search the batch for curly braces and square brackets before publishing.
Tracking
Destination URL is correct and loads
Click it. Then click it on a phone. A broken URL does not throw an error in Ads Manager, it just spends.
UTM template is applied to every ad, not just the first
This is the check people skip, and the one that quietly destroys a month of attribution.
Meta dynamic macros survive to click time
If your UTM uses campaign and ad set name macros, confirm the published URL still contains the literal braces rather than an encoded or resolved value.
Pixel and Conversions API are firing on the destination
Check Events Manager, not your memory. Event match quality matters as much as the event existing.
The attribution setting is what your reporting assumes
Comparing a 7-day-click ad set to a 1-day-click one and calling one a winner is a measurement error, not a result.
The publish step
Review the full list of ads that will be created
Names, destinations, creative and copy in one view. Reading it takes two minutes and is the cheapest QA in the whole process.
Publish paused
This separates creating ads from spending money on them. A mistake caught after publishing costs an archive click instead of a day of budget.
Ad count matches the plan
Six creatives by three copy variations by four ad sets is seventy two ads. If the batch created a different number, something silently dropped or duplicated.
After publish, before unpausing
Enhancement state verified per creative
Read back what Meta applied rather than trusting the request. This is the only way to know the ad running is the ad you built.
Preview at least one ad in every placement you bought
Especially Reels and Stories. Cropping problems only appear here.
Nothing was rejected in review
A shared copy or landing page problem rejects the whole batch at once. Fix it before unpausing the survivors.
Spend caps and schedules are in place
Particularly on a new account or an unfamiliar client. The cap you set now is the mistake you do not pay for later.
First 48 hours
Spend is actually distributing across ad sets
One ad set eating the whole budget on day one usually means the others are not getting a fair read.
No ad is delivering with an enhancement you opted out of
Enhancement state can change after review on some accounts. Check once early, then weekly.
Analytics agrees with Ads Manager
If your UTMs are right, session counts and platform clicks should be in the same neighbourhood. A large gap means the tracking check above missed something.
No decisions taken yet on under-fed cells
An ad with forty impressions has told you nothing. Give each cell the events it needs before killing anything.
Run this once as a team and it takes twenty minutes. Run it as habit and most of it collapses into the launch tool: naming, UTMs, enhancement opt-out and the pre-publish review become settings rather than steps.