Install
$ agentstack add skill-mardab96-linkedin-ads-claude-skills-frequency-fatigue-check-linkedin-ads ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Frequency Fatigue Check for LinkedIn Ads
Use this skill when
This skill diagnoses audience-exposure saturation: a small matched audience carrying too much budget, so the same members see the campaign again and again. It reads impressions, reach, frequency, and audience size against spend to tell real over-exposure apart from normal noise, and returns a concrete plan to widen the pool, cap frequency, or trim budget. Small B2B audiences saturate fast, and the tell is reach flattening while frequency keeps climbing.
If the issue is the ad itself wearing out or the format mix going stale (ad-level CTR and engagement decay, single image versus document versus video versus thought leader, rotation gaps), use creative-fatigue-audit-linkedin-ads instead. This skill is about how many times each member is served; that one is about which creative is tired.
Common user requests:
- "My audience is only 12,000 people. How often is each one seeing the ad?"
- "Frequency is climbing on a small pool. Do I widen the audience or cap it?"
- "The same members keep seeing our ad. Is the budget too big for this audience?"
- "Leads dried up but spend held steady and the audience is tiny. Is it saturation?"
Do not use this skill when:
- A specific ad's CTR or engagement is decaying or the format mix is stale while reach is still growing: use creative-fatigue-audit-linkedin-ads.
- The audience is built wrong (over-narrow, overlapping, stacked facets): use audience-targeting-audit-linkedin-ads.
- Budget is reaching off-ICP seniorities, industries, or company sizes: use demographics-leak-finder-linkedin-ads.
- You need to locate where the leak sits across the whole account first: use wasted-spend-finder-linkedin-ads.
Required input
Ask for the narrowest set of data that answers the question. If a field is missing, mark it as an assumption and say so; never invent frequency or reach numbers.
Minimum useful data:
- A time series (weekly or every few days) per campaign, not just a single lifetime total. Saturation is only visible over time.
- Audience size for each campaign (the estimated matched audience from Campaign Manager).
- Daily or total budget and the bid strategy (Maximum delivery, Cost cap, Manual).
- Objective and ad format (single image, video, document, carousel, thought leader, and so on).
Per period, request these columns where available: campaign name, impressions, reach or unique members reached, frequency, clicks, CTR, average CPM, average CPC, conversions, leads, cost per lead, and conversion rate. LinkedIn does not always surface reach and frequency directly, so if only impressions and audience size exist, estimate cumulative frequency as impressions divided by reached members and label it an estimate.
Confirm before analysis: was creative, targeting, budget, or the offer changed inside the window? A mid-window swap can mimic or mask saturation.
Analysis workflow
- Normalize the time series. Align every campaign to the same period buckets, standardize column names and currency, and drop the current in-flight partial period so a half-finished week does not read as a crash.
- Build the reach-and-frequency estimate. If reported reach and frequency exist, use them. Otherwise approximate cumulative reach against audience size and cumulative frequency as impressions divided by reached members, and per-period frequency as period impressions divided by reached members. Flag whichever you used.
- Plot exposure against fresh reach. For each campaign, track cumulative reach as a share of the matched audience alongside per-week frequency. Saturation shows as reach flattening near the audience ceiling while frequency climbs and CPM holds or rises; CTR and conversion-rate decline confirm it rather than lead it.
- Separate saturation from other causes. Falling CTR with flat frequency and unsaturated reach is a creative or format problem, so route to creative-fatigue-audit-linkedin-ads rather than blaming the audience. Also rule out a tracking break, seasonality, an offer change, or budget-driven delivery shifts.
- Quantify the audience-and-budget squeeze. Show how a small audience plus a large daily budget forces frequency up: the same spend spread over fewer members means more repeats per member per week. Model what reach and frequency would look like if the audience were wider or the budget lower.
- Classify each campaign: healthy, early saturation, deep saturation, or too little data to judge.
- Recommend the least disruptive fix first: audience expansion to add fresh members, then a frequency or budget cap, then a creative rotation if wear appears inside the fresh reach, then pause only when saturation is severe and confirmed.
Decision rules
Treat every number here as a starting heuristic that shifts by vertical, audience size, and account maturity. Enterprise ABM lists of a few thousand members tolerate far less exposure than a 300,000-member audience.
Early saturation is likely when, across three or more periods:
- per-week frequency climbs past roughly 3 to 4 on a small audience while reach growth slows (you are re-showing the same members, not finding new ones),
- cumulative reach approaches a large share of the matched audience (a starting heuristic is 60 to 70 percent reached), so few fresh members remain,
- CPM holds or rises while incremental reach per dollar falls,
- CTR and conversion rate drift down as confirmation, not as the lead signal.
Deep saturation is likely when reach has plateaued near the audience ceiling, per-week frequency is high (mid-single digits or above on a small pool), and cost per lead has risen sharply. At that point new creative alone cannot manufacture new members; the pool itself is exhausted.
Prefer audience expansion when reach has plateaued and frequency is the clear driver. Prefer a frequency or budget cap when a small audience plus an oversized budget is manufacturing the exposure. Route to creative-fatigue-audit-linkedin-ads instead when reach is still growing but a specific ad has gone stale.
Do not call saturation when data volume is thin, when the window includes a creative or offer change, when tracking is suspect, or when the decline is a single noisy period. Mark those "needs review" and say what data would resolve it.
Output format
Return a short readout:
Verdict per campaign
Healthy, early saturation, deep saturation, or insufficient data, with the reach share and frequency estimate that support it, plus whether reach and frequency were reported or estimated.
Exposure evidence
A compact period-by-period view: cumulative reach share, per-week frequency, CPM, and cost per lead over time, so the trend is visible rather than asserted.
Recommended action
For each saturated campaign: expand audience, cap frequency or budget, rotate creative, or pause. Include a concrete cadence (for example, how much to widen the pool for this budget) and the reasoning.
Monitoring plan
What to watch after the change (reach growth, frequency, cost per lead), a review point after one to two weeks, and the rollback condition if the fix underperforms.
Practical example
A B2B SaaS company runs a lead generation campaign to a 9,000-member audience of heads of RevOps at $220/day. Over four weeks, cumulative reach climbs to about 7,700 members (roughly 85 percent of the pool) and then flattens, while per-week frequency rises from 2.4 to 5.1 and CPM holds near $95. Cost per lead climbs from $80 to $150. The creative still clears its engagement benchmark among members seeing it for the first time, so this is not the ad wearing out; the pool is exhausted and the daily budget keeps re-serving the same 7,700 people.
The verdict is deep audience saturation driven by a tiny audience carrying too much budget. Recommended actions: expand the audience by adding two adjacent job-function segments and lifting the seniority band to roughly triple the matched size, and drop the daily budget to about $140 until the wider pool is live so frequency settles under 3 per week. Because the creative is not the problem, hold the current ad rather than replacing it; if CTR later decays inside the fresh reach, route to creative-fatigue-audit-linkedin-ads. Monitor reach growth, frequency, and cost per lead over the next ten days; roll back the budget cut if lead volume falls without a cost-per-lead improvement.
Guardrails
- Never present an estimated reach or frequency as a reported figure. Label estimates explicitly.
- Do not diagnose saturation from a single period or from lifetime totals; it lives in the reach and frequency trend.
- If creative, offer, targeting, or budget changed mid-window, separate that effect before blaming exposure.
- When the signal is a specific ad decaying while reach still grows, hand off to creative-fatigue-audit-linkedin-ads rather than expanding the audience.
- Treat all thresholds as starting heuristics tuned by audience size, vertical, and account maturity, and say so in the output.
- When data is thin, recommend a longer observation window or better reporting before recommending cuts.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: mardab96
- Source: mardab96/linkedin-ads-claude-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.