CLI
Install the global adwarp command and look up every CLI command for LinkedIn Ads and Google Ads.
On this page
Every capability of the MCP server is also an adwarp CLI command, for your terminal, scripts, batch runs, and cron.
Install the global command
Requires Node.js 20 or newer. Install the package from npm, then authenticate if you haven't yet:
npm install -g adwarp
adwarp accounts listTo run a single command without installing, use npx -y adwarp <command>.
Coming from Liam? liam still works as an alias for adwarp. The package installs both names, so existing scripts and cron jobs keep running. Every other name from before the rename still works too; see Configuration.
A sensible first session:
adwarp targeting search titles "demand generation" # resolve targeting URNs
adwarp report summary -p last_30_days # account rollup and flags
adwarp launch --brief examples/brief.json # creates DRAFTS onlyLinkedIn commands
All commands also work as npx -y adwarp <command>.
adwarp auth login # OAuth, stores tokens in ~/.adwarp
adwarp auth export # print env vars for a self-hosted (Vercel) server
adwarp auth export --mcp [url] # print the hosted MCP connect command with your headers
adwarp accounts list # list accessible ad accounts
adwarp targeting search <facet> <query> # typeahead a facet for entity URNs
adwarp targeting estimate <facet> <urns...> # audience size for 1 facet's URNs
adwarp audience upload -n <name> -f <csv> [-t contact|company] # clean and upload a CSV as a matched audience
adwarp audience upload -n <name> -f <csv> --dry-run # preview the cleaned CSV, no upload
adwarp audience from-salesforce -n <name> -q "<SOQL>" [--email-field <column>] # Salesforce query to matched audience
adwarp audience from-hubspot -n <name> (--list <id> | --filter <prop>:<op>:<value> ...) [-t contact|company] [--dry-run] # HubSpot list or search to matched audience
adwarp audience status <segmentId> # matching status and resolved size
adwarp conversions list # account conversions (pick 1 to track)
adwarp campaigns list [--group <id>] [--all] # campaign groups and ad groups, drafts included
adwarp campaigns get <campaignId> # an ad group's status, name, and current targeting
adwarp campaigns update <campaignId> ... [--apply] # change an ad group in place, previews unless --apply
adwarp ad list <campaignId> # ads in an ad group (id, status, name), drafts included
adwarp ad delete <creativeId> # delete an ad (creative and its Direct Sponsored Content post)
adwarp ad pause <creativeId> [--apply] # pause a single ad, previews unless --apply
adwarp ad resume <creativeId> [--apply] # set an ad ACTIVE again (starts spend), previews unless --apply
adwarp ad archive <creativeId> [--apply] # archive an ad, previews unless --apply
adwarp report summary [-p <period>] # account rollup: totals, top performers, flags
adwarp report perf <level> [--parent <id>] [-p <period>] # per-entity metric rows
adwarp report trend <level> <id> [-b weekly|monthly] [-p <period>] # trend with deltas
adwarp launch --brief <brief.json> # audience, campaign group, campaign, and draft ads
adwarp competitor ads <advertiser> # any company's ads from the public Ad Library
adwarp creative-status <ids> # read remote creative jobs by comma-separated ad id
adwarp changelog list [-t <type>] [-i <id>] [--tag <tag>] # recorded ad changes, newest first
adwarp changelog add -t <type> -i <id> -f <field> --after <value> [-l <label>] # log a change made elsewhere
adwarp lift <level> <id> [-w <days>] # before and after performance for each recorded changePeriods: last_7_days, last_30_days, last_90_days, month_to_date, last_month.
--account defaults to defaultAccountId from config where it applies.
Run adwarp <command> --help for every option of a command, for example the budget, bid, targeting, and rotation flags of campaigns update.
Competitor ads options
<advertiser> is a company name, a numeric company id, or a company URL.
| Option | Meaning |
|---|---|
--company-id <id> | force a numeric LinkedIn company id, the most precise match |
-k, --keyword <text> | keyword search across ad copy instead of an advertiser |
-c, --country <codes> | comma-separated ISO country codes, for example US,GB |
-e, --engine auto|api | auto (default) adds the remote creative worker, api is metadata only |
-m, --max <n> | maximum ads to collect (default 50) |
--no-deep | skip remote creative collection |
--copy-max <n> | remote creative sample size (default and maximum 10) |
--json | print raw JSON instead of a summary |
Change journal options
changelog add also takes --before <value>, -n, --note <text> for a freeform note instead of a field change, --name <name>, --tags <list>, and --at <iso> for when the change took effect. Both changelog list and lift take --json. See Change journal and lift.
Google Ads commands
Google Ads lives under adwarp google. See Google Ads for setup.
adwarp google auth login # OAuth, stores tokens in ~/.adwarp/google-credentials.json
adwarp google accounts list # every customer this login can reach
adwarp google accounts clients <managerId> # client accounts under a manager account
adwarp google keywords <seeds...> [-u <url>] [-l <codes>] [--language <code>] [-n <limit>] # keyword ideas
adwarp google campaigns list [--all] # campaigns with their ad groups, paused included
adwarp google ads <adGroupId> # ads in an ad group, with their responsive search copy
adwarp google conversions list # conversion actions, to name 1 in a brief
adwarp google launch --brief <brief.json> [--apply] # paused Search campaign, dry run unless --apply
adwarp google report perf <level> [-p <period>] [--campaign <id>] # campaign|ad_group|ad|keyword|search_term
adwarp google query "<GAQL>" # raw read-only GAQL queryCommands that read an account take -c, --customer <id>, which defaults to defaultCustomerId in ~/.adwarp/google.json.