agent-ads
Agent integrationPrompt routing guide

Translate prompts into explicit engine commands.

agent-ads is a read-only CLI for querying ad platform APIs. Meta, Google Ads, TikTok, Pinterest, LinkedIn, and X supported. Every command outputs JSON to stdout.

Example workflow
Break down last week's Meta spend by age and gender
bash
$ agent-ads meta insights query \
  --account act_12345678 \
  --fields spend,cpc,actions \
  --breakdowns age,gender \
  --date-preset last_7d
Examples

What agents can ask

Plain-English prompts that work. The agent translates these into the right CLI commands.

Plain-English prompts that work. The agent translates these into the right CLI commands.

Performance & reporting

  • "Show me my Meta ad spend by campaign for the last 7 days"
  • "Run this GAQL query against Google Ads"
  • "What's my TikTok campaign performance this month?"
  • "What did my Pinterest campaigns spend last week?"
  • "Show me LinkedIn campaign performance for this month"
  • "Show me X campaign engagement for the last 7 days"
  • "Pull a daily breakdown of impressions and clicks across all campaigns"
  • "Export last week's Meta performance report to CSV"
  • "Run an async report for all my TikTok ads since January"
  • "Submit a Pinterest report run and wait for the result URL"

Accounts & campaigns

  • "What businesses do I have access to in Meta?"
  • "List all my accessible Google Ads customers"
  • "List all my TikTok advertisers"
  • "List my Pinterest ad accounts"
  • "List my LinkedIn ad accounts"
  • "List my X ads accounts"
  • "Show me the campaigns in my Meta ad account"
  • "Which ad sets are running right now?"

Creative & tracking

  • "Show my TikTok video creatives"
  • "Check if my Meta pixel is working"
  • "Find broken pixels across my Meta accounts"
  • "What audiences do I have in TikTok?"
  • "What audiences do I have in Pinterest?"
  • "What custom audiences do I have in X?"

Setup & troubleshooting

  • "Show me which providers are already authenticated"
  • "Help me set up my Meta auth token"
  • "Is my TikTok token still valid?"
  • "Refresh my Pinterest token"
  • "Run a doctor check on my account"
  • "My token expired — how do I refresh it?"
Guide

Glossary

Translating marketer language to CLI concepts:

Translating marketer language to CLI concepts:

You sayPlatformIn the CLI
business managerMetaagent-ads meta businesses list
ad accountMeta--account act_123... flag
customer / accountGoogle--customer-id 1234567890 flag
advertiser / ad accountTikTok--advertiser-id 123... flag
ad accountPinterest--ad-account-id 123... flag
ad accountLinkedIn--account-id 123... flag
ads accountX--account-id 18ce... flag
campaign performance / reportMeta/TikTokinsights query command
analytics / reportPinterestanalytics query, report-runs ...
analytics / reportLinkedInanalytics query --finder ...
analytics / reportXanalytics query, analytics jobs ...
GAQL / queryGooglegaql search, gaql search-stream
pixel / tagMetapixels list, pixel-health get
pixelTikTokpixels list
audience / custom audienceTikTokaudiences list
audience / custom audiencePinterestaudiences list, audiences get
creative / ad contentMetacreatives get, creatives preview
creative / video / imageTikTokcreatives videos, creatives images
conversion trackingMetacustom-conversions list, datasets get
token / access tokenallstored via auth set or shell env var
Guide

Command Syntax Rules

Every command starts with agent-ads <provider>. This is intentional — each ad platform has different APIs, auth, object models, and semantics, so the CLI keeps them separate rather than papering over differences.

Every command starts with agent-ads <provider>. This is intentional — each ad platform has different APIs, auth, object models, and semantics, so the CLI keeps them separate rather than papering over differences.

  • Canonical: agent-ads meta insights query ...
  • Never: agent-ads insights query ... (no implicit provider)
  • Never: agent-ads meta:insights:query (no colon syntax)
Guide

Provider Routing

Check live: agent-ads providers list

ProviderStatusFirst commandReference guide
metaImplementedagent-ads meta --helpreferences/meta.md
googleImplementedagent-ads google --helpreferences/google.md
tiktokImplementedagent-ads tiktok --helpreferences/tiktok.md
pinterestImplementedagent-ads pinterest --helpreferences/pinterest.md
linkedinImplementedagent-ads linkedin --helpreferences/linkedin.md
xImplementedagent-ads x --helpreferences/x.md

Check live: agent-ads providers list

For a cross-provider auth summary or guided local setup, use agent-ads auth.

Each routing guide tells you which specific reference file to load based on the task. Load only the file you need — do not preload all of them.

Guide

Shared Behavior

These apply to every provider and every command.

These apply to every provider and every command.

Output

  • stdout: data-only JSON by default (just the array or object, no wrapper)
  • stderr: errors as JSON, warnings as plain text
  • --envelope: wraps stdout with { "data": ..., "meta": ..., "paging": ... }
  • Formats: --format json|jsonl|csv, --output <path>, --pretty

Config precedence

  • Secrets: shell env > OS credential store. Never from flags or config files.
  • Non-secrets: CLI flags > shell env > agent-ads.config.json
  • Guided local auth setup: agent-ads auth
  • Persistent provider auth: agent-ads <provider> auth set
  • Shell override / CI: provider-specific env vars (e.g. META_ADS_ACCESS_TOKEN, GOOGLE_ADS_REFRESH_TOKEN, TIKTOK_ADS_ACCESS_TOKEN, PINTEREST_ADS_REFRESH_TOKEN, LINKEDIN_ADS_ACCESS_TOKEN, X_ADS_CONSUMER_KEY)
  • Linux secure storage requires a running Secret Service provider (GNOME Keyring, KWallet)

Exit codes

CodeMeaning
0Success
1Transport or internal error
2Config or argument error
3Meta API error
4TikTok API error
5Google API error
6Pinterest API error
7LinkedIn API error
8X API error

Global flags

FlagDefaultWhat it does
--config <path>agent-ads.config.jsonConfig file path
--format json|jsonl|csvjsonOutput format
--output <path>stdoutWrite to file (- for stdout)
--prettyoffPretty-print JSON
--envelopeoffWrap data with metadata, paging, warnings
--include-metaoffAdd metadata columns in CSV mode
--api-version <v>provider defaultProvider API version override
--timeout-seconds <n>60HTTP request timeout
-q / -vwarnQuiet mode or verbose logging (-vv for debug)

Pagination flags differ by provider — see each provider's routing guide for details.

Guide

Common Issues

ProblemWhat's happeningFix
"My token expired"Meta tokens can be short-lived; TikTok tokens expire every 24 hours; Pinterest relies on OAuth refresh tokensMeta: regenerate at Graph API Explorer then meta auth set. TikTok: tiktok auth refresh --app-id ... --app-secret .... Pinterest: pinterest auth refresh
"I don't know my account ID"You need to discover it firstMeta: meta businesses list then meta ad-accounts list --business-id .... Google: google customers list. TikTok: tiktok advertisers list --app-id ... --app-secret .... Pinterest: pinterest ad-accounts list. X: x accounts list
"Permission denied"Token is missing required scopesMeta: regenerate token with ads_read (and business_management for discovery). TikTok: check app permissions in TikTok developer portal. Pinterest: regenerate app credentials/tokens with the required ads-read scope in the Pinterest developer portal
"Command not found"CLI not installed or not on PATHRun agent-ads --version. If missing: npm install -g agent-ads
"doctor says credential store unavailable"No OS keychain on this machine (common on Linux servers)Use shell env vars instead: export META_ADS_ACCESS_TOKEN=..., export GOOGLE_ADS_REFRESH_TOKEN=..., export TIKTOK_ADS_ACCESS_TOKEN=..., export PINTEREST_ADS_REFRESH_TOKEN=..., export LINKEDIN_ADS_ACCESS_TOKEN=..., or the four X_ADS_* variables
"TikTok says 'advertiser-id is required'"Most TikTok commands need an advertiser IDAdd --advertiser-id <id>, or set default_advertiser_id in config under providers.tiktok
"Pinterest says 'ad account ID is required'"Most Pinterest commands are scoped to an ad accountAdd --ad-account-id <id>, or set default_ad_account_id in config under providers.pinterest
"LinkedIn says 'account ID is required'"Most LinkedIn commands are scoped to an ad accountAdd --account-id <id>, or set default_account_id in config under providers.linkedin
"X says 'account ID is required'"Most X commands are scoped to one ads accountAdd --account-id <id>, or set default_account_id in config under providers.x
Guide

Stop Conditions

  • Do not drop the provider prefix (agent-ads meta ..., not agent-ads ...).
  • Do not invent cross-provider abstractions (no shared campaign/report/measurement schema).
  • Do not reuse Meta auth env vars (META_ADS_ACCESS_TOKEN) for other providers.
  • Do not guess flag names — use agent-ads <provider> <command> --help to confirm.