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 from the command line.

Adwarp is an open-source CLI and MCP server for Google Ads, run with npx adwarp google from your terminal. Research keywords, launch paused Search campaigns after a dry run and pull reports into cron.

$ npx adwarp

Read the docs

terminal ~ launch

$ npx adwarp google launch --brief google-brief.json

budget, campaign, ad groups, keywords and ads planned

Validated by Google. Nothing was created. Re-run with --apply to create it.

$ npx adwarp google launch --brief google-brief.json --apply

Created campaign 21874059321 (PAUSED)

Everything is PAUSED. Turn it on in the Google Ads UI when you are ready.

01Set up

Set up in 3 steps.

  1. Get Google Ads API access

    A developer token from your Google Ads manager account, plus a Desktop app OAuth client in Google Cloud.

  2. Sign in from your terminal

    Add both to ~/.adwarp/google.json, and Adwarp opens your browser for Google's approval.

    npx -y adwarp google auth login
  3. Run your first command

    A read-only check that proves the token, the OAuth client and account access all work.

    npx adwarp google accounts list
Run it on a schedule?

1 cron line pulls last week's search terms every Monday at 9am.

crontab
0 9 * * 1 npx adwarp google report perf search_term -p last_7_days

02Try these commands

5 commands to try first.

terminal ~ keywords

$ npx adwarp google keywords "revops automation" -u https://example.com/product

volume competition bid range keyword

Up to 50 ideas, 1 tab-separated row each.

03Results

Why running Google Ads from the CLI gets better results.

  • Every launch is a dry run first

    Without --apply, Google validates the whole build and nothing gets created.

  • Launches land whole

    Budget, campaign, ad groups, keywords and ads go in 1 atomic change, so a failure never leaves half a campaign.

  • Reports run on schedule

    Cron pulls search terms every week instead of whenever someone remembers.

  • Briefs repeat exactly

    A brief file is the whole campaign, so the next test reuses it with 1 change.

04FAQ

Questions, answered. From setup to the details.

Ask on GitHub
What is the Google Ads CLI in Adwarp?

npx adwarp google is the Google Ads part of Adwarp's open-source CLI. It researches keywords, launches paused Search campaigns and reports, from your terminal.

Does a launch go live?

No. Without --apply it's a dry run Google validates, and with --apply the campaign is created paused. You enable it in Google Ads.

Can I run raw GAQL?

Yes, read-only. npx adwarp google query runs any SELECT against the account.

Do I need an AI client?

No. The CLI runs on its own. The same tools run as an MCP server in Claude, Codex or Cursor when you'd rather ask.

Does it work with the hosted endpoint?

Not for Google Ads. The hosted endpoint serves many callers, and Google credentials there would come from shared server settings, so it never registers the Google tools. Run Adwarp on your machine with your own developer token and OAuth client.

What are the Google commands?

Every one runs as npx adwarp google followed by the command.

Commands that read an account take -c for the customer id, which defaults to defaultCustomerId in google.json. Periods for -p are last_7_days, last_30_days, last_90_days, month_to_date and last_month.

What are the Google commands?
npx adwarp googleWhat it does
auth loginSign in with your OAuth client.
accounts listEvery customer this login can reach.
accounts clients <managerId>Client accounts under a manager account.
keywords <seeds...> [-u <url>]Keyword ideas from seed terms, and from a landing page with -u.
campaigns listCampaigns with their ad groups, paused included.
ads <adGroupId>Ads in an ad group, with their responsive search copy.
conversions listConversion actions, to name 1 in a brief.
launch --brief <brief.json>A paused Search campaign. A dry run unless you add --apply.
report perf <level>Rows by campaign, ad group, ad, keyword or search term.
query "<GAQL>"A raw, read-only GAQL query.
What access do I need?

A Google Ads developer token from a manager account and a Desktop app OAuth client. Campaigns and reporting work on Explorer access, and keyword research needs Basic access.

  • A developer token from the API Center of a Google Ads manager account. A plain client account can't issue one.
  • Explorer access arrives automatically and covers campaigns and reporting. Keyword research needs Basic access, a separate application on the same screen.
  • An OAuth client of the Desktop app type, in a Google Cloud project with the Google Ads API enabled.
  • A consent screen that isn't left in Testing, which issues sign-ins that stop working after 7 days.
What goes in google.json?

Your OAuth client, developer token and account ids, kept on your machine.

loginCustomerId is your manager account, needed only when you reach the ad account through one. Then run npx -y adwarp google auth login.

~/.adwarp/google.json
{
  "clientId": "....apps.googleusercontent.com",
  "clientSecret": "...",
  "developerToken": "...",
  "loginCustomerId": "1234567890",
  "defaultCustomerId": "0987654321",
  "defaultConversionActionNames": ["Demo Booked"]
}
Which house rules does every campaign follow?

Search network only, people in your target area, manual CPC to start, and created paused.

  • 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 to enable it. You switch it on in Google Ads.
  • Search campaigns only for now. No Performance Max, Display, Shopping, video or Customer Match yet.