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.

Google Ads Search campaigns from your terminal.

Adwarp is an open-source MCP server and CLI that builds Google Ads Search campaigns from a brief. Google checks the whole build in a dry run first, then the budget, ad groups, keywords and ads land in 1 step, paused until you switch them on in Google Ads.

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

Read the docs

claude ~ launch

$ claude

> Create the Search campaign in google-brief.json.

adwarp.gads_launch_search_campaign dry run: valid

adwarp.gads_launch_search_campaign apply: PAUSED

Created in 1 step: budget, campaign, targeting, ad groups, keywords and ads.

Everything is paused. Turn it on in Google Ads when you're ready.

01What you can ask

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

claude ~ build

$ claude

> Build a Search campaign for lead routing software at 150 USD a day, US only.

adwarp.gads_keyword_ideas "lead routing software", US: volume + bids

adwarp.gads_list_conversion_actions this account: by name

adwarp.gads_launch_search_campaign dry run: valid

The plan: budget, campaign, targeting, and each ad group with its keywords and ads

Validated by Google. Nothing was created yet.

02How it works

How it works.

  1. Write the brief

    Name the campaign, set a daily budget and a landing page, and list each ad group's keywords and ads. Your agent can draft it from a plain request.

  2. Dry run

    Google validates the whole build and saves nothing. A problem comes back with the field that caused it.

  3. Create it, paused

    Confirm, and the budget, campaign, targeting, ad groups, keywords and ads land in 1 step. You switch it on in Google Ads.

03Results

Why it gets better results.

  • Search network only

    Display expansion and search partners are off, so the budget goes to people searching your keywords.

  • People in your market

    Location targeting reaches people physically in the area, not anyone who searched about it.

  • Bids you control

    Manual CPC to start, because smart bidding with no conversion history spends unpredictably.

  • No half-built campaigns

    The build lands whole or not at all, so a failure leaves nothing behind to clean up.

04FAQ

Questions, answered. From setup to the details.

Ask on GitHub
Can Adwarp switch a Google campaign on?

No. Campaigns, ad groups and ads are created paused, and no tool or command can enable them. You switch them on in Google Ads once you've checked them.

What does the dry run check?

The whole build. Google runs every operation through its own validators and saves nothing, so the answer comes from Google instead of a local guess. A failure names the field that caused it.

Does it set conversion goals?

It checks that the conversion actions you name exist and warns when one doesn't. Google applies your account-level goals to the new campaign, so set narrower goals in Google Ads after it's created.

Does it work on the hosted endpoint?

No. The Google tools run on your machine, through the local MCP server or the CLI, with your own developer token and OAuth client.

What goes in a brief?

Every field a launch reads is below, with a short example.

What goes in a brief?
FieldWhat it sets
campaignNameThe campaign's name.
dailyBudgetRequired. The daily cap, in the ad account's currency.
cpcBidThe max CPC for ad groups that don't set their own.
finalUrlThe landing page for ads that don't set their own.
locationsCountry codes such as US or GB, or Google location ids. US when left out.
languagesLanguage codes. English when left out.
adGroupsEach with a name, its keywords, optional negatives and at least 1 ad.
negativeKeywordsCampaign-level negatives, on top of each ad group's own.
negativeKeywordListIdA shared negative keyword list to attach. Never added unless you name it.
conversionActionNamesConversion actions to check, or defaultConversionActionNames from google.json.
startDateTime, endDateTimeThe flight. Without a start date it starts today, paused.
google-brief.json
{
  "campaignName": "RevOps automation - Search",
  "dailyBudget": 150,
  "cpcBid": 12,
  "finalUrl": "https://example.com/platform",
  "locations": ["US"],
  "negativeKeywords": [{ "text": "jobs", "matchType": "BROAD" }],
  "adGroups": [
    {
      "name": "Lead routing - exact",
      "keywords": [
        { "text": "lead routing software", "matchType": "EXACT" },
        { "text": "lead assignment tool", "matchType": "PHRASE" }
      ],
      "ads": [
        {
          "headlines": ["Lead routing that works", "Route leads in seconds", "Made for RevOps"],
          "descriptions": [
            "Assign every inbound lead the moment it lands.",
            "Connect Salesforce in minutes."
          ],
          "path1": "routing"
        }
      ]
    }
  ]
}
What are Google's rules for ads and keywords?

Fixed limits on headlines, descriptions and paths, plus 3 match types. Adwarp checks them before it calls Google.

  • 3 to 15 headlines per ad, up to 30 characters each.
  • 2 to 4 descriptions per ad, up to 90 characters each.
  • Display path segments up to 15 characters each. path2 needs path1, because Google rejects path2 on its own.
  • Match types are EXACT, PHRASE or BROAD, and PHRASE when left out. EXACT and PHRASE keep B2B spend tight, and BROAD needs strong negatives.
Can I change the house rules?

No. They apply to every campaign Adwarp builds, with no way to turn them off. Change the bidding in Google Ads once there's conversion data.

  • Search network only. Display expansion and search partners are off.
  • People physically in your target area. US means people in the US, not anyone who searched about it.
  • Manual CPC to start. Switch to smart bidding in Google Ads once there's conversion data.
  • Created paused, with no tool or command that can enable it. You switch it on in Google Ads.
  • Conversion actions are checked, not set as campaign goals. Google applies your account-level goals, and under manual CPC they don't change bidding.
Which tools and commands does it use?

5 MCP tools and 3 CLI commands, with what each one does.

Which tools and commands does it use?
ToolWhat it does
gads_launch_search_campaignA paused Search campaign from a brief, in 1 atomic step. A dry run unless told otherwise.
gads_keyword_ideasVolume, competition and bid range for the keywords before you commit them
gads_list_conversion_actionsConversion actions on the account, so a brief can name 1
gads_list_campaignsCampaigns with their ad groups, paused ones included, to check the result
gads_list_adsThe ads in an ad group, with their responsive search copy

CLI

  • npx adwarp google launch --brief google-brief.json
  • npx adwarp google launch --brief google-brief.json --apply
  • npx adwarp google campaigns list
What are the limits?

4 things to know before you start.

  • Search campaigns only. Performance Max, Display, Shopping, video and Customer Match aren't supported yet.
  • The Google tools run locally. The hosted endpoint serves 0 of the 9 Google tools.
  • It runs in Claude, Codex, Cursor and the CLI. ChatGPT doesn't connect to the Google tools yet.
  • Campaign creation works on Explorer access. Keyword research needs Basic access.