adwarp

Start with 1 prompt.

Paste it into Claude Code, Codex or Cursor. Your agent installs Adwarp, walks you through your LinkedIn app and checks the connection.

setup prompt
Set up Adwarp for me. It's the open-source ad agent for LinkedIn Ads and Google Ads: https://github.com/adwarp-dev/adwarp

1. Check that Node.js 20 or newer is installed.
2. Walk me through creating my own LinkedIn developer app with the Advertising API product: https://github.com/adwarp-dev/adwarp/blob/main/docs/linkedin-app.md
3. Save the app's client ID and secret to ~/.adwarp/config.json as clientId and clientSecret.
4. Run "npx -y adwarp auth login" and wait while I approve access in my browser.
5. Add Adwarp to the AI client I'm using right now as an MCP server that runs "npx -y adwarp mcp". In Claude Code that's: claude mcp add adwarp -- npx -y adwarp mcp
6. Check the connection by listing my ad accounts, then save the one I pick as defaultAccountId in ~/.adwarp/config.json.

Don't create or change anything in my ad accounts during setup. LinkedIn campaigns start as drafts, so nothing spends until I turn it on.
adwarp
GitHub

Start with 1 prompt.

Paste it into Claude Code, Codex or Cursor. Your agent installs Adwarp, walks you through your LinkedIn app and checks the connection.

setup prompt
Set up Adwarp for me. It's the open-source ad agent for LinkedIn Ads and Google Ads: https://github.com/adwarp-dev/adwarp

1. Check that Node.js 20 or newer is installed.
2. Walk me through creating my own LinkedIn developer app with the Advertising API product: https://github.com/adwarp-dev/adwarp/blob/main/docs/linkedin-app.md
3. Save the app's client ID and secret to ~/.adwarp/config.json as clientId and clientSecret.
4. Run "npx -y adwarp auth login" and wait while I approve access in my browser.
5. Add Adwarp to the AI client I'm using right now as an MCP server that runs "npx -y adwarp mcp". In Claude Code that's: claude mcp add adwarp -- npx -y adwarp mcp
6. Check the connection by listing my ad accounts, then save the one I pick as defaultAccountId in ~/.adwarp/config.json.

Don't create or change anything in my ad accounts during setup. LinkedIn campaigns start as drafts, so nothing spends until I turn it on.

Manage LinkedIn campaigns from your terminal.

Adwarp is an open-source MCP server and CLI that turns 1 ask, or 1 brief file, into LinkedIn campaign groups, ad groups and ads with budgets, schedules and conversions attached. Everything lands as a draft, and nothing goes live until you explicitly ask.

$ claude mcp add adwarp -- npx -y adwarp mcp

Read the docs

terminal ~ launch

$ npx adwarp launch --brief revops-vp.json

adwarp.create_campaign_group "RevOps VP Q4": DRAFT

adwarp.create_campaign 50 USD/day, Demo booked conversion: DRAFT

adwarp.create_text_ad 3 variants: DRAFT

Created 1 campaign group, 1 ad group and 3 ads, all drafts.

Review links printed for Campaign Manager. 0 USD spent.

01What you can ask

What you can ask. Real requests, answered from your terminal.

claude ~ matrix launch

$ claude

> Launch 1 ad group per persona for each competitor, 50 USD a day.

adwarp.create_campaign_group 5 competitors: DRAFT

adwarp.create_campaign 35 persona ad groups, 50 USD/day: DRAFT

3 persona audiences under 300 members, skipped

35 ad groups and 35 ads drafted. 0 USD spent.

02How it works

How it works.

  1. Brief

    Describe the campaign in plain words or in a brief file: audience, budget, schedule, conversion and copy.

  2. Draft

    Adwarp creates the campaign group, the ad groups and the ads as drafts, each ad group with its own budget and audience.

  3. Go live

    Review it in Campaign Manager, then switch it on there or ask Adwarp to set it ACTIVE.

03Results

Why it gets better results.

  • More variants tested

    Launching an ad group costs 1 line instead of 20 clicks, so more audiences and messages get tried.

  • A clean read on each

    Every ad group gets its own budget and audience, so each result stands on its own.

  • Nothing live by accident

    Everything lands as a draft, and going live is always an explicit request.

In practice35 ad groups and 35 draft ads from 1 brief in a single run, and 14 drafts switched live at 9am by a one-time job, since LinkedIn ads can't carry a start date of their own.

04FAQ

Questions, answered. From setup to the details.

Ask on GitHub
Can I launch many ad groups at once?

Yes. Ask for every combination of audience and message, and Adwarp drafts each one as its own ad group with its own budget. 1 brief has produced 35 ad groups in a single run.

How do budgets and bids work?

Each ad group carries its own daily or total budget and its own bid or bidding strategy, such as Maximum Delivery or a manual bid. Change them later with update_campaign, which shows you the change before it sends it.

Does anything go live on its own?

No. Campaign groups, ad groups and ads are created as drafts. Adwarp sets them ACTIVE only when you explicitly ask, or you switch them on in Campaign Manager.

How do LinkedIn's names compare with other ad platforms?

They sit 1 level off, which trips up everyone the first time: a LinkedIn campaign group is what other platforms call a campaign, and a LinkedIn campaign is their ad group.

How do LinkedIn's names compare with other ad platforms?
Other platformsLinkedInWhat it holds
CampaignCampaign groupStatus and the total budget
Ad groupCampaignTargeting, budget, bid, schedule and format
AdCreativeThe ad people see
AudienceMatched audienceA contact or company list you upload
Can I schedule start dates?

Yes, on campaign groups and ad groups. Ads can't carry their own start date.

Give the campaign group or the ad group a run schedule when you create it, or change it later with update_campaign. To start ads at a set time, schedule their ad group, or have a one-time job run this command when the time comes.

  • npx adwarp campaigns update <campaignId> --status ACTIVE --apply
Which tools and commands does it use?

11 MCP tools and 4 CLI commands, with what each one does.

Which tools and commands does it use?
ToolWhat it does
create_campaign_groupCreate a campaign group, as a draft
create_campaignCreate an ad group with targeting, budget, bid and schedule, as a draft
create_text_adCreate a text ad, as a draft
create_image_adCreate a single-image ad, as a draft
launch_from_briefAudience, campaign group, ad group and ads in 1 call
update_campaignChange budget, bid, schedule, targeting, rotation or status, with a dry run first
update_adPause, resume or archive a single ad, with a dry run first
list_campaignsCampaign groups and ad groups, drafts included
list_adsThe ads in an ad group, drafts included
delete_adRemove an ad, for example to replace its copy
list_conversionsPick the conversion each ad group tracks

CLI

  • npx adwarp launch --brief brief.json
  • npx adwarp campaigns list
  • npx adwarp campaigns update <campaignId> --daily-budget <amount>
  • npx adwarp ad list <campaignId>
What are the limits?

3 things to know before you start.

  • Text ads and single-image ads today.
  • The format is set when the ad group is created and can't be changed after.
  • LinkedIn ignores edits to a live ad's post, so copy changes go out as a new draft.