Google Ads - AdLoop
AdLoop is an AI command center that provides read and write access to Google Ads, GA4, Google Tag Manager, and tracking infrastructure, enabling AI assistants to manage and optimize digital advertising and analytics with built-in safety features.
Health Check & Diagnostics: Verify OAuth, GA4, and Ads connectivity, pinning API versions and surfacing actionable errors.
GA4 Analytics: List accounts/properties, run custom reports (sessions, users, conversions, page performance), get real-time data, and list configured tracking events.
Google Ads Read: List accessible accounts and pull performance data for campaigns, ads, keywords, search terms, negative keywords, recommendations, Performance Max assets, audiences, and demographics. Run arbitrary GAQL queries.
Cross-Platform Analysis: Join Ads clicks with GA4 sessions/conversions per campaign (
analyze_campaign_conversions), correlate landing pages with page-level metrics (landing_page_analysis), and diagnose attribution discrepancies (attribution_check).Tracking Validation & Code Generation: Compare codebase events against GA4 firing (
validate_tracking) and generate ready-to-paste GA4 gtag snippets (generate_tracking_code).Google Tag Manager Auditing: Audit GTM containers — list tags/triggers/variables, inspect live configs, compare workspaces, and perform three-way joins (codebase ↔ GTM tags ↔ GA4 fires) via
audit_event_coverage.Keyword Planning & Budget Forecasting: Discover keyword ideas with search volume and competition, and forecast clicks, impressions, and cost for budget planning.
Google Ads Write (Safety-First): Draft and update campaigns, ad groups, responsive search ads, keywords, negative keywords, shared lists, callouts, structured snippets, image assets, and sitelinks. Every mutation follows a mandatory preview → confirm workflow; new entities are paused by default; Broad Match + Manual CPC is blocked.
Entity Management: Pause, enable, or remove campaigns, ad groups, ads, and keywords — with irreversible actions requiring double confirmation.
Search Console & Merchant Center: Run organic search analytics reports and retrieve Merchant Center feed health data.
Safety & Audit Logging: Configurable budget caps, dry-run defaults, a full audit log at
~/.adloop/audit.log, and structured error handling with actionable hints.Orchestration & Slash Commands: Built-in rules guide AI workflows (performance review, conversion diagnosis, campaign creation) with Claude Code slash commands like
/analyze-performanceand/create-ad.
Provides read and write access to Google Ads, including campaign management, keyword planning, ad performance analysis, and negative keyword management, with safety guardrails to prevent accidental spend.
Provides read access to Google Analytics 4 (GA4) data, including custom reports, real-time data, event tracking, and cross-reference analysis with Google Ads for attribution and conversion diagnostics.
AdLoop
The AI command center for Google Ads, GA4, and tracking code.
An MCP server that gives your AI assistant read + write access to Google Ads and GA4 — with safety guardrails that prevent accidental spend.
☁️ Skip the setup — use AdLoop Cloud (free beta) · or self-host: pip install adloop
AdLoop Cloud is the hosted version of this project — live now, free during beta (limited seats). Connect Google in two clicks and use the same 67 tools from claude.ai, ChatGPT, Claude Code, Cursor, or Gemini. No Google Cloud project, no developer token, no OAuth verification wait. EU-hosted, GDPR-first, DPA included.
Cloud or Self-Hosted?
Both versions run the same 67 tools with the same safety model. The difference is who handles the plumbing:
☁️ AdLoop Cloud | 🛠️ Self-hosted (this repo) | |
Setup | Connect Google in two clicks | ~5 min: own Google Cloud project + |
Google Cloud project | Not needed | Required (free) |
Ads developer token | Not needed | Required (from your MCC) |
Works with | claude.ai, ChatGPT, Claude Code, Cursor, Gemini | Claude Code, Cursor, Claude Desktop, any local MCP client |
Where your data flows | EU servers (Germany), GDPR-first, DPA included | 100% your machine — nothing leaves it |
Updates | Automatic |
|
Price | Free during beta | Free forever (MIT) |
Not sure? Start with Cloud — it's the fastest way to see what AdLoop can do, and it's the only way to use AdLoop from claude.ai or ChatGPT. Self-host when you want everything on your own machine or need to modify the code. And if you're here to hack on AdLoop itself: welcome, keep scrolling.
Related MCP server: PaidSync (Ads analysis & Management)
What It Solves
AdLoop exists because managing Google Ads alongside your code is a mess. These are the specific problems it handles:
"My conversions dropped and I don't know why." AdLoop cross-references Ads clicks, GA4 sessions, and conversion events in one query. It detects whether the gap is from GDPR consent rejection, broken tracking, or an actual landing page problem — before you waste hours checking each dashboard separately.
"I'm wasting ad spend on irrelevant searches." Pull your search terms report, identify the junk, and add negative keywords — all from a single conversation in your IDE. No context-switching to the Ads UI.
"Is my tracking even working?" Compare the event names in your actual codebase against what GA4 is receiving. Find the mismatches: events you fire that GA4 never sees, events GA4 records that you didn't know about.
"I need to create ads but the Google Ads UI is hostile." Draft responsive search ads, create campaigns, add keywords — all through natural language. Every change shows a preview first. Nothing goes live without your explicit confirmation. New ads and campaigns start paused.
"My landing page gets paid traffic but nobody converts." AdLoop joins your ad final URLs with GA4 page-level data. See which pages get clicks but no conversions, which have high bounce rates, and which ones are orphaned from any ad campaign.
"Are conversions even being tagged on every page?" AdLoop reads your live Google Tag Manager container, joins it against the events in your codebase and the events firing in GA4, and tells you exactly which conversions are being captured, which tags are paused, which page-scope filters are too narrow, and which codebase events have no tag at all — the kind of three-way audit GTM Preview can't give you in a single view.
"I don't know if my EU consent setup is causing data gaps." In Europe, 30-70% of users reject analytics cookies. AdLoop accounts for this automatically — it won't diagnose a normal GDPR consent gap as broken tracking.
Built From Real Usage
Every tool exists because of an actual problem hit while running real Google Ads campaigns. The cross-reference tools exist because we kept manually asking the AI to "get Ads data, then get GA4 data, then compare them" — so we automated the join. The Broad Match + Manual CPC safety rule exists because the AI once created that exact combination and wasted budget. The GDPR consent awareness exists because the AI kept diagnosing normal EU cookie rejection as broken tracking.
The best features come from real workflows. If you're using AdLoop and find yourself wishing it could do something it can't, open an issue describing your situation — not just "add feature X" but "I was trying to do Y and couldn't because Z." The context matters more than the request.
All 67 Tools
Quick start:
pip install adlooporgit clone https://github.com/kLOsk/adloop.git && cd adloop && uv sync && uv run adloop init— or zero setup on AdLoop Cloud
Diagnostics
Tool | What It Does |
| Test OAuth, GA4, and Ads connectivity in one call — actionable error messages if anything is broken. Also reports the pinned Google Ads API version and warns if a newer version is available. |
GA4 Read Tools
Tool | What It Does |
| List GA4 accounts and properties |
| Custom reports — sessions, users, conversions, page performance |
| Live data — verify tracking fires after deploys |
| All configured events and their volume |
Google Ads Read Tools
Tool | What It Does |
| Discover accessible Ads accounts |
| Campaign metrics — impressions, clicks, cost, conversions, CPA |
| Ad copy analysis — headlines, descriptions, CTR |
| Keywords — quality scores, competitive metrics |
| What users actually searched before clicking |
| List direct campaign-level negative keywords |
| List all shared negative keyword lists (SharedSets) — names, IDs, status, keyword count |
| List the keywords inside a specific shared negative keyword list |
| List which campaigns a shared negative keyword list is attached to |
| Google's auto-generated recommendations with type, estimated impact, and campaign context |
| Performance Max campaign metrics with network breakdown + asset group ad strength |
| Per-asset details for PMax — field type, serving status, content |
| Top-performing asset combinations — which headline+description+image combos Google selects most |
| Audience segment performance — remarketing, in-market, affinity, demographics |
| List demographic criteria (age/gender/parental status/income) on an ad group or campaign |
| Arbitrary GAQL queries for anything else |
Compact mode —
get_campaign_performance,get_keyword_performance,get_search_terms, andget_ad_performanceacceptcompact=true: account totals, breakdowns, top-10 rows, and pre-computed offender lists (zero-conversion spenders, low-QS keywords, negative-keyword candidates, thin RSAs) instead of every row. ~90% smaller responses — built for account audits so raw tables don't flood your AI's context.
Cross-Reference Tools (GA4 + Ads Combined)
These tools call both APIs internally and return unified results with auto-generated insights. They're the core of what makes AdLoop different from having separate GA4 and Ads tools.
Tool | What It Does |
| Maps Ads clicks → GA4 sessions → conversions per campaign. Detects GDPR consent gaps, computes real CPA, compares paid vs organic channels. |
| Joins ad final URLs with GA4 page data. Shows conversion rate, bounce rate, and engagement per landing page. Flags pages with paid traffic but zero conversions. |
| Compares Ads-reported conversions vs GA4 events. Diagnoses whether discrepancies are from GDPR consent, attribution windows, or broken tracking. |
Tracking Tools
Tool | What It Does |
| Compare event names found in your codebase against what GA4 actually records. Returns matched, missing, and unexpected events with diagnostics. |
| Generate ready-to-paste GA4 gtag JavaScript for any event, with recommended parameters for well-known events (sign_up, purchase, etc.) and optional trigger wrappers. |
Google Tag Manager Tools
These tools read the live GTM container and join it with the codebase + GA4 to find tracking gaps that pure GA4 inspection can't catch — page-scoped triggers, paused tags, dynamic event names, brittle CSS selectors, and codebase events with no tag wired up at all.
Tool | What It Does |
| The flagship. Three-way join: codebase events ↔ GTM tags ↔ GA4 actual fires. For each event name in |
| Discover accessible GTM accounts |
| List containers under an account — returns numeric |
| Every tag in the live container with parsed event names and resolved firing/blocking trigger names |
| Full raw config for a single tag — every parameter, firing/blocking triggers with filter conditions, priority, pause status, sampling |
| Every trigger with filter conditions parsed to readable text (e.g. |
| Full trigger config + reverse lookup of every tag that uses it. Includes parsed |
| Custom variables (data layer, constants, JS) plus enabled built-in variables |
| List drafts (workspaces) under a container — workspace IDs are needed by |
| Drafted-but-not-published changes — common cause of "I edited a tag but nothing happened". Returns |
| Publish history with version IDs and entity counts. Use to correlate a metric drop with a recent publish. |
| Full metadata + tag/trigger names for a single historical container version |
Setup for GTM tools — Enable the Tag Manager API v2 in your GCP project, then add your AdLoop credentials' email (the OAuth user, or the service account email if using a service account) as a Read user on the GTM container under Admin → User Management. Service accounts pick up access on the next call. OAuth users upgrading from an earlier AdLoop version must re-authorize once: the GTM scope is new, so delete
~/.adloop/token.jsonand run any tool to re-consent — until then GTM tools return a permissions error.
Search Console Tools
Tool | What It Does |
| List Search Console properties the connected account can access |
| Organic search analytics — clicks, impressions, CTR, position by query/page/country/device/date |
Web Performance Tools
Tool | What It Does |
| PageSpeed Insights for landing pages — Lighthouse score, Core Web Vitals, real-user CrUX data, top fixes. No OAuth needed (optional API key). |
Merchant Center Tools
Tool | What It Does |
| Discover accessible Merchant Center accounts |
| Feed health — approved/pending/disapproved counts per reporting context, top product issues with docs, account-level issues. Disapprovals silently starve Shopping/PMax. |
Setup for Merchant Center tools — Enable the Merchant API in your GCP project (the Content API for Shopping is deprecated). The Merchant API has no read-only scope; AdLoop uses it strictly read-only. Upgrading OAuth users re-authorize once.
Setup for GSC tools — Enable the Search Console API in your GCP project. Upgrading OAuth users must re-authorize once for the new scope (delete
~/.adloop/token.json, run any tool). The killer combo: cross-reference organic queries withget_keyword_performanceto find paid/organic cannibalization and untapped keyword opportunities.
Planning Tools
Tool | What It Does |
| Discover new keyword ideas from seed keywords and/or a URL — with optional per-month search history + seasonality insights ( |
| Forecast clicks, impressions, and cost for a set of keywords using Google Ads Keyword Planner. Supports geo/language targeting. Essential for budget planning before launching campaigns. |
Google Ads Write Tools
All write operations follow a draft → preview → confirm workflow. Nothing executes without explicit approval.
Tool | What It Does |
| Create a full campaign structure — budget + campaign (PAUSED) + ad group + optional keywords. Supports Search partners, display expansion, and |
| Modify existing campaign settings — bidding, budget, geo/language targeting, Search partners, display expansion, and TARGET_SPEND (Maximize Clicks) |
| Create a paused SEARCH_STANDARD ad group inside an existing campaign, with optional MANUAL_CPC |
| Update an ad group name and/or MANUAL_CPC |
| Create RSA preview (3-15 headlines ≤30 chars, 2-4 descriptions ≤90 chars). Warns if headline/description count is below best practice. |
| Create campaign callout assets from 1-25 character text snippets. |
| Create campaign structured snippet assets using official header values and 3-10 snippet values. |
| Create campaign image assets from local PNG, JPEG, or GIF files. |
| Propose keyword additions with match types. Proactively checks bidding strategy — blocks BROAD match on Manual CPC campaigns. |
| Propose negative keywords directly on a campaign |
| Propose negative geo exclusions on a campaign — exclude cities/regions while keeping broader positive targets |
| Mark a GA4 event as a key event (conversion) — the fix for "fires but isn't tracked as a conversion" |
| Propose demographic criteria (age, gender, parental status, income) — exclusions by default |
| Draft a shared negative keyword list (SharedSet) and attach it to a campaign — reusable across multiple campaigns |
| Pause a campaign, ad group, ad, or keyword |
| Re-enable a paused entity |
| Permanently remove an entity (irreversible — prefers pause). Supports keywords, negative keywords, ads, ad groups, campaigns. |
| Execute a previously previewed change |
Orchestration Rules
AdLoop ships with orchestration rules that teach the AI how to combine these tools — marketing workflows, GAQL syntax, safety protocols, GDPR awareness, and best practices. Without rules, the AI has tools but doesn't know the playbook.
Cursor:
.cursor/rules/adloop.mdc(canonical source)Claude Code:
.claude/rules/adloop.md(synced from Cursor rules viascripts/sync-rules.py)
The rules include:
Orchestration patterns for common workflows (performance review, conversion diagnosis, campaign creation, negative keyword hygiene, keyword discovery, tracking validation, budget planning, landing page analysis)
GAQL quick reference with syntax, common queries, and gotchas
Safety rules including Broad Match + Manual CPC prevention and pre-write validation
Ad copy character limit guidance (30-char headlines are shorter than you think)
GDPR consent awareness to prevent false tracking diagnoses in EU markets
Slash Commands (Claude Code)
AdLoop includes pre-built slash commands in .claude/commands/ for common workflows:
Command | What It Does |
| Full performance review across Google Ads + GA4 |
| Create a responsive search ad with safety checks |
| Diagnose tracking and conversion issues |
| Full optimization checklist for a campaign |
| Create a new search campaign with budget estimation |
| Estimate budget for keywords via Keyword Planner |
Safety Model
AdLoop manages real ad spend, so safety is not optional.
Two-step writes. Every mutation returns a preview first. A separate
confirm_and_applycall is required to execute.Dry-run by default. Even
confirm_and_applydefaults todry_run=true. Real changes require explicitdry_run=false.Budget caps. Configurable maximum daily budget — the server rejects anything above the cap.
Audit log. Every operation (including dry runs) is logged to
~/.adloop/audit.log.New campaigns and ads are PAUSED. Nothing goes live without manual enablement.
Destructive ops require double confirmation. Removing entities or large budget increases trigger extra warnings.
Broad Match + Manual CPC blocked. The #1 cause of wasted ad spend is automatically prevented —
draft_keywordsrefuses to add BROAD match keywords to campaigns without Smart Bidding.Pre-write validation. Before any write, the AI checks bidding strategy, conversion tracking status, and quality scores. If the campaign is fundamentally broken, AdLoop warns you instead of making things worse.
Structured error handling. All tools return actionable error messages with hints instead of raw exceptions. Auth errors include specific re-authorization steps.
API version pinning. The Google Ads API version is pinned to prevent silent breaking changes from library updates.
health_checkwarns when a newer version is available.Ask mode compatibility. Read tools declare
readOnlyHintso they work in Cursor's Ask mode without switching to Agent mode.
Setup
AdLoop uses your own (free) Google Cloud project for OAuth. The
adloop initwizard walks you through it — a one-time setup of about 5 minutes, with no shared user caps and no waiting on anyone's verification review. AdLoop does not ship built-in OAuth credentials.Prefer zero setup? AdLoop Cloud is the hosted version: connect Google in two clicks — no Cloud project, no developer token, EU-hosted.
(Upgrading from ≤0.9 with built-in credentials? Those sign-ins were retired in 0.10 — run
adloop initonce to switch to your own project.)
Seeing deleted_client: The OAuth client was deleted. or invalid_client? The shared Google Cloud project behind AdLoop ≤0.9's bundled credentials has been shut down, so its stored sign-ins no longer refresh. Two ways forward: AdLoop Cloud (connect Google in two clicks, nothing to configure) or stay self-hosted with pip install -U adloop && adloop init to set up your own free Google Cloud project. Details in the pinned issue (#49).
Install
From PyPI:
pip install adloop
adloop initFrom source:
git clone https://github.com/kLOsk/adloop.git
cd adloop
uv sync
uv run adloop initWhat adloop init does
The wizard walks you through:
Google Cloud setup — creates a project, enables the three APIs, generates an OAuth client (see Custom Google Cloud Project Setup below for the exact steps the wizard refers you to)
Developer token — from your Google Ads MCC (API Center)
MCC Account ID — your Manager Account ID (top bar in the MCC UI)
OAuth sign-in — opens a browser to sign in with Google (or prints a URL for headless servers)
Auto-discovers your accounts — finds your GA4 properties and Ads accounts automatically
Safety defaults — budget cap and dry-run preference
Editor config snippets — prints MCP configuration for both Cursor and Claude Code
Requirements
Python 3.11+
A Google Ads account with an MCC (Manager Account)
A Google Ads Developer Token (see below)
Google Ads Developer Token
A developer token is always required. Your OAuth client handles Google sign-in; the developer token is a separate key that grants API access to your Google Ads data.
Create an MCC (free) at ads.google.com/home/tools/manager-accounts if you don't have one. Link your regular Google Ads account to it.
In the MCC, go to Tools & Settings → API Center
Your developer token is shown there. Copy it — the wizard will ask for it.
Access levels — your token's access level determines what it can do:
Level | How to Get | What It Allows |
Test Account | Default for new tokens | Can only access test accounts — not production accounts. If you see |
Explorer | Automatic after first API call with a production account | 2,880 operations/day on production accounts. Enough to get started. |
Basic | 15,000 operations/day. Apply if you need more. |
Getting
DEVELOPER_TOKEN_NOT_APPROVED? Your token is at "Test Account" level. Go to API Center in your MCC and check your access level. If it shows "Test Account", you need to apply for Basic access or wait for Explorer access to be granted after your first production API call.
Headless Servers
Running on a server without a browser (VMs, Docker, SSH)? The wizard automatically detects this and falls back to a manual flow: it prints an authorization URL you can open on any device, then you paste the redirect URL back into the terminal.
Custom Google Cloud Project Setup
The wizard refers to these steps — do them in your browser before running adloop init (or while it waits at the OAuth prompt).
Step 1 — Google Cloud Project
Go to console.cloud.google.com and create a new project
Enable these three APIs (search for each in the API Library):
Google Analytics Data API — for GA4 reports and events
Google Analytics Admin API — for listing GA4 properties
Google Ads API — for all ads operations
Step 2 — OAuth Credentials
In your Google Cloud project, go to APIs & Services → Credentials
Click Create Credentials → OAuth client ID
Select Desktop app as the application type, give it any name
Download the JSON file and save it as
~/.adloop/credentials.json
Service accounts are also supported — just place the service account key JSON at the same
credentials_path. AdLoop detects the file type automatically.
Step 3 — Connect to Your Editor
Cursor — Add to your project's .cursor/mcp.json:
{
"mcpServers": {
"adloop": {
"command": "/absolute/path/to/adloop/.venv/bin/python",
"args": ["-m", "adloop"]
}
}
}Then copy .cursor/rules/adloop.mdc from this repo into your project's .cursor/rules/ directory.
Claude Code — Run:
claude mcp add --transport stdio adloop -- /absolute/path/to/adloop/.venv/bin/python -m adloopOr add to your project's .mcp.json:
{
"mcpServers": {
"adloop": {
"command": "/absolute/path/to/adloop/.venv/bin/python",
"args": ["-m", "adloop"]
}
}
}Then install the orchestration rules + slash commands globally so every Claude Code session inherits them:
adloop install-rulesThis writes a managed block to ~/.claude/CLAUDE.md and copies the slash commands (prefixed adloop-*) into ~/.claude/commands/. The block is delimited by sentinel comments so it's safe to run multiple times — re-running just refreshes the content. Two install modes:
inline (default) — full rules embedded in
~/.claude/CLAUDE.md. Reliable but adds ~10K tokens to every Claude Code session.lazy (
adloop install-rules --lazy) — small directive inCLAUDE.mdpointing at~/.claude/rules/adloop.md. Cheaper baseline cost; the LLM reads the rules file only when AdLoop tools are in scope.
To refresh after upgrading AdLoop: adloop update-rules. To remove cleanly: adloop uninstall-rules — only the managed block and adloop-* commands are touched, never your own content.
If you'd rather manage things by hand instead, copy .claude/rules/adloop.md and .claude/commands/ from this repo into your project's .claude/ directory.
Claude Desktop / claude.ai has no programmatic rules location. Run adloop install-rules and it will print the rules content for you to paste into Project settings → Custom instructions on claude.ai.
Use It
Ask your AI assistant things like:
"How are my Google Ads campaigns performing this month?"
"Which search terms are wasting budget? Add them as negative keywords."
"My sign-up conversions dropped — check GA4 and Ads to find out why."
"Draft a new responsive search ad for my main campaign."
"Which landing pages get paid traffic but don't convert?"
"Is my tracking set up correctly? Compare my codebase events against GA4."
"Audit my Google Tag Manager container — which conversions are being captured and where are the gaps?"
"What keywords should I target for [product]? Find ideas and estimate the budget."
"How much budget would I need for these keywords in Germany?"
"Create a new search campaign for [product feature] with a €20/day budget."
Configuration Reference
All configuration lives in ~/.adloop/config.yaml. See config.yaml.example for a documented template.
Section | Key | Default | Description |
|
| (empty) | Google Cloud project ID (only needed with custom credentials) |
|
| (empty) | Path to OAuth client JSON or service account key. Empty = |
|
|
| Where to store the OAuth token (auto-created) |
|
| — | Your GA4 property ID (auto-discovered by |
|
| — | Your Google Ads API developer token |
|
| — | Default Google Ads customer ID (auto-discovered by |
|
| — | Your MCC account ID |
|
|
| Maximum allowed daily budget per campaign |
|
|
| Force all writes to dry-run mode |
|
|
| Operations to block entirely |
Project Structure
src/adloop/
├── __init__.py # Entry point — routes 'adloop init' to wizard, otherwise starts MCP server
├── server.py # FastMCP server — 67 tool registrations with safety annotations
├── config.py # Config loader (~/.adloop/config.yaml)
├── auth.py # OAuth 2.0 flow (user-supplied credentials, headless fallback) + service accounts; GA4 / Ads / GTM scopes
├── cli.py # Interactive 'adloop init' setup wizard
├── crossref.py # Cross-reference tools (GA4 + Ads + GTM combined analysis)
├── tracking.py # Tracking validation + code generation tools
├── ga4/
│ ├── client.py # GA4 Data + Admin API clients
│ ├── reports.py # Account summaries, reports, realtime
│ └── tracking.py # Event discovery
├── ads/
│ ├── client.py # Google Ads API client (version-pinned) + retry/backoff for rate limits
│ ├── gaql.py # GAQL query execution with human-readable error parsing
│ ├── read.py # Campaign, ad, keyword, search term, negative keyword, shared sets, recommendations, audience reads
│ ├── pmax.py # Performance Max tools — campaign/asset group performance, asset labels, top combinations
│ ├── write.py # Draft campaign, RSA, keywords; pause, enable, remove, confirm
│ └── forecast.py # Budget estimation + keyword discovery via Keyword Planner API
├── gtm/
│ ├── client.py # Google Tag Manager API v2 client
│ └── read.py # Live container fetching, tag/trigger/variable parsing, workspace diff, version history
└── safety/
├── guards.py # Budget caps, bid limits, blocked operations, Broad Match safety
├── preview.py # Change plans and previews
└── audit.py # Mutation audit loggingRoadmap
What's been shipped and what's next:
GA4 read tools✓Google Ads read + write tools with safety layer✓Cross-reference intelligence (campaign→conversion mapping, landing page analysis, attribution comparison)✓Tracking utilities (validate events against GA4, generate gtag code)✓Budget estimation + keyword discovery via Keyword Planner✓Shared negative keyword lists (SharedSet API)✓Retry/backoff for API rate limits✓Setup wizard (adloop init)✓Claude Code support✓ —CLAUDE.md,.mcp.json,.claude/rules/,.claude/commands/, CLI wizard snippetsClaude Desktop one-click install —
adloop install claude-desktop(and/or a.dxtextension bundle) that writes the AdLoop MCP entry intoclaude_desktop_config.jsonautomatically, so Claude Desktop + Cowork users don't have to hand-edit JSONPyPI package✓ —pip install adloopAdLoop Cloud✓ — the hosted version, live in beta: no Google Cloud project, no developer token, connect Google in two clicks (EU-hosted, GDPR-first)Headless server support✓ — manual URL copy-paste flow for servers without a browserBehavioral eval suites✓ — 28 prompt-and-expectation tests covering read, write, tracking, and planning workflowsGoogle Tag Manager integration✓ — read tools for tags, triggers, variables, workspaces, and version history, plus theaudit_event_coveragethree-way join across codebase events, GTM tags, and GA4 actual firesCommunity launch — HN, Indie Hackers, r/cursor, Twitter
Video walkthrough
Contributing
See CONTRIBUTING.md for guidelines. The short version: open an issue describing your situation first, then submit a PR if you want to build it.
License
MIT — see LICENSE.
Privacy
The open-source version runs entirely on your machine. No data is collected, stored, or transmitted to any server. See PRIVACY.md for the full privacy policy. AdLoop Cloud has its own privacy policy and DPA.
If AdLoop helps you run Google Ads, GA4, and tracking code from one place — give it a star or try the hosted version.
Made by @kLOsk | AdLoop Cloud | Privacy Policy
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kLOsk/adloop'
If you have feedback or need assistance with the MCP directory API, please join our Discord server