Listing → Meta Ad Pipeline

SkillMedia

Turn an Appeeky-generated ad creative into a draft Meta ad without doing the setup by hand. Once added, your AI can take a finished creative and build it out in Meta for you, from uploading the image to creating the ad set and the ad itself.

Available today. Use it from your connected AI after setup.

After adding it, ask your AI to create a Facebook or Meta ad from one of your Appeeky creatives. Have the creative ready so it can upload the image and build the draft ad step by step.

Then ask your AI: use the Listing → Meta Ad Pipeline skill

What your AI can do with it

  • Upload an Appeeky ad image to Meta
  • Create a Meta ad creative from that image
  • Set up the ad set for the campaign
  • Create the ad itself as a draft in Meta
  • Take a creative from generation to a draft Meta ad in one request

What this skill tells your AI

The instructions your AI receives, as published by appeeky/ua-skills in skills/ad-creative-to-meta/SKILL.md and read by ahel’s review.

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_accountsmeta_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

# 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)
2upload_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

Signals

GitHub stars
55
Forks
5
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
ad-creative-to-meta
Source
github.com/appeeky/ua-skills