{"id":66312,"plugin_id":"plugin_asdk_app_69461dc91ee48191ae4a14eb9bde1c21","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-28T12:05:37.726Z","digest":"71a51c4b79848322242477430df7db152ba03f646190321cb3940daa4345f736","against":null,"payload":{"description":"Create and manage Meta Ads (Facebook and Instagram) through Adspirer — image, video, carousel, and lead-gen campaigns, ad sets, audiences, pixels, and creative fatigue. Use for anything on Facebook, Instagram, Meta, or FB ads. Covers the account-currency budget unit (never cents) and the required Facebook page id.","included_files":[{"relative_path":"references/creative-specs.md","size_in_bytes":2942}],"name":"adspirer-meta-ads","skill_md_contents":"---\nname: adspirer-meta-ads\ndescription: Create and manage Meta Ads (Facebook and Instagram) through Adspirer — image, video, carousel, and lead-gen campaigns, ad sets, audiences, pixels, and creative fatigue. Use for anything on Facebook, Instagram, Meta, or FB ads. Covers the account-currency budget unit (never cents) and the required Facebook page id.\n---\n\n# Meta Ads (Facebook and Instagram)\n\nEverything on Meta goes through the `meta_ads` router. Follow `adspirer-mcp` for the two-step.\n\nAccount parameter: `ad_account_id`, as a **string**. An `act_` prefix is stripped for you.\n\n## Budgets are in the account's own currency\n\n`daily_budget` and `lifetime_budget` are **decimals in the ad account's own currency — not\ncents, and not converted to USD.** For `$50/day` send `50`. For `$20/day` send `20`.\n\nDo **not** multiply by 100 or send cents. If you send `2000` meaning `$20`, you will book\n**`$2,000/day`** — a 100× overspend. Read the created campaign back to confirm the number.\n\n## Objectives\n\nMeta uses ODAX objectives. Use these names:\n\n`OUTCOME_AWARENESS` · `OUTCOME_TRAFFIC` · `OUTCOME_ENGAGEMENT` · `OUTCOME_LEADS` ·\n`OUTCOME_APP_PROMOTION` · `OUTCOME_SALES`\n\nLegacy names (`CONVERSIONS`, `LINK_CLICKS`, `LEAD_GENERATION`) are auto-mapped, but say the ODAX\nname so the mapping is visible.\n\n## Every ad needs a page and a URL\n\nMeta refuses to create an ad without a Facebook `page_id` and an `http(s)` landing URL. Get the\npage before you start building; asking for it halfway through a build wastes the user's time.\n`list_meta_pixels` and `list_meta_instagram_accounts` find the other ids you'll want.\n\n## Structure: one campaign, several ad sets\n\nTargeting lives on the **ad set**, not the campaign. When a user wants to test three audiences,\nthat is one campaign with three ad sets — not three campaigns. Budget can sit at the campaign level\n(Advantage+ / CBO) and be distributed, or at the ad-set level, but not usefully at both.\n\nBuild order: campaign → `add_meta_ad_set` → `add_meta_ad`. The campaign is created **paused**.\n\n## Creative\n\n- **Image**: feed 1:1 or 4:5, at least 600×600. Stories and Reels 9:16, at least 500×888. Under 30 MB.\n- **Video**: MP4 or MOV, H.264, under 4 GB. Reels are 9:16, 3–90 seconds.\n- **Carousel**: 2–10 cards. Every card needs its own landing URL, and all cards share one aspect\n  ratio. Mixing ratios fails.\n- **Text**: headline ≤ 255 characters. Primary text ≤ 2200, but it visually truncates around 125 —\n  put the point first.\n\nFull tables in `references/creative-specs.md`.\n\nRun `validate_and_prepare_meta_assets` before creating an ad, and `discover_meta_assets` to reuse\nwhat's already in the account.\n\n## Writes are rate-guarded\n\nCampaign creation is capped per user (about 100/hour, 300/day). Updates, pauses, and resumes are\nnot capped. If a write is blocked, stop and tell the user — do not retry in a loop, and do not\nswitch tools to get around it.\n\n## Reading performance\n\n`get_meta_campaign_performance` is a **direct, top-level tool** — do not route it through\n`meta_ads`. It renders a performance card. Pass `raw_data: true` for the raw numbers.\n\n`detect_meta_creative_fatigue` is the one to reach for when CTR is sliding and frequency is\nclimbing — that's fatigue, not a targeting problem. `analyze_meta_wasted_spend` finds ad sets\nspending without converting.\n\nLead-gen campaigns: `list_meta_lead_forms` and `get_meta_lead_form_submissions` return real\npeople's contact details. Handle them as personal data — summarize, don't dump.\n\n## References\n\n- `references/creative-specs.md` — image, video, carousel, and text limits; ODAX objective map\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}