---
name: ugc-style-video-ads
description: "Produce UGC-style video ads via Pika + HeyGen — script, avatar/voice, cut to Meta video ads specs and TikTok/Reels dimensions — that feel native, not polished-ad."
license: MIT
compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer."
metadata:
  author: "Adspirer"
  version: "1.0.0"
  adspirer_category: "creative-production"
  adspirer_source: "https://www.adspirer.com/skills/ugc-style-video-ads"
  adspirer_connection_url: "https://adspirer.ai/sign-up"
  adspirer_primary_keyword: "ugc ads"
  adspirer_secondary_keywords: "ugc video ads, ai ugc ads"
  adspirer_launch_wave: "1"
  adspirer_kind: "skill"
  adspirer_level: "operator"
  adspirer_platforms: "tiktok,meta"
  adspirer_supported_clients: "claude,claude-code,chatgpt,codex,cursor,gemini,windsurf"
  adspirer_summary: "Produce UGC-style video ads via Pika + HeyGen — script, avatar/voice, cut to Meta video ads specs and TikTok/Reels dimensions — that feel native, not polished-ad."
  adspirer_connections_required: "heygen,pika,adspirer"
  adspirer_connections_optional: ""
---

# UGC-Style Video Ads — Built to Meta Video Ads Specs (TikTok + Reels)

## Use this when

Use this when you need a UGC-style (user-generated-content style) video ad built to Meta video ads specs for Reels and/or TikTok — a talking-avatar or voiced testimonial spot that reads as an authentic creator post, not a studio ad — for a new product launch, a fatigued-creative refresh, or a hook/angle test. Best fit when you have a real offer, a clear ICP pain point, and either an existing product image/UGC clip to animate or a script written for a real human voice. This is also the right call when someone hands you a note like 'just get it to spec' — the procedure below covers exact resolution, aspect ratio, duration, and file-size specs for both platforms so nothing bounces at upload. Not the right tool for pure motion-graphics brand films, multi-scene narrative spots, or anything requiring a real filmed human on camera (this produces a synthetic avatar/voice, not a real creator booking).
Skip it if the account is already saturated with AI-avatar creative and CTR/hook-rate benchmarks show viewer fatigue on synthetic UGC specifically (check the account's own hook-rate history first) — in that case this workflow's "native feel" premise is compromised and a real creator brief is the better call.

## What you need

- Adspirer connected to the TikTok and/or Meta ad account(s) where the finished creative will be uploaded and tested
- HeyGen account connected (avatar generation + voice) — required, the whole "talking presenter" mechanic depends on it
- Pika connected (b-roll/scene generation, product shots, motion cutaways) — required for the non-avatar cutaway footage that sells the "native" feel
- A written hook + script (3–5 short beats, ~20–45 sec total) OR a product description detailed enough for the agent to draft one — vague briefs ("make something viral") will get bounced back for specifics before any generation spend
- The offer/landing page URL and the primary conversion event already firing (so the ad can be mapped to a real campaign/ad set, not orphaned)
- Brand guardrails: what claims are allowed (especially for regulated categories — health, finance, supplements), any avatar/voice restrictions, and logo/product asset files if you want brand elements composited in
- Know which platform aspect ratio you're targeting against Meta video ads specs and TikTok specs: 9:16 vertical is the default for both TikTok and Reels; say if you also need a 1:1 or 4:5 cutdown for Feed placements

## Procedure

1. Confirm the brief: offer, ICP, single core hook (the first 1.5 sec has to earn the next 3 sec — no throat-clearing intros like "Hey guys" unless that IS the intended native cue), CTA, and target platform(s). If any of these are missing, draft options and get user sign-off on the angle before generating anything — HeyGen/Pika renders cost time and quota, don't burn a generation on a guessed brief.
2. Write the script as discrete beats (hook / problem / demo-or-proof / offer / CTA), each beat tagged with its intended visual: "avatar talking head" vs "b-roll cutaway." Native-feel UGC lives or dies on the cutaway pattern — pure static talking-head for 30 sec reads as an ad. Default beat split: hook (avatar, 0–3s) → problem/relatability (avatar or cutaway, 3–10s) → product-in-use or proof (cutaway, 10–20s) → offer+CTA (avatar, 20–30s). Flag this split to the user as a default they can override.
3. **Connect HeyGen:** this step uses HeyGen. Add the HeyGen MCP/connector to your agent — setup: https://www.heygen.com/model-context-protocol, then continue. Skip only if a step says it's optional. Generate the avatar segment(s) in HeyGen: pick a persona/voice that matches the brand's target demo (mismatched avatar-to-ICP is the #1 reason synthetic UGC gets called out in comments — e.g. don't put a 50-something suited avatar on a Gen-Z skincare hook). Keep avatar takes to the scripted beats only — don't generate one continuous 30s avatar read, generate it in the segments defined in step 2 so cutaways can be inserted cleanly. Export at the platform's native vertical resolution (1080x1920) to avoid an upscale pass.
4. **Connect Pika:** this step uses Pika. Add the Pika MCP/connector to your agent — setup: https://mcp.pika.me/, then continue. Skip only if a step says it's optional. Generate the b-roll/cutaway segments in Pika for the non-avatar beats (product close-ups, in-use motion, text-on-screen moments). This is optional-but-load-bearing: skipping it and running all-avatar is allowed but the user should be told up front that all-avatar cuts test measurably worse on native-feel hook rate — flag it as a tradeoff, not silently substitute.
5. Assemble the cut: stitch avatar + b-roll segments in beat order, add native-style captions (burned-in, not platform auto-caption — auto-caption timing reads as "ad" when it's too clean) sized for mobile sound-off viewing, keep total runtime 20–34 sec (TikTok/Reels native UGC sweet spot; longer only if the hook is unusually strong and the user explicitly wants a longer-form testimonial cut). Do not add a polished end-card/logo-lockup slate — that's the single biggest "this is an ad" tell; if the user wants branding, composite it small and early, not as a closing slate.
6. Export platform-specific versions per current Meta video ads specs and TikTok specs: 9:16 1080x1920 for TikTok and Reels (required), plus 4:5 1080x1350 or 1:1 1080x1080 only if the user confirmed Feed/Stories placement expansion in step 1. Verify each export is under platform file-size/duration caps before handoff (TikTok: ≤287.6MB, up to 10 min but keep native-feel cuts short; Meta: ≤4GB video, Reels ≤90s recommended for this format).
7. Present the cut(s) to the user for creative approval — this is a hard stop before any ad account touches it. Do not auto-upload finished creative into a live ad set.
8. On explicit user approval of both the creative AND the spend/campaign plan (new ad in an existing ad set, or a new test campaign with its budget): **Connect Adspirer (the ads connection):** when you reach a step that touches a live ad account, connect Adspirer first. In Claude Code, run `/plugin marketplace add anthropics/claude-plugins-community` then `/plugin install adspirer-ads-agent@claude-community`. In claude.ai or ChatGPT, add the Adspirer connector from https://www.adspirer.com/docs/ai-clients. Any other agent: follow https://www.adspirer.com/docs/ai-clients for your client. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed. Upload the approved cut(s) as new ad creative to the specified TikTok/Meta ad account, attach to the approved ad set/campaign, and launch paused (or live only if the user explicitly said launch live, not just "approved the creative").
9. Confirm via the live account that the ad was created in the intended ad set with the correct creative attached, correct status (paused/active as instructed), and that platform policy review hasn't immediately flagged it (Meta shows "In Review" status; TikTok shows under review typically within minutes) — report the ad's real status back to the user rather than assuming the upload call succeeding means the ad is live and running.

## Fixed checks

- After HeyGen/Pika generation: verify the exported files actually exist and open (not a failed/partial render) and match the requested resolution/aspect ratio against Meta video ads specs — don't hand off a file the agent never confirmed renders correctly
- Before ad-account upload: verify the target ad set/campaign actually exists in the live account and is in the state the user described (right platform, right objective, right budget) — never assume the account matches the brief without checking
- After upload: pull the live ad's actual status, review state, and creative preview from the ad account (via Adspirer) — confirm what was actually created, never just report "uploaded successfully" from the API call's 200 response
- If this account has run AI-avatar UGC before: check recent hook-rate/CTR on those ads before presenting the new cut as a strong bet — don't claim expected performance without that comparison, and say so if no prior data exists

## Stop conditions

- SUCCESS: creative approved by user, uploaded to the correct ad set, live-account status confirmed (paused or active as instructed), preview matches what was approved
- NO-OP: user reviews the cut(s) and declines to launch (angle not right, avatar mismatch, wants a re-cut) — deliver the rendered files, stop, no account changes made
- BLOCKED: HeyGen or Pika generation fails, times out, or produces unusable output after reasonable retry — report which segment failed and why, do not substitute stock footage or a different avatar without asking
- BLOCKED: brief is too vague to script (no offer, no ICP, no CTA) — return with 2–3 concrete hook/angle options for the user to pick rather than generating on a guess
- NEEDS-APPROVAL: creative is rendered and assembled but awaiting the user's explicit go-ahead on both the cut itself and the spend/campaign destination — this is the default resting state after step 7, do not proceed past it on implicit approval
- BLOCKED: platform policy rejects the ad post-upload (common for health/finance claims voiced by a synthetic avatar) — report the rejection reason verbatim from the platform, do not attempt to auto-edit and resubmit without user review

## Approval boundaries

Creative generation (HeyGen avatar renders, Pika b-roll) requires no spend approval — it's asset production, not an account action. But nothing produced here touches a live ad account without two explicit, separate user approvals: (1) sign-off on the finished creative cut itself, and (2) sign-off on the specific spend/campaign destination (which ad set, what budget, paused vs. live). The agent must not infer approval of the creative as approval to launch, and must never default to "launch live" when the user only approved "looks good" — ambiguous approval is treated as creative-only and the agent asks explicitly before any ad-account upload or budget commitment.

## What you get

A platform-ready UGC-style video ad (or set of hook variants) exported to current Meta video ads specs and TikTok/Reels vertical spec, built from a scripted beat structure (avatar hook/proof/CTA + b-roll cutaways) rather than a single flat avatar read — plus, once approved and launched, a live ad in the specified ad set with its real platform status (active/paused/in-review) confirmed against the account, not assumed from the upload call.
