Google Ads Manager
Google Ads Manager with Blended MER
Manage Search, Performance Max, and Shopping with GAQL-powered reporting and blended MER across every paid and organic channel.
Admaxxer is a DTC analytics platform with built-in Meta + Google ad ops. The Google Ads Manager inside Admaxxer runs GAQL queries against the Google Ads API (`GOOGLE_ADS_API_VERSION` v17 by default), stitches results into your first-party pixel revenue, and surfaces blended MER across Meta, Google, organic, and email in one view. It is designed for operators who need the control of Google Ads Editor with the honesty of a CFO-ready MER.
## What it does
- Reads campaigns, ad groups, keywords, and conversion columns for every connected Google Ads account through GAQL.
- Computes spend by normalizing `cost_micros` (dividing by 1e6) before anything touches a dashboard — no silent unit bugs.
- Joins Google spend with first-party pixel revenue to produce a blended MER that sits next to Meta and organic.
- Pauses, scales, and launches campaigns via Claude agent tools with explicit confirmation.
- Respects Google Ads' 15,000 operations/day default quota with conservative batching, so developer tokens stay healthy.
## How it works
Connections use Google's OAuth 2.0 refresh-token flow plus your developer token, stored encrypted at rest with AES-256-GCM per workspace. The refresh-token flow means Admaxxer never holds a long-lived user token — access tokens rotate on their own, and the background cron re-issues them before they expire. If the refresh token is revoked upstream, the connection cleanly flips to an error state rather than silently serving stale data.
Every Google Ads call flows through `server/ads/GoogleAdsService.ts`, which translates requests into GAQL. Cost normalization happens at the service boundary: `cost_micros` is divided by 1e6 into a currency-aware decimal before anything is cached or returned. That single convention means no downstream pipe, dashboard, or AI tool ever sees the raw micros value and guesses wrong.
Reads are paginated with `LIMIT` clauses sized to Google's quota budget. Writes — status changes, budget updates, new campaigns — require explicit confirmation from a human or from the Claude agent's `update_campaign` tool with `confirmed: true`. The 15,000 operations/day default quota is treated as a hard ceiling: Admaxxer throttles aggressively as you approach 80% of budget and surfaces the remaining budget in the connections screen.
Downstream, the same Tinybird pipes that power Meta analytics join Google spend with first-party pixel revenue and GA4 server-side events. Blended MER is computed across Meta, Google, organic search, and email — the four channels most DTC brands actually run. Cohort LTV and attribution windows are platform-agnostic, so you can compare Google's 7-day click payback against Meta's on the same page.
## Why it matters
Google's native reporting leans on last-click and on attribution models tuned for Google's auction. That is great for a media buyer optimizing inside Google. It is less great for a DTC operator who wants to know whether Performance Max is actually pulling new buyers or quietly poaching brand search.
By joining Google spend to your first-party pixel and GA4 server-side revenue, Admaxxer tells you whether Performance Max is incremental. By blending MER across every paid and organic channel, you see whether raising Google spend 20% actually moved total revenue 20% — or just cannibalized email and Meta. That is the question that justifies or kills next quarter's budget.
The developer-token story matters too. Losing a Google Ads developer token is painful and slow to recover. Admaxxer's conservative batching, quota-aware throttling, and explicit-confirmation write model exist so your token stays approved and your agency's client portfolio stays online. Ad account safety sits at the same priority as data correctness.
Finally, because Google Ads performance lives next to Meta, Shopify revenue, and Klaviyo email sends in a single workspace, you stop running your business out of four browser tabs. One surface, one query language underneath, one version of the truth.
## Who it's for
DTC brands with $500k to $50M ARR running Search, Shopping, or Performance Max alongside Meta. Agencies managing five to fifty client accounts who need a consistent blended-MER view across the portfolio. Operators who want to own the first-party data under their Google attribution and who refuse to live inside Google's last-click worldview.
## Setup in 10 minutes
Connect your Google Ads account via OAuth, paste your developer token, and pick the accounts (including MCC sub-accounts) you want Admaxxer to read. Install the pixel and optionally wire GA4 server-side. The full flow is in the [install guide](/documentation/install), with platform details in the [Google connection guide](/guides/connect-google-ads). To see how Google and Meta compose, read [Meta Ads Manager](/features/meta-ads-manager) and [Self-Hosted Ads Analytics](/features/self-hosted-ads-analytics). For a side-by-side with native Google Ads UI, see the [compare page](/compare/admaxxer-vs-google-ads).
## Pricing
Starter is $9/month, Pro is $79/month, Scale is $199/month. Every plan starts with a 7-day free trial and no credit card is required. See [pricing](/pricing) for MCC quotas, seat limits, and agency pricing.
## FAQs
**Do I need my own Google Ads developer token?** Yes. The v1 paste-token model uses your own developer token and OAuth refresh token so you do not depend on Admaxxer's production quota. This is the same pattern agency-grade tools use, and it keeps your rate-limit budget predictable.
**How do you handle cost_micros?** Every read divides `cost_micros` by 1e6 at the service boundary in `GoogleAdsService.ts`, so no dashboard or Tinybird pipe ever sees the raw micros value. This single convention prevents the class of silent off-by-1M currency bugs that haunt Google Ads integrations.
**What happens when I hit the 15k ops/day limit?** Admaxxer throttles aggressively above 80% of quota and surfaces the remaining budget in the connections screen. Writes are deferred rather than failed hard, so you never lose a scheduled action to a quota spike.
Key Benefits
- GAQL-powered reporting — Campaigns, ad groups, keywords, and conversions read straight from the Google Ads API with cost_micros normalized to currency.
- Blended MER across channels — Google spend joined to Meta, organic, and email revenue — the MER your CFO actually uses.
- Refresh-token security — OAuth refresh-token flow with AES-256-GCM encryption; no long-lived user tokens to lose.
- Quota-aware throttling — Conservative batching beneath Google's 15k ops/day default keeps your developer token healthy.
- Pmax incrementality signal — See whether Performance Max is driving new buyers or cannibalizing brand search.
- MCC-aware — Manage agency client accounts under one MCC connection, scoped per workspace.
Frequently Asked Questions
Do I need my own Google Ads developer token?
Yes. The v1 paste-token model uses your own developer token and OAuth refresh token so you do not depend on Admaxxer's production quota. This is the same pattern agency-grade tools use, and it keeps your rate-limit budget predictable.
How do you handle cost_micros?
Every read divides cost_micros by 1e6 at the service boundary in GoogleAdsService.ts, so no dashboard or Tinybird pipe ever sees the raw micros value. This single convention prevents the class of silent off-by-1M currency bugs that haunt Google Ads integrations.
What happens when I hit the 15k ops/day limit?
Admaxxer throttles aggressively above 80% of quota and surfaces the remaining budget in the connections screen. Writes are deferred rather than failed hard, so you never lose a scheduled action to a quota spike.