create-image-fal
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Plan or safely create Meta/Facebook/Instagram campaigns through GooseWorks tools or a bundled direct Meta Marketing API adapter. Use automatically for requests to launch, run, create, publish, set up, or plan Meta ads; use reporting skills for analysis-only requests.
$ npx -y skills add gooseworks-ai/goose-skills --skill launch-meta-ad-campaign --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/launch-meta-ad-campaignContext preview
The summary Claude sees to decide when to auto-load this skill.
Plan or safely create Meta/Facebook/Instagram campaigns through GooseWorks tools or a bundled direct Meta Marketing API adapter. Use automatically for requests to launch, run, create, publish, set up, or plan Meta ads; use reporting skills for analysis-only requests.
name: launch-meta-ad-campaign description: Take someone from a business goal to a verified, paused-then-live Meta/Facebook/Instagram campaign without making them learn Meta's hierarchy. Use automatically for requests to launch, run, create, publish, set up, or plan Meta ads; use reporting skills for analysis-only requests.
**What this is for.** Someone says "I want more signups". They should not have to learn what a campaign objective is, what an ad set does, what a pixel is, or which of Meta's fourteen optimization goals fits — and they should not be asked to choose any of them. They tell you about their business; you do the rest and explain it back in their words.
The skill is agent-neutral: choose the best available adapter, but keep one journey and one approval boundary.
Use the first available mode:
1. **GooseWorks adapter** when all GooseWorks launch tools are callable. Read [references/gooseworks-adapter.md](references/gooseworks-adapter.md). 2. **Direct Meta adapter** when a valid Meta token and ad-account access are available. Read [references/direct-meta-adapter.md](references/direct-meta-adapter.md) and use the bundled `tools/meta_marketing_api.js`. 3. **Planning-only fallback** when neither write adapter is available. Read [references/planning-only.md](references/planning-only.md). Produce a useful plan; do not present missing write access as a failed planning task.
If both write adapters are available, prefer GooseWorks because its approval page, creative links, and recovery records are already integrated. Never mix adapters within one launch.
**Before Stage 1, resume rather than restart.** If a launch record or push already exists, resume it. Inspect existing campaigns, ad sets, ads and creative before recommending anything new, and say whether the intent fits reuse. Never duplicate a partially completed launch, and never build a second context system when the adapter already provides one.
<!-- shared:launch-journey start --> <!-- This block is maintained in ONE place and copied byte-for-byte into both the goose-lab skill (coworkers/marketing/launch-meta-ad-campaign/SKILL.md) and the published skill (skills/ads/composites/launch-meta-ad-campaign/SKILL.md). Edit one, copy to the other, and diff the block before shipping. -->
The user talks about their business. Talk back about their business.
Campaign ids, ad-set ids, pixel ids, objectives, optimization goals, placements and bid strategies are **your** working vocabulary, not theirs. Work them out, use them, and translate them back. Surface a raw id only when the user asks for one, or when they need it to do something in Meta themselves.
| What you are dealing with | What you say | |---|---| | Campaign objective | "what we're asking Meta to go after" | | Ad set | the audience and the budget — usually no need to name it at all | | `LANDING_PAGE_VIEWS` | "we pay for people who actually load your page, not just tap the ad" | | `LINK_CLICKS` | "we pay for taps — cheaper, but some of them never arrive" | | `OFFSITE_CONVERSIONS` | "we pay for the action itself — signups, purchases" | | Pixel / conversion event | "the tracking on your site" / "the action we're counting" | | Creative | "the ad" | | Learning phase | "Meta needs roughly 50 of these a week before it can steer well" | | `effective_status: IN_PROCESS` | "Meta is reviewing it — normal, usually within a day" | | Account balance / funding source | "the card Meta bills" | | Lifetime budget + `end_time` | "it spends at most $X and stops itself on the 30th" |
Three rules sit on top of that vocabulary:
money can and cannot answer *before* it is spent. A budget that cannot measure cost per sale should never be reported as if it did.
hand back a raw API error and leave the user to decode it.
Seven stages. Stages 1 to 5 run before a single object exists in Meta.
Open here. Do not open with Meta settings, and **never ask the user to pick an objective, an optimization goal, a budget type or a structure** — those are yours to derive.
Ask for six things, in the user's own language:
1. **The goal** — what should this money produce? Sales, leads, signups, traffic, awareness, or "I want to find out whether this works at all". 2. **The offer** — what is being promoted, and what does someone actually get? 3. **The audience** — who is it for, and where are they? 4. **Budget and run time** — the total and how long, e.g. "$300 over two weeks". If they give a daily number, ask for the total and duration anyway: "£20 a day" and "£140 for the week" build different things. 5. **Success metric** — what number would make this a good fortnight? If they have none, say so and propose one. 6. **Destination** — where should someone land after tapping?
Everything else you derive:
| You derive | From | |---|---| | Campaign objective | the goal plus the destination — a purchase on a site with tracking → sales; a form or signup → leads; "does this work at all" → traffic | | Optimization goal | whether the destination carries tracking, and how many of the target event the account already produces per week (Stage 2) | | Structure — one campaign, one audience, 2–3 ads | the budget | | Budget type | a total + duration → a lifetime budget with an end date, which hard-caps itself; an open-ended daily figure → a daily budget | | Placements, bid strategy, billing event | sensible defaults, unless something in the brief argues otherwise | | Schedule | the ad account's own timezone, never yours |
**When something is missing, explain why you need it** — one sentence,
Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Repo: gooseworks-ai/goose-skills
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Generate a single photoreal or designed image with OpenAI gpt-image via fal.ai. Supports gpt-image-1 (default, fixed sizes — the FAL fallback for Higgsfield's…
Generate an instrumental music bed via ElevenLabs Music, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Trims any sparse intro, loudnorm, fades…
Image-to-video (or text-to-video) via any FAL video model (Kling, Seedance, Veo), ROUTED THROUGH THE GooseWorks fal-proxy so the call bills the Ads agent. The…
Generate a voiceover (VO) clip via ElevenLabs text-to-speech, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Voice id + script text come from…
Scrape competitor ads from Google Ads by domain. Returns ad creatives, formats, and campaign details. Use for competitive ad research and messaging analysis.