AI Ads Agent
Claude-Powered AI Ads Agent
A Claude Sonnet agent with read-only analytics and explicit-confirmation campaign tools over your Meta and Google ad accounts.
Admaxxer is a DTC analytics platform with built-in Meta + Google ad ops. The AI Ads Agent is the Claude-powered operator that sits on top of that platform. It can answer "what is my blended MER this week," "which Meta creatives are retaining buyers at 30 days," and "pause everything below 1.5 ROAS on Google" — and it can do that last one only after you say yes.
## What it does
- Answers ad-ops and analytics questions in natural language, streaming over SSE for immediate feedback.
- Exposes six tools: `list_campaigns`, `get_campaign_insights`, `get_account_insights`, `update_campaign`, `pause_all_low_roas`, and a read-only analytics tool `query_metrics`.
- Gates every destructive action behind explicit `confirmed: true` — the agent cannot touch your spend without you typing yes.
- Uses prompt caching on the system prompt and tools array so long conversations do not balloon your Anthropic bill.
- Runs on Anthropic's `claude-sonnet-4-6` by default via the official SDK in `server/ads/ClaudeAgentService.ts`.
## How it works
The agent is implemented in `server/ads/ClaudeAgentService.ts` using `@anthropic-ai/sdk` with `claude-sonnet-4-6`. Messages stream over Server-Sent Events so responses feel instant, even when the agent is chaining tool calls. Tool-use blocks and tool-result blocks are persisted to the `chatMessages` table exactly as Anthropic returns them, so a conversation can be resumed — by the user or by another operator — without replaying the whole thread.
Prompt caching is wired into the system block and the tools array. That is the single biggest cost lever on any serious agent: a conversation that has thirty back-and-forths over the same ad account context pays for the system + tools tokens once, not thirty times. We guard this carefully, because losing cache hits is a silent cost regression that only shows up on next month's bill.
The agent has five destructive-gated campaign tools — `list_campaigns`, `get_campaign_insights`, `get_account_insights`, `update_campaign`, and `pause_all_low_roas` — plus one read-only analytics tool, `query_metrics`. `query_metrics` is guarded by a `PIPE_ALLOWLIST`, so even if the agent invents a creative query, it can only hit Tinybird pipes that you have pre-approved. The five campaign tools wrap `MetaAdsService` and `GoogleAdsService`, inheriting their rate limits and encryption.
Every destructive action — updating a campaign, pausing a batch of low-ROAS ads — requires an explicit `confirmed: true` flag on the tool call. When the agent proposes a destructive action, it returns a preview and waits. You type yes. Only then does the tool actually execute. This is deliberate: an AI agent with a write API on a million-dollar-a-quarter ad budget needs to feel like a junior analyst with a rollback switch, not like a cowboy.
## Why it matters
LLM agents that can only read are fancy search engines. LLM agents that can write without guardrails are liabilities. The interesting middle — an agent that can read freely, propose writes, and execute only on confirmation — is where real leverage lives for a DTC operator.
The Admaxxer agent is designed to hit that middle. Because `query_metrics` hits Tinybird pipes through an allowlist, the agent can answer questions like "what is my 30-day cohort LTV for customers acquired through Meta Reels last month" without you writing SQL and without risking a random query that locks up a warehouse. Because destructive tools require explicit confirmation, you get the speed of automation without the blast radius.
Prompt caching matters because real ad-ops conversations are long. You ask, the agent pulls insights, you ask a follow-up, the agent correlates with cohort data, you ask for a scale recommendation. By caching the system block and tools, Admaxxer keeps the marginal cost of each follow-up low. That is what makes it economic to actually live inside the agent instead of using it for one-off queries.
Finally, the data boundary is clean. The agent never sees a raw API key. It sees tool results, which the service layer has already decrypted, normalized (including `cost_micros / 1e6`), and filtered to your workspace. That means even in a worst-case prompt injection scenario, the agent cannot exfiltrate a credential it never had.
## Who it's for
DTC founders and CMOs who want to stop standing up over a dashboard at 11pm. Agencies who want a consistent analyst layer across every client workspace without hiring one analyst per account. Operators who believe AI should accelerate human judgment, not replace it — and who want the confirmation gate to prove it.
## Setup in 5 minutes
Once Meta and Google are connected, the AI Ads Agent is live in the chat panel. No separate setup. Open the chat and ask a question. Full install instructions in the [install guide](/documentation/install). For what the agent can see, read [Meta Ads Manager](/features/meta-ads-manager) and [Google Ads Manager](/features/google-ads-manager). For where the data comes from, see [Self-Hosted Ads Analytics](/features/self-hosted-ads-analytics). For how this compares to letting a generic LLM loose on your ad accounts, see [compare](/compare/admaxxer-vs-generic-ai).
## Pricing
The AI Ads Agent is included in every plan. Starter is $29/month, Pro is $79/month, Agency is $199/month. Every plan starts with a 7-day free trial and no credit card is required. See [pricing](/pricing) for agent-message quotas.
## FAQs
**Can the agent pause my campaigns on its own?** No. Every destructive tool — `update_campaign`, `pause_all_low_roas` — requires an explicit `confirmed: true` flag from you. The agent proposes, you confirm, then it executes.
**Which Claude model does it use?** `claude-sonnet-4-6` by default, accessed via the official Anthropic SDK. Prompt caching is enabled on the system block and tools array to keep long conversations cost-effective.
**What stops the agent from querying something dangerous?** The read-only analytics tool `query_metrics` is guarded by a `PIPE_ALLOWLIST` — the agent can only hit Tinybird pipes that have been explicitly pre-approved. Any off-allowlist query is rejected before it reaches Tinybird.
Key Benefits
- Explicit-confirmation writes — Every destructive action requires confirmed: true — the agent cannot touch your spend without your typed yes.
- Prompt caching on system + tools — Long conversations stay cheap; cache hits are guarded so next month's bill does not surprise you.
- PIPE_ALLOWLIST on analytics — The agent can only query Tinybird pipes you have pre-approved — no rogue SQL.
- SSE streaming — Responses stream token-by-token so the chat feels instant even during tool chains.
- Six purpose-built tools — Five destructive-gated campaign tools plus one read-only analytics tool — no generic shell access.
- Clean data boundary — The agent never sees raw API keys; only normalized, workspace-scoped tool results.
Frequently Asked Questions
Can the agent pause my campaigns on its own?
No. Every destructive tool — update_campaign, pause_all_low_roas — requires an explicit confirmed: true flag from you. The agent proposes, you confirm, then it executes.
Which Claude model does it use?
claude-sonnet-4-6 by default, accessed via the official Anthropic SDK. Prompt caching is enabled on the system block and tools array to keep long conversations cost-effective.
What stops the agent from querying something dangerous?
The read-only analytics tool query_metrics is guarded by a PIPE_ALLOWLIST — the agent can only hit Tinybird pipes that have been explicitly pre-approved. Any off-allowlist query is rejected before it reaches Tinybird.