Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
mfwarren avatar

Metaads

  • 275 installs
  • 50 repo stars
  • Updated February 8, 2026
  • mfwarren/entrepreneur-claude-skills

Publish, pause, and read performance for Facebook and Instagram campaigns through Meta’s Marketing API without living in Ads Manager.

About

Metaads is an agent skill that acts as a Meta media buyer for Claude Code and similar assistants. It wires conversational intent—“publish ads,” “ROAS,” “pause campaign,” “set up meta ads”—into three documented workflows: API setup, campaign publishing, and performance analysis. Solo and indie builders use it when they already have creative and landing pages but want the agent to create campaigns, upload assets, and pull metrics instead of clicking through Business Manager. The skill explicitly routes setup before publish when tokens or .env are missing, which reduces failed launches on first run. It targets founders running their own paid social for SaaS, ecommerce, or content offers who need repeatable API-backed operations rather than one-off chat advice. It is not a strategy or copywriting replacement; it executes and reports against campaigns you define.

  • Intent routing across Setup, PublishCampaign, and performance workflows from natural-language triggers
  • First-time guided setup: Business Manager, app, token, and .env when credentials fail
  • Campaign publish flow: images, ad sets, and live launch via Marketing API
  • Performance questions: ROAS, spend, creative and ad-set winners, pause/resume controls
  • Credential recovery path when tokens expire or --check reports errors

Metaads by the numbers

  • 275 all-time installs (skills.sh)
  • +10 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #869 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
  • Security screen: CRITICAL risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mfwarren/entrepreneur-claude-skills --skill metaads

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs275
repo stars50
Security audit1 / 3 scanners passed
Last updatedFebruary 8, 2026
Repositorymfwarren/entrepreneur-claude-skills

What it does

Publish, pause, and read performance for Facebook and Instagram campaigns through Meta’s Marketing API without living in Ads Manager.

Files

SKILL.mdMarkdownGitHub ↗

Workflow Routing (SYSTEM PROMPT)

CRITICAL: Route to the correct workflow based on user intent.

When user needs to set up or configure Meta Ads API access: Examples: "set up meta ads", "connect meta ads", "configure facebook ads", "my token expired", "meta ads setup", credential errors from --check -> READ: ~/.claude/skills/MetaAds/workflows/Setup.md -> EXECUTE: Walk user through complete setup (Business Manager, App, token, .env)

When user wants to publish, create, or launch a campaign: Examples: "publish ads", "create campaign", "launch campaign", "upload ad images", "publish meta ads", "push this campaign to Meta", "create ad set" -> READ: ~/.claude/skills/MetaAds/workflows/PublishCampaign.md -> EXECUTE: Campaign publishing workflow -> If credentials fail, route to Setup.md first

When user wants to check performance, metrics, or analyze results: Examples: "check meta ad performance", "ROAS", "which ad is winning", "ad spend", "campaign metrics", "how are my ads doing", "audience breakdown", "creative performance" -> READ: ~/.claude/skills/MetaAds/workflows/AnalyzePerformance.md -> EXECUTE: Performance analysis workflow -> If credentials fail, route to Setup.md first

When user wants to manage campaigns (pause/resume/status): Examples: "pause campaign", "resume campaign", "campaign status", "list campaigns" -> Use uv run ~/.claude/skills/MetaAds/tools/Publish.py directly with --pause, --resume, --status, or --list

---

When to Activate This Skill

Setup & Configuration (Category 0)

  • "set up meta ads", "connect meta ads API", "configure facebook ads"
  • "meta ads setup", "how do I connect my ad account"
  • "my token expired", "token error", "can't access meta ads"
  • "refresh my meta token", "renew access token"
  • Any credential error from --check

Campaign Publishing (Category 1)

  • "publish ads", "create campaign", "launch campaign"
  • "push this to Meta", "set up the campaign", "upload ad images"
  • "publish meta ads", "create ad set", "build the campaign"
  • "publish this campaign config", "go live with the ads"

Performance Analysis (Category 2)

  • "check meta ad performance", "how are my ads doing"
  • "ROAS", "return on ad spend", "ad spend", "ad metrics"
  • "which ad is winning", "best performing ad"
  • "campaign metrics", "ad set performance", "creative performance"
  • "audience breakdown", "age/gender breakdown"
  • "CTR", "CPC", "CPM", "CPA", "cost per acquisition"

Campaign Management (Category 3)

  • "pause campaign", "resume campaign", "activate campaign"
  • "campaign status", "list campaigns", "show my campaigns"

---

Core Capabilities

Guided Setup:

  • Complete walkthrough: Business Manager -> Developer App -> Token -> .env
  • Two token paths: System User (never expires) or User Token (60-day, with automated refresh)
  • Token exchange automation (agent runs the curl command)
  • Pixel setup guidance for conversion tracking
  • Error diagnosis with specific fixes for every common failure

Campaign Publishing:

  • Upload images from local directories to Meta
  • Create full campaign hierarchy (campaign -> ad set -> creative -> ad)
  • Advantage+ flexible creative with multiple images/texts/headlines
  • All objects created PAUSED for manual review
  • JSON config-driven for reproducible campaigns

Performance Analytics:

  • Account-level summary with DTC benchmarks (CTR, CPM, CPA, ROAS)
  • Campaign, ad set, and ad-level metrics
  • Daily trend analysis for campaign deep dives
  • Audience breakdowns (age, gender, platform, device)
  • Data sync to Analytics/meta-ads/ for cross-channel analysis
  • CSV export for spreadsheet analysis

Campaign Management:

  • List all campaigns with status
  • View campaign hierarchy (campaign -> ad sets -> ads)
  • Pause/resume campaigns

---

Scripts

ScriptPurpose
tools/Publish.pyCampaign creation, image upload, pause/resume
tools/Analytics.pyPerformance metrics, breakdowns, sync, export

Both scripts use PEP 723 inline dependencies — just run with uv run directly from the skill directory. No install or copy step needed.

Usage

Run scripts directly from the skill directory. They load .env from the current working directory (Path.cwd()), so run them from your project root:

# From your project root (where .env lives):
uv run ~/.claude/skills/MetaAds/tools/Publish.py --check
uv run ~/.claude/skills/MetaAds/tools/Analytics.py --summary

Prerequisites: uv must be installed. If not: curl -LsSf https://astral.sh/uv/install.sh | sh

Environment Variables (`.env`):

VariableRequiredDescription
META_ADS_ACCESS_TOKENYesSystem User or long-lived User token
META_ADS_ACCOUNT_IDYesAd account ID with act_ prefix
FACEBOOK_APP_IDFor refreshApp ID for token exchange
FACEBOOK_APP_SECRETFor refreshApp Secret for token exchange

---

Campaign Objective Reference

Use these objectives in campaign configs:

ObjectiveWhen to UseOptimization Goal
OUTCOME_SALESDTC purchases, Shopify conversionsOFFSITE_CONVERSIONS
OUTCOME_LEADSLead gen, email signups, quiz funnelsLEAD_GENERATION
OUTCOME_TRAFFICLanding page visits, blog trafficLINK_CLICKS
OUTCOME_AWARENESSBrand awareness, video viewsREACH or IMPRESSIONS
OUTCOME_ENGAGEMENTPost engagement, page likesPOST_ENGAGEMENT

---

Campaign Config Template

Generic template for any DTC brand:

{
  "campaign": {
    "name": "campaign-name-month-year",
    "objective": "OUTCOME_SALES"
  },
  "adsets": [
    {
      "name": "Broad-25-54-US",
      "daily_budget": 5000,
      "targeting": {
        "age_min": 25,
        "age_max": 54,
        "genders": [0],
        "geo_locations": {"countries": ["US"]},
        "publisher_platforms": ["facebook", "instagram"],
        "facebook_positions": ["feed", "video_feeds", "story", "reels"],
        "instagram_positions": ["stream", "story", "reels", "explore"]
      },
      "optimization_goal": "OFFSITE_CONVERSIONS",
      "bid_strategy": "LOWEST_COST_WITHOUT_CAP"
    }
  ],
  "creative": {
    "images_directory": "./path/to/ad-images/",
    "primary_texts": [
      "Primary text variant 1 — lead with the hook or pain point",
      "Primary text variant 2 — lead with the benefit or social proof",
      "Primary text variant 3 — lead with a comparison or price anchor"
    ],
    "headlines": [
      "Short Punchy Headline",
      "Benefit-Driven Headline",
      "Price/Value Headline"
    ],
    "descriptions": [
      "Supporting description with key differentiator"
    ],
    "link_url": "https://yoursite.com/landing-page",
    "url_parameters": "utm_source=meta&utm_medium=paid-social&utm_campaign=campaign-name&utm_content={{ad.name}}",
    "call_to_action_type": "SHOP_NOW"
  }
}

Config notes:

  • daily_budget is in cents (5000 = $50.00/day)
  • genders: 0 = all, 1 = male, 2 = female
  • {{ad.name}} is a Meta dynamic parameter — auto-fills with the ad name
  • call_to_action_type options: SHOP_NOW, LEARN_MORE, SIGN_UP, GET_OFFER, ORDER_NOW, SUBSCRIBE, BOOK_NOW

---

DTC Benchmark Reference

MetricGoodOKNeeds WorkWhat It Means
CTR>1.5%1-1.5%<1%% of impressions that click. Low = creative isn't resonating
CPM<$15$15-25>$25Cost per 1000 impressions. High = competitive auction or narrow audience
CPC<$1$1-2>$2Cost per click. High = low CTR driving up costs
CPA<$30$30-50>$50Cost per purchase. The ultimate efficiency metric
ROAS>3x2-3x<2xRevenue per $1 spent. Below 2x usually means losing money after COGS
Frequency1-33-5>5Avg times each person saw the ad. High = ad fatigue
Hook Rate>25%15-25%<15%% who watch first 3 sec of video. Low = weak opening
Hold Rate>10%5-10%<5%% who watch 15+ sec. Low = content doesn't sustain interest

---

Optimization Playbook

Scaling winners:

  • Increase budget by 20-30% every 2-3 days (not all at once — resets learning)
  • Duplicate winning ad sets with new audiences
  • Create lookalike audiences from purchasers

Fixing underperformers:

  • CTR < 1%: Test new hooks/images — the creative isn't stopping thumbs
  • CTR > 2% but no purchases: Landing page problem, not ad problem
  • CPA too high: Narrow targeting or test lower-funnel audiences
  • Frequency > 4: Rotate in fresh creative
  • No spend after 48 hours: Switch optimization to Link Clicks temporarily, then back to Conversions

Meta learning phase:

  • Each ad set needs ~50 conversions in 7 days to exit learning
  • Don't edit during learning (resets the clock)
  • If budget is too low for 50 conversions/week, optimize for a higher-funnel event (ATC instead of Purchase)

---

Examples

Example 1: First-time Setup

User: "I want to set up Meta ads for my store"

Skill Response: 1. Routes to Setup.md workflow 2. Checks if .env exists, if Business Manager is set up 3. Walks through Developer App creation 4. Helps generate and exchange token 5. Configures .env 6. Verifies with --check

Example 2: Publish a Campaign

User: "Create a campaign for our new product launch"

Skill Response: 1. Routes to PublishCampaign.md workflow 2. Checks credentials (routes to Setup if missing) 3. Asks about images, copy, targeting, budget 4. Builds config JSON 5. Publishes (all PAUSED) 6. Reports campaign ID and review checklist

Example 3: Check Performance

User: "How are my Meta ads doing?"

Skill Response: 1. Routes to AnalyzePerformance.md workflow 2. Runs --summary for account overview 3. Compares against DTC benchmarks 4. Identifies winners and losers 5. Provides specific optimization recommendations

Example 4: Token Expired

User: "My meta ads token isn't working" / agent sees error code 190

Skill Response: 1. Routes to Setup.md Part 6 (Token Refresh) 2. Checks for FACEBOOK_APP_ID and FACEBOOK_APP_SECRET in .env 3. Tells user to generate new short-lived token in Graph API Explorer 4. Runs the exchange curl command 5. Updates .env with new long-lived token 6. Verifies with --check

Example 5: Manage Campaign

User: "Pause campaign 12345678"

Skill Response: 1. Runs uv run ~/.claude/skills/MetaAds/tools/Publish.py --pause 12345678 2. Confirms campaign is paused

---

Last Updated: 2026-02-07

Related skills

FAQ

Is Metaads safe to install?

skills.sh reports 1 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Marketing & SEOdistributionlifecycle

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.