Ad Creative To Meta logo

Ad Creative To Meta

Organization
appeeky
ad-creative-to-meta

When the user wants to take an Appeeky-generated ad creative and create a draft Meta ad — upload image, create creative, ad set, and ad. Use when the user mentions "publish Meta ad", "upload creative to Facebook", "listing to live Meta ad", "end-to-end Meta pipeline", or "create Facebook ad from creative". For generation only see meta-ad-creative. Requires mmp-setup before activation.

Overview

Publisherappeeky
Repositoryua-skills
Skill namead-creative-to-meta
Stars
73
Forks
5
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by appeeky on GitHub. Read the source before you install it.

Installation

Install the Ad Creative To Meta AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/appeeky/ua-skills/tree/main/skills/ad-creative-to-meta
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/appeeky/ua-skills.git /tmp/ua-skills
mkdir -p .claude/skills
cp -r /tmp/ua-skills/skills/ad-creative-to-meta .claude/skills/ad-creative-to-meta
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Ad Creative To Meta in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Ad Creative To Meta on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Ad Creative To Meta is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Listing → Meta Ad Pipeline

End-to-end pipeline: App Store listing → Appeeky creative → Meta draft ad (PAUSED). User reviews tracking and creative before activation.

Automate the tedious steps. Never auto-activate without explicit user approval and verified MMP events.

Prerequisites Checklist

RequirementVerify via
Appeeky MCP connectedAPI key configured
Meta OAuth connectedmeta_ads_credentials_status → connected
Default ad accountmeta_ads_list_ad_accounts → meta_ads_set_default_ad_account
Facebook Page linkedmeta_ads_list_pages
App in Events ManagerApp ID + store URL
MMP livemmp-setup — Purchase/Subscribe events last 7 days
Context docapp-ads-context.md — CPA target, geo, budget
meta_ads_credentials_status

If not connected:

meta_ads_oauth_start

Pipeline Overview

Preferred path — one-shot PAUSED app-install draft:

1. generate_app_ad_creative  →  imageUrl + copy
2. meta_ads_upload_ad_image_from_url  →  image_hash
3. meta_ads_list_advertisable_applications + meta_ads_list_pages
4. meta_ads_create_app_install_draft  →  campaign + ad set + creative + ad
5. User review  →  manual activate

Manual path (when you need a shared ad set for multiple variants):

1. generate_app_ad_creative  →  imageUrl + copy
2. meta_ads_upload_ad_image_from_url  →  image_hash
3. meta_ads_create_campaign  →  campaign_id (if new)
4. meta_ads_create_adset  →  adset_id  (destination_type: APP)
5. meta_ads_create_creative  →  creative_id  (format: app_install, name required)
6. meta_ads_create_ad  →  ad_id
7. User review  →  manual activate

All entities created PAUSED. Writes cost 2 Appeeky API credits each.

Step 1 — Generate Creative

Single creative or batch from prior skills:

generate_app_ad_creative
  app_url: "https://apps.apple.com/us/app/id123456789"
  mode: "generate"
  style: "ugc"
  image_preset: "person_holding_phone"
  quality: "medium"

Poll:

get_app_ad_creative_job
  job_id: "<job-id>"

Save:

  • result.ad.imageUrl
  • result.ad.copy.primaryText
  • result.ad.copy.headline
  • result.ad.copy.description
  • result.ad.copy.callToAction

For batches (ad-creative-variants), repeat upload + ad creation per variant.

Step 2 — Upload Image to Meta

meta_ads_upload_ad_image_from_url
  ad_account_id: "act_1234567890"
  image_url: "https://cdn.appeeky.com/..."

Returns image_hash (or imageHash) — use in creative step.

ErrorFix
Invalid URLEnsure Appeeky CDN URL is public
Account mismatchVerify ad_account_id
Token expiredRe-run OAuth

Preferred path by monetization

MCP default for meta_ads_create_app_install_draft is APP_INSTALLS. That is wrong for subscription/IAP apps — Meta will optimize for cheap installs, not paying users.

App typePath
Subscription / IAPManual campaign → ad set with OFFSITE_CONVERSIONS + custom_event_type (below). Do not use the one-shot default.
Games / ad-supportedOne-shot draft is fine. Pass optimization_goal: "APP_INSTALLS" explicitly.

The one-shot tool does not accept custom_event_type on promoted_object. Use the manual ad set when optimizing to Purchase or Subscribe.

Use the manual campaign → ad set → creative → ad steps when attaching multiple variants to one shared ad set.

Step 3 — Create Campaign (if new)

Skip if adding ads to existing test campaign — use known campaign_id.

meta_ads_create_campaign
  ad_account_id: "act_1234567890"
  name: "FocusApp - App Installs - US"
  objective: "OUTCOME_APP_PROMOTION"
  status: "PAUSED"
  is_adset_budget_sharing_enabled: false

Campaign Settings Reference

SettingRecommendedNotes
ObjectiveOUTCOME_APP_PROMOTIONApp installs + events
Buying typeAuction (default)
CBOOff for first testAd set budget per test
StatusPAUSEDAlways

List existing:

meta_ads_list_campaigns
  ad_account_id: "act_1234567890"

Step 4 — Create Ad Set

meta_ads_create_adset
  ad_account_id: "act_1234567890"
  campaign_id: "<campaign-id>"
  name: "US - iOS - Creative Test"
  daily_budget_minor: 5000
  billing_event: "IMPRESSIONS"
  optimization_goal: "OFFSITE_CONVERSIONS"
  destination_type: "APP"
  promoted_object: {
    "application_id": "<meta-app-id>",
    "object_store_url": "https://apps.apple.com/us/app/id123456789",
    "custom_event_type": "PURCHASE"
  }
  targeting: { "geo_locations": { "countries": ["US"] } }
  status: "PAUSED"

Use SUBSCRIBE if that is the primary MMP event. Meta rejects OFFSITE_CONVERSIONS without custom_event_type.

Ad Set Settings Reference

SettingTest valueScale value
Daily budget$30–50 (3000–5000 minor)+20%/day on winners
OptimizationOFFSITE_CONVERSIONS + custom_event_type Purchase or SubscribeNot APP_INSTALLS or Link Clicks
DestinationAPP (destination_type)Never leave default WEBSITE
GeoUS firstExpand after 7d stable CPA
PlacementsAdvantage+ ON
Age18–65+ or app-specific
AudienceBroadLAL after 100+ converters

iOS 14+ Notes

  • AEM + SKAN: expect delayed reporting
  • Trust MMP over Meta dashboard for iOS CPA
  • Do not pause winners at 24h on iOS alone

Android Notes

  • Google Play URL in object_store_url
  • Same structure; often faster conversion feedback

Step 5 — Create Ad Creative

meta_ads_create_creative
  ad_account_id: "act_1234567890"
  format: "app_install"
  name: "FocusApp - VarA - Problem"
  page_id: "<facebook-page-id>"
  link_url: "https://apps.apple.com/us/app/id123456789"
  message: "<primaryText from Appeeky>"
  headline: "<headline from Appeeky>"
  description: "<description from Appeeky>"
  image_hash: "<from step 2>"
  call_to_action_type: "INSTALL_MOBILE_APP"

name is required. Default format is "link" — set "app_install" for store-install ads.

Creative Field Mapping

Appeeky fieldMeta field
copy.primaryTextmessage
copy.headlineheadline
copy.descriptiondescription (optional)
copy.callToActioncall_to_action_type
imageUrl → hashimage_hash

Step 6 — Create Ad

meta_ads_create_ad
  ad_account_id: "act_1234567890"
  adset_id: "<adset-id>"
  creative_id: "<creative-id>"
  name: "FocusApp - VarA - Problem - 20250629"
  status: "PAUSED"

Repeat steps 2, 5, 6 for each variant in a batch (shared campaign + ad set).

Step 7 — User Review

Present summary. Do not activate until checklist complete.

meta_ads_list_ads
  ad_account_id: "act_1234567890"

Output Template

markdown
# Meta Ad Draft Created — [App Name]

**Status:** All entities PAUSED — awaiting your approval

| Entity | Name | ID | Status |
|--------|------|-----|--------|
| Campaign | FocusApp - App Installs - US | [id] | PAUSED |
| Ad Set | US - iOS - Creative Test | [id] | PAUSED |
| Creative | VarA - Problem | [id] | — |
| Ad | FocusApp - VarA - Problem | [id] | PAUSED |

## Copy Used
| Field | Value |
|-------|-------|
| Primary text | ... |
| Headline | ... |
| Description | ... |
| CTA | INSTALL_MOBILE_APP |

## Creative
- **Image preview:** [imageUrl]
- **Image hash:** [hash]

## Budget & Targeting
- **Daily budget:** $50
- **Geo:** US
- **Optimization:** Purchase
- **Placements:** Advantage+

## Before Activating
- [ ] MMP Purchase/Subscribe events in last 7 days (mmp-setup)
- [ ] Meta Events Manager shows app events
- [ ] User reviewed creative + copy
- [ ] iOS SKAN delay expectations set
- [ ] Target CPA documented in app-ads-context.md

## Activate (user confirms)

meta_ads_update_ad ad_id: "" status: "ACTIVE"

meta_ads_update_adset adset_id: "" status: "ACTIVE"

meta_ads_update_campaign campaign_id: "" status: "ACTIVE"


## 48h Follow-up
→ meta-campaign-audit

Batch Pipeline (5 variants)

StepAction
1One generate batch (or 5 prior jobs)
25× upload_ad_image_from_url
31× campaign, 1× ad set
45× creative + 5× ad

Total write credits: ~(2 × 12) = ~24 API credits for full batch setup.

Error Reference

ErrorCauseFix
OAuth not connectedMissing Meta tokenmeta_ads_oauth_start
No PagePage not linked to accountConnect Page in Business Settings
Invalid app linkWrong store URL formatUse full App Store / Play URL
application_id invalidApp not in Events ManagerAdd app in Meta Events Manager
Policy rejectionClaims in copySoften primary text; review guidelines
Budget too lowBelow Meta minimumRaise daily_budget_minor
Creative rejectedImage text % / contentEdit via ad-creative-edit

REST API Equivalents

Base: https://api.appeeky.com/v1/connect/meta-ads/

MCP tools hit the un-nested paths and pass ad_account_id. Nested aliases also exist.

MCP toolREST
meta_ads_create_campaignPOST /campaigns or POST /ad-accounts/:adAccountId/campaigns
meta_ads_create_adsetPOST /adsets
meta_ads_create_creativePOST /creatives
meta_ads_upload_ad_image_from_urlPOST /adimages/from-url
meta_ads_create_app_install_draftPOST /app-install-drafts

See appeeky-meta-ads.md.

Common Mistakes

MistakeRiskFix
Auto-activatingSpend without trackingAlways PAUSED first
Optimizing for installs onlyLow-quality usersOptimize Purchase/Subscribe
Separate ad sets per variant (day 1)Bad comparisonOne ad set for test
Wrong object_store_urlBroken deep linkMatch platform to ad set
Skipping image re-upload after editStale creativeRe-upload on every edit
No ad naming conventionAudit chaosUse VarA/B/C pattern

Pre-Flight Checklist

Appeeky:
- [ ] Creative job completed
- [ ] imageUrl + copy extracted

Meta auth:
- [ ] credentials_status connected
- [ ] Default ad account set
- [ ] Page ID confirmed

Tracking:
- [ ] mmp-setup complete
- [ ] promoted_object application_id correct

Pipeline:
- [ ] All entities PAUSED
- [ ] User has summary + preview
- [ ] 48h audit scheduled

Related Skills

  • meta-ad-creative — step 1 generation
  • ad-creative-variants — batch before pipeline
  • ad-creative-edit — fix creative before upload
  • meta-campaign-setup — manual setup reference
  • mmp-setup — prerequisite before activation
  • meta-campaign-audit — 48h performance review
  • meta-budget-optimizer — post-launch budget rules

Frequently asked questions

What does the Ad Creative To Meta AI skill do?

When the user wants to take an Appeeky-generated ad creative and create a draft Meta ad — upload image, create creative, ad set, and ad. Use when the user mentions "publish Meta ad", "upload creative to Facebook", "listing to live Meta ad", "end-to-end Meta pipeline", or "create Facebook ad from creative". For generation only see meta-ad-creative. Requires mmp-setup before activation.

Why use Ad Creative To Meta on TypingMind?

Because you install it once and use it with any model. Ad Creative To Meta is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Ad Creative To Meta in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/appeeky/ua-skills/tree/main/skills/ad-creative-to-meta. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Ad Creative To Meta?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Ad Creative To Meta?

As many as you like. As long as a model supports skills, you can use Ad Creative To Meta with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Ad Creative To Meta AI skill free?

It is published on GitHub by appeeky. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇