performance-marketing-agent
AI performance marketing agent for paid media, PPC, SEM, and digital marketing. Manage Google Ads, Meta Ads (Facebook & Instagram), LinkedIn Ads, and TikTok Ads campaigns via natural language. Automate keyword research, budget optimization, ROAS tracking, wasted spend analysis, ad creative management, audience targeting, and cross-platform reporting. Powered by Adspirer — 175+ tools for campaign creation (Google Search/PMax/Display/Demand Gen/YouTube, Meta image/video/carousel/lead-gen, LinkedIn sponsored content/carousel/lead-gen, TikTok in-feed/Spark/Carousel/App Promotion), bid optimization, CPA tracking, retargeting, and marketing automation across all major ad platforms.
What this skill does
# Performance Marketing Agent — Powered by Adspirer
AI agent for performance marketing, paid media, and digital advertising. Connects directly to ad platform APIs to create campaigns, pull live performance data, research keywords, optimize budgets, and manage ads across Google Ads, Meta Ads, LinkedIn Ads, and TikTok Ads.
This skill installs the **Adspirer plugin** (`openclaw-adspirer`) — the same 175+ tools, same MCP server, same capabilities as the `adspirer-ads-agent` skill.
## Setup
```bash
# Install the plugin
openclaw plugins install openclaw-adspirer
# Authenticate
openclaw adspirer login
# Connect your ad platforms
openclaw adspirer connect
# Verify
openclaw adspirer status
```
Connect your ad accounts at https://adspirer.ai/connections
---
## Required Workflow
**Follow these steps in order. Do not skip steps.**
### Step 1: Check Connected Platforms
Always start here before any ad operation:
- Call `get_connections_status`
- Shows connected platforms, primary/secondary accounts, account IDs
- If the target platform is not connected, direct the user to https://adspirer.ai/connections
### Step 2: Identify the Task
| User goal | Workflow | Key tools |
|-----------|----------|-----------|
| View campaign metrics | Performance Analysis | `get_campaign_performance`, `get_meta_campaign_performance`, `get_linkedin_campaign_performance` |
| Cross-platform overview | Cross-Platform Dashboard | See Cross-Platform section below |
| Find keywords | Keyword Research | `research_keywords` |
| Create a campaign | Campaign Creation | Platform-specific flows below |
| Reduce wasted spend | Budget Optimization | `optimize_budget_allocation`, `analyze_wasted_spend`, `analyze_search_terms` |
| Switch accounts | Account Management | `switch_primary_account` |
| Compare platforms | Cross-Platform | Call each platform's performance tool, present side-by-side |
| Check ad fatigue | Creative Management | `detect_meta_creative_fatigue`, `analyze_linkedin_creative_performance` |
| Understand audiences | Audience Analysis | `get_meta_audience_insights`, `get_linkedin_audience_insights`, `search_audiences` |
| Add ad extensions | Ad Extensions | `add_sitelinks`, `add_callout_extensions`, `add_structured_snippets`, `list_campaign_extensions` |
| Add/manage keywords | Keyword Management | `add_keywords`, `remove_keywords`, `update_keyword`, `add_negative_keywords`, `remove_negative_keywords` |
### Step 3: Execute Tools
Follow the workflow patterns below. Always read first (performance, status), then act (create, optimize).
### Step 4: Summarize and Recommend
Present results in tables with key metrics. Highlight top and underperforming items. Propose actionable next steps.
## Performance Analysis
- **Google Ads:** `get_campaign_performance` — params: `lookback_days` (7/30/60/90, default 30), optional `customer_id`
- **Meta Ads:** `get_meta_campaign_performance` — params: `lookback_days`, optional `ad_account_id`
- **LinkedIn Ads:** `get_linkedin_campaign_performance` — params: `lookback_days`
- **TikTok Ads:** `get_tiktok_campaign_performance` — params: `lookback_days`
Present: impressions, clicks, CTR, spend, conversions, cost/conversion, ROAS. Default to 30-day lookback.
## Cross-Platform Performance Dashboard
When the user asks for overall performance, a weekly review, or cross-platform comparison:
1. Call `get_connections_status` to identify active platforms
2. For each connected platform, pull performance:
- Google: `get_campaign_performance`
- LinkedIn: `get_linkedin_campaign_performance`
- Meta: `get_meta_campaign_performance`
3. For each platform, pull waste analysis:
- Google: `analyze_wasted_spend`
- LinkedIn: `analyze_linkedin_wasted_spend`
- Meta: `analyze_meta_wasted_spend`
4. Present a unified scorecard
5. Recommend top 3 actions across all platforms
## Campaign Creation
**Google Ads Search:**
1. `research_keywords` — mandatory
2. Discuss bidding strategy with user
3. `discover_existing_assets` — check for existing ad assets
4. `validate_and_prepare_assets` — validate before creation
5. `create_search_campaign` — create the campaign (PAUSED status)
6. Add ad extensions:
- `add_sitelinks` — add 10+ validated sitelinks
- `add_callout_extensions` — add 4+ callouts
- `add_structured_snippets` — add relevant structured snippets
7. `list_campaign_extensions` — verify all extensions were added
**Google Ads Performance Max:**
1. Discuss bidding strategy with user
2. `discover_existing_assets` — check existing assets
3. `validate_and_prepare_assets` — validate creative assets
4. `create_pmax_campaign` — create the campaign
5. Add ad extensions (same as Search)
6. `add_pmax_search_themes` — add up to 50 themes per asset group
7. `search_audiences` + `add_pmax_audience_signal` — add audience signals
**Google Ads Demand Gen:**
1. `discover_existing_assets` — check existing images, logos, videos
2. `search_audiences` — find relevant audiences for `audience_segments` parameter
3. `create_demandgen_campaign` — create the campaign
**Google Ads YouTube:**
1. `validate_video` — validate the YouTube video
2. `discover_existing_assets` — find existing logos
3. `search_audiences` — find relevant audiences
4. `create_youtube_campaign` — create the campaign
**LinkedIn Ads:**
1. `get_linkedin_organizations` — get linked company pages (**CALL FIRST**)
2. `discover_linkedin_assets` — check existing assets
3. `validate_and_prepare_linkedin_assets` — validate assets
4. `create_linkedin_image_campaign` (or video/carousel/text) — create the campaign
**Meta Ads:**
1. `get_connections_status` — verify Meta account connected
2. `discover_meta_assets` — check existing assets
3. `validate_and_prepare_meta_assets` — validate assets
4. `search_meta_targeting` or `browse_meta_targeting` — find audiences
5. `create_meta_image_campaign` (or video/carousel) — create the campaign
**TikTok Ads:**
1. `discover_tiktok_assets` — check existing assets
2. `validate_and_prepare_tiktok_assets` — validate video assets
3. `create_tiktok_campaign` or `create_tiktok_video_campaign` — create the campaign
## Critical: Input Format Requirements
Follow these rules EXACTLY when calling Adspirer tools to avoid validation errors:
### IDs Must Be Strings
All IDs (campaign_id, ad_account_id, video_id, image_hash, ad_group_id, keyword_id, organization_id, creative_id) MUST be passed as quoted strings, never as bare integers.
- OK: `"existing_video_id": "1333064875515942"`
- BAD: `"existing_video_id": 1333064875515942`
### Never Modify IDs
Copy IDs exactly as returned by list/discover tools. Do not round, truncate, or change any digits.
### Always Call List/Discover Before Create/Update
Many tools require IDs from prior tool calls:
- `list_campaigns` → get `campaign_id` before update/pause/structure
- `get_campaign_structure` → get `ad_group_id` before keyword operations
- `discover_existing_assets` → get `image_hash`, `video_id` before campaign creation
- `get_linkedin_organizations` → get `organization_id` and `account_id`
### Text Length Limits
- Google Ads headline: max 30 characters
- Google Ads description: max 90 characters
- Google Ads sitelink text: max 25 characters
- Google Ads callout: max 25 characters
- Meta primary_text: max 125 characters
- Meta headline: max 40 characters
- LinkedIn introductory_text: max 600 characters
- LinkedIn headline: max 70 characters
### Enum Values Are Case-Insensitive
- **status:** ENABLED, PAUSED, ACTIVE, ARCHIVED
- **objective:** OUTCOME_TRAFFIC, OUTCOME_SALES, OUTCOME_LEADS, etc.
- **match_type:** EXACT, PHRASE, BROAD
- **call_to_action:** LEARN_MORE, SHOP_NOW, SIGN_UP, etc.
### Budgets Are Numbers
Pass budget fields as numbers, not strings:
- OK: `"budget_daily": 50`
- BAD: `"budget_daily": "50"`
### Keywords Format
For `add_negative_keywords`, each keyword must be an object:
- OK: `"keywords": [{"text": "free", "match_type": "BROAD"}]`
- BAD: `"keywords": ["free", "cheap"]`
---
## Available Tools — CompRelated in marketing
content-creator
IncludedProfessional-grade brand voice analysis, SEO optimization, and platform-specific content frameworks.
linkedin-content-generator
IncludedAI-powered LinkedIn content suite: generate posts, carousels, newsletters, and 30-day calendars with niche-specific SEO rules and a reinforcement-learning personal memory system.
email-marketing
IncludedEmail marketing automation - campaign creation, sequence building, A/B testing, deliverability optimization, and analytics
email-marketing
IncludedEmail marketing automation - campaign creation, sequence building, A/B testing, deliverability optimization, and analytics
social-publisher
IncludedMulti-platform social media publishing automation - schedule, post, and track content across TikTok, Instagram, YouTube, LinkedIn, and more
tiktok-marketing
IncludedTikTok content strategy, video creation workflows, posting optimization, and analytics. Based on n8n automation templates.