skills/campaign-audit/SKILL.md
Audit a brand's existing live campaigns across every active channel — paid, organic, email, social, content, SEO. Produce a current-state inventory, quick-wins backlog, and red-flags list. Use during agency onboarding or before any /campaign-plan refresh.
npx skillsauth add indranilbanerjee/digital-marketing-pro campaign-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill produces a single document describing everything currently running for a brand across every channel — what's live, what's spending, what's performing, what's leaking budget, what's quietly broken. It's the prerequisite for any informed /digital-marketing-pro:campaign-plan, /digital-marketing-pro:performance-report, or /digital-marketing-pro:competitor-analysis refresh.
Heavy skill. Grep before Read any referenced file, then Read only matched ranges with offset + limit. List ${CLAUDE_PLUGIN_DATA}/<brand>/ before opening files. On re-invocation mid-session, skip files already in context.
Use this skill:
When agencies inherit a brand, the previous owner's "campaign plan" is usually a 40-tab Google Sheet, six dashboards on three platforms, and a list of API integrations nobody remembers wiring up. Without an explicit audit, the new team either (a) silently lets things keep running while they ramp up — and inherits the mistakes, or (b) tears it down and rebuilds — and loses the institutional knowledge of what was actually working.
This skill produces the third option: a single audit document that captures the live state cleanly, scores each item, and feeds directly into the next planning conversation. It is read-only — it never pauses, modifies, or kills a campaign.
| Channel | What's inventoried | What's scored | |---|---|---| | Paid search | Active Google Ads / Microsoft Ads campaigns, ad groups, keywords, daily budgets, last-modified dates | Spend efficiency, quality scores, conversion-tracking health, negative-keyword coverage, dead ad groups still spending | | Paid social | Active Meta / LinkedIn / TikTok / Pinterest / X campaigns + audiences + creatives | Frequency, learning-phase status, creative fatigue, audience overlap, attribution-window correctness | | Retail media | Amazon Ads, Walmart Connect, Instacart Ads accounts and campaigns | ACOS, branded vs non-branded split, share-of-voice for top SKUs | | Email | Active automations / journeys (Klaviyo, HubSpot, ActiveCampaign, Brevo, Marketo), send lists, deliverability metrics | Open rates, sender reputation, list hygiene age, GDPR/DPDPA consent provenance for every list, broken templates | | Organic social | Posting cadence per platform (last 90 days), engagement rate, follower trend | Cadence consistency, AI-disclosure compliance, locale coverage | | Content / SEO | Pages publishing in last 90 days, ranking keywords (top 50), schema markup state, internal-link density | Indexation health (GSC), Core Web Vitals, AI-Overview citation rate, technical-debt items | | AEO / GEO | Brand mention rate across Google AI Mode, Perplexity, ChatGPT search, Claude search, Copilot, Gemini App | Mention rate vs top 5 competitors, citation share, recommendation share | | CRM + automation | Live workflows in HubSpot / Salesforce / Pipedream / Zapier / Make, segments in use, lifecycle stage mappings | Orphaned workflows (no recent execution), broken connectors, duplicate-contact rate | | Web analytics | GA4 properties + GSC properties wired to which domains, conversion events configured, consent-mode state | Tag-firing health, event-naming consistency, attribution model selected | | Influencer / PR | Active creator deals (live + paused), contracted deliverables, FTC-disclosure compliance | Cost per engagement, creator-audience-authenticity check, disclosure completeness | | Compliance posture | Active brand-level claims, EU AI Act Article 50 disclosure state on AI content, C2PA signing state, cookie/consent banner version | Each regulated claim mapped to a primary source; missing disclosures escalated |
The audit also captures what's NOT happening that should be — channels with zero activity, missing tracking pixels, expired API tokens, abandoned automations.
This skill assumes:
/digital-marketing-pro:validate-profile --brand {brand} returns passed or passed_with_warnings. If it returns blocked, refuse and tell the user to fix the blockers first — auditing on a broken profile produces a corrupt baseline.If --brand <slug> was supplied, use it. Otherwise use the active brand. If neither, error: "--brand <slug> required, or run /digital-marketing-pro:switch-brand first."
If --channels <list> was supplied (e.g. paid_search,email,seo), restrict to those. Otherwise audit every channel for which a connector is configured.
If --quick was supplied, run only the channel-level inventory pass (skip the historical performance pull and the AEO/GEO check) — useful for a 10-minute "what's live" snapshot.
For each in-scope channel, call the relevant data-pull script with --read-only. Examples:
# Paid search
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/performance-monitor.py --brand "{brand}" \
--channel google_ads --action inventory --read-only
# Paid social
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/performance-monitor.py --brand "{brand}" \
--channel meta_ads --action inventory --read-only
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/performance-monitor.py --brand "{brand}" \
--channel linkedin_ads --action inventory --read-only
# Email
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/performance-monitor.py --brand "{brand}" \
--channel email --action automations --read-only
# Organic + SEO
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/seo-executor.py --brand "{brand}" --action audit-current
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/performance-monitor.py --brand "{brand}" \
--channel organic_social --action cadence
# AEO / GEO (unless --quick)
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/ai-visibility-checker.py --brand "{brand}" \
--mode api --competitors "{auto-from-profile or --competitors arg}"
# CRM + automation health
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/crm-sync.py --brand "{brand}" --action audit-workflows
# Web analytics health
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/performance-monitor.py --brand "{brand}" \
--channel ga4_health --action diagnostic
If a script returns {"error": "..."} instead of inventory, mark that channel as skipped: <reason> and continue. Never fail the whole audit because one channel is broken — the broken channel IS a finding.
For each item discovered, apply the scoring rubric (4-tier, conservative):
| Tier | Meaning | Examples | |---|---|---| | 🟢 Healthy | Performing within benchmark, no action needed | Email automation with >25% open rate; Google Ads campaign with QS ≥ 7; SEO page in top 10 for primary keyword | | 🟡 Quick win | Small fix unlocks meaningful gain (<2hr effort) | Ad copy missing a sitelink extension; email template with broken merge tag; landing page with no schema markup | | 🟠 Strategic gap | Needs a real intervention (workshop, asset, decision) | No active retargeting audience; no negative-keyword list; no AEO disclosure on AI-generated content | | 🔴 Red flag / leak | Actively losing money OR creating compliance risk | Campaign spending with conversion tracking broken; email list with no GDPR provenance; CRM workflow firing on duplicate contacts |
A red flag is anything that meets ANY of: (a) measurable monthly waste > $X (default $500, override with --red-flag-spend-threshold), (b) regulatory violation (missing consent, missing AI disclosure, fabricated claim), (c) brand-safety risk (active campaign on retired product, contradiction with another live campaign).
Write the audit to ~/.claude-marketing/{brand}/audits/campaign-audit-{YYYY-MM-DD}.md AND publish a user-visible copy to ~/Documents/DigitalMarketingPro/{brand}/audits/{YYYY-MM-DD}-campaign-audit.md (mirroring the ContentForge dual-copy pattern from v3.12.3). The document structure:
# Current-State Campaign Audit — {brand_name}
**Run date:** {YYYY-MM-DD}
**Auditor:** /digital-marketing-pro:campaign-audit
**Active brand profile:** {profile_version_or_last_modified}
**Channels in scope:** {list}
**Channels skipped:** {list with reason}
---
## 1. Executive Summary
- **{N} active campaigns** across {M} channels
- **Estimated monthly spend (managed):** {currency} {amount}
- **Healthy items:** {count} · **Quick wins:** {count} · **Strategic gaps:** {count} · **🔴 Red flags:** {count}
- **Top three red flags** — bulleted, with the specific cost or risk
- **Recommended next conversation** — usually one of: budget reallocation, conversion-tracking fix, compliance remediation, channel-mix shift
## 2. By channel
### 2.1 Paid search
| Account | Campaign | Status | Daily budget | Last modified | Spend (30d) | Conversions (30d) | Triage |
|---|---|---|---|---|---|---|---|
| ... | ... | ACTIVE | $X | YYYY-MM-DD | $Y | N | 🟡 Add sitelink extensions |
[Repeat for each channel section. Include the inventory table, the scoring summary, and the per-item triage.]
## 3. Cross-channel observations
- Attribution model in use (and which channels override it)
- Cross-channel audience overlap (Meta retargeting includes Google Ads converters?)
- Cadence collisions (email send + LinkedIn organic + paid social all hitting the same audience the same morning?)
- Funnel gaps (channel produces leads but no nurture sequence wired up)
## 4. Compliance posture
- EU AI Act Article 50 disclosure state on AI content
- C2PA signing state for AI images/video distributed in EU markets
- Consent-mode (cookie banner) version + last consent rate
- Regulated-industry claim register (linked to primary sources)
## 5. AEO / GEO snapshot
Mention rate vs top 5 competitors across Google AI Mode, Perplexity, ChatGPT search, Claude search, Copilot, Gemini App. Citation share, recommendation share, trend vs last audit.
## 6. Quick-wins backlog (do these this week)
Bulleted list. Each item: action · channel · effort · expected impact · who owns it.
## 7. Strategic gaps (queue for next planning conversation)
Bulleted list. Each item: gap · why it matters · what would close it · estimated investment.
## 8. 🔴 Red flags (escalate before continuing routine work)
Bulleted list. Each item: the specific issue · cost or risk in concrete numbers · the literal command or platform action to remediate.
## 9. Channels NOT running that probably should be
Bulleted list. Each item: channel · why it's missing · what minimum viable activation looks like.
---
**Next steps:**
- Take the quick-wins backlog into a 30-min triage with the account lead.
- Bring the strategic gaps to the next `/digital-marketing-pro:campaign-plan` conversation.
- Resolve every 🔴 red flag before the next routine work cycle.
Append a short entry to ~/.claude-marketing/{brand}/audit-history.json:
{
"audits": [
{
"type": "campaign-audit",
"date": "{YYYY-MM-DD}",
"channels_audited": ["paid_search", "email", "seo", "..."],
"channels_skipped": [{"channel": "linkedin_ads", "reason": "connector_unauthenticated"}],
"healthy_count": N, "quickwin_count": N, "gap_count": N, "redflag_count": N,
"report_path": "{tracking_path}",
"published_path": "{user_visible_path}"
}
]
}
In the conversation, print:
✅ Campaign audit complete for {brand_name}.
Channels in scope: {list}
{N} healthy · {N} quick wins · {N} strategic gaps · {N} 🔴 red flags
📂 Report saved to:
{published_path}
Top 3 red flags:
1. {item}
2. {item}
3. {item}
Next: walk the quick-wins backlog in a 30-min triage, or run
/digital-marketing-pro:performance-check for a metrics-only snapshot,
or /digital-marketing-pro:campaign-plan to start the next planning cycle.
skills/context-engine/compliance-rules.md, and if a jurisdiction isn't covered there, mark the finding as compliance_basis: unverified rather than guessing.~/.claude-marketing/{brand}/audits/; user-visible under ~/Documents/DigitalMarketingPro/{brand}/audits/ (or $DIGITAL_MARKETING_PRO_PUBLISH_DIR if set). Mirrors the ContentForge v3.12.3 pattern so the user can find the file without spelunking dotfolders./digital-marketing-pro:campaign-audit [--brand <slug>] [--channels <list>] [--quick]
[--competitors <list>] [--red-flag-spend-threshold <amount>] [--json]
--brand <slug> — brand to audit (else uses active brand)--channels <list> — comma-separated subset to audit (else every channel with a connector configured)--quick — channel inventory only; skip historical pull + AEO/GEO check--competitors <list> — explicit competitor list for the AEO/GEO section (else taken from brand profile)--red-flag-spend-threshold <amount> — override the default $500/month threshold for flagging waste as 🔴--json — emit a machine-readable JSON summary in addition to the markdown reportvalidate-profile — prerequisite check (run first)campaign-plan — what to do with the strategic gaps surfacedlaunch-campaign — what to do once the plan is approvedperformance-check — lighter metrics-only snapshotcompetitor-analysis — pairs naturally with the AEO/GEO sectionaeo-audit — deeper AI-engine visibility audit if Section 5 raises concernsscripts/performance-monitor.py — underlying data pullstools
Compare two SEO snapshots (GSC, GSC AI Performance, rank tracker, AEO probe) and surface biggest movers per metric — impressions, clicks, position, AI citations. Use when: monthly performance reviews, post-Core-Update triage, AI Mode citation tracking, or before/after content-refresh evaluation.
development
Build a content cluster plan from seed keywords — pillar+spokes architecture with internal-link map, intent grouping, and quality scorecard. Use when: planning topical authority, designing a content hub, deduping cannibalising pages, or staging a programmatic content rollout.
development
One-shot setup that wires Digital Marketing Pro for team usage in Anthropic Cowork. Verifies the Cowork sandbox, checks for a Google Drive integration, creates the canonical Drive folder layout, and confirms team-ready brand-state routing. Use this the first time a Cowork user installs DMP OR when brand profiles aren't persisting across sessions.
development
Find referring domains that link to your competitors but not to you, ranked by an opinionated outreach-priority score with DR / link-overlap / traffic / topical relevance. Use when: planning link-building campaigns, qualifying digital-PR prospects, or running quarterly backlink-gap audits.