diagnose-underperforme…
Diagnose why a specific Google Ads or Meta Ads campaign / ad set / ad is underperforming and prescribe the next concrete action. Use when the user says…
Edit a Meta ad's creative content — landing page URL, primary text, headline, description, CTA, link description — across one ad or many. Use when the user says "change the URL on my ads", "update the copy", "swap the CTA", or anything that changes what an existing Meta ad
$ npx -y skills add markifact/markifact-mcp --skill edit-meta-creative --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/edit-meta-creativeContext preview
The summary Claude sees to decide when to auto-load this skill.
Edit a Meta ad's creative content — landing page URL, primary text, headline, description, CTA, link description — across one ad or many. Use when the user says "change the URL on my ads", "update the copy", "swap the CTA", or anything that changes what an existing Meta ad
name: edit-meta-creative description: Edit a Meta ad's creative content — landing page URL, primary text, headline, description, CTA, link description — across one ad or many. Use when the user says "change the URL on my ads", "update the copy", "swap the CTA", or anything that changes what an existing Meta ad shows. Meta does not allow in-place creative edits, so this command runs the required get → modify → create → replace workflow.
Apply a creative-content change to one or more existing Meta ads **without losing learning, frequency caps, ad post engagement, or the ad ID**. The same `ad_id` keeps running with a new creative attached.
Meta does **not** allow in-place edits of creative content (URL, text, headline, image, CTA). The only way to change an existing ad's creative is:
get_ad_creative → modify payload locally → create_ad_creative → replace_ad_creative
Anything else (deleting + recreating the ad) destroys learning, frequency capping, social proof (likes/comments), and breaks any link people have to the ad post. Always use `replace_ad_creative` — never delete-and-recreate for a creative change.
1. Account name (substring) — required. 2. **Scope** — required. One of:
3. **What to change** — required. Examples:
4. **Old → new mapping** if it's a find-and-replace (e.g. swap `utm_campaign=spring` for `utm_campaign=summer`, or replace `oldsite.com` with `newsite.com`).
1. **Discover** ops: `meta_ads_select_accounts`, `meta_ads_list_ads`, `meta_ads_list_adsets`, `meta_ads_list_campaigns`, `meta_ads_get_ad_creative`, `meta_ads_create_ad_creative`, `meta_ads_replace_ad_creative`. 2. **Inspect** each with `get_operation_inputs`. 3. **Resolve account** via `meta_ads_select_accounts` (substring). 4. **Resolve scope to a list of `ad_id`s** via `meta_ads_list_ads` with the right filters (campaign, ad set, status). Show the user the ad list and the count before doing anything else. 5. **For each ad in scope**: a. `meta_ads_get_ad_creative(ad_id)` → returns the raw creative payload. b. **Modify the payload locally** based on the requested change. Preserve all fields the user did not ask to change. Common fields to patch:
c. `meta_ads_create_ad_creative(modified_payload)` → returns new `creative_id`. **Only works when the existing media (image_hash / video_id) is reused.** If the user is also swapping in fresh media that isn't already in Meta, see "Fresh media" below. d. `meta_ads_replace_ad_creative(ad_id, creative_id)` → attaches the new creative. 6. **Build a diff preview before executing.** Show the user a table of every ad with old → new for each changed field. Wait for explicit confirmation. Then run all replaces, batched into a single `request_human_approval` if approval is required. 7. **Confirm**: count succeeded, count failed (with reason), list of new `creative_id`s.
Use `safe-write-operations` for steps 5c, 5d, and 6.
`meta_ads_create_ad_creative` expects media that already exists in Meta as `image_hash` or `video_id`. If the user wants brand-new media:
Manage Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Microsoft Ads, Reddit Ads, Pinterest Ads, Snapchat Ads, Amazon Ads, DV360, GA4, BigQuery, Google Search Console, Google Business Profile, Google Merchant Center, Facebook, Instagram, LinkedIn, Shopify,
Diagnose why a specific Google Ads or Meta Ads campaign / ad set / ad is underperforming and prescribe the next concrete action. Use when the user says…
Launch a complete Google Ads Search campaign — campaign, ad group, responsive search ads, keywords, sitelinks, callouts, and negatives — built paused and ready…
Launch a complete Meta Ads campaign — campaign, ad set, and ad(s) — built paused and ready to review. Use when the user wants a new Facebook/Instagram campaign.
Launch a Google Ads Performance Max campaign with a complete asset group, audience signals, and (for ecom) listing groups. Built paused for review. Use when…
Senior performance-marketing operator with hands-on access to the user's ad accounts via Markifact. Use proactively for anything Google Ads, Meta / Facebook /…
Reference — what Markifact is, what the MCP server exposes, and the discover→inspect→run pattern. Always loaded into the performance-marketer agent.