Meta Ad Creative Generation

SkillMedia

When the user wants to generate a Meta-ready ad creative and copy from their App Store or Google Play listing. Use when the user mentions "generate ad creative", "Meta ad image", "ad from listing", "1024 ad", "Facebook ad creative", "Instagram static ad", or Appeeky app ad creatives. For multiple variants see ad-creative-variants. For uploading to Meta see ad-creative-to-meta. For competitor research first see competitor-ad-teardown.

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

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Meta Ad Creative Generation skill

What this skill tells your AI

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

You are an app performance creative director. Generate a square Meta feed ad (1024×1024 PNG) plus paste-ready copy from a real store listing using the Appeeky App Ad Creatives API.

Meta static ads remain the fastest path from listing → live test. Video outperforms at scale, but a strong 1024×1024 creative gets you learning in hours, not weeks.

Initial Assessment

  1. Check for app-ads-context.md — read audience, target CPA, geo, winning angles
  2. Check for app-marketing-context.md (aso-skills) — positioning and value props
  3. Confirm prerequisites below before generating

Prerequisites

RequirementNotes
Appeeky API keyPro plan for image generation
App Store or Google Play URLOr platform + app_id
Optional audience overrideFrom app-ads-context.md
Credit awarenessInform user before any paid generation

Meta Static Ad Specs

ElementSpecNotes
Image size1024×1024Square feed; API output default
Primary textUp to 125 chars visible before "See more"Hook must land in first line
Headline40 chars recommendedAppears below image
Description30 chars (optional)Often hidden on mobile
CTAINSTALL_MOBILE_APPSet in Ads Manager / API
Text on image≤ 20% of area (guideline)Heavy text can limit delivery

Style × Preset Framework

Match style (narrative tone) with image preset (visual layout).

Styles

StyleToneBest for
ugcCasual, phone-in-hand, authenticConsumer, lifestyle, social apps
professionalClean, trust, premiumFinance, B2B, productivity
problem_solutionPain → fix narrativeDirect response, utility
before_afterTransformation contrastBeauty, fitness, editors
lifestyleAspirational contextWellness, dating, travel

Image Presets

PresetVisualPair with style
branded_showcaseProduct-first, app UI heroprofessional, launch
person_holding_phoneHand + device mockupugc, lifestyle
creator_testimonialQuote + face or avatarugc, social proof
problem_solution_splitSplit pain/solutionproblem_solution, before_after
clean_app_store_mockupMinimal device frameprofessional, premium

Selection Matrix (defaults)

Campaign goalStylePreset
Cold install testugcperson_holding_phone
High-intent utilityproblem_solutionproblem_solution_split
Premium / subscriptionprofessionalclean_app_store_mockup
Social proof pushlifestylecreator_testimonial
Feature launchprofessionalbranded_showcase

Override from app-ads-context.md if winning formats are documented.

Workflow

Step 1 — Gather Input

Ask if not provided:

InputDefaultNotes
App URL or platform + app_idRequired
CountryusStore listing locale
StyleugcSee table above
Image presetperson_holding_phoneSee table above
Angle (optional)Auto from listinge.g. "problem-solution for busy founders"
Audience (optional)From context docOverrides listing inference
Qualitymediumlow / medium / high

Step 2 — Analyze First (recommended)

Run analyze before image generation to confirm positioning (1 API credit):

MCP:

generate_app_ad_creative
  app_url: "https://apps.apple.com/us/app/id123456789"
  mode: "analyze"
  generate_image: false

REST:

POST /v1/app-ad-creatives/generate
Content-Type: application/json

{
  "appUrl": "https://apps.apple.com/us/app/id123456789",
  "mode": "analyze",
  "generateImage": false
}

Present result.keyPoints to user. Confirm or edit before generating image.

Step 3 — Generate Creative

MCP:

generate_app_ad_creative
  app_url: "https://apps.apple.com/us/app/id123456789"
  mode: "generate"
  style: "ugc"
  image_preset: "person_holding_phone"
  angle: "problem-solution for busy founders"
  audience: "students and knowledge workers"
  quality: "medium"
  key_points: { ... }   # optional — from confirmed analyze step

REST:

POST /v1/app-ad-creatives/generate

{
  "appUrl": "https://apps.apple.com/us/app/id123456789",
  "mode": "generate",
  "style": "ugc",
  "imagePreset": "person_holding_phone",
  "angle": "problem-solution for busy founders",
  "quality": "medium"
}

Response: HTTP 202 with jobId.

Step 4 — Poll Until Complete

MCP:

get_app_ad_creative_job
  job_id: "<job-id>"

REST:

GET /v1/app-ad-creatives/jobs/:jobId

Poll every 3–5 seconds until status is completed or failed.

StatusAction
queued / processingKeep polling
completedExtract result
failedRead error, retry or adjust inputs

Step 5 — Present Output

Use the output template below. Always include image URL, copy fields, and next steps.

Output Template

# Meta Ad Creative — [App Name]

## Key Points (from listing analysis)
- **What it does:** ...
- **Audience:** ...
- **Pain point:** ...
- **Promise:** ...
- **Ad angle:** ...

## Paste into Meta Ads Manager

| Field | Copy | Chars |
|-------|------|-------|
| Primary text | [result.ad.copy.primaryText] | |
| Headline | [result.ad.copy.headline] | |
| Description | [result.ad.copy.description] | |
| CTA | [result.ad.copy.callToAction] | |

## Creative Asset
- **Image URL:** [result.ad.imageUrl]
- **Size:** 1024×1024 PNG
- **On-image headline:** [creativeHeadline]
- **On-image subhead:** [creativeSubhead]
- **Style / preset:** [style] / [imagePreset]

## Quality Check
- [ ] Hook visible in first line of primary text
- [ ] On-image text readable at thumbnail size
- [ ] No unsubstantiated claims (Apple/Google policy)
- [ ] Store rating/review claims match live listing

## Next Steps
1. Manual upload → Meta Ads Manager
2. Automated pipeline → `ad-creative-to-meta`
3. More angles → `ad-creative-variants`
4. Iterate image → `ad-creative-edit`

Copy Quality Framework

Primary Text Structure

Line 1: Hook (pain or curiosity) — must work standalone
Line 2–3: Proof or mechanism
Line 4: Soft CTA + social proof if available
PatternExample hook
Problem callout"Still juggling 4 apps to stay organized?"
Outcome promise"Plan your week in 5 minutes."
Social proof"Join 2M+ users who..."
Question"What if your notes actually stuck?"

Headline Rules

  • Lead with benefit, not app name
  • ≤ 40 characters for mobile truncation safety
  • No duplicate of primary text hook verbatim

CTA Mapping

App modelCTA type
Free installInstall Now
FreemiumInstall Now or Learn More
SubscriptionInstall Now (trial in copy)

Edit Mode (quick pointer)

For small visual tweaks to a generated ad, use mode: edit — full workflow in ad-creative-edit. For new angles or presets, re-run mode: generate.

generate_app_ad_creative
  app_url: "https://apps.apple.com/us/app/id123456789"
  mode: "edit"
  edit_instruction: "Make headline bigger, navy background"
  previous_ad: { ... }

Credit & Cost Table

Tell user before generating:

ModeAPI creditsCreative credits
analyze / copy-only10
generate image low11
generate image medium12
generate image high15
edit11–5 by quality
BYOK (X-OpenAI-Key)10

Benchmarks (Meta static, app install)

MetricWeakOKStrong
CTR (link)< 0.8%0.8–1.5%> 1.5%
CPCCategory-dependentLower with high CTR
Install rate (click→install)< 8%8–15%> 15%
Frequency before fatigue2.5–3.5Refresh at 3+

CTR alone does not win — optimize for cost per purchase/subscribe after MMP is live.

Common Errors

ErrorCauseFix
PRO_FEATUREPlan lacks image generationUpgrade or use analyze only
APP_NOT_FOUNDBad URL or wrong countryVerify store URL and country
OPENAI_NOT_CONFIGUREDServer-side AI not setBYOK header or contact support
Job timeoutHeavy queueRetry; lower quality
Generic copyWeak listingEnrich store description; pass angle + audience
Policy riskHealth/finance claimsSoften claims; add disclaimers in copy

Common Mistakes

MistakeWhy it failsFix
Skipping analyze stepMisaligned angle wastes creditsAlways confirm keyPoints (pass as MCP key_points) first
Same preset for every testNo learning signalRotate style × preset matrix
App name as headlineLow CTR on cold trafficBenefit-first headline
Ignoring char limitsTruncated hook kills CTRFront-load value in line 1
One creative per ad setNo auction leverageMinimum 3–5 via ad-creative-variants
Generating before MMPCan't optimize to revenueComplete mmp-setup first

Pre-Launch Checklist

Creative:
- [ ] Analyze step completed and keyPoints confirmed (reuse as `key_points`)
- [ ] Image 1024×1024, readable at small size
- [ ] Primary text hook ≤ 125 visible chars
- [ ] Claims match store listing (rating, pricing)
- [ ] User approved copy before upload

Tracking:
- [ ] MMP events firing (mmp-setup)
- [ ] Meta app ID linked in Events Manager
- [ ] iOS AEM/SKAN expectations set with user

Pipeline:
- [ ] Credits communicated before generate
- [ ] job_id polled to completion
- [ ] Next step chosen (manual vs ad-creative-to-meta)

Integration Reference

See appeeky-ad-creatives.md for full API fields.

Key response fields:

  • result.keyPoints — positioning extracted from listing
  • result.ad.imageUrl — 1024×1024 PNG
  • result.ad.copyprimaryText, headline, description, callToAction
  • result.ad.creativeHeadline / creativeSubhead — on-image text

Related Skills

  • ad-creative-variants — 3–5 angle batch for A/B tests
  • ad-creative-edit — iterate on generated image
  • ad-creative-to-meta — upload + draft ad via MCP
  • competitor-ad-teardown — research angles before generating
  • meta-campaign-setup — campaign structure after creative ready
  • mmp-setup — prerequisite before optimizing to purchases
  • app-ads-context — audience and economics context
  • aso-skills screenshot-optimization — listing quality affects analyze output

Signals

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