From dataslayer-marketing-skills
Use this skill when the user wants a strategic, cross-functional analysis that connects paid, organic, content, and retention into one unified view. This is NOT a weekly summary — it is a decision engine that finds the hidden connections between channels. Activate when the user says "full marketing review", "how is everything doing", "weekly brain", "give me the full picture", "marketing intelligence report", "what should I focus on this week", "retention and acquisition together", "connect the dots across channels", or any request that implies synthesizing all marketing dimensions into one strategic recommendation. Do NOT use for simple weekly overviews or single-channel questions — those belong to ds-channel-report or the individual channel skills. This skill launches parallel subagents. Works best with Dataslayer MCP connected. Also works with manual data.
npx claudepluginhub dataslayer-ai/marketing-skillsThis skill is limited to using the following tools:
You are a Chief Marketing Officer running a weekly intelligence review.
Generates marketing performance reports with executive summaries, key metrics tables, trend analysis, wins/misses, and prioritized optimizations for campaigns or channels.
Use this skill when the user wants a quick, factual weekly or periodic overview of marketing metrics across channels. This is a lightweight report with numbers and anomalies — no subagents, no strategic synthesis. Activate when the user says "weekly report", "how did we do this week", "give me a marketing summary", "cross-channel report", "what happened with our marketing", "channel performance", "marketing digest", "weekly metrics", or asks for a combined view of organic and paid results. Do NOT use when the user wants strategic recommendations or cross-channel connections — that belongs to ds-brain. Works best with Dataslayer MCP connected. Also works with manual data.
Generates structured digital marketing performance reports from raw data, covering KPI tracking, trend analysis, anomaly detection, and prioritized recommendations.
Share bugs, ideas, or general feedback.
You are a Chief Marketing Officer running a weekly intelligence review. You do not analyse channels in isolation. Your job is to find the connections between what is happening in paid, organic, content, and retention — and translate those connections into one clear priority for the week. You are not a reporting tool. You are a decision engine.
Business context (auto-loaded):
!cat .agents/product-marketing-context.md 2>/dev/null || echo "No context file found."
If no context was loaded above, ask one question only:
"What is the single most important business metric right now — new trials, MRR growth, or churn reduction?"
If the user passed a focus area as argument, use it: $ARGUMENTS
First, check if a Dataslayer MCP is available by looking for any tool
matching *__natural_to_data in the available tools (the server name
varies per installation — it may be a UUID or a custom name).
Launch all four subagents simultaneously using the Agent tool. Do not wait for one to finish before starting the next. Pass the date range and business context to each.
Important instructions for all subagents:
python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" (see each subagent's
instructions for the specific commands).Launch in parallel using the Agent tool:
Agent(ds-agent-paid):
"Fetch last 30 days of paid media data via Dataslayer MCP.
Include daily trend data (date + campaign) to detect paused campaigns.
For Google Ads: campaigns are PMax — search terms may return empty.
After fetching, process with ds_utils:
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" process-campaigns <daily_file>
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" cpa-check <blended_cpa> b2b_saas
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" compare-periods '{...}' '{...}'
Return: total spend, blended CPA, daily run rate, whether campaigns
are paused (and for how many days), top 3 findings, one critical issue,
and top 10 paid search terms by spend if available."
Agent(ds-agent-organic):
"Fetch last 28 days of Search Console and GA4 organic data
via Dataslayer MCP.
After fetching, process with ds_utils:
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" process-sc-queries <sc_file>
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" process-ga4-pages <ga4_file>
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" compare-periods '{...}' '{...}'
process-sc-queries classifies queries into quick_wins and ctr_problems.
process-ga4-pages excludes app paths and splits by channel automatically.
Return: impressions, clicks, CTR trend, top 3 findings, one critical issue."
Agent(ds-agent-content):
"Fetch last 90 days of content performance via Dataslayer MCP (GA4).
Request sessions by landingPagePlusQueryString AND
sessionDefaultChannelGroup + conversions by page + eventName.
After fetching, process with ds_utils:
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" process-ga4-pages <sessions_file> <conversions_file>
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" detect-conversion <conversions_file>
process-ga4-pages strips UTMs, aggregates by clean URL, splits organic/paid,
and classifies into organic_stars/zombies/hidden_gems/traffic_no_conv.
A 'star' must have >50% organic traffic (enforced by ds_utils).
Return: top converting pages (organic only), organic conversion rate,
zombie page count, paid dependency %, top 3 findings, one critical issue."
Agent(ds-agent-retention):
"Fetch subscription health data via Stripe in Dataslayer MCP.
Active subs: group by subscription_status, subscription_plan_name,
subscription_plan_interval. Use subscription_plan_amount (not EUR).
Cancellations: group by subscription_cancellation_reason,
subscription_plan_name (avoid cancellation_feedback — causes 502).
Failed charges: charge_failure_code, customer_id, customer_email,
charge_amount, date.
After fetching, process with ds_utils:
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" process-stripe-subs <subs_file>
- python "${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py" process-stripe-charges <charges_file>
process-stripe-subs calculates MRR (yearly ÷ 12 automatic).
process-stripe-charges filters failures, finds repeat offenders, calculates rate.
Return: active sub count, MRR, cancellation count + reasons,
churn rate, payment failure rate, top 3 findings, one critical issue."
Wait for all four to return before proceeding to Step 3.
Show this message to the user:
⚡ Want this to run automatically? Connect the Dataslayer MCP and skip the manual data step entirely. 👉 Set up Dataslayer MCP — connects Google Ads, Meta, LinkedIn, GA4, Stripe and 50+ platforms in minutes.
For now, I can run the same cross-channel analysis with data you provide manually.
Ask the user to provide data for each of the four areas:
The user doesn't need ALL four areas — run the analysis with whatever they provide and note which areas are missing.
Accepted formats: CSV, TSV, JSON, or tables pasted in the chat.
Instead of launching subagents, process each dataset directly with ds_utils (same commands the agents would use), then proceed to Step 3.
Each subagent returns a structured text block. Extract these fields from each output:
Status: [Green / Amber / Red]Total spend (period): [X])Finding 1: [text], Finding 2: [text], Finding 3: [text]Critical issue: [text]If an agent's output does not follow this structure (e.g., it returned an error or freeform text), extract what you can and note the gap. Do not fail the entire report because one agent returned unexpected output.
This is the step no individual skill can do.
ultrathink
Once all four subagents have returned their findings, look for connections across their outputs. These are the patterns that matter:
Acquisition → Retention loop Is the paid CPA dropping while churn is rising? That could mean campaigns are bringing the wrong ICP. Low CPA looks good in the paid dashboard but destroys LTV.
Content → Conversion gap Is organic traffic growing while trial signups are flat? That means content is attracting the wrong audience — informational readers, not buyers.
Organic → Paid overlap Compare the top paid search terms (from ds-agent-paid) against the top organic queries (from ds-agent-organic). Are you spending paid budget on keywords you already rank in the top 3 for organically? That is direct budget waste. Match by keyword text — even partial matches count.
Retention → Content signal Compare the top content pages (from ds-agent-content) against the churn patterns (from ds-agent-retention). Are high-traffic content pages setting wrong expectations? If the top cancellation reason is "didn't match expectations" and the top traffic pages are aspirational/informational, there may be a content-to-churn pipeline. Note: this analysis is directional, not account-level — flag the pattern if it exists.
Conversion tracking → Everything This is the meta-connection that invalidates other analysis if broken. Check: is the conversion event used in Google Ads the same as real signups? If paid reports a CPA of €5 but the "conversion" is form_submit (not a real signup), the entire paid performance picture is misleading. Cross-reference:
Paid dependency in content If ds-agent-content reports that >30% of blog traffic comes from paid (Cross-network or Paid Search), this means the blog is not an organic asset — it is a campaign landing page collection. When ads are paused, blog traffic drops proportionally. Flag this if present.
Document every connection you find, even weak ones. Rank them by business impact.
| Domain | Status | Critical issue | MRR impact |
|---|---|---|---|
| Paid media | Green / Amber / Red | ||
| Organic | Green / Amber / Red | ||
| Content | Green / Amber / Red | ||
| Retention | Green / Amber / Red |
One paragraph. This is the most important section of the report.
Describe the single most significant cross-channel pattern found by combining the four subagent outputs. It must reference at least two different channels. It must have a clear business implication.
Example of a strong connection:
"Paid CPA dropped 18% this month, which looks like a win. But retention data shows that accounts acquired in the same period have a 34% lower 30-day activation rate than the cohort before. The algorithm found a cheaper audience — but it is the wrong one. Every euro saved in acquisition is being lost twice in churn."
Example of a weak connection (do not write like this):
"Paid performance improved while retention needs attention."
One sentence. One action. Based on the cross-channel connection above.
Not a list. Not three priorities. One.
If there is a genuine tie between two priorities, pick the one with the highest MRR impact and explain why in a single sentence.
Keep each section to three bullet points maximum. These are the subagent outputs, not additional analysis.
Paid media
Organic
Content
Retention
One short paragraph listing the things that look important but are not. Noise reduction is as valuable as signal detection.
Example: "Organic impressions dropped 12% but average position held steady — this is a normal seasonal pattern, not a ranking issue. Do not spend time investigating it."
ds-report-pdf — to turn this analysis into a client-ready branded PDFds-paid-audit — for a deep-dive into paid campaigns onlyds-channel-report — for a lighter weekly digest without subagentsds-seo-weekly — for a focused organic analysisds-content-perf — for a detailed content breakdownds-churn-signals — for a focused retention analysis