Facebook Ads Not Converting? Diagnose It by Symptom (DTC Playbook)
By Denzel Geng · Updated October 30, 2026
You don't need to know media buying to fix this. Find the line in Ads Manager where people drop off, read the one section for that symptom, and change the one thing it points to. Every section ends with a real ad that gets that step right, with its Ad Library link and how long it ran.
When Facebook ads aren't converting, find where people drop off. Impressions but few clicks means the hook isn't stopping the scroll. Clicks but no add-to-carts means the page doesn't match the ad or the price. Add-to-carts but no sales means checkout costs, trust or shipping. Results that faded mean the ad wore out. Spend with few impressions means your CPM is too high.
See what's winning in my niche- Which symptom do you have?
- Is the sale actually missing, or just missing from Ads Manager?
- Impressions but few clicks? Your hook isn't stopping the scroll
- Clicks but no add-to-carts? The page doesn't match the ad
- Add-to-carts but no sales? Something at checkout is stopping them
- Worked at first, then dropped? The ad has worn out
- Spending but getting few impressions? Your CPM is too high
- Is it your ads or the whole auction?
- What to make next
Which symptom do you have?
Open Ads Manager, pick the last 7 days, and add four columns: impressions, link clicks, adds to cart and purchases. The first big drop between two columns is your symptom. Fix that one first, because a better checkout can't help an ad nobody clicks, and a better hook can't help a page that loses everyone.
| What you see | Where the problem is | Read this |
|---|---|---|
| Plenty of impressions, few link clicks | The first second of the ad: the hook | Symptom 1 |
| Plenty of clicks, few adds to cart | The landing page or the price doesn't match what the ad promised | Symptom 2 |
| Adds to cart, few purchases | Checkout: extra costs, trust, shipping or payment options | Symptom 3 |
| It worked for a few weeks, then results slid | The ad wore out (creative fatigue) | Symptom 4 |
| Money is going out but impressions are low | CPM is too high: narrow audience, few placements or a busy auction | Symptom 5 |
Before you read any row, do the check in the next section: if Ads Manager is missing sales, every row will look worse than it is.
Is the sale actually missing, or just missing from Ads Manager?
Check this before anything else: compare the purchases Ads Manager reports with the orders in Shopify (or your store) for the same days. If Shopify shows sales from Facebook traffic that Ads Manager doesn't, the ads may be converting and the tracking isn't counting it.
Meta says it directly: "Issues with your data source setup can lead to a lower volume of attributed events and an increased cost per action." Open Events Manager and confirm three things: the Purchase event fires on the thank-you page, it fires once per order (not twice from both the pixel and the Conversions API), and the event match quality isn't flagged as poor.
Also give the numbers time. Some buyers click today and pay days later, so a single bad day is not a verdict. Read a rolling 7-day window and change one thing at a time; if you change the ad, the budget and the audience on the same day, you won't know which one helped.
Impressions but few clicks? Your hook isn't stopping the scroll
A low click-through rate with healthy impressions almost always means the first second of the ad gives the viewer no reason to stop. Meta is showing the ad; people are scrolling past it.
How to read it: compare the ad's link CTR with your account's own average for the last 4 to 8 weeks, on the same placement. For video, also check hook rate (3-second views divided by impressions). If both are below your norm, the opening is the problem. If hook rate is fine but CTR is low, people watched and didn't feel a reason to click, so look at the middle and the offer. There's no universal good CTR; your own history is the benchmark.
What to do: change the opening, not the colours. Write three new first lines for the same selling point and test them against each other, holding everything else the same. The strongest openers name something the buyer already thinks: their problem, their doubt, or the price they flinch at. Our ad angles vs hooks guide shows the difference between changing the hook and changing the reason to buy, and hook rate explains the metric.
What's winning here: RYZE Superfoods' creator video opens on a comment sticker reading “Love RYZE but it's so expensive 😭 can you guys lower the price??” and the creator reads it out loud before saying anything about the product. It had run 124 days as of September 24, 2026, and about 8 RYZE ads carry the same spoken line. Why it works: the viewer who was thinking “too expensive” hears their own sentence in the first second, which stops exactly the person the sale is for. The usual version opens on the product and a benefit the viewer has already heard. Full teardown.
Clicks but no add-to-carts? The page doesn't match the ad
When people click but don't add to cart, the ad promised one thing and the page showed another: a different headline, a different offer, or a price that reads differently from the ad.
How to read it: first compare link clicks with landing page views. A big gap means people leave before the page loads, so fix speed first. If most clicks become page views but few become adds to cart, the page is the leak. Then open your own ad and your own landing page side by side on your phone and ask: does the first screen of the page repeat what the ad said, in the same words and the same price?
What to do: make the page's headline restate the ad's promise. If the ad leads with a price, show that same number, in the same unit (per serving, per week, per pack), above the fold. If the ad speaks to one problem, send it to a page about that problem, not your homepage. One ad, one promise, one page that keeps it.
What's winning here: Laird Superfood's “podcast tax” ad tells greens-powder buyers they've been paying for a rival's advertising, and claims “$0.55 less per serving on subscription.” The copy had run 44 days as of September 24, 2026, across 3 live ads. Why it works: the link skips the product page and opens a page built for this one comparison, whose headline asks the ad's question again and whose table shows the same $0.55 per-serving gap ($2.63 against $2.08). Nothing changes between the click and the page. The usual version sends a sharp comparison ad to a generic product page. Full teardown.
Add-to-carts but no sales? Something at checkout is stopping them
When people add to cart and leave, the usual cause is a surprise at checkout: a cost they didn't expect, a delivery time they didn't like, or a moment of doubt about the store. Abandoned carts are normal; Baymard Institute puts the average documented rate at 70.22% across 50 studies. Among shoppers who left for a reason other than “just browsing,” 40% said extra costs (shipping, tax, fees) were too high, 20% said delivery was too slow, 19% didn't trust the site with their card, and 13% didn't like the returns policy.
How to read it: add the “checkouts initiated” column. If adds to cart rarely turn into checkouts, the cart page is losing them (often shipping shown late). If checkouts don't turn into purchases, look at payment options and trust signals on the checkout itself.
What to do: show shipping cost or your free-shipping threshold before the cart, not after. Put your returns promise in the ad and repeat it on the page. Offer the payment methods your buyers use (Shop Pay, Apple Pay, PayPal, buy now pay later).
What's winning here: Quince's everyday-price ad carries one other promise besides price on every card: “Free shipping & returns,” repeated on the product page as “Free shipping & easy returns for 365 days.” The line has run on about 93 ads, the oldest for 271 days as of September 24, 2026. Why it works: the two costs people abandon over are answered in the ad, before the cart. Full teardown. For a price that's hard to swallow, Brooklinen changed how buyers pay instead: pillows payable with pre-tax HSA/FSA money, 78 days live.
Worked at first, then dropped? The ad has worn out
An ad that converted for a few weeks and then slid, with nothing else changed, has usually worn out: the people most likely to buy have seen it, and the rest have learned to scroll past it.
How to read it: frequency climbing while CTR falls over one to two weeks, and cost per purchase rising. Meta may also show a "Creative fatigue" status in the delivery column when an ad's cost per result is far above your past ads. Wearing out fast is normal: in Motion's 2026 benchmark, about half of all creatives were turned off before day 28 (see how many ad creatives to test). First make sure the ad ever worked: one that never converted needs a new idea, not a refresh.
What to change: if the selling point still lands (comments and saves are still positive), keep it and change the execution: a new first line, a new opening shot, or a new format. If the selling point itself is tired, make a new ad around a different reason to buy. Recolouring the same ad or recutting the same video rarely helps; people tuned out the message, not the colours. Have the next ad ready before this one dies; the creative testing playbook shows how to test it on a small budget, and ad fatigue lists the signals.
What's winning here: Huel's “A week of breakfast for less than £20” static ran 179 days (March 20 to September 15, 2026) and reached 5,116,193 people in the UK. Why it works: alongside it, Huel kept the same image and the same copy and changed one number, the price of the reader's “quick breakfast,” running £5, £8 and €7 versions. That's a refresh that keeps what works and changes one thing you can read. Full teardown.
Spending but getting few impressions? Your CPM is too high
If the budget is going out but the ad reaches few people, each thousand impressions costs too much: usually the audience is too narrow, the placements are limited, or the ad is stuck in learning.
How to read it: check CPM against your own last 4 to 8 weeks, then check the ad set. Meta's pricing page says ad sets with at least 2 million people “often see better performance,” and its help page on high costs says limiting placements can "prevent the delivery system from pursuing lower cost opportunities." A “Learning limited” badge means the ad set isn't getting the roughly 50 results a week it needs to settle.
What to do: widen the audience (or use Advantage+ audience), turn on Advantage+ placements, and give each ad a vertical 9:16 version so it fits Stories and Reels. Fewer, bigger ad sets learn faster than many small ones. If an ad simply isn't engaging anyone, Meta charges more to show it, so a stronger hook lowers CPM too. The full list of causes, in Meta's words, is in why is my Meta CPM so high.
What's winning here: Carpe's “Do not buy this on Amazon.” video ran 100 days (April 1 to July 10, 2026) to an audience set to the whole UK, ages 18 to 65+, with one 19-second video cut in two crops (9:16 and 4:5) across Facebook, Instagram, Messenger and Threads. It reached 576,305 people. Why it works for delivery: a wide audience, every crop it needs and four placements give Meta room to find cheap impressions. The usual version targets a narrow interest group in one feed-only crop. Full teardown.
Is it your ads or the whole auction?
If every campaign got worse on the same dates, it's probably the auction, not your ads. Sale events and Q4 bring more advertisers bidding for the same people. Meta's Auction Competition Change diagnostic shows when that happened, and Meta treats a change as significant when it's over 20%.
If one campaign or one ad dropped while the others held steady, the cause is in that campaign, and the symptom sections above are where to look.
When it's the market, hold your proven ads, avoid big edits that send ad sets back into learning, and judge the week on cost per purchase rather than CPM. A batch of brand-new ads launched into an auction spike spends its learning phase at the year's highest prices. Build them before the busy season instead; the high CPM playbook shows the Q4 numbers.
What to make next
Most of these fixes end in the same place: you need a new ad, built from what's already winning in your niche. ViralMojo finds those ads from your product link, works out why each one works, and makes your version in one of four ways:
A static ad
For symptoms 1 and 4, the cheapest new hook to test: pick a static that's winning, add your product and offer, and download it in one click. See remake a competitor's static ad.
Your product in a winning video
When a video in your niche keeps running, keep the hook, pacing and structure with your product in every frame. See put your product in a competitor's video ad.
An AI UGC video
A person-to-camera video generated with the agent from the research, so you can test several openers in a day. See AI UGC vs real UGC.
A real creator
We find creators on TikTok and Instagram who fit the ad and reach out; you see the rate and turnaround before you pick, and we send the brief. See find UGC creators.
Common questions.
Clicks without sales mean the ad works and the loss happens after the click. Check where: if few clicks become adds to cart, the landing page doesn't match what the ad promised, often a different headline or a price shown differently. If adds to cart don't become purchases, something at checkout stops people, most often shipping or other extra costs, slow delivery, or trust. Also confirm Ads Manager isn't simply missing sales that your store recorded.
Usually because the ad wore out: frequency rose, CTR fell, and cost per purchase climbed over one to two weeks with nothing else changed. The other two common causes are a recent big edit that sent the ad set back into learning, and the whole auction getting more expensive, which you can spot when every campaign drops on the same dates. Check those three before rebuilding anything.
A good CTR is one at or above your own account's recent average for the same placement. Averages vary too much by product, offer and placement to be a target. If an ad's link CTR and hook rate are both below your norm, change the opening of the ad first.
Wait until the ad set has enough results to leave the learning phase, which Meta puts at about 50 results in the week after the last significant edit, and judge on a rolling 7-day window rather than one day. Compare with your store's own order data before you turn anything off, because some buyers pay days after the click.
Change the ad first in most cases. With broad targeting, the ad itself decides who stops and clicks, so a new hook or a new reason to buy usually moves results more than a new interest group. Change the audience when the ad set is too narrow to deliver cheaply, which shows up as a high CPM and few impressions.
Find the symptom. Make the next ad from what's winning.
Whatever the symptom, the fix usually ends in a new ad.
Paste your product link. ViralMojo finds the ads winning in your niche, works out why they win, and turns them into your own: static ads, AI video, a winning ad with your product in it, or a real creator who shoots it for you.
- The ads winning in your niche, with how long each has run
- Why each one works: the hook, the reason to buy, the structure
- Your version as a static, an AI video, your product in their ad, or a real creator
- All from your product link
Plans from $99/mo, flat — see ViralMojo pricing.