Your Meta ads were hitting 5x ROAS for 6 months. Then Tuesday morning, performance falls off a cliff. CPL doubles. Close rates drop. Your account manager doesn't have a clear answer. Sound familiar?
We've debugged this exact pattern 200+ times across contractor accounts. There are 8 specific causes. The fix depends entirely on which cause you're hitting — running the wrong fix for the wrong cause makes things worse. Below is the diagnostic.
Pattern 1: Creative fatigue (most common cause)
If you're running the same creative for 60+ days, this is almost certainly your problem. Meta's algorithm rewards creative novelty — same audience seeing the same ad 5+ times stops engaging, CTR drops, CPC rises, ROAS collapses. Diagnostic: check Frequency in Ads Manager. If average frequency over the last 7 days is 4.0+, you're in fatigue territory.
Fix for creative fatigue
- Launch 2-3 new creative variations within 7 days
- Kill the lowest-performing creative in your active set
- Aim for 2-3 ads in active rotation per ad set, not just 1
- Schedule creative refreshes every 60-90 days going forward, not reactively
Pattern 2: Audience saturation
If you've been running to a 1% Lookalike Audience for 6+ months, you may have reached most of your addressable audience already. Diagnostic: check Reach % in Ads Manager. If you've reached 40%+ of your target audience size, you're saturating. The algorithm is fighting for the remaining 60%, which is harder to convert (the obvious customers were already won).
Fix for audience saturation
- Expand to 3% Lookalike (broader audience, slightly less precise)
- Layer in 5% Lookalike or interest-based audiences as separate ad sets
- Refresh your Custom Audience with newer customer data (rebuild monthly with last-12-months customers)
- Add a retargeting layer to recapture warm audiences who didn't convert first time
Pattern 3: iOS 14.5+ attribution loss
If you don't have Conversion API installed, you're missing 30-50% of conversion signals due to Apple's privacy changes (iOS 14.5+, ATT prompt). Meta's algorithm optimizes against what it can SEE — and it can't see iOS users who opted out of tracking. Result: Meta delivers leads to the cheapest impressions (worst quality audiences) because it doesn't know your real conversions.
Fix for iOS attribution loss
- Install Meta's Conversion API (CAPI) — server-side event tracking that bypasses iOS restrictions
- Use a tool like Stape, Trackify, or Conversions API Gateway to simplify CAPI setup
- Send all events server-side (PageView, Lead, Purchase) not just client-side via Pixel
- Verify CAPI is firing correctly using Meta's Events Manager — look for 'Server' as the event source on conversion events
Pattern 4: Seasonality / market shift
Most contractor trades have seasonal demand patterns. Roofing peaks in storm season + Q4 push. HVAC peaks in temperature transitions. Plumbing has Q1 frozen-pipe spikes + Q4 holiday clog spikes. If your performance dropped at the same time of year you're seeing demand soften, the fix isn't 'fix the ads' — it's 'shift creative + offers to match seasonal demand.'
Fix for seasonality
- Switch creative to seasonally-relevant offers (HVAC: spring tune-up specials in March; furnace pre-buy in October)
- Reduce ad spend 20-30% during deepest seasonal lulls (don't fight the demand wave)
- Layer in evergreen services that don't have the same seasonal pattern (maintenance plans, financing offers)
- Pre-position creative 4-6 weeks BEFORE seasonal demand spikes to capture early buyers
Pattern 5: Account learning reset
If you made significant changes to your account (new ad set, new audience, big budget increase, paused + restarted), Meta resets the campaign learning phase. CPL spikes 30-50% for 7-14 days while the algorithm re-learns. Most contractors panic and revert changes — making things worse. Diagnostic: did you make any major changes 7-14 days before performance dropped?
Fix for learning reset
- Hold steady for 14 days — don't make ANY more changes during the relearn phase
- Watch CPL trend daily; expect it to drop 30-40% from initial spike by day 14
- If still elevated at day 21, the issue isn't learning reset — diagnose other patterns
- Going forward: avoid making more than 1 major change per 14-day period
Pattern 6: Account-level issue (rare but devastating)
Sometimes Meta flags your account for review (often for ad-policy violations like 'free' language, financing claims, weight-loss adjacent claims). Account flags suppress ALL your delivery until resolved. Diagnostic: check Account Quality in Business Manager. Look for 'Restrictions' section.
Fix for account-level issues
- Review Account Quality dashboard for any restrictions
- Submit appeal if restrictions exist (most are reversible if you remove the policy-violating element)
- Audit recent ads for policy issues: 'free' claims, before/after weight-loss imagery, financing without proper disclaimers, miracle-cure language
- Replace any flagged creative with policy-compliant variations
Pattern 7: Landing page or website issue
If your landing page broke, slowed down, or stopped tracking conversions, Meta still serves ads but conversion data dries up. Without conversion signal, Meta delivers to the cheapest impressions (worst audiences) and ROAS collapses. Diagnostic: check landing page load speed at PageSpeed Insights + verify Meta Pixel is firing correctly.
Fix for landing page issues
- Check page load speed — should be under 2.5 seconds; if 4+ seconds, conversion drops 50-60%
- Verify Meta Pixel is firing on the landing page using Facebook Pixel Helper extension
- Test the form submission end-to-end (are leads actually arriving in your CRM?)
- Check that mobile experience works (60-80% of contractor Meta traffic is mobile)
Pattern 8: Competitor entry / bid pressure
If a major competitor entered your market or significantly increased their Meta budget, auction prices rise. Your CPM goes up; CPL follows. Diagnostic: check the Meta Ad Library for new competitor ads in your trade + zip codes. If a major brand or new competitor launched in the past 30 days, that's likely your cause.
Fix for competitor pressure
- Differentiate creative — if competitors run generic 'free quote,' you run owner-on-camera + before/afters
- Lead with proof competitors can't fake (your specific Google rating + review count + years in business)
- Expand audience to less-saturated segments (older homeowners, different zip codes within service area)
- Sometimes accept higher CPL — if cost per booked job is still under your target, competitor pressure is fine to absorb
The 5-minute diagnostic flowchart
- Step 1: Check creative ages. Any over 60 days? → Pattern 1 (creative fatigue)
- Step 2: Check audience reach %. Over 40%? → Pattern 2 (saturation)
- Step 3: Is Conversion API installed? → No: Pattern 3 (iOS attribution)
- Step 4: Is performance drop seasonal? → Pattern 4 (seasonality)
- Step 5: Did you make major account changes 7-14 days ago? → Pattern 5 (learning reset)
- Step 6: Check Account Quality. Any restrictions? → Pattern 6 (account flag)
- Step 7: Test landing page speed + Pixel. Issues? → Pattern 7 (landing page)
- Step 8: Check Ad Library for new competitors in your zip codes → Pattern 8 (competition)
Most performance drops are Pattern 1 (creative fatigue) or Pattern 3 (iOS attribution loss without Conversion API installed). If you're stumped, fix those two first — they cover ~60% of cases. The other 6 patterns each cover smaller specific situations.