| name | marketingskills-ai-agent-collection |
| description | Marketing skills collection for AI agents - CRO, copywriting, SEO, analytics, and growth engineering |
| triggers | ["help me with marketing tasks using AI agent skills","install marketing skills for my AI agent","set up CRO and copywriting skills","add SEO and analytics capabilities to my agent","use the marketingskills collection","optimize my site with AI marketing skills","create a product marketing context document","run an SEO audit with agent skills"] |
Marketing Skills for AI Agents
Skill by ara.so — Marketing Skills collection.
A collection of AI agent skills focused on marketing tasks including conversion optimization, copywriting, SEO, analytics, and growth engineering. Works with Claude Code, OpenAI Codex, Cursor, Windsurf, and any agent that supports the Agent Skills spec.
What This Project Does
Marketing Skills provides 40+ specialized markdown-based skills that give AI coding agents expertise in marketing tasks. Each skill contains frameworks, workflows, and best practices for specific marketing disciplines:
- SEO & Content: seo-audit, ai-seo, site-architecture, programmatic-seo, schema, content-strategy, aso
- CRO: cro, signup, onboarding, popups, paywalls
- Content & Copy: copywriting, copy-editing, cold-email, emails, social, video, image
- Paid & Measurement: ads, ad-creative, ab-testing, analytics
- Growth & Retention: referrals, free-tools, churn-prevention, community-marketing, lead-magnets, co-marketing
- Sales & GTM: revops, sales-enablement, launch, pricing, competitors, competitor-profiling, directory-submissions
- Strategy: marketing-ideas, marketing-psychology, customer-research, product-marketing
Skills reference each other and build on shared context, with product-marketing as the foundation that all other skills check first.
Installation
Option 1: CLI Install (Recommended)
npx skills coreyhaines31/marketingskills
npx skills coreyhaines31/marketingskills --skills seo-audit,copywriting,cro
npx skills coreyhaines31/marketingskills --dir .ai/custom-skills
Option 2: Manual Install
git clone https://github.com/coreyhaines31/marketingskills.git
cp -r marketingskills/skills .ai/
Option 3: Git Submodule
git submodule add https://github.com/coreyhaines31/marketingskills.git .ai/marketingskills
git submodule update --remote .ai/marketingskills
Project Structure
marketingskills/
├── skills/ # All skill markdown files
│ ├── product-marketing/ # Foundation skill (read by all others)
│ │ └── SKILL.md
│ ├── seo-audit/
│ │ └── SKILL.md
│ ├── copywriting/
│ │ └── SKILL.md
│ ├── cro/
│ │ └── SKILL.md
│ └── [40+ more skills]/
├── examples/ # Example outputs and workflows
├── scripts/ # Utility scripts
└── README.md
Core Concepts
Skills are Markdown Files
Each skill is a .md file with YAML frontmatter containing:
---
name: skill-name-kebab-case
description: One-line description of what the skill does
triggers:
- "when user says this"
- "or mentions this"
---
Skills Reference Each Other
Skills can reference and build upon each other:
## Related Skills
- **product-marketing** — Always read first to understand product context
- **customer-research** — Use to gather insights before writing copy
- **ab-testing** — Use to test copy variations
Product Marketing is the Foundation
Every marketing skill checks product-marketing/SKILL.md first to understand:
- Product name, description, and positioning
- Target audience and personas
- Value propositions and messaging
- Core features and benefits
- Brand voice and tone
Usage Examples
Creating a Product Marketing Context
Running an SEO Audit
const seoAuditReport = {
technical: {
siteSpeed: "analysis",
mobileFriendly: "check",
indexability: "status",
structuredData: "validation"
},
onPage: {
titleTags: "optimization",
metaDescriptions: "review",
headings: "hierarchy",
internalLinking: "analysis"
},
content: {
keywordTargeting: "gaps",
contentQuality: "assessment",
topicalAuthority: "score"
},
recommendations: [
{ priority: "high", task: "Fix crawl errors", impact: "Critical" },
{ priority: "medium", task: "Improve title tags", impact: "High" }
]
};
Optimizing Conversion Rates
const croRecommendations = {
headline: {
current: "We help businesses grow",
suggested: "Double your leads in 30 days",
reasoning: "Specific outcome + timeframe"
},
cta: {
current: "Sign up",
suggested: "Start your free trial",
reasoning: "Lower friction, clear value"
},
socialProof: {
add: ["customer logos", "testimonials", "case study metrics"],
placement: "above the fold"
},
experiments: [
{ test: "Hero headline variations", priority: "high" },
{ test: "CTA button copy", priority: "high" },
{ test: "Pricing display", priority: "medium" }
]
};
Writing Marketing Copy
const homepageCopy = {
hero: {
headline: "Turn Visitors Into Customers",
subheadline: "AI-powered conversion optimization for modern SaaS",
cta: "Start optimizing free"
},
valueProps: [
{
headline: "Know exactly what to test",
body: "AI analyzes your traffic and suggests high-impact experiments"
},
{
headline: "Ship tests in minutes, not days",
body: "Visual editor makes A/B testing accessible to any team"
}
],
socialProof: {
stat: "10,000+ companies trust us",
testimonial: "We increased signups 47% in the first month"
}
};
Setting Up Analytics
const setupGA4 = () => {
const gtagScript = `
<script async src="https://www.googletagmanager.com/gtag/js?id=${process.env.GA4_MEASUREMENT_ID}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${process.env.GA4_MEASUREMENT_ID}');
</script>
`;
};
const trackConversion = (eventName, value) => {
if (typeof gtag !== 'undefined') {
gtag('event', eventName, {
'event_category': 'conversion',
'event_label': eventName,
'value': value
});
}
};
trackConversion('trial_started', 1);
trackConversion('purchase_completed', 99);
Creating Programmatic SEO Pages
const generateCompetitorPages = async (competitors) => {
const product = await readProductContext();
const template = (competitor) => ({
url: `/vs/${competitor.slug}`,
title: `${product.name} vs ${competitor.name} - Comparison`,
metaDescription: `Compare ${product.name} and ${competitor.name}. See features, pricing, and why teams choose ${product.name}.`,
schema: {
"@type": "ComparisonTable",
items: [product, competitor]
},
sections: {
hero: `${product.name} vs ${competitor.name}`,
comparison: generateComparisonTable(product, competitor),
whyChooseUs: generateDifferentiators(product, competitor),
cta: `Try ${product.name} free`
}
});
return competitors.map( ({
: ,
: ((competitor))
}));
};
Building an Email Sequence
const onboardingSequence = [
{
delay: 0,
subject: "Welcome to {product_name}! Here's what to do first",
preview: "Get started in 3 simple steps",
body: `
Hi {first_name},
Welcome! Here's how to get the most value in your first week:
1. Complete your profile (2 min)
2. Import your data (5 min)
3. Run your first campaign (10 min)
[Get Started] → {onboarding_url}
`
},
{
delay: 2,
subject: "Quick question about your {product_name} trial",
condition: "not_activated",
body: `
Hi {first_name},
I noticed you haven't {activation_milestone} yet.
Is there anything blocking you? Hit reply and I'll personally help.
Common issues we've solved:
- Integration setup
- Data import
- Team training
Want to jump on a quick call? [Book 15 min]
`
},
{
delay: 5,
subject: "Your trial ends in 2 days",
condition: "trial_ending",
body: `
Hi {first_name},
Your trial ends in 2 days. Here's what you've achieved:
✓ {metric_1}
✓ {metric_2}
✓ {metric_3}
Ready to keep going? [Choose your plan]
Questions? Reply to this email.
`
}
];
const sendEmail = (template, user) => {
const variables = {
product_name: process..,
: user.,
: ,
: ,
: user..,
: user..,
: user..
};
(template., variables);
};
Running A/B Tests
const abTest = {
name: "pricing_page_layout",
variants: {
control: {
layout: "traditional",
weight: 0.5
},
treatment: {
layout: "comparison_table",
weight: 0.5
}
},
metrics: {
primary: "trial_signups",
secondary: ["page_views", "time_on_page", "scroll_depth"]
}
};
const assignVariant = (userId, testName) => {
const hash = simpleHash(`${userId}-${testName}`);
return hash % 100 < 50 ? 'control' : 'treatment';
};
const trackExperiment = (testName, variant) => {
if (typeof gtag !== 'undefined') {
gtag('event', 'experiment_view', {
'experiment_name': testName,
: variant
});
}
};
= () => {
( gtag !== ) {
(, metric, {
: testName,
: variant
});
}
};
variant = (user., );
(, variant);
.().(, {
(, variant, );
});
Configuration
Environment Variables
Skills reference environment variables for configuration:
PRODUCT_NAME="Your Product"
PRODUCT_URL="https://yourproduct.com"
GA4_MEASUREMENT_ID="G-XXXXXXXXXX"
GOOGLE_TAG_MANAGER_ID="GTM-XXXXXX"
MAILCHIMP_API_KEY="your_api_key"
HUBSPOT_API_KEY="your_api_key"
AHREFS_API_KEY="your_api_key"
SEMRUSH_API_KEY="your_api_key"
Skill Directory Location
Skills can be installed in different locations:
{
"skillsDirectory": ".ai/marketingskills/skills"
}
Common Patterns
Sequential Skill Usage
Many marketing tasks use skills in sequence:
Cross-Referencing Skills
Skills often reference each other:
Data-Driven Workflows
const auditResults = await runSEOAudit(siteUrl);
const prioritized = prioritizeIssues(auditResults);
const aiOptimizations = generateAISearchContent();
const schemaMarkup = generateSchemaMarkup();
const tracking = setupSEOTracking();
Troubleshooting
Skills Not Loading
ls -la .ai/skills/
cat .ai/skills/product-marketing/SKILL.md
Agent Not Using Skills
Missing Product Context
Skill Conflicts
Integration Examples
With Next.js
import { generateCompetitorPage } from '@/lib/programmatic-seo';
import { getProductContext } from '@/lib/product-marketing';
export async function getStaticPaths() {
const competitors = await getCompetitors();
return {
paths: competitors.map(c => ({ params: { competitor: c.slug } })),
fallback: false
};
}
export async function getStaticProps({ params }) {
const product = await getProductContext();
const competitor = await getCompetitor(params.competitor);
const page = await generateCompetitorPage(product, competitor);
return { props: { page } };
}
With React
import { useEffect, useState } from 'react';
import { assignVariant, trackExperiment } from '@/lib/ab-testing';
export const ABTest = ({ testName, variants, children }) => {
const [variant, setVariant] = useState(null);
useEffect(() => {
const userId = getUserId();
const assigned = assignVariant(userId, testName);
setVariant(assigned);
trackExperiment(testName, assigned);
}, [testName]);
if (!variant) return null;
return children(variants[variant]);
};
<ABTest
testName="hero_headline"
variants={{
control: { headline: "Welcome" },
treatment: { headline: "Double Your Growth" }
}}
>
{(variant) => <h1>{variant.headline}</h1>}
</ABTest>
With Express
import express from 'express';
import { trackEvent } from './lib/analytics.js';
const app = express();
app.post('/api/track', async (req, res) => {
const { event, properties } = req.body;
await trackEvent(event, {
...properties,
timestamp: new Date(),
userAgent: req.headers['user-agent'],
ip: req.ip
});
res.json({ success: true });
});
app.listen(3000);
Related Resources
Contributing
Skills are community-maintained. To contribute:
git clone https://github.com/YOUR_USERNAME/marketingskills.git
mkdir skills/your-skill-name
cd skills/your-skill-name
cat > SKILL.md << 'EOF'
---
name: your-skill-name
description: One-line description
triggers:
- "trigger phrase 1"
- "trigger phrase 2"
---
Content here...
EOF
git add skills/your-skill-name/
git commit -m "Add your-skill-name skill"
git push origin main
Each skill should include:
- Clear trigger phrases
- Real examples and code
- Related skills section
- Practical workflows