The Google Ads CLI Google never shipped.

Do your Google Ads busywork from the terminal. Pause keywords, cut wasted spend, check budgets in seconds instead of an afternoon of clicking. You review every change before it goes live.

see how it works →

Node ≥ 20 · no telemetry · it only reads until you ask it to change something

adops gads keywords
$ adops gads keywords list --adgroup 778
ID           KEYWORD              STATUS    BID      COST   CONV
778~1123     cheap crm software   ENABLED   $2.10    $318      0
778~1147     free crm tool        ENABLED   $1.80    $205      0
778~1090     crm for agencies     ENABLED   $3.40     $88      6
3 keywords · the first two spent $523 and sold nothing

Editing your account shouldn't cost you an afternoon.

Google Ads Editor is a desktop app you click through by hand. adops makes the same edits in one command you can read first, script, and put on a schedule.

how it works

List, stage, review, apply.

Looking things up is free. Changes never fire straight at Google. adops shows you what it'll do first, so nothing happens by surprise.

01

List

$ adops gads keywords list

See what's costing you money: bids, spend, and conversions, all in one list.

02

Stage

$ adops gads keywords pause …

Nothing changes yet. adops writes down what it's about to do and shows you.

03

Review

$ adops plan show 8f3a

Check the plan. Google runs a dry run to confirm it's valid before anything's real.

04

Apply

$ adops apply 8f3a

Say go. It makes the change and logs exactly what it did.

a monday, in two commands

The busywork, handled.

Two things you'd otherwise do by hand every week: finding wasted spend, and catching problems before your client does.

find waste → block it
$ adops gads terms --min-cost 50 --conv 0
TERM                    COST   CONV
free ads course      $412.90      0
ads jobs remote      $268.13      0
…12 more that spent, none that sold
$ !! --json | adops gads negatives plan -
plan-8f3a: add 14 negatives → campaign 456
$ adops apply 8f3a
applied 14 · receipt r-2210
Find the money leak. The search terms that spent your budget and sold nothing, found and blocked in one go.
a nightly check
# runs every morning at 7am
$ adops watch --notify $SLACK
ALERT [spend_spike] google:
  yesterday $350 vs $100 avg (3.5x)
→ posted to Slack

quiet days say nothing.
loud ones reach you first.
Sleep better. Put it on a schedule. If spend spikes overnight, you hear about it before your client emails.

what it does

18 commands today, all focused on Google Ads.

Everything reads out as a table you can pipe, save, or drop into a spreadsheet. Everything that changes something waits for your okay.

Pause or turn on campaigns, keywords, and ads in bulk

Add keywords and change bids from the command line

Find wasted spend and block it with negatives

Check budgets and pacing across your campaigns

See spend in one table across Google and Meta, if you use both

Catch broken landing pages like 404s, redirects, or missing tags

Export your account to files you can keep in git

Run any report with raw GAQL, no setup

get started

Connected in about five minutes.

Install, connect your accounts once, and run a quick read to check it works. Here's the whole thing.

getting started
# 1 · install (Node 20 or newer)
$ npm i -g adops

# 2 · connect Google (opens your browser)
$ adops auth google

# 3 · optional: add Meta to see its spend
#     in your reports (system user token)
$ adops auth meta

# 4 · say which accounts, in a small config file:
#   ~/.config/adops/config.toml
  [profiles.acme]
  google_customer_id = "123-456-7890"
  meta_ad_account    = "act_1234567890"

# 5 · you're in. start with a quick read
$ adops accounts
$ adops spend

One thing to do early

Google requires a developer token to use its API. It's a short application inside your Google Ads account, under Tools then API Center, and approval can take a few days. Apply on day one. Until it clears, everything runs against a Google test account.

The full walkthrough lives in the README.

try it

Point it at a test account and poke around.

Nothing changes until you say so, and looking around costs nothing. See if it saves you a Monday.

read the docs →

v0.1 · 58 tests passing · not tested against the live APIs yet, and we'll say so plainly when it is.