markifact/markifact-mcp/diagnose-underperformer

Claude Code and agent skill by markifact/markifact-mcp

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Diagnose why a specific Google Ads or Meta Ads campaign / ad set / ad is underperforming and prescribe the next concrete action. Use when the user says something like "why is X not converting?", "this campaign is wasting money", or "why are impressions so low?". Read-only — no changes are made.

Install

npx vskill@latest install markifact/markifact-mcp/diagnose-underperformer

SKILL.md

Goal

Pull the right report, walk a structured decision tree, and hand the user a ranked list of likely causes with the specific next op to call to fix it. No writes — diagnosis only.

Inputs to confirm (batch)

  1. Account name (substring) — required.
  2. Target — campaign / ad set / ad name or ID — required.
  3. Date range — default last 14 days; if the entity is < 14 days old, use its lifetime.
  4. Comparison window (optional) — previous 14 days, for trend.
  5. Primary KPI — conversions / ROAS / CPA / CPL — required if the entity has a conversion goal.

Workflow

  1. Discover ops. For Google Ads: gads_select_accounts, gads_list_report_fields, gads_get_report, gads_get_account_history. For Meta: meta_ads_select_accounts, meta_ads_list_report_fields, meta_ads_get_report, meta_ads_get_account_history, meta_ads_get_adset_settings, meta_ads_get_campaign_settings.
  2. Inspect with get_operation_inputs. Always call `*_list_report_fields` before `*_get_report` — never guess metric/dimension names.
  3. Resolve account with substring match.
  4. Pull the report at the right granularity (campaign / ad set / ad). Required metrics:
  • Spend, impressions, clicks, CTR, CPC, conversions, conv rate, CPA / ROAS, frequency (Meta), search impression share + lost-to-budget + lost-to-rank (Google Search).
  1. Pull settings/history to check for recent edits that could have triggered the dip:
  • Google: gads_get_account_history filtered to this campaign — look for budget changes, bid strategy switches, status flips, asset changes.
  • Meta: meta_ads_get_campaign_settings / meta_ads_get_adset_settings for current state, meta_ads_get_account_history for recent changes.
  1. Walk the decision tree below and rank the matching diagnoses by likelihood + impact.
  2. Present: top 3 diagnoses, evidence from data, and the exact next op to call (or the matching slash command). Do not run any write op.

Decision tree

Branch A — Low impressions / low spend (entity not delivering)
SignalDiagnosisNext action
Google: search impression share lost to budget > 20%Budget-cappedRaise daily budget or use /markifact:negative-keyword-sweep to free spend
Google: search impression share lost to rank > 30%Bid / Quality Score too lowRaise CPC bid (manual) or improve ad relevance (Quality Score components)
Google: campaign status LIMITED (account history)Eligibility / policy / payment / learningInspect gads_get_account_history for the cause; route based on subtype
Meta: ad set status IN_REVIEW or REJECTEDPolicyCheck creative against Meta policies; replace creative
Meta: estimated audience size < 500K and CBO is onAudience too narrow + CBO starved itWiden audience or move to ABO with fixed budget
Meta: > 4 ad sets in same campaign with CBOAuction overlap, CBO concentrating spend on oneConsolidate ad sets or split into separate campaigns
Both: budget set but daily spend << budgetBid too low for the auction OR audience tiny OR creative not eligibleInspect bid + audience size + creative status
Branch B — Spending normally, low CTR
SignalDiagnosisNext action
Meta: frequency > 3.5 + CTR dropping WoWCreative fatigue/markifact:rotate-creative
Google: RSA ad strength Poor / AverageWeak asset varietyAdd more headline variety, re-create RSA
CTR way below industry baseline (Search < 3%, Meta feed < 0.8%) and frequency lowWrong audience or weak hookTighten targeting; try a new creative angle
Branded search CTR < 5%Competitor bidding on brand or weak ad copyCheck gads_ads_transparency for competitors; strengthen brand copy / pin brand headline
Branch C — Good CTR, low conversion rate
SignalDiagnosisNext action
Bounce rate high in GA4 / time on page shortLanding page mismatchSend fresh LP variant; consider /markifact:edit-meta-creative to swap URL
Conversion event firing but CVR < 0.5%LP friction / wrong offer / wrong audience intentAudit funnel; consider gating with a softer CTA
Conversion not firing at all in last 7 daysPixel / tag brokenMeta: meta_ads_check_capi_health and meta_ads_get_pixel_stats; Google: check conversion action import from GA4
Mobile CVR << desktop CVRMobile LP problemFix mobile LP; consider device bid adjustment
Branch D — Good CVR, low overall conversions
SignalDiagnosisNext action
Spend capped (see Branch A signals)Budget-bound winnerRaise budget incrementally (≤ 20%/day on Smart Bidding)
Audience small + saturated (Meta freq > 4)Audience exhaustedBuild lookalike from converters; expand interests
Strong perf only on weekendsSchedule misalignmentAdjust ad schedule / bid by hour
Branch E — Sudden performance drop
SignalDiagnosisNext action
Account history shows a bid strategy switch in the last 14 daysBid strategy reset learningEither revert or wait 14 days; warn about future switches
Budget cut > 30% recentlyUnderfunded learningRestore budget or accept slower learning
Creative replaced recently with major changeSoft learning resetWait 7 days before judging
Seasonal / industry-wideCompare to category trendNote and move on; not a config issue

Platform-specific rules the model MUST respect

  • `list_report_fields` first. Field names differ per platform; never guess.
  • Account-name substring match for select_accounts.
  • Frequency is a Meta concept — not directly comparable on Google.
  • Search impression share is a Google Search-specific metric; PMax has its own (search-categories report).
  • Don't propose changes that need to wait. If the entity is < 7 days old or made a major change in the last 7 days, say "still in learning, don't touch yet."
  • Read-only. This command never calls a write op. Recommend the right write command instead.

Output to user

Top diagnoses for <entity>:
1. <Diagnosis> — confidence: high/medium
Evidence: <numbers>
Next: run /markifact:<command> OR call <op_id>
2. ...
3. ...
Other observations:
- ...

End with: "Want me to do any of these? I won't make changes without your go-ahead."

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/markifact/markifact-mcp/diagnose-underperformer/badge)](https://verified-skill.com/skills/markifact/markifact-mcp/diagnose-underperformer)

Something wrong with this skill or its page? Tell us.