# open source  /  MIT  /  Node 18+

Your app is live
on six ad networks.
Nobody has six tabs.

──────────────────────────

adduck pulls spend, taps, and installs across Apple Search Ads, Reddit, Meta, AppLovin, Unity, and ironSource into one command. Pause, resume, change budgets, set schedules. Your AI assistant can do it too.

~$ npm install -g adduck
# requires Node.js 18+
adduck spend --days 7
~$ adduck spend --days 7

  NETWORK    CAMPAIGN                   SPEND  INST    CPI
  ──────────────────────────────────────────────────────
  APPLE      iOS App: Exact Match        $142    47  $3.02
  REDDIT     App Awareness Q3             $89    22  $4.05
  META       Lookalike 1%                $203    71  $2.86
  APPLOVIN   Rewarded Video               $67    18  $3.72
  UNITY      Banner + Interstitial         $41    12  $3.41
  IRONSRC    Rewarded 30s                  $55    16  $3.44
  ──────────────────────────────────────────────────────
  total                                  $597   186  $3.21

  [OK] all 6 platforms live
# supported
[OK] Apple Search Ads · [OK] Reddit Ads · [OK] Meta Ads · [OK] AppLovin · [OK] Unity Ads · [OK] ironSource

# one command. every network.

Spend across all six platforms sorted by CPI. Flag what's working, pause what's not. No context switching.

audit
~$ adduck audit

  RULE                    STATUS    VALUE
  ────────────────────────────────────────
  max daily budget      [PASS]    $500 / $500
  budget change limit   [PASS]    0% / 25%
  protected campaigns   [PASS]    none locked
  mutations enabled     [PASS]    true
  ────────────────────────────────────────
  last run: 2 minutes ago
  % _
schedule list
~$ adduck schedule list

  ID    ACTION   PLATFORM   AT      ON
  ──────────────────────────────────────
  sc-1  pause    apple      00:00   yes
  sc-2  resume   apple      07:00   yes
  sc-3  budget   reddit     09:00   yes
  sc-4  rotate   meta       Mon     no
  ──────────────────────────────────────
  4 schedules · 3 active
tui
~$ adduck tui

  ╔══ adduck v0.9.1 ═════════════════════╗
 ▶ Apple Search Ads  $142  47 inst  
   Reddit Ads         $89  22 inst  
   Meta Ads          $203  71 inst  
   AppLovin           $67  18 inst  
                                    
  ║  j/k · Enter · p pause · q quit    ║
  ╚════════════════════════════════════╝
agents install
~$ adduck agents install

  [OK] Claude Desktop detected
  [OK] Wrote claude_desktop_config.json
  [OK] MCP server registered
  ─────────────────────────────────
  Tools exposed to Claude:
  get_spend · list_campaigns
  pause_campaign · set_budget
  list_schedules · get_guardrails

# three ways in.

Pick what fits your workflow. They all speak to the same credentials file.

% cli

Scripts, CI, and people who live in their terminal

Every command outputs clean, structured text. Pipe it, filter it, schedule it with cron. Pass --json for machine-readable output.

~/docs/cli →
# pause all apple campaigns at midnight
~$ adduck schedule add \
    --platform apple \
    --action   pause \
    --at       "00:00"

  [OK] Schedule sc-5 created

# pipe to jq for scripting
~$ adduck spend --json \
    | jq '.[] | select(.cpiMicros > 4000000)'
adduck tui
  ╔══ adduck: 7-day spend ════════════════╗
                                        
  ▶ Apple Search Ads                    
    iOS App: Exact Match               
    $142.00 · 47 inst · $3.02 CPI      
                                        
    Spend last 7d                       
    █████████▓▓▒░░  $20/day avg         
                                        
  ║  p pause · r resume · b budget · q   ║
  ╚══════════════════════════════════════╝
% tui

Browse without typing commands

Move through campaigns with j/k. Expand into spend charts. Pause or adjust budgets with a keypress. Runs in your terminal, no browser required.

~/docs/cli#tui →
% mcp

Let Claude manage your campaigns

adduck mcp starts an MCP server. adduck agents install wires it into Claude Desktop or any MCP-compatible client.

Your assistant can read spend, pause campaigns, and adjust budgets -- with guardrails you set. The AI can't exceed them.

~/docs/mcp →
Claude: campaign management
  Human: Pause anything over $4 CPI.

  Claude: Running adduck get_spend...

  Found 2 campaigns above $4.00 CPI:
  ▸ Reddit "App Awareness Q3": $4.05
  ▸ AppLovin "Rewarded Video": $3.72
    (under threshold, leaving it)

  Pausing Reddit campaign...
  [OK] Paused "App Awareness Q3"
  1 paused. AppLovin left running.
# guardrails

It won't let you accidentally spend 4x your budget.

Guardrails are per-project limits that block mutations before they happen. The defaults are conservative. You can tighten them further, but you can't exceed your billing limits.

Protected campaigns can't be paused or budget-changed. For the always-on brand campaign that somebody set up 3 years ago and nobody fully understands anymore.

~/docs/guardrails →
adduck guardrails
~$ adduck guardrails

  Project: my-app · account: main
  ────────────────────────────────────────
  allowMutations          true
  maxBudgetChangePct      25%  (max increase)
  maxDailyBudgetMicros    $500 (absolute cap)
  protectedCampaigns      []
  ────────────────────────────────────────
  ~ Edit: adduck.json > guardrails
  ~ Violations are blocked, not warned.
# MIT license

Free to self-host.

adduck is MIT-licensed. Run it on your machine, in CI, on a server. Your credentials stay local -- adduck doesn't proxy API calls through any backend.

Each platform API key goes in your project's adduck.json or in environment variables. No account, no cloud, no telemetry.

[~/github →]
# setup time

Connects in 5 minutes.

Apple Search Ads is the most involved: client ID, key ID, team ID, PEM key. The others are a token and an account ID.

# ready

Get your ads in a row.

Installs in under a minute. No account required. MIT.

~$ npm install -g adduck
[read the docs →]