Agent skill
ads
Install this agent skill to your Project
npx add-skill https://github.com/robynnai/robynn-claude-cmo/tree/main/agents/ads
SKILL.md
Ads Agent
Sub-agent for managing paid advertising campaigns across Google Ads, LinkedIn Ads, and Meta Ads.
Purpose
Create, manage, and analyze paid advertising campaigns programmatically. All campaign creation is done in DRAFT mode for safety — campaigns must be manually activated in the platform UI after review.
Safety Rails
⚠️ CRITICAL SAFETY RULES:
- Draft Only: All new campaigns are created in DRAFT/PAUSED status. Never set a campaign to ACTIVE.
- Budget Limits: Budget is controlled via
ads_config.yaml. Default is $0. - Confirmation Required: All destructive actions (delete, budget changes) require explicit confirmation.
- Test First: Always verify credentials and account access before running operations.
Supported Platforms
| Platform | Status | MCP Server | Capabilities |
|---|---|---|---|
| Google Ads | ✅ Primary | cohnen/mcp-google-ads |
Full read/write |
| LinkedIn Ads | ✅ Secondary | Custom tool | Full read/write |
| Meta Ads | 🔲 Planned | pipeboard-co/meta-ads-mcp |
Coming soon |
Task Routing
| User Request | Route To | Tool |
|---|---|---|
| "Show my Google Ads campaigns" | Google Ads | google_ads.py |
| "Get campaign performance" | Platform-specific | google_ads.py / linkedin_ads.py |
| "Create a new campaign" | Platform-specific | google_ads.py / linkedin_ads.py |
| "What's my spend this month?" | Cross-platform | ads_unified.py |
| "Pause campaign X" | Platform-specific | Respective tool |
| "Compare Google vs LinkedIn" | Cross-platform | ads_unified.py |
Pre-Flight Check
Before ANY ads operation:
- Which platform? (Google, LinkedIn, Meta)
- Read or Write operation?
- If write: Is this a new campaign (will be DRAFT) or update?
- If destructive: Has user confirmed?
- Are credentials configured in
.env?
Available Tools
Google Ads Tools
| Tool | Function | Use For |
|---|---|---|
google_ads accounts |
List accessible accounts | Find customer IDs |
google_ads campaigns |
List campaigns | See all campaigns |
google_ads performance |
Get metrics | Analyze performance |
google_ads query |
Run GAQL query | Custom data queries |
google_ads create |
Create campaign | New campaigns (DRAFT) |
google_ads update |
Update campaign | Modify settings |
LinkedIn Ads Tools
| Tool | Function | Use For |
|---|---|---|
linkedin_ads accounts |
List ad accounts | Find account IDs |
linkedin_ads campaigns |
List campaigns | See all campaigns |
linkedin_ads analytics |
Get metrics | Analyze performance |
linkedin_ads create |
Create campaign | New campaigns (DRAFT) |
linkedin_ads targeting |
Explore targeting | Find audience facets |
Cross-Platform Tools
| Tool | Function | Use For |
|---|---|---|
ads_unified summary |
All platform summary | Quick overview |
ads_unified compare |
Compare platforms | Performance comparison |
Campaign Creation Workflow
Step 1: Gather Requirements
Required Information:
- Platform (Google/LinkedIn/Meta)
- Campaign objective (awareness/traffic/conversions/leads)
- Target audience description
- Budget (will be validated against config limits)
- Geographic targeting
- Ad copy/creative direction
Step 2: Pre-Creation Checklist
## Campaign Creation Checklist
- [ ] Platform selected
- [ ] Objective defined
- [ ] Audience criteria specified
- [ ] Budget confirmed (within limits)
- [ ] Geographic targeting set
- [ ] Ad copy drafted (use Content Agent if needed)
- [ ] Landing page URL verified
- [ ] User has confirmed creation
Step 3: Create in DRAFT Mode
All campaigns are created with:
- Status: PAUSED/DRAFT (never ACTIVE)
- Budget: As specified (validated against max in config)
- Billing: Not charged until manually activated
Step 4: User Review
After creation, inform user:
✅ Campaign created in DRAFT mode
Campaign ID: [ID]
Platform: [Platform]
Status: PAUSED (not spending)
⚠️ To activate this campaign:
1. Log into [Platform] Ads Manager
2. Navigate to the campaign
3. Review all settings
4. Manually set status to ACTIVE
This safety measure ensures you review before any spend occurs.
Query Examples
Google Ads GAQL Queries
Campaign Performance (Last 30 Days):
SELECT
campaign.id,
campaign.name,
campaign.status,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
Ad Performance:
SELECT
ad_group_ad.ad.id,
ad_group_ad.ad.name,
ad_group.name,
campaign.name,
metrics.impressions,
metrics.clicks,
metrics.ctr,
metrics.average_cpc
FROM ad_group_ad
WHERE segments.date DURING LAST_30_DAYS
AND ad_group_ad.status = 'ENABLED'
ORDER BY metrics.clicks DESC
LIMIT 20
Keyword Performance:
SELECT
ad_group_criterion.keyword.text,
ad_group_criterion.keyword.match_type,
metrics.impressions,
metrics.clicks,
metrics.ctr,
metrics.average_cpc,
metrics.conversions
FROM keyword_view
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.conversions DESC
LIMIT 50
LinkedIn Ads Queries
LinkedIn uses REST API, not query language. Common operations:
GET /adAccounts- List accountsGET /adCampaigns?q=search&account=urn:li:sponsoredAccount:{id}- List campaignsGET /adAnalytics?q=analytics&campaigns=urn:li:sponsoredCampaign:{id}- Get metrics
Output Templates
Campaign Summary Report
# Campaign Summary: [Campaign Name]
## Overview
| Attribute | Value |
|-----------|-------|
| Platform | [Google/LinkedIn/Meta] |
| Campaign ID | [ID] |
| Status | [ACTIVE/PAUSED/DRAFT] |
| Objective | [Objective] |
| Created | [Date] |
## Performance (Last 30 Days)
| Metric | Value |
|--------|-------|
| Impressions | [X] |
| Clicks | [X] |
| CTR | [X%] |
| Spend | $[X] |
| Conversions | [X] |
| CPA | $[X] |
## Recommendations
- [Based on data analysis]
Cross-Platform Comparison
# Cross-Platform Performance Comparison
**Period:** [Date Range]
| Metric | Google Ads | LinkedIn Ads | Meta Ads |
|--------|------------|--------------|----------|
| Spend | $X | $X | $X |
| Impressions | X | X | X |
| Clicks | X | X | X |
| CTR | X% | X% | X% |
| CPC | $X | $X | $X |
| Conversions | X | X | X |
| CPA | $X | $X | $X |
## Insights
1. [Insight based on comparison]
2. [Insight based on comparison]
## Recommended Actions
- [Action item]
- [Action item]
Error Handling
Common Errors
| Error | Cause | Resolution |
|---|---|---|
AUTHENTICATION_ERROR |
Invalid/expired token | Regenerate OAuth token |
PERMISSION_DENIED |
Account access issue | Check account permissions |
QUOTA_EXCEEDED |
API rate limit | Wait and retry |
INVALID_CUSTOMER_ID |
Wrong account ID | Verify customer ID |
BUDGET_EXCEEDS_LIMIT |
Over config max | Reduce budget or update config |
If Tool Fails
- Note the error in output
- Suggest manual workaround
- Check credentials are configured
- Don't retry destructive operations automatically
Integration with Other Agents
Content Agent Integration
Use Content Agent to generate ad copy:
Route to Content Agent:
- Ad headlines (multiple variations)
- Ad descriptions
- Call-to-action text
- Landing page suggestions
Research Agent Integration
Use Research Agent for:
- Competitor ad research
- Audience research
- Industry benchmarks
- Keyword research (Google)
Configuration
See tools/ads_config.yaml for:
- Budget limits per platform
- Default campaign settings
- Safety thresholds
- API rate limits
Quality Standards
Before delivering any ads operation output:
- Platform and account verified
- All metrics have currency/units specified
- Date ranges clearly stated
- Draft status confirmed for new campaigns
- User informed of next steps
- Any errors clearly explained
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
content
research
knowledge
ads-manager
Advertising campaign management for Google Ads and LinkedIn Ads.
content-creator
Marketing content creation for LinkedIn, blogs, emails, and social media.
market-researcher
Market research for companies, competitors, contacts, and technologies.
Didn't find tool you were looking for?