Media Buying Audit & Optimization Playbook
The rules of thumb for auditing a live client account and deciding what to scale, what to optimize, and how to troubleshoot. Distilled from the 2026-06-29 media-buying training call (Sean + Tasneem onboarding a new media buyer).
This is the companion to Media Buyer Launch Playbook. That one covers getting a new client live. This one covers everything after launch — the recurring audit you run when an account needs attention.
How to use it: run the audit process first, then apply the three rule sets (scaling, optimizing, troubleshooting). The one-glance cheat sheet at the bottom is the fast reference once you know the account.
The Audit Process — do this every time
- Open both sources side by side. The Profit & Loss Sheet (Imported tab) and Facebook Ads Manager. The sheet is the source of truth for appointments — Ads Manager's lead and CPL counts can be wrong (the sheet often shows more leads than Ads Manager). If a number looks too low, a setter may not have linked the appointment yet — check with the setter before reacting.
- Decide: is it a volume problem or a quality problem? Volume = not enough leads coming in. Quality = leads come in but no one answers or books (no response, bad number). It can also be a market problem — some accounts only get cut after many failed tries.
- Run the AI analysis. Export the Imported tab as a CSV. Use the team's standard analysis prompt (shared by Sean directly — ask him if you don't have it). It teaches the AI the campaign / ad set / ad structure and what "scheduled" vs "canceled" means. Set the start row to your date window (for example, June 1). Use Claude or ChatGPT — not Gemini (its analysis is unreliable). The output shows which ads produced leads, and which of those leads became appointments.
- Look at the live ads for context. Filter to ads that got at least one lead in the last 30 days. Find the ad driving the appointments — it is usually also where most of the leads come from. That ad is your winner. Everything else is measured against it.
- Account location note. Most accounts live on Home Project Pal. QPS is a franchise — multiple accounts, not all in one place. Confirm you are in the right account first.
Reading the Kill Switch (lead quality)
Kill-switch reasons fall into two buckets. Only the first bucket is the media buyer's job to fix.
In your control — each one points to a fix
| Reason |
What it usually means |
Fix |
| Out of range |
Radius or location question is wrong |
Fix the geo (radius / location qualifier) |
| Job too small |
Creative is making people think it is a repair or small job |
Fix the creative message |
| Price shopper |
Mostly out of your hands, but the ad can be attracting bargain hunters |
Watch for a pattern |
| Bad number |
Wrong or fake number — often autofill junk |
Test the WhatsApp-number fix (see Troubleshooting) |
| No response |
Never answers — often autofill junk |
Test the WhatsApp-number fix (see Troubleshooting) |
Out of your control — ignore these for ad decisions
Callback · Duplicate · Change mind · Canceled · Booked by company.
React to patterns, not single cases. One "job too small" is noise. A cluster of them means the creative is sending the wrong signal.
Scaling — rules of thumb
- Find the winner first, then feed it. Scale the ad that is actually producing appointments — not the one with the most clicks. A winner stuck on a small budget is the most common easy win.
- Let cost-per-appointment decide how far to go. If it is comfortably scalable (rule of thumb: under ~$150), push budget. When it gets close to the value of the appointment, scale carefully and fix booking rate first. CPL alone is not a reason to stop if the appointment math works.
- Raise budget to escape the learning phase. When an ad is still the winner but CPLs are creeping up, a budget increase can push it back out of learning — don't just kill it.
- Increase gradually. On a new or duplicated test, ramp the budget over a few days. Don't dump the full budget on day one.
- Keep at least two ad copies, even with a clear winner. Facebook performs better with something to A/B test against. If three copies all work, keep all three — duplicating down to only the winner often performs worse than leaving them all on.
- New launches: start wide, then narrow. Launch around 5 ad copies, keep the 2–3 that work, turn off the rest.
- Split the budget roughly 50/50 — proven vs. testing. Half toward what you know works, half toward new offers and tests.
Optimizing — rules of thumb
- Creative and copy must match. The number, price, and warranty on the image have to match the ad copy. A mismatch confuses the prospect and undercuts the offer.
- The big on-image number does the work. That is what grabs attention — not a small price difference buried in the copy. Lead with the proven number and the stronger warranty (10-year beats 1-year).
- Reuse winning copy across formats. Once an ad copy wins in a market, use that same copy for the video version of the same starting-price offer.
- Keep defaults current — and tell the creative team when something dies. Tired lines like "save thousands" stop pulling. The creative team doesn't always hear when something stops working, so it is on the media buyer to flag both outright mistakes (wrong price) and stale defaults.
- Kill wrong-geo / wrong-info ads. If an ad's copy references the wrong state, area, or offer, turn it off — don't try to optimize around it.
- Scan headlines and preview text for outliers, not tiny gains. You are hunting the obvious winner and the obvious loser, not micro-optimizing small differences.
Troubleshooting — rules of thumb
- No response / bad numbers → add a manual "WhatsApp Number" field. Phone numbers autofill from Facebook, so you collect a lot of junk. A WhatsApp field placed right under the phone field forces the person to type a real number, which improves pickup.
- Do not delete the phone field or turn it into a free-text question to force manual entry — Facebook will likely restrict or ban the page. The WhatsApp field is the safe workaround.
- Test it as a separate ad set: winning static vs. the same static plus the WhatsApp field. Compare booking rate. Roll it out only if pickup improves.
- Don't add WhatsApp to video right away. Video already gets better pickup (viewers are more engaged), so the extra friction may just raise CPL without paying off.
- High clicks / CTR but zero leads = wrong or unserious audience. Pause it and move budget to what actually converts. Engagement is not conversion.
- High CPM is a warning, not a kill order by itself. Combine it with leads and appointments before deciding.
- Test one variable at a time. When testing the WhatsApp field, change only that. Same with music — test song variations of the same video in one ad set (~$40/day) and let Facebook pick.
- Merge competing single-asset campaigns. Two campaigns each running one asset (for example, $30/day each) compete against each other. Merge them into one ABO campaign so they stop fighting and reach more audience.
- Watch for offer cannibalization on the same page. If you run two prices to the same audience, anyone who saw the cheaper offer won't click the pricier one. Make the higher offer visually distinct, or it just wastes spend.
- Give new creative a fair window. Let a new static run at least ~1,000 impressions before judging it.
- Don't over-disrupt what's working. Make minimal changes to stable campaigns. Be cautious with anything that could reset the learning phase.
One-Glance Cheat Sheet
| What you see |
Usually means |
Do this |
| Winner ad stuck on a small budget |
Underfed |
Scale budget (if cost-per-appointment is scalable) |
| Cost-per-appointment well under ~$150 |
Room to scale |
Increase budget |
| Cost-per-appointment near the appointment's value |
Too close for comfort |
Scale carefully; fix booking rate first |
| CPL rising over 1–2 weeks |
Ad fatigue |
Refresh creative or raise budget to re-enter learning — don't auto-kill |
| High clicks / CTR but no leads |
Wrong or unserious audience |
Pause it; move budget to what converts |
| High CPM alone |
Warning only |
Check leads / appointments before killing |
| Pattern of "out of range" |
Geo is wrong |
Fix radius / location question |
| Pattern of "job too small" |
Creative signals a small / repair job |
Fix the creative message |
| Pattern of "no response" / "bad number" |
Autofilled junk numbers |
Add manual WhatsApp field; test |
| Image number ≠ copy number |
Mismatch hurting the offer |
Align image + copy, relaunch |
| Two campaigns, one asset each |
Competing for the same audience |
Merge into one ABO campaign |
| Two price offers to the same audience |
Cannibalization |
Make the higher offer visually distinct |
Worked Examples (from the training call)
QPS Charleston — volume + quality problem
- Symptom: high CPL, low appointment volume.
- The $8,997 static was the only ad producing appointments — and most of the leads — but it was capped at $25/day.
- Mismatch found: the image said $8,997 / 10-year warranty; the copy said $8,897 / 1-year. The big on-image number is what was working, not the $100 discount.
- CPL was rising over the last 1–2 weeks = early fatigue.
- Plan: fix the mismatch (match the number, use the 10-year warranty) and relaunch; increase the winner's budget; relaunch the "Lean Mean Machine" video with the corrected copy; spin up a separate ad set to test the WhatsApp field vs. the standard form.
Weathermasters — engagement without conversion
- Symptom: a new financing video had the highest clicks and CTR but 0 leads after $70 spent (CPM ~$70). The financing static converted — 2 leads from 7 clicks → 2 appointments.
- Plan: pause the financing video and the $7,997 statics; scale the financing static; ask the creative team for video variations with different music and run them together in one ad set (~$40/day); test the new static (Carrier brand) for both the $7,997 and financing offers; merge the two $30/day CPO campaigns into one ABO campaign (~$75/day) so they stop competing.