Cindy Zhu.
Free guides
Marketing & ads Claude

How to launch Meta ad campaigns from Claude Code

Hey, it's Cindy 🌱 You commented CAMPAIGN, so here is the whole setup: how to connect your Meta ad account to Claude Code, how to teach it your campaign process once as a reusable skill.
btw the waitlist for AI System Club is now open! If you're keen on using AI to automate your content, video editing, job search, business or build AI agents, feel free to sign up (only if you want to hehe). Ps. the waitlist gets first dibs:)
πŸ’‘ Read this before you connect anything. This touches real money. Claude can build campaigns, ad sets and ads in your live account, and it can also misread a vague instruction and build the wrong thing at scale. Everything below is written so that a human turns things on, never the model. Set your account spending limit before step one and keep it there.
what you're building

What this setup actually is

A lot of the clips going around show a Meta developer app being created at developers.facebook.com. That route still exists, and it is covered below, but it is no longer the fastest one. Meta shipped its own ads AI connectors in open beta on 29 April 2026, with an update on 16 July 2026, and the pitch in Meta's own words is that advertisers can manage campaigns in the AI tools they already use with "no developer credentials, API setup, or coding required" (Meta for Business). There are two official ways in, and you pick one.

πŸ”Œ The MCP server Meta-hosted, at https://mcp.facebook.com/ads. You sign in with your normal Meta business login. This is the route almost everyone should take.
πŸ’» The Ads CLI A Python command line tool that calls the Marketing API with a system user token. This is the developer-app route, and it is worth it if you run many accounts or want scripted batches.
πŸ› οΈ What it can build Meta's docs group the tools into ad management (creating and editing ads, ad sets and campaigns), reporting, catalog operations, signals and datasets, testing, troubleshooting and activity logs.
♻️ Why a skill Connecting is the boring half. The skill is what turns "explain my whole campaign structure again" into one command that already knows your naming, budgets and rules.
🌱 The honest version of the promise. This does not replace a media buyer. It removes the mechanical hour: the naming, the duplication, the budget splits, the three copy variations per ad set. Your judgement on offer, audience and creative is still the thing that decides whether the campaign works.

before you start

What you need first

  1. πŸ’³ A paid Claude plan. Claude Code needs a Pro, Max, Team, Enterprise or Console account. The free Claude.ai plan does not include Claude Code access, per Anthropic's setup docs. If you would rather stay in the Claude app instead of a terminal, the same Meta connector works there too, and everything in this guide still applies except the terminal commands.
  2. πŸ”‘ The right role on the ad account. You need to be an admin or advertiser on the ad account, and that account needs to sit in a business portfolio you have access to. Permissions are scoped to what you already have, so if you cannot change a budget in Ads Manager today, Claude will not be able to either.
  3. πŸ’° An account spending limit. In Ads Manager, set a hard account-level spend cap at a number you would be genuinely fine losing. It is one field and it is the only control that holds no matter what anything else does.
  4. πŸŽ₯ Your creative, already uploaded. Have your videos and images sitting in the Meta media library, and your landing page live. The setup builds structure and copy, and it will move much faster if the assets it points at already exist.

the connection

Step 1, route A: connect with the MCP server

This is the five-minute version with no developer app, no app review and no token to keep secret. Do this one unless you have a specific reason not to.

  1. πŸ’» Install Claude Code. On macOS, Linux or WSL, run curl -fsSL https://claude.ai/install.sh | bash. On Windows PowerShell, run irm https://claude.ai/install.ps1 | iex. Then run claude in your project folder and follow the browser prompt to log in. Check it worked with claude --version.
  2. πŸ”— Add Meta's server. One line: claude mcp add --transport http meta-ads https://mcp.facebook.com/ads. That syntax is straight from the Claude Code MCP docs. No trailing slash, no extra path.
  3. πŸ” Sign in. Type /mcp, pick meta-ads, and complete the OAuth sign-in in your browser. Choose the business portfolio and the specific ad account you want connected, and approve the access it asks for. Grant read access only for your first session if you want to watch it work before it can write anything.
  4. πŸ§ͺ Test it read-only. Ask "list my ad accounts, then show my active campaigns and last 7 days spend by campaign". If the numbers reconcile with Ads Manager, you are properly connected. If they do not, you are almost certainly on the wrong ad account or a different attribution window.
πŸ’‘ Doing this in the Claude app instead? Open Customize, then Connectors, then Add custom connector, and paste the same address. Custom connectors work on every plan, with the Free plan capped at one custom connector total (Anthropic's connector docs).
the developer route

Step 1, route B: connect with the Ads CLI

This is the route the viral clips are half-describing when they send you to developers.facebook.com. It takes longer and it hands you a token, which is a real thing to look after. Take it if you manage several accounts, or you want campaign creation running inside scripts.

  1. 🐍 Check your Python. Meta's get started page asks for Python 3.12 or later in a virtual environment. Confirm with python3 --version before you install anything.
  2. πŸ“¦ Install it. Run pip install meta-ads inside that virtual environment.
  3. πŸ‘€ Create a system user. In Meta Business Suite, go to Settings, then Users, then System Users, click Add and set the role to Admin. Assign it your ad accounts, Pages, datasets and catalogs.
  4. πŸ”‘ Generate the token. With that system user selected, click Generate New Token and grant the scopes Meta lists: business_management, ads_management, pages_show_list, pages_read_engagement, pages_manage_ads, catalog_management and read_insights. Save it in a local .env file as ACCESS_TOKEN= and add your AD_ACCOUNT_ID= beside it.
  5. βœ… Verify. Run meta auth status. Once that comes back clean, Claude Code can drive the CLI for you, and the resource pattern is meta ads <resource> <action> across campaigns, ad sets, ads and insights.
πŸ’‘ The token is a key to your ad spend. Keep it in .env, add .env to your .gitignore before your first commit, and never paste it into a chat window, a screenshot or a shared doc. If you ever suspect it leaked, revoke it from the system user page and generate a new one.

teach it once

Step 2: build the reusable campaign skill

This is the part that makes the whole thing worth doing. A skill is a small folder with a SKILL.md inside that teaches Claude a process once, then triggers itself whenever your request matches. Paste this into Claude Code and it writes the skill for you.

πŸ› οΈ build the meta-campaign skill
Build me a reusable Claude skill called meta-campaign that sets up a full Meta ads campaign through my connected Meta ads tools, and use skill-creator to package it into a folder I can install.

The description line should read: use this when I ask to build, launch or set up a new Meta ads campaign. Before writing the skill, ask me the six questions it should ask me every time: who the campaign is for, the objective, the offer and landing page, the daily budget, the audience I have in mind, and where the video and image assets live.

The steps in the skill are: confirm which ad account is connected and read it back to me before touching anything, propose the campaign structure with a reason for the number of ad sets and how budget splits across them, write three ad copy variations per ad set that test genuinely different angles rather than reworded versions of the same one, name everything with my convention of objective-audience-angle-date, then build the campaign, ad sets and ads.

Three hard rules to write into the skill: create everything paused and never set anything to active, never change or pause an existing campaign that it did not create in this run, and finish by printing a plain-text summary of every object it made with its ID and status so I can check each one in Ads Manager. If any required detail is missing, it must stop and ask instead of guessing.
  1. πŸ“¦ Take the folder it hands you. skill-creator finishes with a skill folder containing a SKILL.md. Read that file once, because it is your process in plain English and you will want to edit it.
  2. βž• Install it. In Claude Code, drop the unzipped folder into ~/.claude/skills/. In the Claude app, open Customize, then Skills, then Add, then Upload a skill, and choose the zipped folder. Skills work on every plan, Free included (Anthropic's skills guide).
  3. πŸ§ͺ Dry-run it once. Ask it to plan a campaign without building anything, read the structure it proposes, and correct the parts that are not how you work. Then edit those corrections into the SKILL.md so you never give the same note twice.
  4. ✍️ Add your own rules. Minimum budget per ad set, the placements you always exclude, the audiences you never touch, the naming convention your reporting depends on. Every rule you add here is an argument you never have again.

run it

Step 3: launch a campaign on command

From now on, a new campaign starts with one line. Say "build me a new Meta campaign" and the skill runs its intake. If you would rather hand it everything at once, paste this instead and fill in the brackets.

πŸš€ the campaign brief
Build me a new Meta ads campaign in the connected ad account, and leave every campaign, ad set and ad paused so I can review before anything spends.

The client or brand is [name], the offer is [describe the offer and the price], the customer is [who they are and what they already believe about this problem], the objective is [sales / leads / traffic], the total daily budget is [amount], the landing page is [URL], and the video and image assets are [where they live in the media library].

Structure it the way you would if the money were yours: tell me how many ad sets you are creating and why, what the targeting is on each, and how the daily budget splits across them. Write three ad copy variations per ad set that test genuinely different angles, and label what each angle is testing so I can read the results later.

When you are done, print a table of every object you created with its name, level, ID and status, then list exactly what I should check in Ads Manager before I turn any of it on. If anything in this brief is too vague to build from, ask me rather than filling the gap yourself.
🌱 The second campaign is where it pays. The first run feels like the same amount of work in a different window. The fifth run is one sentence, because the skill already knows your structure, your naming and your rules. That is the whole return on this setup.

before it spends

The pre-launch checklist

Do not trust a status you did not read yourself. Open Ads Manager and check these six before you activate anything.

⏸️ Everything is paused Campaign, ad sets and ads. Filter by status and confirm with your own eyes rather than taking the summary's word for it.
πŸ’° Budgets match the brief Daily versus lifetime, at the level you meant, and the total across ad sets adds up to what you said.
πŸ”— Links and tracking Every ad points at the right landing page with your UTM parameters attached and the pixel or dataset selected.
🎯 The conversion event The optimisation event is the one you actually get paid on, not a proxy like page views that will train the delivery on the wrong people.
πŸ–ΌοΈ The creative is the right creative Play each video and open each image. Asset IDs are easy to mix up and a wrong asset is invisible in a summary table.
πŸ“… Schedule and geography Start date, end date, countries, and that nothing is set to run in a market you cannot sell into.
πŸ’‘ One hand on the controls. If a media buyer, an agency and Claude are all editing the same account, you will never work out which change caused which result. Claude builds and proposes, one named human activates and edits.

when it goes wrong

What breaks and the fix

"I don't have access to your ads" The server is not authenticated in this session. Run /mcp, select meta-ads and complete the sign-in, then ask again.
It reads but cannot create The ads management permission was not granted during sign-in. Remove the connection, add it again and approve the full permission set.
Wrong ad account You authorised a different business portfolio. Reconnect and pick the portfolio that actually owns the account you care about, then re-run the read-only test.
The skill never triggers The description line is too vague. Edit SKILL.md so it names the exact phrases you use, like "build a Meta campaign" or "set up a new campaign".

Proof

Meta for Business, introducing Meta ads AI connectors
Meta's Ads MCP server overview
Meta's Ads CLI overview
Ads CLI, get started (install, system user, scopes)
Claude Code setup and system requirements
Connect Claude Code to tools via MCP
Creating custom skills

the waitlist is now open

AI System Club is launching soon

Build AI systems with me through recorded lessons you can follow at your own pace. Join the waitlist for first access and the founding price.

btw this list gets first dibs
the moment doors open :)