---
title: "How to detect creative fatigue on Meta and TikTok ads"
description: "Creative fatigue is visible as a pattern, not as one bad metric: frequency climbing while click-through rate falls or cost per purchase rises. We compare the last 7 days of each ad account with the 21 days before, flag an account only when frequency is up more than 15% and CTR is down more than 10% or CPA is up more than 20%, and only then drill down to individual ads. Most of our false alarms came from the data, not from the audience."
date: 2026-10-11
lang: en
canonical: https://goingstellar.ro/methods/detect-creative-fatigue-meta-tiktok/
author: Going Stellar
publisher: GOING STELLAR S.R.L.
topic: E-commerce / Paid social
license: CC BY 4.0
alternate_ro: https://goingstellar.ro/ro/metode/oboseala-reclamelor-meta-tiktok/
---

# How to detect creative fatigue on Meta and TikTok ads

*Creative fatigue is visible as a pattern, not as one bad metric: frequency climbing while click-through rate falls or cost per purchase rises. We compare the last 7 days of each ad account with the 21 days before, flag an account only when frequency is up more than 15% and CTR is down more than 10% or CPA is up more than 20%, and only then drill down to individual ads. Most of our false alarms came from the data, not from the audience.*

> E-commerce · Paid social · 2026-10-11 · https://goingstellar.ro/methods/detect-creative-fatigue-meta-tiktok/

## Key points

- Creative fatigue on Meta and TikTok is a combination of signals: frequency rising more than 15% together with CTR falling more than 10% or CPA rising more than 20%.
- Compare the last 7 days with the 21 days before, anchored on the newest date that has data, not on today.
- A fatigue check run on frozen data reports a calm account, so every fatigue report should state its last day of data.
- On shared ad accounts that run several brands, split spend by a token in the campaign name before judging any brand's fatigue.
- Account-level fatigue names the account; finding the tired creative needs a separate ad-level drill-down.

## What creative fatigue is and the signal we use to detect it

Creative fatigue (also called ad fatigue or audience saturation) is when the same people see the same ads so often that they stop responding. On Meta and TikTok the signal is a combination: frequency rises, and at the same time click-through rate (CTR) falls or cost per acquisition (CPA) rises. We flag an ad account as fatigued when frequency is up more than 15% **and** either CTR is down more than 10% or CPA is up more than 20%, comparing the last 7 days with the 21 days before them.

Frequency is the average number of times one person saw the ads in a period (impressions divided by people reached). CTR is clicks divided by impressions. CPA is ad cost divided by purchases. No single one of these numbers is a fatigue signal on its own. CTR can drop because of a weaker new creative, CPA can rise because the auction got more expensive, and frequency can rise simply because the audience is small. The combination is what points to saturation.

The remedy for creative fatigue is to refresh the creatives or widen the audience. Because an outside agency runs these accounts for us, the fatigue check is an accountability tool: it tells us which account to raise with the agency and with what evidence.

## Step 1: compare a recent window with a baseline, per ad account

**1. Fix the windows relative to the last day that has data.** Recent window: the last 7 days. Baseline: the 21 days immediately before. Both windows are anchored on the newest date present in the data, not on today, because ad data arrives late and sometimes stops arriving altogether.

**2. Aggregate, then derive the ratios.** Sum impressions, clicks, purchases and cost across each window, then compute CTR, CPM (cost per thousand impressions) and CPA from the sums. Averaging daily CTRs gives small days the same weight as large ones. Frequency is reported per day, so we weight each day's frequency by that day's impressions.

**3. Compute the changes.** For each account: change in frequency, change in CTR, change in CPM, change in CPA, plus the current frequency and ROAS for context. CPM is shown but is not part of the flag, because a rising CPM is often auction competition rather than a tired audience.

**4. Apply the rule and a size filter.** Flag when frequency is up more than 15% and CTR is down more than 10% or CPA is up more than 20%. Skip accounts whose recent cost is too small to mean anything; with few purchases, CPA swings on its own.

## Step 2: read absolute frequency as well as the change

A change-based rule misses an account that has been saturated for weeks, because its frequency is high but no longer rising. We therefore also read the absolute frequency for the recent window. As a rule of thumb, a frequency above 3 to 4 on Meta, or above 5 on TikTok, deserves a look even when the change is small.

The reverse also matters. A TikTok account with a frequency of 2 to 3 and healthy return is not fatigued, even if one metric moved. Showing the healthy accounts next to the flagged ones keeps the report honest about what normal looks like.

## Step 3: drill down from the account to the ad

Account-level fatigue tells you which account, not which ad. Our warehouse stores daily insights per account and campaign, without an ad identifier, so the fatigue check cannot name the creative that is wearing out. For that we pull an ad-level report live from the Meta or TikTok API for the flagged account and rank ads by cost, purchases and CPA over the same windows.

On Meta, asking for daily ad-level breakdowns on accounts with many campaigns returned HTTP 500 errors, and requesting heavy creative fields did the same. Ask for aggregated periods and light fields first, then fetch creative details only for the few ads you intend to act on.

Separate test campaigns from sales campaigns before reading the drill-down. On multi-product accounts we mark a campaign as a test when its name contains TEST; otherwise a raw account report overstates the sales spend because of tests. A creative that is still being tested has not had time to fatigue.

## The traps: fatigue that was really a data problem

**Frozen data looks like a calm account.** All our Meta reporting once depended on a single long-lived access token. When it expired, every Meta account stopped syncing on the same day, and the error message named one account at random. A fatigue check run on frozen data reports no fatigue, because nothing changes. The check now states the last day with data and warns when it is old. The durable fix was a system-user token that does not expire, plus an alert days before any token expiry.

**A stopped sync is not always a dead token.** Our TikTok sync once stopped with a valid token, because the scheduler had stopped starting the job. Check that new rows arrive, not only that credentials are valid.

**The account name lies on shared TikTok accounts.** One TikTok advertiser account can run campaigns for several brands. Attribution then works by a token in the campaign name. An empty token on a shared account means the brand takes every campaign on it, which double-counted another brand's campaigns in our case. We once read an account's total as one brand's total when that brand had no live campaigns on it. Split shared accounts by campaign-name token before reading fatigue, and rename untagged campaigns so they carry the token.

**An empty account is not a permission error.** When the API answered successfully with zero rows for several TikTok accounts, the cause was that those accounts had not delivered (limited or unconfirmed status), not missing access.

## Where we were wrong

We had two fatigue rules in our own tooling. A generic creative-audit playbook said fatigue is CTR down more than 20% over 14 days. Our data-driven check used the composite rule above. The same campaign could be labelled fatigued by one and healthy by the other. We marked the composite rule as the one to use and left the generic playbook for qualitative creative reviews only.

We also treated the first version of the check as finished before we had verified its inputs. The thresholds were never the weak point; the stale data and the shared-account attribution were.

## Limits: what the fatigue check does not tell you

The rule is a heuristic. The percentages are reasonable starting points, not values fitted to our data, and an account can cross them for reasons that are not fatigue: a seasonal dip, a budget increase that pushed delivery into colder audiences, or conversion lag that makes the last days look expensive.

Weighting daily frequency by impressions approximates the true frequency over the window; it is not the same as the platform's frequency for the whole period, which counts unique people once. The check names accounts, not creatives, and it does not decide anything. A flagged account is a question for whoever runs the account, backed by numbers.

## Checklist

Confirm the newest date in the data before reading any change. Compare the last 7 days with the 21 before, per account. Flag only on rising frequency together with falling CTR or rising CPA. Read absolute frequency too. Split shared accounts by campaign-name token and exclude test campaigns. Drill down to ads live, with light requests, only on flagged accounts. Treat the flag as a question, not a verdict.

## Questions and answers

### How do I know if my Facebook or TikTok ads have creative fatigue?

Compare a recent window, such as the last 7 days, with a baseline of the 21 days before. Creative fatigue shows as frequency rising while click-through rate falls or cost per acquisition rises. We flag an account when frequency is up more than 15% and CTR is down more than 10% or CPA is up more than 20%. One metric moving alone is not enough evidence.

### What ad frequency is too high on Meta and TikTok?

As a rule of thumb we look closely when the recent frequency is above 3 to 4 on Meta or above 5 on TikTok, even if it is not rising. A change-based rule alone misses accounts that have been saturated for weeks. Frequency is impressions divided by people reached, so a small audience reaches a high frequency quickly.

### Why is CTR dropping on my ads if frequency is not rising?

A CTR drop without rising frequency usually points to something other than fatigue: a weaker new creative, a change in placements, or delivery moving to a different audience. Fatigue means the same people seeing the same ads too often, so frequency should rise first. Check the ad-level report to see which creatives lost CTR.

### Can stale ad data hide creative fatigue?

Yes. If the ad data stops syncing, for example because an access token expired, the metrics stop changing and a fatigue check reports no problem. Anchor the comparison windows on the newest date present in the data, print that date in the report, and warn when the newest date lags behind the normal sync schedule.

### Should I measure creative fatigue per ad or per ad account?

Start per ad account to find where saturation is happening, because account totals are stable enough to compare across weeks. Then drill down to individual ads in the flagged account to choose which creatives to pause or replace. Ad-level numbers on their own are noisy, especially for ads with few purchases.

## How to cite

**Cite this as:** Going Stellar (2026). *How to detect creative fatigue on Meta and TikTok ads*. GOING STELLAR S.R.L.. https://goingstellar.ro/methods/detect-creative-fatigue-meta-tiktok/

```bibtex
@misc{goingstellar2026detect,
  title  = {How to detect creative fatigue on Meta and TikTok ads},
  author = {{Going Stellar}},
  year   = {2026},
  url    = {https://goingstellar.ro/methods/detect-creative-fatigue-meta-tiktok/},
  note   = {2026-10-11}
}
```

Licence. Free to quote with attribution.

## Also available

- This page as HTML: https://goingstellar.ro/methods/detect-creative-fatigue-meta-tiktok/
- Same article in Romanian: https://goingstellar.ro/ro/metode/oboseala-reclamelor-meta-tiktok/
