# AdCtrl: full site text > Every public page of https://adctrl.ai as Markdown, generated from the live HTML. Summary and links: https://adctrl.ai/llms.txt --- Source: https://adctrl.ai/ Last updated: 2026-11-05 Google Ads and Meta Ads, run from ChatGPT or Claude # The ad agency inside your AI. AdCtrl connects ChatGPT or Claude to your ad accounts, analytics and tracking, and gives it the playbook a performance agency uses. Ask what’s working, get an answer from your real numbers and approve the fix in the same chat. [Start free for 3 days](https://app.adctrl.ai/app) No card needed [See it in action](https://adctrl.ai/#process-video) Works inside ChatGPT or Claude with Google Ads, Meta Ads, Google Analytics 4, Google Tag Manager and Google Search Console. One question. The whole workflow. ## See the work behind the answer. The prompt, the account investigation, and the change you approve. **01** Your prompt **02** The investigation **03** The proposed change From the first prompt to the result. Example accounts · illustrative data The missing piece ## Your AI is smart. It just can’t see your ads. Ask ChatGPT or Claude about your campaigns today and it asks you for a spreadsheet. Connect AdCtrl and it pulls the numbers straight from your accounts. **ChatGPT on its own** No account connected Pull the last 30 days of Google Ads data for Northfield Coffee. Show me spend, conversions and the daily trends. I can help analyse the account, but **I can’t read Northfield Coffee’s Google Ads data in this chat.** Upload a report with spend, conversions and campaign results, and I can work through it with you. **ChatGPT +** Your account, connected Pull the last 30 days of Google Ads data for Northfield Coffee. Show me spend, conversions and the daily trends. Here are the last 30 days from your connected Google Ads account. Google Ads Northfield Coffee · Example account Why a plugin ## Stop buying ad software. Use the AI you already pay for. AdCtrl plugs into the ChatGPT or Claude you open every day, so frontier AI works directly on your ad accounts. Every time OpenAI or Anthropic release a smarter model, your ad expert gets smarter the same day. Ad software with its own built-in AI stays as smart as the day it shipped. Your AI app **ChatGPT** or **Claude** The app and model you already use. Connected through AdCtrl Adds your accounts, the tools and the agency playbook. Your connected platforms Google Ads Meta Ads Google Analytics 4 Google Tag Manager Google Search Console Builds, reviews and fixes, with your approval. There’s no extra dashboard to log into and nothing new to learn. You keep working where you already work. What you can ask ## Ask it what you’d ask your best marketer. Why did sales slow down? Which clicks are wasting money? Can you build a lead campaign from this image? Your AI checks the real accounts, then does the work. Google Ads Which clicks are worth paying for? Searches, clicks and conversions. ### Stop paying for the wrong clicks. See which searches triggered your ads, what they cost and whether anyone converted. Your AI prepares exclusions for the ones that don’t fit your business. ### Launch a lead campaign from one image. Hand over an ad image and a short brief. Your AI sets up the Meta campaign, lead form, audience and settings, ready for you to approve. Know the problem. Know the next step. Check the ads, traffic and tracking to find what needs attention. ### Straight answers. Then the fix. Your AI reads campaign results, website traffic and tracking, tells you what’s going on in words you’d use yourself and shows the change it recommends. ### Find out why sales dropped. Your AI lines up Google and Meta results with website traffic, search data and tracking in one conversation, so you’re not jumping between five tabs. An enquiry comes in. Does it get counted? Get a quote **Send enquiry** Tag Manager Analytics Check the form. Inspect the tag. Read the report. ### Make sure the numbers are real. When enquiries and reported conversions don’t match, your AI checks Analytics and Tag Manager before anyone touches the ads. Northfield Coffee Your review. Your approval. Preview · not applied Average daily budget ### See every change before it happens. Review the proposed budget or campaign change. Once you approve it, AdCtrl checks that the platform saved exactly what you asked for. Ads and website, together ## The whole funnel, in one conversation. Your AI works across Google Ads, Meta Ads, Google Analytics, Tag Manager and Search Console at once. When the ads look broken, it can check whether the real problem is a missing tag or a page nobody finds, and fix that too. **Claude** Connected with What can AdCtrl do for my business? Build campaigns, manage accounts and check traffic and tracking. ### Google Ads #### Build and manage campaigns. Ads, keywords, assets, bids and budgets. ### Meta Ads #### Create ads and lead forms. Campaigns, ad sets, creative and native forms. ### Google Analytics 4 #### Review traffic & conversions. Landing pages, events and measurement. ### Tag Manager #### Review and improve tracking. Tags, triggers and reviewed tag changes. ### Search Console #### Review search performance. Queries, pages, indexing and sitemaps. ### One job can use several connected accounts. Example jobLaunch a search campaignBuild a lead campaignInvestigate lost sales “Prepare a Google Ads campaign for Northfield Coffee and review its measurement setup.” 1. **Build the campaign** Google Ads 2. **Inspect the tracking** Tag Manager 3. **Review the measurement** Google Analytics #### See how the connected tools work together The agency playbook ## Five years of agency know-how, built into your AI. On its own, your AI gives textbook advice. AdCtrl gives it the playbook my agency uses on real client accounts: how to structure campaigns, cut wasted spend, test creative and set up tracking you can trust. The agency knowledge library Included ### Campaign playbooks - Keyword research & campaign structure - Campaign builds & change checks ### Technical setups - Conversion tracking - Configured vs. proven tracking ### Account reviews - Search terms & wasted spend - Keyword relevance & Quality Score ### Creative tests & learnings - Ad copy & landing-page fit - Testing one change at a time Relevant knowledge for the task, inside your AI chat. **ChatGPT** _or_**Claude** Your assistant uses the procedures alongside your account data. For agencies ### Your agency’s knowledge, too. Add your SOPs, campaign procedures and client notes. Everyone on your team then gets an AI that works the way your agency works. How it works ## A weekly account review in five minutes. Ask what happened this week. Your AI reads the account, explains what matters and prepares the changes. You decide what goes live. Here’s a Google Ads search-term review on an example account. 1. 01 Find the problem 2. 02 Understand the recommendation 3. 03 Review it. Then act. ChatGPT Northfield Coffee We sell coffee beans online. We’re paying for clicks that never become customers. **Find what we should change.** I’ll look at what people searched for, what those clicks cost and which searches led to recorded conversions. AdCtrl Google Ads Northfield Coffee · Example account 01 ### See what your clicks are really buying. Your AI pulls the search terms, spend and conversions straight from the account. ChatGPT Northfield Coffee What would you change first? **Start with the searches that don’t fit the business.** “Coffee shop jobs” brought 38 clicks, cost $76 and had no recorded conversions in this report. The important part **You sell coffee beans. These people are _looking for a job._** I’d prepare an exact-match exclusion for that search. Keep “coffee beans delivered”: it matches what you sell and has recorded conversions. Zero conversions alone isn’t enough to exclude a relevant search. Check its intent and measurement first. **↳** Evidence → business context → a specific next step. Northfield Coffee · Example account 02 ### Know why the change makes sense. See which searches don’t fit what you sell, what they cost and why your AI wants them excluded. ChatGPT Northfield Coffee Prepare that exact-match exclusion. Here’s the proposed change. Review it before it’s applied. AdCtrl Google Ads Yes, apply that exclusion. The change was saved. AdCtrl confirmed Google saved the requested exclusion. Northfield Coffee · Example account 03 ### Approve it. Then see the receipt. See exactly what will change, approve it, and get Google’s confirmation of what it saved. ![Kaan Catalkaya, founder of AdCtrl, working at his laptop](https://adctrl.ai/media/founder-kaan-v1.webp) Why AdCtrl exists ## I built it for my own agency first. I run Google and Meta ads for clients at my own agency. Over the last year I rebuilt it around AI. It works inside the accounts with the same playbooks I use on client work, and it prepares every change for me to approve. > I open a client’s account in my AI, ask what happened last week, make a few calls and move on. That used to take me one to two hours per account. With AdCtrl, it takes about five minutes. AdCtrl is that system, built for other people to use. For an agency, it means more accounts per person. For a business, it means running its own ads with an agency’s playbook behind it. **Kaan Catalkaya** Founder of AdCtrl [Try it on your own account](https://app.adctrl.ai/app) For agencies ## Take on more clients with the same team. Weekly reviews, search-term cleanups, budget shifts and new campaigns across every client account. Your AI does the legwork with your agency’s playbook. Your team makes the calls and owns the client relationship. [Start your agency trial](https://app.adctrl.ai/app) For business owners ## You might not need an agency anymore. Your AI can now see your real ad accounts and website data. Ask what’s working and what to change, get answers you understand and approve the changes yourself, for a fraction of a typical agency retainer. [Start free for 3 days](https://app.adctrl.ai/app) Compare ## Agency-level work without the retainer. How AdCtrl compares with hiring an agency, using a chatbot on its own or doing everything yourself. | What you get | Hire an agency A team does it for you | Generic AI chat Advice, without account tools | Do it yourself You run the tools | Your AI, connected to your accounts | | --- | --- | --- | --- | --- | | What it costs | Typically $500–$2,500 a month | Your AI plan | Your time | From $19 a month, plus your AI plan | | Model you choose | Theirs, if any | Yes | None | Yes | | Direct account access | Yes | No | Yes | Yes | | Ads, analytics and tracking together | Depends on the scope | Bring your own data or integrations | You connect the dots | Five connected platforms, one conversation | | Agency methods applied | Varies by team | Generic | Your own | Step-by-step account checks | | Executes changes | Yes | No | You do | After you approve | | Shows its evidence | Ask for their reports | Based on what you share | You collect it | Reports and saved-change checks | | Gets smarter with new AI models | Depends on their team | Yes | No | Yes, the day they ship | Agency fees vary. The range above is what published small-business PPC pricing guides list for Google and Meta ads management. Pricing ## Every tool in every plan. Pay for the ad accounts you manage. Try every feature free for 3 days, then pick the plan that fits how many ad accounts you run. There are no limits on questions, reports or approved changes. ### Solo For a business running its own ads. **2** ad accounts 1 user · for example, one Google Ads and one Meta account $19 (or $16 billed yearly) / month $190 billed yearly. You save $38. [Start free trial](https://app.adctrl.ai/app) No card needed Most popular ### Pro For freelancers managing client accounts. **10** ad accounts 1 user · across Google Ads and Meta $39 (or $33 billed yearly) / month $390 billed yearly. You save $78. [Start free trial](https://app.adctrl.ai/app) No card needed ### Agency For agencies managing client accounts. **50** ad accounts Shared by your whole team · priority support $99 (or $83 billed yearly) / user / month $990 per user billed yearly. You save $198. [Start free trial](https://app.adctrl.ai/app) No card needed ### Included in every plan - Google Ads, Meta Ads, GA4, Tag Manager and Search Console - Create campaigns and change ads, keywords, bids and budgets - Agency playbooks for account reviews and campaign work - Review every change before it’s applied - No limits on questions, reports or approved changes - Works in ChatGPT and Claude. Cancel anytime. ### More than 50 ad accounts? We’ll set up a custom plan for your agency or team. [Contact us](mailto:hello@adctrl.ai?subject=AdCtrl%20custom%20plan) Prices in USD, excluding VAT where it applies. AdCtrl works inside your own ChatGPT or Claude subscription, which is billed separately. Questions ## Before you connect anything. #### What is AdCtrl? AdCtrl is a connector that adds your Google Ads, Meta Ads, Google Analytics 4, Tag Manager and Search Console accounts to ChatGPT or Claude. Your AI can then read your real numbers, build campaigns and change ads, keywords, bids and budgets. Nothing changes in an account until you approve a preview of the exact change. #### How do I get started? Open AdCtrl, connect the ad accounts you want to use and add AdCtrl to ChatGPT or Claude. Then ask for a review of last week or describe the campaign you want. Most people are asking their first question within a few minutes. #### Do I need ChatGPT or Claude? Yes. AdCtrl runs inside ChatGPT or Claude, so you need a plan with one of them. That subscription is billed separately from AdCtrl. #### Is it safe to let AI work on my ad account? Your AI can’t change anything until you approve a preview that shows the exact change, before and after. Once you approve it, AdCtrl checks what the platform actually saved and tells you. You sign in with Google’s and Meta’s own login, so AdCtrl never sees your passwords. #### I’m not technical. Can I use it? Yes. You connect your accounts with a few clicks and then ask questions the way you’d ask a person. Your AI explains what it finds and what it would change. #### Do I still need an agency? If you run your own business, maybe not. AdCtrl gives your AI access to your accounts and the playbook an agency uses, so you can handle most day-to-day decisions yourself. Agencies use AdCtrl to take on more clients with the same team. #### Why not use Meta’s or Google’s own AI connector? Meta’s connector only covers Meta. Google’s official one can only read data, and you have to host it yourself. AdCtrl covers Google Ads, Meta Ads, Analytics, Tag Manager and Search Console in one place, can make changes, and comes with the agency playbook. #### What happens when new AI models come out? You get them. AdCtrl works inside ChatGPT and Claude, so when OpenAI or Anthropic release a smarter model, you can use it on your ad accounts right away. #### Will it actually change my ads? Yes. Your AI can build campaigns and change ads, keywords, bids and budgets. You approve each change first. What’s available depends on the platform and your account permissions. #### Which platforms can I connect? Google Ads, Meta Ads, Google Analytics 4, Google Tag Manager and Google Search Console. You choose which accounts, properties and containers your AI can work with. #### What happens to my account data? Read the [privacy policy](https://adctrl.ai/privacy/) for how account data is handled and the [disconnect and deletion instructions](https://adctrl.ai/data-deletion/). The reports and account information you ask for are shared with the ChatGPT or Claude conversation you connected. #### Why does AdCtrl ask for access to my Google accounts? AdCtrl requests access to your Google Ads, Google Analytics, Tag Manager and Search Console data only to show you the reports you ask for in ChatGPT or Claude and to make the changes you approve. We don’t sell this data or use it for advertising or to train AI models. Google data is handled under Google’s [API Services User Data Policy](https://developers.google.com/terms/api-services-user-data-policy), including the Limited Use requirements. See the [privacy policy](https://adctrl.ai/privacy/). ## Put your AI to work on your campaigns. Connect your accounts once and you have an ad agency inside ChatGPT or Claude. Free for 3 days. [Start free](https://app.adctrl.ai/app) No card needed [Back to top](https://adctrl.ai/#main) A product by mondaybrew ApS · CVR 45217779 · Vesterbrogade 74, 3. sal, 1620 København V, Denmark Google, Meta, ChatGPT and Claude are trademarks of their respective owners. AdCtrl is an independent product by mondaybrew ApS. --- Source: https://adctrl.ai/docs/ Last updated: 2026-11-04 #### On this page Documentation # Everything you need to run your ads from Claude or ChatGPT. AdCtrl connects your Google Ads, Meta Ads, Google Analytics, Tag Manager and Search Console accounts to the AI you already use. Your AI can then read your real numbers, explain what’s happening and prepare changes that you approve before they go live. **Works in** Claude and ChatGPT **Connects** 5 Google and Meta platforms **Every change** Previewed and approved by you **Hosted in** Helsinki, Finland (EU) [**Set up in 5 minutes** Connect your accounts and ask your first question](https://adctrl.ai/docs/#getting-started) [**How changes work** Previews, approvals and confirmations](https://adctrl.ai/docs/#changes) [**For IT admins** Authentication, scopes, data handling](https://adctrl.ai/docs/#admins) ## How it works AdCtrl is a connector (an MCP server) that sits between your AI assistant and your marketing accounts. You sign in to AdCtrl once, connect Google and Meta, and choose which accounts your AI may use. When you ask a question in Claude or ChatGPT, your assistant calls AdCtrl, AdCtrl talks to Google or Meta on your behalf, and the results come back into your conversation. ### Your AI does the thinking Analysis, explanations and recommendations come from the Claude or ChatGPT model you already use. When those models improve, AdCtrl gets better with them. ### AdCtrl does the access It holds the connections to Google and Meta, enforces which accounts your AI can use and carries out the changes you approve. ### The playbook guides the work AdCtrl gives your AI step-by-step methods from a performance agency, so a request like “review this account” follows a real checklist. ## Getting started You need a Claude or ChatGPT plan and access to at least one Google Ads or Meta ad account. Setup takes a few minutes. 1. ### Create your AdCtrl account Open [app.adctrl.ai](https://app.adctrl.ai/app) and continue with Google or sign in with a one-time code sent to your email. Your account is created the first time you sign in. 2. ### Connect Google and Meta Choose _Connect Google_ or _Connect Meta_ and sign in with the login you use for your ad accounts. Google and Meta show you exactly what you’re sharing before you agree. AdCtrl never sees your password. 3. ### Choose your accounts Turn on the ad accounts, Analytics properties, Tag Manager containers and Search Console sites your AI may use. Anything you leave off stays invisible to your AI. 4. ### Add AdCtrl to your AI **Claude:** open _Settings → Connectors_, search for AdCtrl and select _Connect_. **ChatGPT:** open the apps directory, search for AdCtrl and select _Connect_. Sign in with the same AdCtrl account when asked. Prefer adding it by hand? Use this connector address: `https://app.adctrl.ai/mcp` 5. ### Ask your first question Start a new conversation and try one of these: - “Show me the accounts you can access through AdCtrl.” - “How did my Google Ads perform in the last 7 days compared with the week before?” - “Which search terms cost money last month without a single conversion?” **Tip** Start with a question that only reads data. Once you’re comfortable with the answers, ask for a change and look at the preview. ## Connecting accounts ### Google Google Ads is connected first. Google Analytics, Tag Manager and Search Console each ask for their own permission, so you only share what you use. You can add them any time from the Connections page. ### Meta Meta uses Login for Business. During sign-in, Meta lets you pick which ad accounts, Facebook Pages and Instagram accounts to share. Missing something later? Choose _Add or remove_ on the Meta card in Connections and change it in Facebook. Anything new you add shows up switched off, and your AI can’t use it until you turn it on. ### Meta lead answers Your AI can read the answers people submit in your lead forms only after you approve it under _Lead access_ on the Meta card. You approve the exact Page, form, answer fields and end date, and you can revoke it any time. ### Choosing what your AI can use Connecting an account and letting your AI use it are separate steps. On the Connections page, each account has its own switch, and each ad account can either allow changes or stay read only. | Setting | What your AI can do | | --- | --- | | Off | Nothing. The account is invisible to your AI. | | Read only | Read reports, settings and history, and prepare previews of changes. It can’t apply anything. | | Changes allowed | Everything above, plus applying changes after you approve them in Claude or ChatGPT. | Google Analytics, Tag Manager and Search Console don’t count toward your plan’s ad-account limit. ## Agencies and manager accounts Connect a Google Ads manager account (MCC) and AdCtrl loads your whole client tree, including sub-managers. Search by client name or account ID, select clients one by one or choose an entire branch. - **Include future clients.** Turn this on and clients added to your manager account later appear automatically as read only. Turning it off keeps the clients you already chose. - **Large trees.** Trees with thousands of accounts load in pages and stay searchable. - **Meta businesses.** Share client ad accounts and Pages through Meta Business Manager, then turn them on in AdCtrl. - **Team members.** On the Agency plan, your team works in one AdCtrl account with shared client access. Each person connects AdCtrl to their own Claude or ChatGPT. ## How changes work Your AI never changes an account in one step. Every change goes through four stages, and you see each one in your conversation. 1. **Preview** Your AI reads the current settings and prepares a preview: the account, what changes, before and after, and any effect on spend. 2. **Approve** Claude or ChatGPT asks you before applying it. You can say no, or ask for a different version. 3. **Apply** AdCtrl checks that nothing changed since the preview, then sends exactly what you approved to Google or Meta. 4. **Confirm** AdCtrl reads the account back and tells you what Google or Meta actually saved. ### Four kinds of change Changes are grouped by risk, and each group has its own approval step in your AI. | Kind | Examples | | --- | --- | | Edits | Names, ad text, keywords, negative keywords, targeting, assets, tracking settings, paused campaigns | | Spending | Budgets, bids, bidding strategies and turning ads on | | Customer data | Customer Match lists, audience uploads and offline conversions | | Deletions | Removing, archiving or unlinking ads, keywords, audiences and other items. Some can’t be restored | ### Built-in safety rules - New campaigns, ad sets and ads are created paused. Turning them on is a separate spending change. - A preview expires if the account changes in the meantime. Your AI prepares a fresh one. - If Google or Meta doesn’t confirm whether a change went through, AdCtrl never sends it again automatically. It checks the account and tells you what happened. - Your AI can only act on accounts you turned on, and only where changes are allowed. - A Google Ads daily budget is an average. Google can spend more than it on some days, so it isn’t a hard cap on daily charges. ## Choosing when your AI asks Approval happens inside Claude or ChatGPT, using their own permission settings. AdCtrl can’t see or change those settings, so here’s what we recommend. ### Claude Open _Settings → Connectors → AdCtrl_. Each tool can be set to _Needs approval_, _Always allow_ or _Blocked_. | Reading and previews | Always allow | | --- | --- | | Apply edits | Needs approval | | Apply spending | Needs approval | | Apply customer data | Needs approval | | Apply deletions | Needs approval | Once you trust the routine, you can let edits through and keep spending on _Needs approval_. ### ChatGPT Open AdCtrl in your ChatGPT app settings. ChatGPT uses one setting for the whole app: _Always ask_, _Allow read-only_, _Allow low-risk_ or _Allow all_. | Recommended | Always ask | | --- | --- | ChatGPT can’t treat spending differently from edits, so _Always ask_ is the safe choice. ## What you can do Your AI picks the right tools for each request. You don’t need to know tool names; ask the way you’d ask a colleague. ### Google Ads - Performance reports for any period, campaign, ad group, keyword or search term - Build Search and Performance Max campaigns, ad groups and responsive search ads - Keywords, negative keywords and shared negative lists - Sitelinks, callouts, call assets, images and videos - Budgets, bids, bidding strategies and portfolio bidding - Locations, radius targeting and ad schedules - Audiences, Customer Match lists, conversion actions and goals - Shopping product groups, labels and change history ### Meta Ads - Performance reports by campaign, ad set, ad and placement - Create campaigns, ad sets and ads with creative and targeting - Upload images and videos - Native lead forms - Custom, website, engagement and lookalike audiences - Duplicate campaigns and edit placements - Catalogs, product sets and Advantage+ sales campaigns - Conversions sent through the Conversions API ### Google Analytics 4 - Traffic, landing page and conversion reports - Key events, custom dimensions and custom metrics - Data streams, attribution, Google signals and data retention settings ### Google Tag Manager - Review containers, tags, triggers and variables - Create and edit tags, triggers and variables in a workspace - Publishing stays with you in Tag Manager ### Search Console - Search queries, pages, countries and devices - Indexing and sitemap status ### Across platforms - Compare ad results with website traffic and search data in one answer - Check whether conversions are tracked before changing ads - Account overviews and charts directly in your conversation Some features depend on your account’s eligibility with Google or Meta, for example lead forms need a connected Facebook Page. ## Example questions ### Weekly review - “What happened in my Google and Meta accounts last week, and what should I change?” - “Which campaigns spent the most for the fewest leads this month?” ### Cut wasted spend - “Find search terms that don’t fit my business and prepare negative keywords.” - “Which placements on Meta have high spend and no results?” ### Launch something - “Build a Google Search campaign for our emergency plumbing service in Copenhagen with a 300 DKK daily budget.” - “Create a Meta lead campaign from this image with a short lead form.” ### Fix tracking - “Our form fills don’t match the conversions in Google Ads. Check Analytics and Tag Manager.” - “Is the purchase event set up as a key event in GA4?” ### Agencies - “Go through every client under my manager account and flag anything that needs attention this week.” - “Write a short performance update for Northfield Coffee that I can send the client.” ### Search and website - “Which pages lost the most clicks in Search Console this month?” - “Compare paid and organic traffic to our pricing page.” ## Security and data ### Your logins stay with us AdCtrl connects through Google’s and Meta’s official sign-in. We never see your passwords, and the access tokens we receive are never included in anything sent to your AI. Never paste passwords, access tokens or login codes into a conversation: neither AdCtrl nor your AI needs them. ### Your AI gets only what you ask for Reports and settings you request are returned to your Claude or ChatGPT conversation. Accounts you haven’t turned on are never read. ### Stored in the EU, encrypted The service runs on a server rented from Hetzner in Helsinki, Finland. Stored records are encrypted with AES-256-GCM. ### Personal data is handled separately Lead form answers are filtered on our server and never stored. Customer lists for audiences are held encrypted for at most one hour, sent to the platform you choose and then made unreadable. ### How long data is kept | Data | Kept for | | --- | --- | | AI assistant access | Access tokens 15 minutes, refresh tokens up to 30 days, or until you revoke access | | Staged audience and conversion data | At most 1 hour | | Lead form answers | Not stored | | Google and Meta connections and account choices | Until you disconnect the provider or we delete your workspace | | Previews, change history and confirmations | While your workspace exists, deleted on request | AdCtrl shares data with Google and Meta to carry out your requests and with the AI app you connect. Hetzner hosts the service, Stripe handles payments, Google Workspace sends our email and Vercel hosts this website. Read the full [privacy policy](https://adctrl.ai/privacy/) and the [disconnect and deletion instructions](https://adctrl.ai/data-deletion/). ## For IT admins Everything you need to review AdCtrl before approving it for your organization. | Connector address | `https://app.adctrl.ai/mcp` | | --- | --- | | Type | Remote MCP server over HTTPS | | Authorization | OAuth 2.1 authorization code flow with PKCE (S256) and refresh tokens. Issuer `https://app.adctrl.ai/` | | Client registration | Dynamic client registration at `/register` and client ID metadata documents | | Client authentication | `none` (public clients with PKCE), `client_secret_post`, `private_key_jwt` | | Token binding | Tokens are bound to the exact `/mcp` resource and to one AdCtrl account | | Token lifetime | Access 15 minutes, refresh up to 30 days, rotated on use | | Hosting | Hetzner, Helsinki, Finland. Website on Vercel | | Operator | mondaybrew ApS, CVR 45217779, Copenhagen, Denmark | ### Scopes | Scope | Allows | | --- | --- | | `adctrl:read` | Read reports and settings on selected accounts and prepare previews | | `adctrl:apply` | Apply previews the user approved in their AI app. Requested only when the user agrees to it during sign-in | | `adctrl:execute` | Run changes covered by rules the account owner saved in AdCtrl | | `offline_access` | Stay connected with refresh tokens | ### Controls you can rely on - Every tool call checks the token, the AdCtrl account and that each referenced ad account is selected. An account ID supplied by the AI can’t widen access. - Read tools are annotated as read only. Apply tools are annotated as making changes, so Claude and ChatGPT treat them with their stricter defaults. - Users can disconnect any AI app from _Connected AI apps_ in AdCtrl. That revokes its tokens immediately without touching other connections. - Google and Meta access can be removed in AdCtrl and revoked at Google or Meta at any time. - Every applied change keeps its preview, the confirmation from Google or Meta and an audit record. ## Plans and billing Every plan includes every feature. Plans differ by the number of ad accounts. Your Claude or ChatGPT subscription is billed separately. | Plan | Ad accounts | Monthly | Yearly | | --- | --- | --- | --- | | Solo | 2, 1 user | $19 | $190 ($16 a month) | | Pro | 10, 1 user | $39 | $390 ($33 a month) | | Agency | 50, shared by your team | $99 per user | $990 per user ($83 a month) | Try any plan free for 3 days, no card needed. If the trial ends or a subscription is cancelled or unpaid, AdCtrl's tools stop working and your AI app points you to Billing in AdCtrl; your connections and account choices are kept. While a payment is being retried, a subscription is paused or you have more ad accounts selected than your plan covers, AdCtrl stays read-only. Need more than 50 ad accounts? [Contact us](mailto:hello@adctrl.ai?subject=AdCtrl%20custom%20plan) for a custom plan. Google Analytics, Tag Manager and Search Console don’t count toward the limit. ## Troubleshooting #### My AI says it can’t find a tool or feature Claude and ChatGPT sometimes keep an older tool list after an update. In Claude, open _Settings → Connectors → AdCtrl_ and refresh the tools list, then start a new conversation. In ChatGPT, refresh the app in its settings and start a new conversation. #### An ad account is missing Select _Refresh accounts_ on the Connections page. For Meta, choose _Add or remove_ on the Meta card and share the account with AdCtrl in Facebook. For Google, check that your login has access to the account or to its manager account. #### My AI says the account is read only Changes are switched off for that account. Open Connections in AdCtrl and allow changes on it. #### My AI asks me every time That’s the safe default. You can change it in Claude or ChatGPT; see [Choosing when your AI asks](https://adctrl.ai/docs/#approvals). #### The connection to Google or Meta stopped working Google or Meta access can expire or be removed, for example after a password change. AdCtrl shows this on the Connections page. Reconnect, and your account choices are kept. #### A change didn’t confirm If Google or Meta doesn’t confirm a change, AdCtrl never resends it. Ask your AI to check the change status. It reads the account and tells you whether the change went through. #### My AI says another request is still running Let that request finish, then ask once more. Compare periods one after another rather than all at once. You don’t need to reconnect. #### My AI gets no Meta leads If your Page limits lead access to specific CRMs (_Meta Business Settings → Integrations → Leads access → your Page → CRMs_), add AdCtrl there. Until then Meta sends no leads to AdCtrl. Test leads made with Meta’s Lead Ads Testing Tool may belong to another app and not reach AdCtrl. #### ChatGPT stopped a delete with its own message ChatGPT runs its own safety check on some requests, especially deletions such as removing an audience or an Analytics key event. When it stops one, AdCtrl is never called, so nothing changed in your account and there’s nothing to undo. Rewording the request doesn’t change this check, and AdCtrl can’t switch it off. Make the deletion in Google or Meta directly, or ask in Claude. ## Support Email [hello@adctrl.ai](mailto:hello@adctrl.ai?subject=AdCtrl%20support) and include your AdCtrl sign-in email, the AI app you use and what you asked. You can also tell your AI “send feedback to AdCtrl” and it will pass your message on from the conversation. AdCtrl is an independent product by mondaybrew ApS. Google, Meta, ChatGPT and Claude are trademarks of their respective owners. [Blog](https://adctrl.ai/blog/) · [Terms](https://adctrl.ai/terms/) · [Privacy](https://adctrl.ai/privacy/) --- Source: https://adctrl.ai/privacy/ Last updated: 2026-11-04 Last updated 3 November 2026 # Privacy policy This policy explains what personal data AdCtrl handles, why, who receives it, where it is kept and for how long. It covers the website adctrl.ai and the AdCtrl service at app.adctrl.ai. AdCtrl connects the Google Ads, Meta Ads, Google Analytics 4, Google Tag Manager and Google Search Console accounts you select to the AI app you choose, such as Claude or ChatGPT. ## Who we are AdCtrl is operated by mondaybrew ApS, CVR 45217779, Vesterbrogade 74, 3. sal, 1620 København V, Denmark. Contact [hello@adctrl.ai](mailto:hello@adctrl.ai) with any privacy question or request. - **We are the controller** for your account, sign-in, billing, support, security and website data, and for the record of changes we keep to protect the service. - **We are your processor** for personal data inside the accounts you connect and for personal data you send through AdCtrl, such as customer lists, conversion uploads, audience members, lead answers and Page posts. We process it only on your instructions. The [data processing agreement](https://adctrl.ai/terms/#dpa) in our terms covers this. ## How AdCtrl works You sign in to app.adctrl.ai, connect Google and/or Meta, and choose which accounts your AI app may use. You then add AdCtrl to your AI app and approve its access. When you ask your AI app something, it calls AdCtrl's tools. AdCtrl reads only from the accounts you selected and returns the result to your AI app. For changes, AdCtrl first saves a preview with the exact account, items and values before and after. The change is sent to Google or Meta only after it is approved, and AdCtrl then reads the result back. AdCtrl only acts when your AI app calls it. It doesn't read or change your accounts in the background, and it doesn't call any AI model itself. ## What we collect and why - **Account details.** Your name, email address and, if you sign in with Google, your Google account identifier. If you sign in by email, we send you a one-time code. On the Agency plan, we store your team members' email addresses. We use this to create and secure your workspace and to send service emails, such as sign-in codes and notices when an AI app is connected or a provider connection is about to expire. - **Billing details.** When you subscribe, Stripe collects your payment card, billing name and address, and VAT number if you give one. We give Stripe your email and workspace reference, and we store your Stripe customer and subscription references, plan, status and billing period. We never see or store your full card number. - **Trial records.** To give each customer one free trial, we keep the workspace reference, a one-way hash of the sign-in email and the IDs of the ad accounts that used a trial. - **Provider connections.** When you connect Google or Meta, we receive an access token and the details needed to check it: for Google, your account email and the permissions you granted; for Meta, the business that authorized AdCtrl, a system-user identifier, the permissions granted and when they expire. We use these only to make the requests you ask for. - **AI app connections.** Which AI app you approved, for which workspace, and its short-lived access tokens. - **Data from your connected accounts.** AdCtrl reads and changes only what your AI app asks for, in the accounts you selected. This can include account settings, campaigns, ad groups and ad sets, ads and creatives, budgets and bids, targeting and audiences, performance reports, images and videos, Facebook Page and Instagram details used for ads and posts, lead forms, product catalogs, conversion settings, keyword data, Google Analytics 4 reports and property settings, Search Console queries, pages and sitemaps, and Tag Manager tags, triggers, variables and versions. Most of this passes through: it is returned to your AI app and not stored, except in short caches (see below). - **Previews and change history.** For each change, we store the preview, the values before the change, the confirmation from Google or Meta and the readback. These records can contain names, ad and post text, targeting and account IDs. We keep them so you can check what was changed and so AdCtrl never sends the same change twice. - **Customer data you send to Google or Meta.** See the next section. - **Feedback and support.** If you send feedback through your AI app, we store only the message you wrote. If you email us, we keep the correspondence as long as needed to help you. - **Security and technical data.** Our servers process standard request data such as IP address and browser type to deliver the service and protect it from misuse. Error alerts contain only an error code and the software version, never account data or conversation content. We don't sell personal data, use data from your connected accounts for our own advertising, or use it to train AI models. ## Customer data you send to Google or Meta Some features handle personal data about your own customers. AdCtrl processes it only to send it to the Google or Meta account you chose, after you approve the exact upload. - **Customer Match and Meta audience members** (adding or removing people from an audience) and **conversion uploads** (Google offline conversion imports and adjustments, Meta Conversions API events). AdCtrl accepts email addresses, phone numbers and external customer IDs only as SHA-256 hashes and rejects them in plain text. Click IDs, Meta lead IDs, order IDs and event details are sent as given. The upload is held encrypted with its own key, which exists only in the running service's memory and is never written to the database or to backups. The key is destroyed as soon as the upload has been sent, cancelled or has expired, and always within 1 hour. After that the upload can't be read again, even from a backup. - **What we keep after an upload.** A short record so you can see what was sent and so nothing is sent twice: the number of entries, the identifier and event types, a fingerprint of the batch and the provider's response. For Google conversion imports, this record also holds the hashed identifiers and a fingerprint of each order ID. - **Lead answers** from Meta lead forms are read only for the form, fields and time period you approve (at most 24 hours). They are filtered on our server, returned to your AI app and not stored. The approval itself (Page, form, field names and expiry) is kept until it expires. - **Images and videos** you upload for ads are held for at most 1 hour, sent to Google or Meta and then discarded. We keep the file's name, size and fingerprint in the change record. - **Facebook Page posts** you publish or delete through AdCtrl are sent to Meta. The post text and Meta's post ID stay in the change history. You decide whether to use these features and are responsible for having a lawful basis and giving your customers the required notices. Google and Meta process the data under your own agreements with them, including Google's Customer Match policy and Meta's Custom Audience and Business Tools terms. ## Legal basis - **Contract:** to provide AdCtrl, run your workspace, process payments and carry out your requests. - **Legal obligation:** to keep accounting records as Danish bookkeeping law requires. - **Legitimate interests:** to keep the service secure, prevent abuse of free trials, keep a reliable record of changes, prevent duplicate uploads, answer support requests and improve AdCtrl from feedback. For data we process as your processor, you as controller determine the legal basis. ## Google user data AdCtrl's use and transfer to any other app of information received from Google APIs will adhere to the [Google API Services User Data Policy](https://developers.google.com/terms/api-services-user-data-policy), including the Limited Use requirements. AdCtrl requests access to Google Ads, Google Analytics, Tag Manager and Search Console only so that your AI app can read and change the accounts you select at your request. In practice: - We use Google user data only to provide and improve the user-facing features you use in AdCtrl. - We transfer it only to provide those features: to your chosen AI app when you ask for it, and to the service providers listed below. We also transfer it where the law requires, for security, or as part of a merger or acquisition with your notice. - We don't use it for advertising, including retargeting, personalized or interest-based ads. - We don't sell it, and we don't use it to develop, improve or train generalized AI or machine-learning models. - Our staff don't read it unless you give us permission (for example in a support request), it is needed for security or to investigate abuse, the law requires it, or it is aggregated and anonymized for internal operations. ## Meta platform data We process data from Meta's platform only to provide the features you request in AdCtrl and in line with [Meta's Platform Terms](https://developers.facebook.com/terms/) and Developer Policies. We don't sell or license it, give it to data brokers, use it for our own advertising, use it to make decisions about anyone's eligibility for credit, housing, employment or insurance, or use it to train AI models. We keep it only as long as described below, and we delete it when you ask, when Meta asks, or when we no longer need it to provide AdCtrl. To remove AdCtrl's access to Meta and ask for deletion, see [disconnect and deletion](https://adctrl.ai/data-deletion/). ## Your AI app Tool results, including advertising, analytics, search and tracking data, previews, change results and any approved lead fields, are returned to the AI app you connected, such as Anthropic's Claude or OpenAI's ChatGPT. That AI app receives the data because you asked for it, under your own account and agreement with Anthropic or OpenAI, and keeps it in your conversations according to its own terms and settings. Anthropic and OpenAI are not our sub-processors. Access tokens for Google and Meta are never included in tool results. We can't delete data held by your AI app; use its own controls for that. ## Who processes data for us - **Hetzner Online GmbH** (Germany) hosts the AdCtrl service and its database on a server in Helsinki, Finland. - **Stripe** processes payments, subscriptions and invoices. Stripe also processes some payment data for its own purposes, such as fraud prevention and legal compliance, under its own [privacy policy](https://stripe.com/privacy). - **Google Workspace** sends our email, including sign-in codes, service notices and internal error alerts. - **Vercel** hosts the public website adctrl.ai. It processes no AdCtrl account data. Google and Meta receive data because you instruct AdCtrl to read or change your own accounts there. They act under your agreements with them, not as our sub-processors. We disclose data to authorities only where the law requires it. Some of these providers may process data outside the EU and EEA. Where they do, the transfer is protected by the EU–US Data Privacy Framework or the European Commission's standard contractual clauses. ## How long we keep data - **Minutes:** sign-in codes (10 minutes), AI app access tokens (15 minutes), report caches (10 minutes) and account and keyword caches (1 hour). - **At most 1 hour:** uploaded customer lists, conversion events, images and videos. After that they can't be read by anyone, including us. - **Never stored:** lead answers. - **Up to 30 days:** AI app refresh tokens, and feedback you send through your AI app. - **Up to 90 days:** records of Meta conversion uploads and Google conversion imports, so the same events aren't sent twice. Records of uploads that were never sent are deleted after 7 days. - **While your workspace exists:** your account, team, connections, account selections, previews and change history, including records of sent audience changes and Google conversion adjustments. Disconnecting a provider deletes its connection. Cancelling your plan deletes nothing, so you can come back; ask us and we delete it all (see [disconnect and deletion](https://adctrl.ai/data-deletion/)). - **After deletion:** invoices for 5 years, as Danish bookkeeping law requires, and a trial record (hashed email, workspace reference and ad account IDs) so the free trial can be used only once. We may also keep the record of a change whose outcome Google or Meta never confirmed until it has been checked, so it can't be sent twice. We make encrypted copies of the service database on the same server in Finland, for example before an update. We delete these copies after 30 days, so deleted records are gone from them within 30 days. Uploaded customer lists and conversion events can't be read from these copies, because their keys are never stored. Deleting AdCtrl data doesn't delete campaigns, ads, posts, forms, leads, audiences, catalogs, conversions or anything else held by Google or Meta, or conversations held by your AI app. ## Security All traffic to AdCtrl uses HTTPS. Provider tokens and all stored records are encrypted with AES-256-GCM, using a key kept in the server configuration rather than in the database. Uploaded customer data uses separate per-upload keys that exist only in memory, as described above. AI apps connect through OAuth with short-lived tokens bound to your workspace, and every request is checked against the accounts you selected, so an AI app can't reach an account you haven't turned on. No system is completely secure. If a breach affects your personal data, we will tell you and the authorities as the law requires. ## Cookies The public website adctrl.ai sets no cookies and uses no analytics, tracking or advertising tools. The AdCtrl service at app.adctrl.ai uses two strictly necessary cookies: a session cookie that keeps you signed in and protects forms (up to 8 hours, deleted when you sign out) and a connection cookie used only while you connect Google or Meta (10 minutes). Both are secure and HTTP-only. Because they are strictly necessary, we don't ask for cookie consent. ## Your rights Under the GDPR you can ask for access to your personal data, a copy of it in a portable format, correction, deletion or restriction of its use, and you can object to processing based on our legitimate interests. Email [hello@adctrl.ai](mailto:hello@adctrl.ai). We may need to confirm that the request comes from you, and we answer within one month. Never send passwords, tokens or customer lists by email. If you are one of our customers' customers, for example someone in a customer list or a lead, the business that uploaded your data is the controller. Contact them first; we will help them answer you. You can complain to the Danish Data Protection Agency, [Datatilsynet](https://www.datatilsynet.dk/), or the data protection authority where you live. ## Children AdCtrl is for businesses and adults. It is not meant for anyone under 18, and we don't knowingly collect their data. ## Changes We will update this page and its date when our data handling changes, and tell customers by email or in AdCtrl about material changes. AdCtrl is operated by mondaybrew ApS, CVR 45217779, Vesterbrogade 74, 3. sal, 1620 København V, Denmark. [Home](https://adctrl.ai/) · [Documentation](https://adctrl.ai/docs/) · [Blog](https://adctrl.ai/blog/) · [Terms](https://adctrl.ai/terms/) · [Privacy](https://adctrl.ai/privacy/) · [Disconnect & deletion](https://adctrl.ai/data-deletion/) · [Contact](mailto:hello@adctrl.ai) --- Source: https://adctrl.ai/terms/ Last updated: 2026-11-04 Last updated 3 November 2026 # Terms of service These terms apply to AdCtrl: the website at adctrl.ai and the service at app.adctrl.ai. AdCtrl is operated by mondaybrew ApS, CVR 45217779, Vesterbrogade 74, 3. sal, 1620 København V, Denmark ("mondaybrew", "we" or "us"). By creating a workspace, starting a trial or using AdCtrl, you accept these terms for yourself and, if you use AdCtrl for a business, for that business. You confirm that you are at least 18 and allowed to accept them on its behalf. ## What AdCtrl does AdCtrl connects the Google Ads, Meta Ads, Google Analytics 4, Google Tag Manager and Google Search Console accounts you select to the AI app you choose, such as Claude or ChatGPT, through a hosted connector. Your AI app can then read data from those accounts and prepare changes, such as campaign edits, audience and conversion uploads, and Facebook Page posts. Every change starts as a preview that shows the account, the affected items and the values before and after. A change is sent to Google or Meta only after it has been approved, either by you in your AI app or under a rule you saved in AdCtrl. AdCtrl then reads the result back from the provider and reports it. Your AI app's own permission settings decide whether it asks you before each approval. A preview by itself never changes your account. The features available to you depend on your plan, the permissions you grant Google and Meta, the accounts you select and your settings in AdCtrl. We may improve, change or remove features over time. ## Plans, trial and billing - **Plans.** Solo costs $19 a month or $190 a year and covers 2 ad accounts and 1 user. Pro costs $39 a month or $390 a year and covers 10 ad accounts and 1 user. Agency costs $99 a month or $990 a year per user and covers 50 ad accounts shared by your team. Google Analytics, Tag Manager and Search Console don't count toward the ad account limit. Larger custom plans are agreed in writing. - **Prices and tax.** Prices are in US dollars and exclude VAT. VAT or similar taxes are added where they apply, based on the billing details you give us. - **Free trial.** A new workspace gets a 3-day free trial. You don't need a card to start it. Each customer gets one trial: we keep a record of the workspace, sign-in email and ad accounts that have used a trial, and a new workspace, login or the same ad accounts won't get a second one. If you subscribe during the trial, any trial time we can carry over continues until your first payment. - **When the trial ends.** If you haven't subscribed when the trial ends, your access to AdCtrl stops: your AI app can no longer use AdCtrl's tools and is pointed to Billing in AdCtrl instead. Your connections and account choices are kept, so everything works again as soon as you subscribe. Nothing is charged automatically, because we never had your card. - **Payment.** Subscriptions are paid in advance for each month or year and renew automatically until cancelled. Payments are processed by Stripe. We don't see or store your full card details. - **Failed payments.** If a payment fails, your workspace becomes read-only while Stripe retries it: your AI app can still read data, but AdCtrl makes no changes. The same applies while a subscription is paused, or if you have selected more ad accounts than your plan covers. If the payment still can't be collected and the subscription ends unpaid, access stops as described for the end of the trial. - **Changing plans and seats.** You can change plan, billing period or the number of Agency seats in the billing portal. If you reduce Agency seats, the most recently added team members lose access first. - **Price changes.** We will tell you at least 30 days before a price change applies to your subscription. It takes effect from your next renewal, and you can cancel before then. ## Cancellation and refunds You can cancel at any time in the Stripe customer portal, which you reach from Billing in AdCtrl. Cancellation takes effect at the end of the period you have paid for. You keep full access until then, and you won't be charged again. After that, your access to AdCtrl stops, but your connections and account choices are kept in case you subscribe again. Cancelling doesn't delete your data; see [disconnect and deletion](https://adctrl.ai/data-deletion/) if you want us to delete it. Except as described below or required by law, payments are not refundable, including for unused time in a monthly or yearly period. **Right of withdrawal for EU and EEA consumers.** If you are a consumer, you can withdraw from a paid subscription within 14 days of the day you took it out, without giving a reason. Tell us by email at [hello@adctrl.ai](mailto:hello@adctrl.ai?subject=AdCtrl%20withdrawal); any clear statement is enough. Because you asked us to start the service straight away, we refund what you paid minus a proportionate amount for the days you had the paid service before you withdrew. We refund within 14 days of receiving your withdrawal, using the payment method you used. The free trial is not a paid contract, so there is nothing to withdraw from during it. Businesses have no right of withdrawal. ## Your responsibilities - You must be authorized to manage every account, property, container, Page, catalog and dataset you connect, and to let your chosen AI app receive its data. - You are responsible for your advertising accounts, your ad spend and every change you approve, whether you approve it yourself, let your AI app approve it under its permission settings, or cover it with a rule you saved in AdCtrl. Check previews before approving them, especially budgets, bids, targeting and anything that starts or stops ads. - You are responsible for the instructions you give your AI app and for checking its answers. AI apps can misunderstand a request, make mistakes or suggest changes that don't suit your business. - You are responsible for your ads, websites and landing pages, and for any personal data you upload or ask AdCtrl to process, such as customer lists, conversions or lead answers. You must have a lawful basis, give the required notices and get any consents needed. - You must follow the terms and policies of Google, Meta and your AI app. Before using Customer Match, Meta Custom Audiences or conversion uploads, you must accept and follow the provider's own terms for them, such as Google's Customer Match policy and Meta's Custom Audience and Business Tools terms. Hash customer identifiers with SHA-256 before you send them; AdCtrl rejects them in plain text. - Keep your sign-in, workspace access key and AI app account secure. If you add team members, you are responsible for what they do in your workspace. Tell us promptly if you think someone has accessed your workspace without permission. ## Acceptable use Don't use AdCtrl to: - break the law or the terms and policies of Google, Meta or your AI app; - access accounts or data you are not allowed to manage; - process personal data without a lawful basis, or upload data about children or special categories of personal data; - run spam, scams, or misleading or harmful ads; - probe, attack, overload or reverse engineer the service, or work around its safety checks, account limits or rate limits; - resell or share access to AdCtrl outside your own business, or get more than one free trial. We may suspend or end access that breaks these terms or puts other customers, Google, Meta or the service at risk, or where Google or Meta requires it. Where reasonable, we will tell you first and give you a chance to fix the problem. ## Third-party services Google, Meta, Stripe and your AI app are independent services with their own terms. We don't control them and are not responsible for their decisions, outages, ad review outcomes, account restrictions, policy changes or changes to their APIs. If a provider removes or limits access, some AdCtrl features may stop working. ## No guarantees We work to keep AdCtrl reliable and its checks accurate, but the service is provided "as is" and "as available". We don't promise any advertising results or performance, uninterrupted availability, or that every operation will succeed. If AdCtrl can't confirm whether a change went through, it reports the outcome as uncertain and doesn't send it again. Check the account before asking for the change again. ## Liability To the extent the law allows: - We are not liable for your ad spend or advertising results, lost revenue, profit, business or data, or any indirect or consequential loss. - We are not liable for losses caused by changes you approved or allowed, including through your AI app's permission settings or rules you saved, or by Google, Meta, Stripe or your AI app. - Our total liability for all claims relating to AdCtrl is limited to the fees you paid us for AdCtrl in the 12 months before the event that caused the claim, or DKK 1,000 if you paid nothing in that period. The cap also covers claims under the data processing agreement, to the extent the law allows. Nothing in these terms limits liability for fraud, gross negligence or wilful misconduct, or any liability or consumer right that cannot be limited by law. If you use AdCtrl for a business, you will compensate us for third-party claims arising from your ads, the data you upload, or your breach of these terms or of Google's or Meta's policies. ## Ending use You can stop at any time: cancel your subscription, disconnect your AI app, Google and Meta, and ask us to delete your data. The steps are on the [disconnect and deletion](https://adctrl.ai/data-deletion/) page. We may end the service for you with 30 days' notice, or immediately for serious or repeated breaches of these terms. If we end a paid subscription for reasons other than your breach, we refund the unused part of the period you paid for. ## Privacy The [privacy policy](https://adctrl.ai/privacy/) explains what data we collect, why, and how long we keep it. ## Data processing agreement This section is the data processing agreement under Article 28 GDPR between you (the controller) and mondaybrew ApS (the processor). It applies whenever AdCtrl processes personal data on your behalf: customer lists, conversion uploads, audience members, lead answers, Page posts and any personal data inside the advertising, analytics, tag and search accounts you connect. It forms part of these terms and needs no signature. If you need a signed copy, email [hello@adctrl.ai](mailto:hello@adctrl.ai). - **Instructions.** We process this data only to carry out what you or your AI app ask AdCtrl to do, as described in these terms and the [privacy policy](https://adctrl.ai/privacy/). We tell you if we think an instruction breaks data protection law. We don't use the data for our own purposes. - **Data and people concerned.** Contact and identity data (such as email addresses, phone numbers, names, postcodes, device or click IDs, usually hashed), conversion events and values, lead form answers, and the content of ads and Page posts. The people concerned are your customers, leads, website visitors and anyone who appears in your ads or posts. - **Duration.** For as long as you use AdCtrl, with the retention periods in the privacy policy. When the agreement ends, we delete the data, and our database copies within 30 days after that, as described on the [disconnect and deletion](https://adctrl.ai/data-deletion/) page, unless the law requires us to keep it. - **Confidentiality.** Only people at mondaybrew who need access to run or support the service have it, and they are bound to confidentiality. - **Security.** We apply the measures in the privacy policy's Security section (Article 32 GDPR), including encryption in transit and at rest, short-lived encrypted staging for personal data, workspace and account isolation, and approval before any change is sent. - **Sub-processors.** You give general authorization for the sub-processors listed in the privacy policy. We tell you by email at least 30 days before adding or replacing one, and you can object; if we can't resolve the objection, you can cancel and we refund the unused part of your paid period. We impose the same data protection obligations on them. Google and Meta receive data because you instructed us to send it to your own accounts there; they act under your own agreements with them, not as our sub-processors. The same applies to your AI app. - **Transfers.** AdCtrl stores data in the EU (Finland). Where a sub-processor processes data outside the EU and EEA, the transfer is covered by an adequacy decision, such as the EU–US Data Privacy Framework, or the European Commission's standard contractual clauses. - **Assistance.** We help you answer requests from data subjects and meet your obligations on security, breach notification, impact assessments and prior consultation, to the extent the information is available to us. - **Breaches.** We notify you without undue delay, and no later than 48 hours, after becoming aware of a personal data breach affecting your data, with the information you need to meet your own obligations. - **Audits.** We make available the information needed to show compliance with this section. You may audit us, or have an independent auditor do so, once a year with 30 days' notice, at your own cost and without access to other customers' data. ## Changes to these terms We may update these terms. We will change the date above and, for material changes, tell you by email or in AdCtrl at least 30 days before they apply. If you don't agree, you can cancel before the change takes effect and we refund the unused part of your paid period. ## Law and disputes These terms are governed by Danish law. Disputes go to the courts of Copenhagen, Denmark. If you are a consumer, you keep the protection of the mandatory laws of the country where you live and can also bring a claim there. EU consumers can also complain to the Danish Consumer Complaints Board (Forbrugerklagenævnet) through [Nævnenes Hus](https://kpo.naevneneshus.dk/). ## Contact mondaybrew ApS, CVR 45217779, Vesterbrogade 74, 3. sal, 1620 København V, Denmark. Email [hello@adctrl.ai](mailto:hello@adctrl.ai). Never send passwords, access tokens or customer lists by email. AdCtrl is operated by mondaybrew ApS, CVR 45217779, Vesterbrogade 74, 3. sal, 1620 København V, Denmark. [Home](https://adctrl.ai/) · [Documentation](https://adctrl.ai/docs/) · [Blog](https://adctrl.ai/blog/) · [Terms](https://adctrl.ai/terms/) · [Privacy](https://adctrl.ai/privacy/) · [Disconnect & deletion](https://adctrl.ai/data-deletion/) · [Contact](mailto:hello@adctrl.ai) --- Source: https://adctrl.ai/data-deletion/ Last updated: 2026-11-04 Last updated 3 November 2026 # Disconnect and data deletion You can stop AdCtrl's access at any time and ask us to delete the data we hold about you. Stopping access and deleting stored data are separate steps. Do the steps below that apply to you. ## 1. Stop your AI app's access In app.adctrl.ai, open **Connected AI apps** and disconnect the AI app. This revokes its access straight away. You can also remove the AdCtrl connector in Claude, ChatGPT or your other AI app. Conversations already held by your AI app stay there; use its own controls to delete them. ## 2. Disconnect Google In app.adctrl.ai, open **Connections** and disconnect Google. AdCtrl deletes the stored Google connection and asks Google to revoke its access. To check or remove access yourself, open your [Google Account connections](https://myaccount.google.com/connections), select AdCtrl and remove its access. ## 3. Disconnect Meta In app.adctrl.ai, open **Connections** and disconnect Meta. This deletes the Meta access token AdCtrl stored, so AdCtrl can no longer reach your Meta accounts. It does not remove the authorization on Meta's side. To remove that too, open the Meta business portfolio that authorized AdCtrl, go to **Business settings → Integrations → Connected apps**, select AdCtrl and remove it. ## 4. Cancel your plan If you have a paid plan, cancel it under **Billing** in app.adctrl.ai, which opens the Stripe customer portal. Cancelling stops future payments and, at the end of the paid period, your access to AdCtrl. It doesn't delete your data: your connections and account choices are kept until you disconnect them or ask us to delete them. ## 5. Ask us to delete your data Email [hello@adctrl.ai](mailto:hello@adctrl.ai?subject=AdCtrl%20data%20deletion) with the subject "AdCtrl data deletion". Send it from your AdCtrl sign-in email, or tell us that email or the connected Google or Meta business so we can find your workspace. Don't send passwords, access tokens, lead details or customer lists. After confirming that the request comes from the workspace owner, we delete your workspace, team members, stored connections, AI app approvals, account selections, previews, change history, upload records and feedback, and email you to confirm. We do this within one month. If you removed AdCtrl in your Facebook or Meta business settings, you can still use this email to have Meta data deleted. A few things are kept after deletion: - Invoices and accounting records, for 5 years as Danish bookkeeping law requires. - A trial record with a hashed email, the workspace reference and ad account IDs, so the free trial can't be used again. - The record of a change whose outcome Google or Meta never confirmed, until it has been checked, so it can never be sent twice. We tell you if this applies. - Deleted data in an encrypted copy of the database, for up to 30 days until that copy is deleted. Uploaded customer lists and conversion events can never be read from these copies. - Records of used or revoked AI app tokens, for up to 31 days. Billing data held by Stripe follows [Stripe's privacy policy](https://stripe.com/privacy). ## What deletion does not cover Deleting AdCtrl data doesn't remove campaigns, ads, creatives, uploaded media, Page posts, audiences and their members, conversions, lead forms, leads, catalogs or products held by Google or Meta. Pause or remove those in Google Ads, Meta Ads Manager, Commerce Manager or on your Facebook Page. Data your AI app received stays in your conversations there. Leads may also have been sent to a CRM or other tools you use; delete them there. See the [privacy policy](https://adctrl.ai/privacy/) for what we store and how long we keep it. AdCtrl is operated by mondaybrew ApS, CVR 45217779, Vesterbrogade 74, 3. sal, 1620 København V, Denmark. [Home](https://adctrl.ai/) · [Documentation](https://adctrl.ai/docs/) · [Blog](https://adctrl.ai/blog/) · [Terms](https://adctrl.ai/terms/) · [Privacy](https://adctrl.ai/privacy/) · [Disconnect & deletion](https://adctrl.ai/data-deletion/) · [Contact](mailto:hello@adctrl.ai) --- Source: https://adctrl.ai/blog/ Last updated: 2026-11-05 The AdCtrl blog # Field notes on running ads with AI. Guides and checklists for running Google Ads, Meta Ads, GA4 and tracking from Claude or ChatGPT. Written from agency practice and backed by sources. [Follow new articles with the Atom feed](https://adctrl.ai/blog/feed.xml) ![Cover art for GA4 conversions don't match Google Ads: normal or broken?](https://adctrl.ai/media/blog/conversion-discrepancy/hero-card-v1.webp) Latest Analytics and tracking ## [GA4 conversions don't match Google Ads: normal or broken?](https://adctrl.ai/blog/conversion-discrepancy/) Google Ads, GA4 and Meta count conversions on different dates and rules. Line up the right columns, then tell a normal gap from broken tracking. 5 Nov 202618 min read ## Google Ads 2 articles -![Cover art for Google Ads MCP: official server vs hosted connectors (2026)](https://adctrl.ai/media/blog/google-ads-mcp/hero-card-v1.webp) Google AdsGuide ### [Google Ads MCP: official server vs hosted connectors (2026)](https://adctrl.ai/blog/google-ads-mcp/) What Google's official Google Ads MCP server can and can't do, how to add it to Claude or ChatGPT, and when a hosted connector is simpler. 4 Nov 202615 min read -![Cover art for Google Ads audit checklist 2026: 40 checks, real API fields](https://adctrl.ai/media/blog/google-ads-audit-checklist/hero-card-v2.webp) Google Ads ### [Google Ads audit checklist 2026: 40 checks, real API fields](https://adctrl.ai/blog/google-ads-audit-checklist/) 40 Google Ads audit checks for 2026 (AI Max, Performance Max, Demand Gen), each with its report, the API field if any, and whether AI can judge it. 5 Nov 202627 min read ## Meta Ads 1 article -![Cover art for Meta Ads MCP: what it can change and how to lock it down](https://adctrl.ai/media/blog/meta-ads-mcp/hero-card-v1.webp) Meta AdsGuide ### [Meta Ads MCP: what it can change and how to lock it down](https://adctrl.ai/blog/meta-ads-mcp/) What Meta's official Ads MCP server can read and change, why some accounts aren't enabled, and how to block budget and campaign changes. 4 Nov 202617 min read ## Put your AI to work on your campaigns. AdCtrl connects Claude or ChatGPT to Google Ads, Meta Ads, GA4, Tag Manager and Search Console. Ask in plain words and approve every change. [Start free](https://app.adctrl.ai/app) 3-day free trial · no card needed A product by mondaybrew ApS · CVR 45217779 · Vesterbrogade 74, 3. sal, 1620 København V, Denmark Google, Meta, ChatGPT and Claude are trademarks of their respective owners. AdCtrl is an independent product by mondaybrew ApS. --- Source: https://adctrl.ai/blog/conversion-discrepancy/ Last updated: 2026-11-05 Conversion Discrepancy # GA4 conversions don't match Google Ads (or Meta): how to tell a normal gap from broken tracking Which side is higher and why, the exact columns, settings and API fields to line up, and a decision tree for the gap that's left. ![Kaan Catalkaya](https://adctrl.ai/media/founder-kaan-v1.webp) By [Kaan Catalkaya](https://adctrl.ai/blog/conversion-discrepancy/#author), Founder of AdCtrl Published 5 November 2026 · 18 min read ![Cover: GA4 vs Google Ads vs Meta, why conversions never match, over cropped screenshots of Google Ads Help, GA4 Help and Meta's Marketing API changelog with the quoted passages highlighted](https://adctrl.ai/media/blog/conversion-discrepancy/hero-v1.webp) ## Short answer - Google says discrepancies with Google Analytics, 'often up to 20%', are expected. That is not a ceiling, and it says nothing about Meta. - Compare GA4 with Google Ads' All conv. (by conv. time) column: the standard Conversions column counts on the click date and only includes primary actions. - GA4 key events and Google Ads conversions are different things: Google Ads conversions don't appear in GA4's Reports or Explore sections, they show in the Advertising section, and conversions created in GA4 start as secondary. - My rule of thumb: a gap that survives the line-up and stays steady is normal. One sale counted twice, by two primary actions or two tags, is broken, so check those first. - Two primary actions for the same sale, such as a GA4 import plus a Google Ads tag, put it in the Conversions column twice. Rule that out before you blame attribution. GA4 conversions don't match Google Ads because each tool counts something different: Google Ads' Conversions column counts primary actions on the ad-click date, GA4 counts key events on the day they happen, under its own attribution model. Google calls gaps **"often up to 20%"** expected[1](https://adctrl.ai/blog/conversion-discrepancy/#ref-1), [2](https://adctrl.ai/blog/conversion-discrepancy/#ref-2). My rule of thumb: a gap that stays steady after you line the numbers up is normal, and one sale counted twice is broken. I build AdCtrl, a connector that puts Google Ads, Meta Ads, GA4 and Tag Manager into one Claude or ChatGPT conversation, so each step below also has a read-only AdCtrl route. Server-side fixes live in Google Ads offline conversions and Meta Conversions API. Checked 4 November 2026 against Google's and Meta's own docs[3](https://adctrl.ai/blog/conversion-discrepancy/#ref-3), [4](https://adctrl.ai/blog/conversion-discrepancy/#ref-4). ## Why don't GA4 conversions match Google Ads? GA4 and Google Ads disagree mostly because they **put the same sale on different days** and count different sets of actions. Google's own example: a click on 19 July and a purchase on 20 July shows up on 19 July in Google Ads and on 20 July in Google Analytics[2](https://adctrl.ai/blog/conversion-discrepancy/#ref-2). ![Illustration of one example sale clicked on 30 October and bought on 2 November: Google Ads Conversions puts it on 30 October, Google Ads All conv. (by conv. time) and GA4 put it on 2 November](https://adctrl.ai/media/blog/conversion-discrepancy/clocks-v1.webp) Illustration with example dates: one sale, clicked on 30 October and bought on 2 November, lands on the click date in Google Ads' Conversions column and on the purchase date in All conv. (by conv. time) and in GA4. The date is only the first reason. Google's help pages name five more: - Primary vs all actions: the Conversions column holds primary actions only, while "All conv." adds secondary actions and view-through conversions. - Attribution model: Google says GA4 defaults to data-driven attribution, "while Google Ads uses ad-centric models". - Counting: an action set to "One" reports one conversion for two events after a click; "Every" may report two. - Invalid clicks: some GA4 events are filtered out on import into Google Ads. - Lag: imported GA4 conversions arrive up to 24 hours later, and reports can lag 24 to 48 hours. GA4 also uses two words for what Google Ads calls one. A **key event** is any action you mark as important in GA4. A "conversion" is a key event shared with Google Ads to measure campaigns and bid. Google Ads conversions "don't appear in standard Google Analytics reports in the Reports or Explore sections"; they show in the Advertising section's Conversion performance report[3](https://adctrl.ai/blog/conversion-discrepancy/#ref-3). ## How big a gap between GA4 and Google Ads is normal? Google's help page gives one range: "Discrepancies, often up to 20%, are expected due to different attribution models". The sentence is about comparing Google Ads with "third-party analytics like Google Analytics or Shopify", and the same page adds that "reporting lags can take up to 24-48 hours"[1](https://adctrl.ai/blog/conversion-discrepancy/#ref-1). - **up to 20%** gap Google calls "often" expected vs third-party analytics - **24–48 h** reporting lag Google mentions - **90 days** GA4's default lookback for most key events[5](https://adctrl.ai/blog/conversion-discrepancy/#ref-5) - **1–90 days** the range for a Google Ads conversion window ![Screenshot of Google Ads Help, Understand your conversion tracking data, with the sentence highlighted: Discrepancies, often up to 20%, are expected due to different attribution models](https://adctrl.ai/media/blog/conversion-discrepancy/evidence-google-20-v1.webp) Screenshot of Google Ads Help, 4 November 2026: Google expects discrepancies "often up to 20%" when you compare Google Ads with other analytics. Google's 20% is **a description, not a ceiling**. Nowhere does Google say 21% means broken or 5% means healthy, and the sentence is about analytics tools, not Meta. Meta's pages I read give no range of their own. Check the settings below whatever the size of your gap. ## Is GA4 higher than Google Ads, or the other way round? Which side is higher tells you where to look first. **Google Ads higher than GA4** points at what Google Ads adds, such as view-through or duplicate conversions. GA4 higher points at what Google Ads leaves out, such as secondary actions or lost click IDs[1](https://adctrl.ai/blog/conversion-discrepancy/#ref-1), [6](https://adctrl.ai/blog/conversion-discrepancy/#ref-6), [2](https://adctrl.ai/blog/conversion-discrepancy/#ref-2). | What you see | Likely causes, based on Google's definitions | Where to check | | --- | --- | --- | | Google Ads higher | All conv. includes view-through conversions; Conversions "may include modeled conversions"; two primary actions for one sale | Column choice; conversion action settings (step 3) | | Google Ads higher | GA4's own attribution gives part of the credit to other channels; Google Ads uses ad-centric models | GA4 attribution settings (step 4) | | GA4 higher | The action is secondary, so it is missing from Conversions; invalid clicks filtered on import; Google Ads counting set to One | Conversion action settings (step 3) | | GA4 higher | A redirect drops the GCLID, so Google Ads can't tie the sale to the click | Your landing page redirects (step 6) | | Either way | Different time zones; click date vs conversion date at the edges of the range; a shorter conversion window on one side | Steps 1, 2 and 4 | The direction of the gap narrows the search before you open any setting. Source: Google Ads Help on conversion data, primary and secondary actions and GA4 imports; GA4 attribution help[1](https://adctrl.ai/blog/conversion-discrepancy/#ref-1), [6](https://adctrl.ai/blog/conversion-discrepancy/#ref-6), [2](https://adctrl.ai/blog/conversion-discrepancy/#ref-2), [5](https://adctrl.ai/blog/conversion-discrepancy/#ref-5) Run this quick check before the full procedure. It only needs the reports and the list of conversion actions. 1. Put the same complete date range on both sides and switch Google Ads to All conv. (by conv. time) for the one action you compare. **Manual:** Google suggests that column for comparisons with Google Analytics. **With AdCtrl:** write "Show last month's purchases in Google Ads and GA4 for the same dates." 2. Note which side is higher and find the row above. **Manual:** compare per conversion action, not account totals. **With AdCtrl:** write "Put the Google Ads and GA4 counts side by side per conversion action." 3. Check that each sale has exactly one primary action. **Manual:** open the conversion actions in Google Ads and look for a GA4 import and a website tag both set to Primary. **With AdCtrl:** write "List my conversion actions and goals and flag any sale with two primary actions." ## How do you reconcile Google Ads and GA4, step by step? The full reconciliation is six reads in a fixed order: the comparison itself, Google Ads columns, action settings, GA4, Meta and the tags. Each step has a manual route and the exact read-only words to write in Claude or ChatGPT with AdCtrl connected, which reads Google Ads, GA4 and Tag Manager in one conversation. Nothing here changes an account. Google's official servers can run the Google Ads and GA4 report reads on their own: `search` executes GAQL queries for Google Ads, and `run_report` runs a GA4 report through the Data API. ### Step 1: same action, dates and time zones Compare one action over one complete date range that ended at least 48 hours ago. GA4 reports in the property's time zone and Google Ads in the account's, so write both down. If they differ, the days split differently. - Manual: pick the sale or lead, for example `purchase` in GA4 and the matching Google Ads conversion action, and note both time zones. - In AdCtrl, write: "Which Google Ads action and GA4 key event both measure purchases?" In AdCtrl, write: only reads your accounts ``` List my Google Ads conversion actions and goals, and my GA4 key events. Match them up: which Google Ads action and which GA4 key event both measure purchases? ``` ### Step 2: Google Ads by click date and by conversion date Add four columns per conversion action: Conversions, Conversions (by conv. time), All conv. and All conv. (by conv. time). In the API they are `metrics.conversions`, `metrics.conversions_by_conversion_date`, `metrics.all_conversions` and `metrics.all_conversions_by_conversion_date`. A click last week that converts this week shows this week in the by-conversion-time columns, while the standard columns "will still count the click and conversion in the previous week"[7](https://adctrl.ai/blog/conversion-discrepancy/#ref-7), [8](https://adctrl.ai/blog/conversion-discrepancy/#ref-8). - Manual: add the four columns to a report for the range, per conversion action. - In AdCtrl, write: "Show conversions by click date and by conversion date, with the column for each number, and say if you can only get one." In AdCtrl, write: only reads your accounts ``` For last month, show Google Ads conversions per conversion action counted by click date and by conversion date, plus all conversions. Tell me which column each number comes from, and say so if you can only get one of them. ``` Common mistake The most common mismatch is self-made: comparing GA4 with Google Ads' Conversions column. That column counts on the click date and only primary actions. For a comparison with GA4, Google points you to **All conv. (by conv. time)**. Read it for one conversion action, not the account total: All conv. also holds secondary actions, such as a GA4 import of the same sale, and view-through conversions, which Google names as a frequent reason for gaps with Google Analytics. ### Step 3: which conversion actions count Step 3 is where **duplicates hide**. A primary action counts in the Conversions column and in bidding; a secondary one is "for observation only". Conversions created from GA4 start as secondary "and can only be updated to primary in Google Ads", so a GA4 import someone switched to primary next to a website tag for the same sale counts that sale twice[6](https://adctrl.ai/blog/conversion-discrepancy/#ref-6). - Manual: open each action's settings. "Conversion action optimization" shows Primary or Secondary (observe only); the source shows a GA4 import or a website tag; counting is One or Every. - In AdCtrl, write: "List my conversion actions and flag any sale with two primary actions." In AdCtrl, write: only reads your accounts ``` List my Google Ads conversion actions with whether each is primary or secondary, whether it comes from a GA4 import or a website tag, whether it counts one or every conversion, and its click-through window. Flag any sale or lead that has two primary actions. ``` If you only run one step, I'd make it this one. A duplicate primary action feeds bidding a sale counted twice, while a date or attribution gap mostly makes the report look odd. ### Step 4: GA4 key events and attribution settings In GA4, look at key events by Event name, then at Advertising, Conversion performance, then at the property's reporting attribution model and lookback windows. Google's own instruction for this comparison: "When comparing with Google Analytics, ensure reports are set to "Event-scoped" and verify GCLID persistence."[1](https://adctrl.ai/blog/conversion-discrepancy/#ref-1), [3](https://adctrl.ai/blog/conversion-discrepancy/#ref-3) Event-scoped dimensions such as Source, Medium and Campaign follow the reporting attribution model, while session-scoped ones such as Session source "are unaffected". Most key events default to a 90-day lookback. Note My cross-check is the session-scoped view: key events from google / cpc sessions, which don't move with the attribution model. A click that lost its GCLID in a redirect can land under another source, so a thin google / cpc count can mean a tracking problem. Google calls the GCLID "crucial for attributing conversions back to Google Ads". - Manual: Reports for key events, Advertising for the shared conversions, the property's attribution settings for the model. - In AdCtrl, write: "Show GA4 key events for google / cpc sessions and the attribution settings." In AdCtrl, write: only reads your accounts ``` In GA4, show key events by event name for sessions with source / medium google / cpc for last month. Then tell me the property's reporting attribution model and key event lookback window. ``` ### Step 5: Meta results and their attribution setting Meta says results from ad sets with different attribution models can't be compared in the Campaign Overview table, so check each ad set's attribution model and setting before you add anything up. The Meta section below covers the details. - Manual: in Ads Manager, use Compare Attribution Settings before you compare ad sets. - In AdCtrl, write: "Show Meta purchases by campaign and the attribution setting they use, or say if you can't see it." In AdCtrl, write: only reads your accounts ``` Show Meta purchases for last month by campaign. Tell me which attribution setting these results use. If you can't see it, say so instead of guessing. ``` ### Step 6: tags that fire twice Run a test sale in Tag Manager's Preview mode. The site connects to Tag Assistant "so that you can inspect which tags fired and in which order". The duplicate checklist further down lists what to look for. - Manual: one test purchase, then count each conversion tag in Tag Assistant. - In AdCtrl, write: "List the conversion tags and triggers in my Tag Manager container." That shows configuration, not firing. In AdCtrl, write: only reads your accounts ``` Review my Tag Manager container for conversion tags. List any action with two tags, or a tag whose triggers could fire twice on the same page. Remember that you see the configuration, not what fired. ``` ### The API field names, side by side For anyone pulling the numbers by GAQL (the Google Ads API's query language), the GA4 Data API or Meta's Marketing API, **match fields on date and on the set of actions** before comparing them. Use `keyEvents` by `eventName` for the GA4 count. Split it by `googleAdsCampaignName` for GA4's attributed view, and by a session-scoped field when you want numbers that don't move if someone changes the attribution model. | Tool | Interface name | API field | What it counts and when to use it | | --- | --- | --- | --- | | Google Ads | Conversions | `metrics.conversions` | Actions with `include_in_conversions_metric` true, by click date; what bidding optimises for | | Google Ads | Conversions (by conv. time) | `metrics.conversions_by_conversion_date` | The same actions, by conversion date | | Google Ads | All conv. | `metrics.all_conversions` | All actions, whatever `include_in_conversions_metric` says, by click date | | Google Ads | All conv. (by conv. time) | `metrics.all_conversions_by_conversion_date` | All actions, as in All conv., by conversion date; compare it with GA4 per action, not as an account total | | Google Ads | Primary / Secondary | `conversion_action.primary_for_goal` | false means not biddable, except in a custom goal | | Google Ads | Source of the action | `conversion_action.type` | `GOOGLE_ANALYTICS_4_CUSTOM` or `GOOGLE_ANALYTICS_4_PURCHASE` for GA4 imports, `WEBPAGE` for a website tag | | Google Ads | Count: One / Every | `conversion_action.counting_type` | `ONE_PER_CLICK` or `MANY_PER_CLICK` | | Google Ads | Click-through conversion window | `conversion_action.click_through_lookback_window_days` | Days allowed between click and conversion | | GA4 | Key events | `keyEvents` | Count of key events, by event date; marking one doesn't change history | | GA4 | Session source / medium | `sessionSourceMedium` | Session-scoped; unaffected by the reporting attribution model | | GA4 | Session Google Ads campaign | `sessionGoogleAdsCampaignName` | The campaign "that led to this session" | | GA4 | Google Ads campaign | `googleAdsCampaignName` | The campaign "attributed to the key event" | | Meta | Attribution setting | `action_attribution_windows` | Windows such as `7d_click`; for reads, `default` means `["7d_click","1d_view"]` | | Meta | (none) | `action_report_time` | Still in the reference, disregarded since 10 June 2025 | Line up fields that count on the same date and the same set of actions, or the gap you measure is partly your own query. Source: Google Ads API v26 metrics and ConversionAction references, GA4 Data API schema and attribution help, Meta Ad Account Insights reference and 2025 changes[8](https://adctrl.ai/blog/conversion-discrepancy/#ref-8), [9](https://adctrl.ai/blog/conversion-discrepancy/#ref-9), [10](https://adctrl.ai/blog/conversion-discrepancy/#ref-10), [11](https://adctrl.ai/blog/conversion-discrepancy/#ref-11), [2](https://adctrl.ai/blog/conversion-discrepancy/#ref-2), [5](https://adctrl.ai/blog/conversion-discrepancy/#ref-5), [12](https://adctrl.ai/blog/conversion-discrepancy/#ref-12), [13](https://adctrl.ai/blog/conversion-discrepancy/#ref-13), [14](https://adctrl.ai/blog/conversion-discrepancy/#ref-14) For GA4, I found no Data API metric for the Advertising section's Conversions, only `keyEvents`; check the Conversion performance report in the interface. ## Is the gap normal or broken? A gap is **normal when it survives the line-up and stays stable**, and broken when an action is counted twice or the gap jumps for no reason you can point to. Work through the questions in this order. Only the 20% comes from Google, the rest are my rules of thumb[1](https://adctrl.ai/blog/conversion-discrepancy/#ref-1), [2](https://adctrl.ai/blog/conversion-discrepancy/#ref-2). Decision tree: line up dates, time zones and the action, switch to All conv. (by conv. time) for that action, check for duplicate counting when Google Ads shows more, then call a stable gap within about 20% normal and anything else worth investigating. The 20% is Google's "often up to 20%" for third-party comparisons; "stable week to week" is a heuristic, not a Google rule. **Normal: attribution and lag, if** - Dates, time zones and the action match on both sides - You compare GA4 with All conv. (by conv. time) for one action - No action is counted twice, and the gap is within roughly 20% and steady week to week (heuristic) **Broken: duplicate counting, if** - Google Ads shows more than GA4 for the action - A GA4 import and a Google Ads tag are both primary for it, or two tags fire on one sale **Investigate, if** - The gap is well past 20% or jumps between weeks (heuristic) - Check tag firing, consent and redirects that drop the GCLID, Google's click identifier In Claude or ChatGPT Run the line-up in one conversation instead of five tabs. AdCtrl reads Google Ads, GA4 and Tag Manager in Claude or ChatGPT, and changes wait for your approval. In AdCtrl, write: ``` Compare last month's Google Ads conversions per conversion action with GA4 key events for google / cpc, list which actions are primary, and check Tag Manager for conversion tags that could overlap. ``` [Start free](https://app.adctrl.ai/app) [How it works](https://adctrl.ai/docs/#changes) 3-day free trial · no card needed ## How does Meta count conversions, and how do you compare it with GA4? Meta counts a conversion against an ad when it happens **inside the ad set's attribution setting** (for Meta's standard attribution model), chosen per ad set. The settings are click-through (1 or 7 days after a link click), view-through (1 day after an impression) and engage-through (1 day after a non-link click). Some accounts still use the older versions while this rolls out. In practice, compare Meta with Meta first and with GA4 second. Ad sets with different attribution models can't be compared in the Campaign Overview table, so Meta points you to Compare Attribution Settings, and adds: "If using external analytics tools, evaluate performance in those tools." My reading: judge a Meta campaign's share of sales in GA4, and read Meta's own count for the ad set comparisons inside Ads Manager. For API users, two parameters stopped doing anything. Meta's Insights reference still documents `action_report_time` and `use_unified_attribution_setting`, while Meta's changelog says both are disregarded: **Meta's API reference says** `action_report_time` decides the report date: with `impression` a conversion shows on the day of the ad view, with `conversion` on the day of the conversion. **Meta's 2025 changes say** From 10 June 2025, `use_unified_attribution_setting` and `action_report_time` "will be disregarded, and API responses will mimic Meta Ads Manager settings"[14](https://adctrl.ai/blog/conversion-discrepancy/#ref-14). ![Screenshot of Meta's 2025 out-of-cycle changes page with the sentence highlighted: use_unified_attribution_setting and action_report_time parameters will be disregarded](https://adctrl.ai/media/blog/conversion-discrepancy/evidence-meta-disregarded-v1.webp) Screenshot of Meta's Marketing API 2025 out-of-cycle changes, 4 November 2026: both parameters "will be disregarded" from 10 June 2025. 1. 10 Jun 2025: `action_report_time` and `use_unified_attribution_setting` disregarded 2. 13 Oct 2025: Meta's changelog: `7d_view` and `28d_view` will return no data 3. 12 Jan 2026: `7d_view` and `28d_view` no longer returned[15](https://adctrl.ai/blog/conversion-discrepancy/#ref-15) A script that still sets `action_report_time` gets Ads Manager's settings back anyway. Read `action_attribution_windows` instead. Meta said 1-day click, 7-day click, 28-day click, 1-day engaged view and 1-day view stay available. In Meta's Insights reference for reads, the `default` option means `["7d_click","1d_view"]`. Meta's help page doesn't say which setting a new ad set gets. ## How do you find duplicate conversions in GTM, GA4 and Meta? Duplicate conversions come from **one sale reaching a platform twice**: two tags, two triggers, two primary actions, or a pixel and a server event that don't share an ID. Tag Manager's Preview mode is the only check here that shows what actually fired. - The Google tag isn't both hard-coded in the site and added through Google Tag Manager. - Each conversion action has one conversion tag in GTM, not two. - No conversion tag has two triggers that both fire on the same thank-you page. - In Preview mode, a test purchase fires each conversion tag once in Tag Assistant. - The same sale isn't primary twice: a GA4 import (`GOOGLE_ANALYTICS_4_PURCHASE`) and a website tag (`WEBPAGE`). - Leads use counting "One" unless every repeat after a click is a real new conversion (my rule of thumb). - Every purchase sends a transaction ID, and the ID is unique per order. - The Meta pixel's `eventID` matches the Conversions API `event_id`, and its `event` matches `event_name`[16](https://adctrl.ai/blog/conversion-discrepancy/#ref-16). - Redirects on your site keep the GCLID intact. Transaction IDs cut both ways. Google Ads treats a second conversion with the same ID as a duplicate, but "If your tag sends Google Ads the same ID for different transactions, you could significantly undercount your conversions." On Meta, a pixel plus Conversions API setup needs a deduplication method, and Meta's recommended one matches event ID and event name[17](https://adctrl.ai/blog/conversion-discrepancy/#ref-17), [16](https://adctrl.ai/blog/conversion-discrepancy/#ref-16). ## Can your AI run this reconciliation? An AI assistant can run the reconciliation reads if it is **connected to every platform in the comparison**. Google's and Meta's official servers each cover their own platform, so you'd connect two or three. - **Google Ads MCP server**: Google's server; docs give the mode as "Read-only (current release)"[18](https://adctrl.ai/blog/conversion-discrepancy/#ref-18) (Official) - **Google Analytics MCP server**: `run_report` through the Data API, plus `list_key_events` and `list_google_ads_links` (Official) - **Meta Ads MCP server**: `ads_get_ad_entities` returns metrics including conversions; the page names no attribution-window parameter (Official, beta) - **AdCtrl**: Google Ads, Meta Ads, GA4 and Tag Manager in one Claude or ChatGPT conversation (Third-party) ![AdCtrl report card with example data showing conversions per conversion action by click date and by conversion date](https://adctrl.ai/media/blog/conversion-discrepancy/report-preview-v1.webp) A real AdCtrl report card filled with example data: conversions per conversion action, by click date and by conversion date. Its "(by conv. date)" columns mean the same as Google Ads' "(by conv. time)" columns. The made-up GA4 import shows 0 in Conversions and a count only in All conv., because it is secondary. In AdCtrl, write: only reads your accounts ``` Our purchases in Google Ads don't match GA4. Compare last month per conversion action with GA4 key events, tell me which actions are primary, and say which gaps the settings explain and which you can't explain. ``` None of these tools fixes tracking by itself. **A Tag Manager read shows configuration, not firing**, and a tag hard-coded outside GTM isn't in the container at all. AdCtrl's own comparison lists "no unified attribution model (each platform reports its own conversions)", and AdCtrl does not publish Tag Manager versions; that stays with you[19](https://adctrl.ai/blog/conversion-discrepancy/#ref-19), [20](https://adctrl.ai/blog/conversion-discrepancy/#ref-20). ## Frequently asked questions ### Which number should I bid on? Google Ads bids on the Conversions column, which holds the primary actions; secondary actions are "for observation only" unless they're part of a custom goal. Pick one primary action per sale or lead and keep the rest secondary. ### Should I import GA4 conversions or use the Google Ads tag? Either can count a sale. Trouble starts when both are primary for the same sale. Conversions created from GA4 start as secondary and can only be made primary in Google Ads, so that switch is a deliberate choice you can check. ### Why did my GA4 numbers for Google Ads change after 15 June 2026? Google's page on conversions and key events says that before June 15, 2026, the collection of Google Ads cookies and IDs by the Google Analytics tag was controlled by both Google signals and your Consent Mode settings, and that from that date Google Analytics "transitioned to using Consent Mode (within Google Ads) as the single control for this data." Check your Consent Mode setup before you go looking for a broken tag[3](https://adctrl.ai/blog/conversion-discrepancy/#ref-3). ### Can I make GA4 and Google Ads match exactly? No. Google expects differences "often up to 20%" due to different attribution models, plus invalid-click filtering and reporting lag[1](https://adctrl.ai/blog/conversion-discrepancy/#ref-1), [2](https://adctrl.ai/blog/conversion-discrepancy/#ref-2). Aim for a gap you can explain and that stays steady. ### Why does Meta report a sale that GA4 doesn't give to Meta? Meta credits a conversion within the ad set's attribution setting, which can include 1-day view-through and 1-day engage-through as well as link clicks. GA4 attributes with its own model and lookback window, so the same sale can land on different channels. ## What to do next Start with the direction: Google Ads higher sends you to duplicates, view-through and modelled conversions. GA4 higher sends you to secondary actions and lost click IDs. Then line up dates, time zones and one action, compare GA4 with All conv. (by conv. time), and use the tree to decide whether what's left is attribution or a duplicate. **Learn more:** the [Google Ads audit checklist](https://adctrl.ai/blog/google-ads-audit-checklist/) covers the rest of the account, and [Google Ads MCP](https://adctrl.ai/blog/google-ads-mcp/) and [Meta Ads MCP](https://adctrl.ai/blog/meta-ads-mcp/) compare the official connectors. **Try it:** connect AdCtrl with the [getting started steps](https://adctrl.ai/docs/#getting-started), paste the step 1 prompt, and work down the list. Every [plan](https://adctrl.ai/#pricing) comes with a 3-day free trial, no card needed[19](https://adctrl.ai/blog/conversion-discrepancy/#ref-19). ## Sources 1. [Understand your conversion tracking data](https://support.google.com/google-ads/answer/6270625?hl=en), Google. Accessed 4 November 2026. 2. [Create conversions from Google Analytics events in Google Ads](https://support.google.com/google-ads/answer/2375435?hl=en), Google. Accessed 4 November 2026. 3. [Conversions vs. key events in Google Analytics](https://support.google.com/analytics/answer/13965727?hl=en), Google. Accessed 4 November 2026. 4. [About attribution models and attribution settings](https://www.facebook.com/business/help/460276478298895), Meta. Accessed 4 November 2026. 5. [Manage and configure attribution](https://support.google.com/analytics/answer/10597962?hl=en), Google. Accessed 4 November 2026. 6. [About primary and secondary conversion actions](https://support.google.com/google-ads/answer/11461796?hl=en), Google. Accessed 4 November 2026. 7. [Understand conversions by time with new columns](https://support.google.com/google-ads/answer/9549009?hl=en), Google, 17 October 2019. Accessed 4 November 2026. 8. [Google Ads API v26: metrics fields](https://developers.google.com/google-ads/api/fields/v26/metrics), Google. Accessed 4 November 2026. 9. [Google Ads API v26: ConversionAction](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionAction), Google. Accessed 4 November 2026. 10. [Google Ads API v26: ConversionActionType](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionActionTypeEnum.ConversionActionType), Google. Accessed 4 November 2026. 11. [Google Ads API v26: ConversionActionCountingType](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionActionCountingTypeEnum.ConversionActionCountingType), Google. Accessed 4 November 2026. 12. [API Dimensions & Metrics (Google Analytics Data API)](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema), Google. Accessed 4 November 2026. 13. [Ad Account Insights (Marketing API reference)](https://developers.facebook.com/documentation/ads-commerce/marketing-api/reference/ad-account/insights), Meta. Accessed 4 November 2026. 14. [2025 Out-of-cycle changes (Marketing API)](https://developers.facebook.com/documentation/ads-commerce/marketing-api/out-of-cycle-changes/occ-2025), Meta, 10 March 2025. Accessed 4 November 2026. 15. [Ads Insights API Metric Availability Updates](https://developers.facebook.com/blog/post/2025/10/16/ads-insights-api-metric-availability-updates/), Meta, 16 October 2025. Accessed 4 November 2026. 16. [Handling Duplicate Pixel and Conversions API Events](https://developers.facebook.com/documentation/ads-commerce/conversions-api/deduplicate-pixel-and-server-events), Meta. Accessed 4 November 2026. 17. [Use a transaction ID to minimize duplicate conversions](https://support.google.com/google-ads/answer/6386790?hl=en), Google. Accessed 4 November 2026. 18. [Google Ads MCP server](https://developers.google.com/google-ads/api/docs/developer-toolkit/mcp-server), Google. Accessed 4 November 2026. 19. [AdCtrl docs](https://adctrl.ai/docs/), AdCtrl, 4 November 2026. Accessed 4 November 2026. 20. [AdCtrl llms-full.txt (comparison table in the Google Ads MCP article)](https://adctrl.ai/llms-full.txt), AdCtrl, 4 November 2026. Accessed 4 November 2026. 21. [Preview and debug containers](https://support.google.com/tagmanager/answer/6107056?hl=en), Google. Accessed 4 November 2026. 22. [Method: tags.list (Tag Manager API v2)](https://developers.google.com/tag-platform/tag-manager/api/reference/rest/v2/accounts.containers.workspaces.tags/list), Google. Accessed 4 November 2026. 23. [Ads MCP Server: Comprehensive reporting](https://developers.facebook.com/documentation/ads-commerce/ads-ai-connectors/ads-mcp-server/ads-mcp-server-tools-comprehensive-reporting), Meta. Accessed 4 November 2026. 24. [Google Analytics MCP Server (README)](https://github.com/googleanalytics/google-analytics-mcp), Google. Accessed 4 November 2026. ## Related articles - [**Google Ads MCP: official server vs hosted connectors (2026)** What Google's official Google Ads MCP server can and can't do, how to add it to Claude or ChatGPT, and when a hosted connector is simpler.](https://adctrl.ai/blog/google-ads-mcp/) - [**Meta Ads MCP: what it can change and how to lock it down** What Meta's official Ads MCP server can read and change, why some accounts aren't enabled, and how to block budget and campaign changes.](https://adctrl.ai/blog/meta-ads-mcp/) - [**Google Ads audit checklist 2026: 40 checks, real API fields** 40 Google Ads audit checks for 2026 (AI Max, Performance Max, Demand Gen), each with its report, the API field if any, and whether AI can judge it.](https://adctrl.ai/blog/google-ads-audit-checklist/) ## Keep going [Learn more first **Google Ads MCP: official server vs hosted connectors (2026)** Keep reading before you change anything.](https://adctrl.ai/blog/google-ads-mcp/) [Ready to try it **Run this in Claude or ChatGPT with AdCtrl** Connect Google Ads and Meta Ads, ask in plain words and approve every change. 3-day free trial.](https://app.adctrl.ai/app) ![Kaan Catalkaya](https://adctrl.ai/media/founder-kaan-v1.webp) About the author [Kaan Catalkaya](https://adctrl.ai/#founder), Founder of AdCtrl Kaan Catalkaya founded AdCtrl and runs his own performance agency, where he manages Google Ads and Meta Ads for clients. AdCtrl gives Claude and ChatGPT the playbooks he uses on that client work. ## Put your AI to work on your campaigns. AdCtrl connects Claude or ChatGPT to Google Ads, Meta Ads, GA4, Tag Manager and Search Console. Ask in plain words and approve every change. [Start free](https://app.adctrl.ai/app) 3-day free trial · no card needed A product by mondaybrew ApS · CVR 45217779 · Vesterbrogade 74, 3. sal, 1620 København V, Denmark Google, Meta, ChatGPT and Claude are trademarks of their respective owners. AdCtrl is an independent product by mondaybrew ApS. --- Source: https://adctrl.ai/blog/google-ads-audit-checklist/ Last updated: 2026-11-05 Google Ads Audit # Google Ads audit checklist (2026): 40 checks, each with the data that proves it What to check first, the screen and API field behind every check, what changed in 2025 and 2026, and which calls an AI can make for you. ![Kaan Catalkaya](https://adctrl.ai/media/founder-kaan-v1.webp) By [Kaan Catalkaya](https://adctrl.ai/blog/google-ads-audit-checklist/#author), Founder of AdCtrl Published 5 November 2026 · 27 min read ![Cover: Google Ads audit checklist (2026), 40 checks in ten areas, from conversion goals to change history](https://adctrl.ai/media/blog/google-ads-audit-checklist/hero-v2.webp) ## Short answer - Start a Google Ads audit with conversion measurement. If bidding chases the wrong action, the other 39 checks are judged against the wrong number. - New Search campaigns have AI Max on by default, and Search campaigns with automatically created assets or campaign-level broad match are auto-upgraded from September 2026. - Performance Max now has search terms, campaign-level negative keyword lists and a channel performance report, so it no longer gets skipped as a black box. - Google's AI Max FAQ still says AI Max is not in the API, while the v26 API reference documents campaign.ai_max_setting.enable_ai_max. - In this checklist an AI can settle 7 checks from the data alone and prepare 23 more; 10 need a human to judge intent, brand and fit. A Google Ads audit in 2026 is 40 yes-or-no checks in ten areas, run by money at risk: conversion measurement first, then the settings that route spend, then the defaults Google changed in 2025 and 2026[1](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-1). Each check below names the screen to open, the API field that proves it where one exists, and who has to make the call. I run a performance agency and I build AdCtrl, which connects Google Ads to Claude or ChatGPT, so where AdCtrl can do a read I give the exact words to type. Tracking gaps have their own article, [GA4 conversions don't match Google Ads](https://adctrl.ai/blog/conversion-discrepancy/). Checked 5 November 2026 against Google's help pages and the v26 API reference[2](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-2). ## What does a Google Ads audit check in 2026? A Google Ads audit checks three things: that the account measures the outcome the business is paid for, that spend goes where the business sells, and that Google's automation is switched on deliberately. The 40 checks below cover that in ten areas, from conversion goals to change history, and every check ends in a yes or a no. This covers Search, Performance Max and Demand Gen. It leaves out Shopping feeds and Merchant Center, Video, App and Local campaigns. - **40** checks in ten areas - **v26.1** latest Google Ads API, 28 Oct 2026 - **2 years** of change history in the interface[3](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-3) - **30 days** of change history through the API Each check carries one of three marks: - **AI can verify:** the answer is in the data. A setting is on or off, a column has a value. - **Human judges:** the data can't answer it, because the answer turns on what you sell and at what margin. - **Both:** an AI or a script pulls the numbers and flags what looks off, and you make the call. Across the 40, that comes to **7 an AI can settle from the data alone**, 23 Both and 10 Human judges. ## What changed in Google Ads in 2025 and 2026? Google changed several defaults that older checklists never mention. **AI Max is now on by default for new Search campaigns**, Performance Max gained search terms and a channel report, and Display campaigns are moving into Demand Gen[4](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-4), [5](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-5). Every line in the timeline turns into a check further down; "check now" marks what is already live in accounts, "plan for" what is still coming. 1. 6 May 2025: Google announces AI Max for Search campaigns, rolling out in beta 2. 7 Aug 2025: Check now: Performance Max gets search terms reporting in all campaigns and campaign-level negative keyword lists 3. 6 Nov 2025: Check now: channel performance report in all Performance Max campaigns 4. 28 Jan 2026: Google Ads API v23 adds an ad network breakdown for Performance Max 5. 15 Apr 2026: AI Max leaves beta; Google announces the Dynamic Search Ads upgrade 6. Jun 2026: Check now: offline conversion imports move to the Data Manager API (15 June); enhanced conversions become one switch; the Display to Demand Gen migration tool starts rolling out 7. Sep 2026: Check now: Search campaigns with automatically created assets or campaign-level broad match start auto-upgrading to AI Max[1](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-1) 8. Feb 2027: Plan for: the Dynamic Search Ads auto-upgrade begins; Search campaigns with Display Expansion move to channel prioritization ![Screenshot of Google's Ads and Commerce blog post on the Dynamic Search Ads upgrade, updated 11 June 2026, with the passage highlighted: the DSA sunset and auto-upgrade begin in February 2027, while campaigns using Automatically Created Assets and campaign-level broad match continue to be auto-upgraded starting in September 2026](https://adctrl.ai/media/blog/google-ads-audit-checklist/evidence-auto-upgrade-v1.webp) Screenshot of Google's Ads and Commerce blog, updated 11 June 2026: the Dynamic Search Ads upgrade moved to February 2027, but campaigns with automatically created assets or campaign-level broad match "will continue to be auto-upgraded starting in September 2026". Google names only two kinds of Search campaign for the September upgrade: those with automatically created assets and those with the campaign-level broad match setting. Whether yours were upgraded is a date you can read per campaign (check 16), so don't assume either way. ## Which checks should you run first? Run the checks in order of the money a wrong answer puts at risk, and put **measurement first**, because every other number in the account is judged against it. The order is my agency's method, not Google's. Which checks first, our method: measurement, then the settings that route spend, then the AI Max, Performance Max and Demand Gen defaults, then search terms and keywords, then ads and landing pages, then access and change history. The order follows how much spend a wrong answer puts at risk. Short on time? Fix these ten first, in this order. They cover measurement and the settings that move the most money. - Check 1: only real business outcomes are primary conversions. - Check 2: the goals each campaign bids toward match the business goal. - Check 3: counting fits each action. - Check 7: offline and lead uploads are healthy. - Check 8: each bid strategy has enough conversions and isn't limited. - Check 10: impression share lost to budget and to rank were read. - Check 12: Search partners and Display earn their spend. - Check 13: the location option fits the business. - Check 16: you know which campaigns run AI Max and which were auto-upgraded. - Check 27: search terms that spend without converting were reviewed. Set the full audit up in four steps before you open a single report: 1. Write the business goal in one line: the action that makes money, and a target cost per lead or return on ad spend. **Manual:** agree it with whoever owns the numbers; the measurement and target checks are judged against it. **With AdCtrl:** write "List my conversion actions with their settings, so I can say which one is the real goal." 2. Pick a date range of complete weeks, long enough to hold conversions you can judge. **Manual:** set the same range on every report you open during the audit. **With AdCtrl:** write "Use the last eight complete weeks for everything in this review." 3. List your brand terms, so brand and non-brand searches can be split later. **Manual:** include misspellings and product names that only you sell. **With AdCtrl:** write "Split last month's search terms into searches that contain our brand name and searches that don't." 4. Work down the checks in order and mark each one yes or no. **Manual:** use the printable checklist at the end of this article. **With AdCtrl:** paste the audit prompt from the AI section and tick the list off as answers come back. ## Is conversion tracking measuring the right thing? (checks 1–7) Conversion tracking is right when the actions marked primary are the outcomes the business gets paid for, each counted once. Get it wrong and the bid strategy optimizes toward the wrong thing, which is why I fix it before touching anything else. | # | Check | Where in Google Ads | Who decides | | --- | --- | --- | --- | | 1 | Only real business outcomes are primary conversions | Goals → Summary | Both | | 2 | The goals each campaign bids toward (account default or campaign-specific) match the business goal | Goals → Summary; campaign Settings → Goals | Human judges | | 3 | Counting fits the action, such as one per click for leads | Conversion action → Count | Both | | 4 | Values are set, and not one flat default where real value varies | Conversion action → Value | Human judges | | 5 | Enhanced conversions are on (one switch from June 2026) | Goals → Settings → Customer data use | AI can verify | | 6 | Consent mode is in place for EEA and UK traffic | Your consent banner and Tag Assistant; no Ads API field found | Human judges | | 7 | Offline and lead uploads are healthy, and API uploads go through the Data Manager API | Goals → Uploads; upload diagnostics | Both | Measurement checks come first because bidding and every later check use these numbers. Source: Google Ads Help on conversion goals, counting options, enhanced conversions, offline imports and consent mode[6](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-6), [7](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-7), [8](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-8), [9](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-9), [10](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-10) Common mistake One account we audited bid toward a zero-value form fill as its only primary conversion, while the qualified-lead action sat outside the Conversions column. In another, an e-commerce account's Maximize Conversions goal partly chased cart events. **Fix the goal before you judge bids, keywords or budgets**, because all of them were tuned against it. Check 7 matters if a script, CRM or tool uploads conversions. Google says that from 15 June 2026, offline conversion imports and enhanced conversions for leads uploads "will be migrated to the Data Manager API and blocked in the Google Ads API"[8](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-8). Consent mode is a check you do on the site: it passes consent status to Google, but it "doesn't provide a consent banner or widget"[10](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-10). If a check fails, make the real outcome the one primary action for that sale or lead and set the rest to secondary, then give bidding time to adjust before you judge anything downstream. ![Table from a real read-only AdCtrl audit of our own paused test account, anonymised: eight of its conversion actions with primary, counting, lookback and attribution settings. Flags to judge: YouTube engagement actions are primary, booking counts many per click, one offline stage looks back 90 days.](https://adctrl.ai/media/blog/google-ads-audit-checklist/audit-read-v2.webp) Our own test account, all campaigns paused, read through AdCtrl with read-only requests on 5 November 2026 and anonymised; not a client account. Two YouTube engagement actions are primary next to the leads, one lead action counts many per click, one offline stage looks back 90 days where the others use 30, and every offline stage is secondary. - Manual: open Goals → Summary, then each conversion action's settings; for check 5, Goals → Settings → Customer data use; for check 7, the upload diagnostics. - In AdCtrl, write: "List my conversion actions with their settings and the offline upload diagnostics. Flag any that count the same lead or sale twice." Lead uploads have their own walkthrough in Google Ads offline conversions. ## Are bidding, budgets and campaign settings sending spend to the right place? (checks 8–15) Bidding, budget, network and location settings decide where the money goes. The bid strategy needs enough conversions to work with, the budget should be the real limit rather than ad rank, and networks and locations should match where the business sells. | # | Check | Where in Google Ads | Who decides | | --- | --- | --- | --- | | 8 | Bid strategy fits conversion volume and isn't stuck in learning or limited | Campaigns → Bid strategy type and status | Both | | 9 | CPA and ROAS targets are realistic against actual results | Campaigns → Target CPA / Target ROAS next to Cost / conv. | Human judges | | 10 | Impression share lost to budget is read next to share lost to rank before any budget goes up | Campaigns → Search lost IS (budget) and (rank) | Both | | 11 | Shared budgets and budget channel settings are known | Shared library → Budgets; budget settings | AI can verify | | 12 | Search partners and Display on Search campaigns earn their spend | Campaign Settings → Networks; segment by Network | Both | | 13 | The location option (presence, or presence or interest) fits the business | Campaign Settings → Locations → Location options | Both | | 14 | Targeted and excluded locations match where you sell | Campaign Settings → Locations | Both | | 15 | No campaign is quietly limited | Campaigns → Status column | AI can verify | Settings that decide where the money goes. Most you can read off the account; whether they fit the business is the judgement. Source: Google Ads API v26 campaign and campaign_budget references; Google Ads Help on location options and channel prioritization[11](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-11), [12](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-12), [13](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-13) Two findings from audits we've run. Campaigns on the default location option paid for clicks from people who only showed interest in the area, in one account mostly from outside the market it served. And Search campaigns served on Search partners and the Display Network, with spend and no conversions there. Neither setting is a mistake by default. Google's default location targeting "includes both physical locations and locations of interest"[12](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-12), and from February 2027 Search campaigns with Display Expansion move to channel prioritization[11](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-11). If a check fails, segment by network and by location first, and **switch off only what the segment shows isn't converting**. If a campaign loses more impression share to rank than to budget, a bigger budget won't buy those impressions back. Fix ads, keywords or bids first. - Manual: add Bid strategy type, Search impr. share and both lost IS columns to the Campaigns view; open each campaign's Settings for networks and locations. - In AdCtrl, write: "For each campaign, show the bidding strategy and its status, the target, search impression share and the share lost to budget and to rank, the networks it serves on, its location option, and its targeted and excluded locations." - In AdCtrl, write: "List my budgets with the daily amount and which campaigns share each one." - With AdCtrl: it reads campaign settings, impression share and bidding status directly from Google Ads, so the two requests above bring back the data for most of these checks. Whether the settings fit the business stays your call. ## Which campaigns run AI Max, and should they? (checks 16–20) AI Max is a Search campaign setting that adds search term matching, text customization and final URL expansion, and new Search campaigns have it on by default. The audit question is which campaigns run it, whether Google switched it on for you, and whether the pages and ads can take it. | # | Check | Where in Google Ads | Who decides | | --- | --- | --- | --- | | 16 | Which Search campaigns run AI Max, and which were auto-upgraded | Campaigns → AI Max columns; Settings → AI Max | AI can verify | | 17 | AI Max runs on conversion-based Smart Bidding and isn't limited by budget | Settings → Bidding; Status | AI can verify | | 18 | Final URL expansion and text customization are on only where pages and copy can take it; pinning is reconsidered | Settings → AI Max → asset optimization | Human judges | | 19 | URL exclusions and brand inclusions or exclusions are set | Settings → AI Max → URL exclusions, Brands | Both | | 20 | AI Max search terms, headlines and landing pages are read together | Search terms (match type "AI Max", Source column); Landing pages ("Selected by") | Both | AI Max changes which searches, headlines and pages a Search campaign uses; these checks find out where it is on and what it does. Source: Google Ads Help, How AI Max works and Set up AI Max; Google Ads API v26 campaign reference[14](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-14), [4](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-4), [13](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-13) Three rules from Google's own pages decide checks 17 and 18[14](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-14), [4](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-4). AI Max "won't be effective if campaigns are limited by budget". Its features need "conversion-based Smart Bidding strategies in order to function effectively". With final URL expansion on, "pinning of RSA assets will not be respected", so a pinned legal line can stop showing where you expect it. If pinning matters more than the extra reach, Google lets you switch text customization and final URL expansion off one by one. My reading of the three rules, per campaign: **Keep AI Max on if** - The campaign bids with a conversion-based Smart Bidding strategy - It isn't limited by budget - Your landing pages and ad copy can take generated text and expanded URLs **Switch features off if** - A pinned headline or legal line must always show (final URL expansion ignores pinning) - The pages Google could pick don't match what the ad promises **Fix first, then judge, if** - The campaign is limited by budget, or bids with manual CPC - AI Max can't show what it does until that changes Google's documentation also contradicts itself on API support, which matters if you audit with a script or an AI: **Google's AI Max FAQ says** AI Max "is not yet available in the API and Editor", and "Support for Editor and API is expected later in 2025"[15](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-15). **The v26 API reference says** `campaign.ai_max_setting.enable_ai_max` "Controls whether or not AI Max features are served for this campaign", and `campaign.aca_migration_date_time` and `campaign.broad_match_migration_date_time` record an auto-upgrade[13](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-13). ![Screenshot of Google's AI Max FAQ with the passage highlighted: AI Max is not yet available in the API and Editor, support for Editor and API is expected later in 2025](https://adctrl.ai/media/blog/google-ads-audit-checklist/evidence-ai-max-faq-v1.webp) Screenshot of Google Ads Help, AI Max FAQ, 5 November 2026: the page still says AI Max is "not yet available in the API and Editor". Trust **the field reference over the FAQ**. A timestamp in either migration field means Google moved that campaign to AI Max; an empty field means no auto-upgrade is recorded there. - Manual: add the AI Max columns to the campaign list (Google says the settings "can be filtered or added as columns"), then open Settings → AI Max per campaign; in the Search terms report, filter match type "AI Max" and read the Source column. - API: read the three campaign fields above, and `ai_max_search_term_ad_combination_view` for search term, headline and landing page together. ## What are Performance Max and Demand Gen spending on? (checks 21–26) Performance Max is a single campaign that runs across Google's channels and inventory, and Demand Gen is the campaign type Google is moving Display campaigns into, with channel controls per ad group[16](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-16), [17](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-17), [5](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-5). You can audit Performance Max properly now. It has search terms reporting in all campaigns, campaign-level negative keyword lists and a channel performance report showing where ads ran[18](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-18). Demand Gen gets the same channel report, and migrated Display campaigns land there with the Display Network switched on. | # | Check | Where in Google Ads | Who decides | | --- | --- | --- | --- | | 21 | Where Performance Max spends, by channel | Campaigns → Insights and reports → Channel performance | Both | | 22 | Performance Max search terms are reviewed, with negatives or lists added where needed | Insights and reports → Search terms; Negative keywords | Both | | 23 | Brand exclusions on Performance Max, and the Shopping exception, are decided | Campaign Settings → Brand exclusions | Human judges | | 24 | Asset groups have decent ad strength, and generated assets are reviewed | Asset groups; Assets report | Both | | 25 | Placements are checked for brand suitability | Performance Max placement report | Human judges | | 26 | Demand Gen channel controls per ad group are intended; migrated Display campaigns are reviewed | Ad group settings → Channels; Channel performance | Both | The automated campaign types now show where they spend; these checks read that and decide what to exclude. Source: Google Ads Help on Performance Max updates, negative keywords, brand exclusions, channel reporting, Demand Gen channel controls and the Display migration[19](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-19), [20](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-20), [16](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-16), [18](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-18), [21](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-21), [17](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-17), [5](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-5) Two limits to know. Performance Max negative keywords "are applicable to Search and Shopping inventory only"[20](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-20), so they don't block YouTube, Display or Gmail. Brand exclusions on Performance Max cover Search, Shopping and YouTube search inventory, with an option to let Shopping ads still show on excluded brands. We keep finding the same thing here: brand searches flatter Performance Max or the whole account, because brand-heavy conversions make the non-brand work look better than it is. **Split brand from non-brand before you judge Performance Max.** If check 22 fails, add campaign-level negatives or a negative keyword list; if check 23 fails, decide on brand exclusions with whoever owns the brand budget. - Manual: Campaigns → Insights and reports → Channel performance, then Search terms; Demand Gen ad group settings for channels. - In AdCtrl, write: "Show the Performance Max search-term insights and asset group reporting for last month." - API: the channel breakdown is `segments.ad_network_type` on a Performance Max campaign (since v23), and search terms come from `campaign_search_term_view`. ## Which search terms and keywords are costing money? (checks 27–32) Search terms with spend and no conversions are usually the quickest money an audit finds. Zero conversions alone doesn't make a term irrelevant, though, so check its intent and whether tracking works before you exclude it. | # | Check | Where in Google Ads | Who decides | | --- | --- | --- | --- | | 27 | Search terms with spend and no conversions are reviewed | Insights and reports → Search terms | Both | | 28 | The match type and match source mix is known (exact, phrase, broad, AI Max, Performance Max) | Search terms → Match type and Source columns | AI can verify | | 29 | Low-volume terms hidden for privacy are noted as a blind spot | Search terms report | Human judges | | 30 | Negative keywords and lists are applied where needed and don't block good traffic | Keywords → Negative keywords; Shared library → Negative keyword lists | Both | | 31 | Quality Score is read by spend, per component | Keywords → Quality Score columns | Both | | 32 | Brand and non-brand are reported separately | Search terms, split by your brand terms | Human judges | Search terms show what you paid for; the decision to exclude one stays with someone who knows the business. Source: Google Ads Help on the search terms report and negative keywords; Google Ads API v26 search_term_view reference[20](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-20), [22](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-22), [23](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-23) Google's report doesn't show everything. Terms that "don't have enough query activity are omitted from the search terms report" for privacy[22](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-22), so **some spend never shows up as a term** and you can't negative it from the report. ![AdCtrl search-term report card with labelled example data: search terms for October next to the keyword each one matched, with cost and conversions, so terms that spent money with zero conversions stand out](https://adctrl.ai/media/blog/google-ads-audit-checklist/search-terms-card-v1.webp) A real AdCtrl search-term report card, filled with labelled example data: each search term next to the keyword it matched, with cost and conversions, so terms that spent and never converted stand out. In AdCtrl, write: only reads your accounts ``` Which search terms cost money last month without a single conversion? Show the match type for each, split brand searches (anything containing our brand name) from non-brand, and show Quality Score with its components for the keywords that spent the most. ``` - Manual: Insights and reports → Search terms, sorted by cost, with Conversions, Match type and Source added; Keywords → Quality Score columns. - With AdCtrl: write "Find search terms that don't fit my business and prepare negative keywords." AdCtrl prepares the negatives as a preview, and nothing changes until you approve it. The full process for exclusions, match types and shared lists is in Google Ads negative keywords. In Claude or ChatGPT Run the measurement, settings and search-term checks as one request instead of a dozen reports. AdCtrl reads the account in Claude or ChatGPT, and any change it prepares waits for your approval. In AdCtrl, write: ``` Review this Google Ads account like an audit: conversion actions and their settings, bidding status and impression share, networks and location options, and search terms that cost money without conversions. List what to fix first and what needs my judgement. ``` [Start free](https://app.adctrl.ai/app) [How it works](https://adctrl.ai/docs/#changes) 3-day free trial · no card needed ## Do ads, audiences and landing pages hold up? (checks 33–35) Ads, audiences and landing pages decide what a click turns into. Look for an approved responsive search ad in every ad group, audiences set the way you meant them, and **pages that load fast on a phone** where the spend lands. | # | Check | Where in Google Ads | Who decides | | --- | --- | --- | --- | | 33 | Every ad group has an approved responsive search ad with decent ad strength; sitelinks and callouts are present | Ads; Assets | Both | | 34 | Audiences are on observation or targeting as intended, and lists are large enough to use | Audiences; ad group targeting setting | Both | | 35 | Landing pages are read by spend, mobile and speed, including pages AI Max picked | Landing pages report ("Selected by" for AI Max) | Both | Check these once the settings above are right; they decide what a click turns into. Source: Google Ads API v26 references for ad_group_ad, user_list and landing_page_view; Google Ads Help on AI Max landing pages[14](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-14), [24](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-24) - Manual: Ads and Assets with Ad strength and Status; Audiences with the targeting setting; Landing pages with Mobile speed score. - In AdCtrl, write: "Show ad strength and approval for every responsive search ad, the sitelinks and callouts per campaign, and my audience and Customer Match lists with their size." ## Who can change the account, and what changed? (checks 36–40) The account checks look at who can change the account, which of Google's recommendations get applied, and what changed before results moved. | # | Check | Where in Google Ads | Who decides | | --- | --- | --- | --- | | 36 | Only the right people have admin access | Admin → Access and security | Both | | 37 | Auto-tagging is on; time zone, currency, tracking template and final URL suffix are recorded | Admin → Account settings | AI can verify | | 38 | Auto-applied recommendations are reviewed | Recommendations → Auto-apply | Both | | 39 | Open recommendations that would undo deliberate choices are dismissed | Recommendations | Human judges | | 40 | You know what changed before a drop, and who or what changed it | Tools → Change history | Both | Account hygiene and history: who can touch the account, what Google applies on its own, and what changed. Source: Google Ads Help on optimization score, auto-applied recommendations and change history; Google Ads API v26 customer and change_event references[3](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-3), [25](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-25), [26](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-26), [27](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-27), [28](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-28) In audits we've run, the recommendations behind optimization score have included switching on Search partners and Display, adding a target CPA and moving to broad match, all choices the account had deliberately made the other way. My reading: **the score tracks how many suggestions you adopt**, so dismiss the ones that undo a deliberate decision. Auto-apply is set for the whole account only, so if check 38 fails, switch off the recommendation types that work against those choices. Change history has two lengths, which matters if you audit through the API: **Google Ads Help says** Change history "lists the changes made to your account, campaigns, and ad groups during the past 2 years"[3](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-3). **The v26 change_event reference says** "Changes made through the UI or API in the past 30 days are included"[27](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-27). - Manual: Admin → Access and security; Recommendations → Auto-apply; Tools → Change history, filtered to the weeks before the drop. - With AdCtrl: write "List the open recommendations, say which would undo a setting we chose on purpose, and show what changed in the last 30 days by campaign or ad group." It sees what changed, when, and on which campaign or ad group, not who made it or the before and after values. ## The API fields behind each check 38 of the 40 checks map to fields in the Google Ads API v26 (consent mode and hidden search terms have none), which you can read with GAQL, the Google Ads API's query language, from a script, your own code or Google's MCP server. Two traps catch scripts: `search_term_view` "does not include Performance Max data"[23](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-23), so Performance Max terms come from `campaign_search_term_view`, and `change_event` only goes back 30 days. | # | Resource | Fields | | --- | --- | --- | | 1 | conversion_action | `primary_for_goal`, `include_in_conversions_metric`, `status`, `category`, `type` | | 2 | customer_conversion_goal, campaign_conversion_goal | `customer_conversion_goal.biddable`, `.category`, `.origin`; `campaign_conversion_goal.biddable` | | 3 | conversion_action | `counting_type` | | 4 | conversion_action | `value_settings.default_value`, `value_settings.always_use_default_value` | | 5 | customer | `conversion_tracking_setting.enablement_setting`, `.effective_enablement_setting`, `.accepted_customer_data_terms` | | 6 | none | No Ads API field verified; check the site and Tag Assistant | | 7 | offline_conversion_upload_conversion_action_summary | `daily_summaries`, `alerts` | | 8 | campaign | `bidding_strategy_type`, `bidding_strategy_system_status` | | 9 | campaign, metrics | `maximize_conversions.target_cpa_micros`, `maximize_conversion_value.target_roas`; `metrics.conversions`, `metrics.cost_micros` | | 10 | metrics | `search_impression_share`, `search_budget_lost_impression_share`, `search_rank_lost_impression_share` | | 11 | campaign_budget | `explicitly_shared`, `budget_network_settings`, `amount_micros`, `has_recommended_budget` | | 12 | campaign, segments | `network_settings.target_search_network`, `.target_partner_search_network`, `.target_content_network`; `segments.ad_network_type` | | 13 | campaign | `geo_target_type_setting.positive_geo_target_type` | | 14 | campaign_criterion | `location.geo_target_constant`, `negative` | | 15 | campaign | `primary_status`, `primary_status_reasons` | | 16 | campaign | `ai_max_setting.enable_ai_max`, `aca_migration_date_time`, `broad_match_migration_date_time`, `keyword_match_type` | | 17 | campaign, metrics | `bidding_strategy_type`; `metrics.search_budget_lost_impression_share` | | 18 | campaign | `asset_automation_settings` | | 19 | campaign_criterion | `brand_list.shared_set` | | 20 | ai_max_search_term_ad_combination_view | `search_term`, `headline`, `landing_page` | | 21 | campaign, segments | `segments.ad_network_type` on Performance Max (since v23) | | 22 | campaign_search_term_view, campaign_criterion | `search_term`; `keyword.text`, `negative` | | 23 | campaign_criterion, campaign | `brand_list.shared_set`; `shopping_setting.ignore_brand_exclusion_in_shopping_ads` | | 24 | asset_group, asset_group_asset | `ad_strength`, `primary_status`; `source`, `field_type`, `metrics.conversions` | | 25 | performance_max_placement_view | `placement`, `placement_type` | | 26 | ad_group, campaign, segments | `demand_gen_ad_group_settings.channel_controls.channel_strategy`; `advertising_channel_type`; `segments.ad_sub_network_type` | | 27 | search_term_view, metrics | `search_term`, `status`, `segments.keyword.info.text`; `metrics.cost_micros`, `metrics.conversions` | | 28 | segments | `search_term_match_type`, `search_term_match_source` | | 29 | none | No API field found that lists hidden terms | | 30 | campaign_criterion, shared_set, campaign_shared_set | `keyword.text`, `negative`; `shared_set.type`; `campaign_shared_set.shared_set` | | 31 | ad_group_criterion | `quality_info.quality_score`, `.search_predicted_ctr`, `.creative_quality_score`, `.post_click_quality_score` | | 32 | search_term_view | `search_term`, matched against your brand terms | | 33 | ad_group_ad, campaign_asset | `ad_strength`, `policy_summary.approval_status`; `field_type`, `source` | | 34 | ad_group, user_list | `targeting_setting.target_restrictions`; `size_for_search`, `membership_status` | | 35 | landing_page_view, expanded_landing_page_view | `unexpanded_final_url`, `metrics.speed_score`, `metrics.mobile_friendly_clicks_percentage`; `expanded_final_url` | | 36 | customer_user_access | `email_address`, `access_role`, `access_creation_date_time` | | 37 | customer | `auto_tagging_enabled`, `time_zone`, `currency_code`, `tracking_url_template`, `final_url_suffix` | | 38 | recommendation_subscription | `type`, `status` | | 39 | customer, recommendation | `optimization_score`; `type`, `dismissed` | | 40 | change_event | `change_date_time`, `user_email`, `client_type`, `change_resource_type`, `changed_fields`, `old_resource`, `new_resource` | One row per check: the v26 resource and the fields that answer it, each matched against its own field reference page on 5 November 2026. Source: Google Ads API v26 field references for campaign, search_term_view, campaign_search_term_view, change_event, customer and the other resources; API release notes[2](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-2), [13](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-13), [23](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-23), [29](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-29), [27](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-27), [28](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-28), [24](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-24) Performance Max's network breakdown arrived in the API in v23. **Don't treat it as the channel report**: Google's release note calls it an "ad network type breakdown" and doesn't promise the API rows match the channel performance report row for row. ## Can AI audit a Google Ads account? An AI connected to the account can run most of this audit: **7 of the 40 checks it can settle from the data alone**, and it can prepare the 23 marked "Both" for you. The 10 marked "Human judges" stay with someone who knows the margins and what the business wants to sell more of. - **Google Ads MCP server**: Google's own server; `search` "Executes GAQL requests to fetch resource metrics, budgets, and status", and the docs give the mode as "Read-only (current release)"[30](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-30) (Official) - **Recommendations**: Google's built-in suggestions and optimization score; can be auto-applied for the whole account (Built in) - **AdCtrl**: Reads reports, settings, search terms, conversion actions and change history in Claude or ChatGPT; changes wait for your approval (Connector) - **Markifact**: Its page: Google Ads "inside Claude, ChatGPT, and other MCP clients for audits, reporting, optimization, and campaign actions", and you "approve actions before anything goes live" (Connector) - **Ryze AI**: Its Claude page: "14 Google Ads tools: 8 read including raw GAQL and Keyword Planner, 6 approval-gated writes" (Connector) - **Adspirer**: Its homepage: "Ask for a campaign, audit, report, or recurring account check."; "Every high-impact change stays yours to approve." (Connector) Google's docs list its server as read-only, and the three other connectors each say changes wait for your approval. AdCtrl doesn't read user access (check 36), and I don't claim its reads for AI Max settings (checks 16–20), the Performance Max channel breakdown (21), or auto-tagging and auto-apply settings (37–38) today, so check those by hand. The prompt below is the one behind the conversion-actions table in the measurement section, run with read-only requests on our own paused test account. In AdCtrl, write: only reads your accounts ``` Audit my Google Ads account: list conversion actions and their settings, campaign settings, impression share and bidding status, the last 30 days of search terms with match type, and open recommendations. Flag what a human should judge. ``` None of these tools makes the judgement calls for you, and none of them should. I'd let the AI do the reading and keep the decisions on brand, Search partners and AI Max with a person. ## The full Google Ads audit checklist The full Google Ads audit checklist below has all 40 checks in the order above, one yes-or-no line each, so you can tick it off as you go. **A "no" in the measurement checks comes first.** - Check 1: Only real business outcomes are primary conversions. - Check 2: The goals each campaign bids toward match the business goal. - Check 3: Counting fits each action (one per click for leads). - Check 4: Conversion values are set and reflect real value. - Check 5: Enhanced conversions are switched on. - Check 6: Consent mode is in place for EEA and UK traffic. - Check 7: Offline and lead uploads are healthy, and API uploads go through the Data Manager API. - Check 8: Each bid strategy has enough conversions and isn't limited. - Check 9: CPA and ROAS targets are realistic against actual results. - Check 10: Lost impression share to budget and to rank were read before raising budgets. - Check 11: Shared budgets and budget channel settings are known. - Check 12: Search partners and Display on Search campaigns earn their spend. - Check 13: Each campaign's location option fits the business. - Check 14: Targeted and excluded locations match where you sell. - Check 15: No campaign is quietly limited. - Check 16: You know which Search campaigns run AI Max and which were auto-upgraded. - Check 17: AI Max campaigns use conversion-based Smart Bidding and aren't budget-limited. - Check 18: Final URL expansion and text customization are on only where pages and copy can take it. - Check 19: AI Max URL exclusions and brand settings are set. - Check 20: AI Max search terms, headlines and landing pages were read together. - Check 21: You know where Performance Max spends by channel. - Check 22: Performance Max search terms were reviewed and negatives added where needed. - Check 23: Performance Max brand exclusions are decided. - Check 24: Asset groups have decent ad strength and generated assets were reviewed. - Check 25: Performance Max placements were checked for brand suitability. - Check 26: Demand Gen channel controls are intended and migrated Display campaigns reviewed. - Check 27: Search terms with spend and no conversions were reviewed. - Check 28: The match type and match source mix is known. - Check 29: Hidden low-volume search terms are noted as a blind spot. - Check 30: Negative keywords and lists block waste without blocking good traffic. - Check 31: Quality Score was read by spend and by component. - Check 32: Brand and non-brand are reported separately. - Check 33: Every ad group has an approved responsive search ad, plus sitelinks and callouts. - Check 34: Audiences are on observation or targeting as intended, with usable list sizes. - Check 35: Landing pages that get the spend were checked on mobile speed. - Check 36: Only the right people have admin access. - Check 37: Auto-tagging is on and account settings are recorded. - Check 38: Auto-applied recommendations were reviewed. - Check 39: Recommendations that undo deliberate choices were dismissed. - Check 40: You know what changed before any drop in results. ## Frequently asked questions ### Is optimization score an audit? No. Google calls it "an estimate of how well your Google Ads account is set to perform", calculated from your settings and the recommendations available[25](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-25). A high score can mean you accepted suggestions that don't fit the business, so read the recommendations one by one instead. ### Did Google turn on AI Max in my campaigns? Possibly. New Search campaigns have AI Max on by default, and Search campaigns with automatically created assets or campaign-level broad match are auto-upgraded from September 2026. Add the AI Max columns to the campaign list, or read `campaign.aca_migration_date_time` and `campaign.broad_match_migration_date_time` in the API. ### Is there a free Google Ads audit template? The checklist in this article is the template: 40 yes-or-no lines you can print or paste into a sheet. The table of API fields turns each line into a query if you want to automate it. ### How often should you audit a Google Ads account? My own rhythm: the full 40 when I inherit an account or results move without an obvious reason, and the measurement and search terms checks every month. Google keeps changing defaults, so recheck the AI Max and Performance Max rows after each announcement. ### Can I see who changed a setting? In Google Ads, Tools → Change history shows changes for the past two years. The API's `change_event` resource has a `user_email` field but only covers the past 30 days. ## What to do next Start with the measurement checks. If the primary conversion is wrong, fix it before you judge anything else, then work down the list by money at risk: settings, the AI Max and Performance Max defaults, search terms, then ads, audiences, pages and history. Mark every line yes or no, and keep the "Human judges" lines for someone who knows the business. **Learn more:** [GA4 conversions don't match Google Ads](https://adctrl.ai/blog/conversion-discrepancy/) goes deep on measurement, [Google Ads MCP](https://adctrl.ai/blog/google-ads-mcp/) compares the official server with hosted connectors, and Claude for Google Ads covers day-to-day use. **Try it:** connect AdCtrl with the [getting started steps](https://adctrl.ai/docs/#getting-started), paste the audit prompt above into Claude or ChatGPT, and go through what comes back with this list next to you. Try every feature free for 3 days, no card needed[31](https://adctrl.ai/blog/google-ads-audit-checklist/#ref-31). AdCtrl can apply nothing until you approve it. ## Sources 1. [We're upgrading Dynamic Search Ads to AI Max](https://blog.google/products/ads-commerce/dsa-upgrade-to-ai-max-2026/), Google (Ads & Commerce Blog), 15 April 2026. Accessed 5 November 2026. 2. [Google Ads API release notes](https://developers.google.com/google-ads/api/docs/release-notes), Google, 30 October 2026. Accessed 5 November 2026. 3. [About change history](https://support.google.com/google-ads/answer/19888?hl=en), Google. Accessed 5 November 2026. 4. [Set up AI Max for Search campaigns](https://support.google.com/google-ads/answer/15909989?hl=en), Google. Accessed 5 November 2026. 5. [Google Display Ads campaigns have a new home in Demand Gen](https://support.google.com/google-ads/answer/17051545?hl=en), Google. Accessed 5 November 2026. 6. [About conversion goals](https://support.google.com/google-ads/answer/10995103?hl=en), Google. Accessed 5 November 2026. 7. [About conversion counting options](https://support.google.com/google-ads/answer/3438531?hl=en), Google. Accessed 5 November 2026. 8. [About offline conversion imports](https://support.google.com/google-ads/answer/2998031?hl=en), Google. Accessed 5 November 2026. 9. [Updates to your enhanced conversions settings](https://support.google.com/google-ads/answer/16884284?hl=en), Google. Accessed 5 November 2026. 10. [About consent mode](https://support.google.com/google-ads/answer/10000067?hl=en), Google. Accessed 5 November 2026. 11. [About channel prioritization and budget allocation](https://support.google.com/google-ads/answer/18385152?hl=en), Google. Accessed 5 November 2026. 12. [About advanced location options](https://support.google.com/google-ads/answer/1722038?hl=en), Google. Accessed 5 November 2026. 13. [Google Ads API v26 field reference: campaign](https://developers.google.com/google-ads/api/fields/v26/campaign), Google. Accessed 5 November 2026. 14. [How AI Max for Search campaigns works](https://support.google.com/google-ads/answer/15910187?hl=en), Google. Accessed 5 November 2026. 15. [Frequently asked questions about AI Max for Search campaigns](https://support.google.com/google-ads/answer/15913066?hl=en), Google. Accessed 5 November 2026. 16. [About the channel performance report](https://support.google.com/google-ads/answer/16260130?hl=en), Google. Accessed 5 November 2026. 17. [Channel controls in Demand Gen campaigns](https://support.google.com/google-ads/answer/15973205?hl=en), Google. Accessed 5 November 2026. 18. [Access new inventory and channel performance reporting in Performance Max campaigns](https://support.google.com/google-ads/answer/16710258?hl=en), Google (Google Ads Help announcement), 6 November 2025. Accessed 5 November 2026. 19. [Unlock more visibility and control in Performance Max](https://support.google.com/google-ads/answer/16451273?hl=en), Google (Google Ads Help announcement), 7 August 2025. Accessed 5 November 2026. 20. [Negative keywords in Performance Max campaigns](https://support.google.com/google-ads/answer/15726455?hl=en), Google. Accessed 5 November 2026. 21. [Apply brand exclusions to Performance Max or Search campaigns](https://support.google.com/google-ads/answer/14505308?hl=en), Google. Accessed 5 November 2026. 22. [About the search terms report](https://support.google.com/google-ads/answer/2472708?hl=en), Google. Accessed 5 November 2026. 23. [Google Ads API v26 field reference: search_term_view](https://developers.google.com/google-ads/api/fields/v26/search_term_view), Google. Accessed 5 November 2026. 24. [Google Ads API v26 field reference: other resources used by the checks](https://developers.google.com/google-ads/api/fields/v26/performance_max_placement_view), Google. Accessed 5 November 2026. 25. [About optimization score](https://support.google.com/google-ads/answer/9061546?hl=en), Google. Accessed 5 November 2026. 26. [About applying recommendations automatically](https://support.google.com/google-ads/answer/10279006?hl=en), Google. Accessed 5 November 2026. 27. [Google Ads API v26 field reference: change_event](https://developers.google.com/google-ads/api/fields/v26/change_event), Google. Accessed 5 November 2026. 28. [Google Ads API v26 field reference: customer](https://developers.google.com/google-ads/api/fields/v26/customer), Google. Accessed 5 November 2026. 29. [Google Ads API v26 field reference: campaign_search_term_view](https://developers.google.com/google-ads/api/fields/v26/campaign_search_term_view), Google. Accessed 5 November 2026. 30. [Google Ads MCP server](https://developers.google.com/google-ads/api/docs/developer-toolkit/mcp-server), Google, 30 October 2026. Accessed 5 November 2026. 31. [AdCtrl: pricing and free trial (homepage)](https://adctrl.ai/#pricing), AdCtrl. Accessed 5 November 2026. 32. [About AI Max for Search campaigns](https://support.google.com/google-ads/answer/15910366?hl=en), Google. Accessed 5 November 2026. 33. [AdCtrl docs: connect Google Ads and Meta Ads to Claude or ChatGPT](https://adctrl.ai/docs/), AdCtrl. Accessed 5 November 2026. 34. [Unlock next-level performance with AI Max for Search campaigns](https://blog.google/products/ads-commerce/google-ai-max-for-search-campaigns/), Google (Ads & Commerce Blog), 6 May 2025. Accessed 5 November 2026. 35. [Markifact MCP](https://www.markifact.com/mcp), Markifact. Accessed 5 November 2026. 36. [Ryze AI: Google Ads in Claude (MCP page)](https://www.get-ryze.ai/how-to-connect-claude-to-google-ads), Ryze AI. Accessed 5 November 2026. 37. [Adspirer homepage](https://www.adspirer.com/), Adspirer. Accessed 5 November 2026. 38. **Own data:** A lead-gen account bid toward a zero-value form fill as its only primary conversion while the qualified-lead action sat outside the Conversions column; an e-commerce account's Maximize Conversions goal partly chased cart events.. Sample: agency audit records (anonymised; count not published). Period: May–October 2026. Measure: count. Anonymised from agency audit records, May–October 2026; no client, number or identifying detail; mapping for the fact reviewer in tmp/blog-review/google-ads-audit-checklist-cases.md (gitignored). 39. **Own data:** Campaigns on the default "Presence or interest" location option spent on people outside the intended market (one account) or on interest-area clicks with no recorded conversions (another).. Sample: agency audit records (anonymised; count not published). Period: May–October 2026. Measure: count. Anonymised from agency audit records, May–October 2026; no client, number or identifying detail; mapping for the fact reviewer in tmp/blog-review/google-ads-audit-checklist-cases.md (gitignored). 40. **Own data:** Search campaigns also serving on Search partners and the Display Network, with spend and no conversions on those networks; a Shopping campaign's search partner traffic likewise had none.. Sample: agency audit records (anonymised; count not published). Period: May–October 2026. Measure: count. Anonymised from agency audit records, May–October 2026; no client, number or identifying detail; mapping for the fact reviewer in tmp/blog-review/google-ads-audit-checklist-cases.md (gitignored). 41. **Own data:** Optimization-score recommendations (Search partners, Display, target CPA, broad match) that would have reversed deliberate choices; the agency declined them rather than chase the score.. Sample: agency audit records (anonymised; count not published). Period: May–October 2026. Measure: count. Anonymised from agency audit records, May–October 2026; no client, number or identifying detail; mapping for the fact reviewer in tmp/blog-review/google-ads-audit-checklist-cases.md (gitignored). 42. **Own data:** Brand searches flattering Performance Max or whole-account results: brand-heavy conversions made reported performance look better than the non-brand work.. Sample: agency audit records (anonymised; count not published). Period: May–October 2026. Measure: count. Anonymised from agency audit records, May–October 2026; no client, number or identifying detail; mapping for the fact reviewer in tmp/blog-review/google-ads-audit-checklist-cases.md (gitignored). 43. **Own data:** Read-only AdCtrl audit of our own paused Google Ads test account: conversion action settings. Prompt: "Audit my Google Ads account: list conversion actions and their settings, campaign settings, impression share and bidding status, the last 30 days of search terms with match type, and open recommendations. Flag what a human should judge." Findings: two YouTube engagement actions set primary next to lead actions; one lead action counting many per click; one offline stage with a 90-day lookback where the others use 30; offline stages all secondary.. Sample: one account. Period: 5 Nov 2026. Measure: count. Read-only AdCtrl audit of our own paused test account, 5 Nov 2026, anonymised; capture file tmp/blog-review/google-ads-audit-checklist-captures/audit-capture-2026-11-05.md | own test account, all campaigns paused; no spend or performance stated; no account name or ID. ## Related articles - [**GA4 conversions don't match Google Ads: normal or broken?** Google Ads, GA4 and Meta count conversions on different dates and rules. Line up the right columns, then tell a normal gap from broken tracking.](https://adctrl.ai/blog/conversion-discrepancy/) - [**Google Ads MCP: official server vs hosted connectors (2026)** What Google's official Google Ads MCP server can and can't do, how to add it to Claude or ChatGPT, and when a hosted connector is simpler.](https://adctrl.ai/blog/google-ads-mcp/) ## Keep going [Learn more first **GA4 conversions don't match Google Ads: normal or broken?** Keep reading before you change anything.](https://adctrl.ai/blog/conversion-discrepancy/) [Ready to try it **Run this in Claude or ChatGPT with AdCtrl** Connect Google Ads and Meta Ads, ask in plain words and approve every change. 3-day free trial.](https://app.adctrl.ai/app) ![Kaan Catalkaya](https://adctrl.ai/media/founder-kaan-v1.webp) About the author [Kaan Catalkaya](https://adctrl.ai/#founder), Founder of AdCtrl Kaan Catalkaya founded AdCtrl and runs his own performance agency, where he manages Google Ads and Meta Ads for clients. AdCtrl gives Claude and ChatGPT the playbooks he uses on that client work. ## Put your AI to work on your campaigns. AdCtrl connects Claude or ChatGPT to Google Ads, Meta Ads, GA4, Tag Manager and Search Console. Ask in plain words and approve every change. [Start free](https://app.adctrl.ai/app) 3-day free trial · no card needed A product by mondaybrew ApS · CVR 45217779 · Vesterbrogade 74, 3. sal, 1620 København V, Denmark Google, Meta, ChatGPT and Claude are trademarks of their respective owners. AdCtrl is an independent product by mondaybrew ApS. --- Source: https://adctrl.ai/blog/google-ads-mcp/ Last updated: 2026-11-04 Google Ads MCP # Google Ads MCP: what Google's official server does and when a hosted connector fits The official server's tools, what setup really takes, and how it compares with hosted connectors in Claude and ChatGPT. ![Kaan Catalkaya](https://adctrl.ai/media/founder-kaan-v1.webp) By [Kaan Catalkaya](https://adctrl.ai/blog/google-ads-mcp/#author), Founder of AdCtrl Published 4 November 2026 · 15 min read ![Illustration of Claude and ChatGPT connected to a Google Ads account through an MCP server](https://adctrl.ai/media/blog/google-ads-mcp/hero-v1.webp) ## Short answer - Google's docs call the official Google Ads MCP server read-only, but release v0.0.6 (2 November 2026) adds asset and label writes that are on in a fresh install. - The official server has no tool for budgets, bids, statuses, keywords or new campaigns (checked 4 November 2026). - Developer tokens were sunset on 9 September 2026; existing token access moved to Google Cloud projects, and a new project starts at Test access. - Claude takes a custom MCP connector on every plan (Free gets one), and OpenAI lists full custom MCP for ChatGPT Business and Enterprise/Edu only, with Pro limited to read/fetch. - If someone can deploy to Google Cloud, the official server gives you reporting with no licence fee; budget, bid or keyword changes from Claude or ChatGPT need something beyond it. Google Ads MCP lets Claude or ChatGPT read a Google Ads account, and sometimes change it, through the Model Context Protocol. Google's official server has no licence fee, you run it yourself and it mostly reports. Since v0.0.6 on 2 November 2026 it also creates assets and labels, and hosted connectors run a server for you[1](https://adctrl.ai/blog/google-ads-mcp/#ref-1), [2](https://adctrl.ai/blog/google-ads-mcp/#ref-2). I run a performance agency and I build AdCtrl, which is one of those hosted connectors, so the comparison further down lists AdCtrl's limits too. Everything here was checked on 4 November 2026 against Google's docs, the google-ads-mcp repo and Anthropic's and OpenAI's help pages[3](https://adctrl.ai/blog/google-ads-mcp/#ref-3), [4](https://adctrl.ai/blog/google-ads-mcp/#ref-4). **Choose Google's server if** - You or a colleague can deploy a small service to Google Cloud - You mainly want reports, plus the odd asset or label change **Choose a hosted connector if** - Nobody on the team wants to run a server - You want budget, bid or keyword changes from the chat - **v0.0.6** release that added asset and label writes, 2 Nov 2026[2](https://adctrl.ai/blog/google-ads-mcp/#ref-2) - **7 tools** 3 read, 4 write - **$0** licence fee for Google's server - **9 Sep 2026** developer tokens sunset For day-to-day Claude workflows, see Claude for Google Ads. For Meta's equivalent, see [Meta Ads MCP](https://adctrl.ai/blog/meta-ads-mcp/). ## What is the Google Ads MCP server? Google's official server is **a small open-source program** between your AI assistant and the Google Ads API. The assistant asks for data in plain language and gets real numbers back. MCP (Model Context Protocol) is the standard Claude, ChatGPT and other assistants use to call outside tools. The server queries accounts with GAQL, the Google Ads Query Language. Google publishes the code in its googleads GitHub organisation, and the README says released versions go to PyPI as `google-ads-mcp`. People also use "Google Ads MCP" for third-party hosted connectors that talk to Google Ads. This page keeps the two apart. The official server is young, and most of what matters happened this autumn: 1. Oct 2025: Google creates the google-ads-mcp repo; version 0.0.1 reaches PyPI on 22 October 2. 9 Sep 2026: Developer tokens are sunset for the Google Ads API 3. 10 Sep 2026: v0.0.3 removes developer-token validation from the server 4. 30 Oct 2026: Google's docs page was last updated and still says read-only 5. 2 Nov 2026: v0.0.6 adds asset and label writes, switched on by default[2](https://adctrl.ai/blog/google-ads-mcp/#ref-2) ## What can Google's official server do? Google's server has three read tools and four write tools, and **the writes cover assets and labels only**. | Tool | What it does | Type | | --- | --- | --- | | `list_accessible_customers` | Lists the account IDs and names your login can reach | Read | | `search` | Runs GAQL queries for metrics, budgets and status | Read | | `get_resource_metadata` | Describes Google Ads resources and fields | Read | | `create_asset` | Creates text, image, YouTube video, sitelink, callout and other assets | Write | | `upload_video_asset` | Uploads a local video to YouTube for video assets (local mode only) | Write | | `manage_labels` | Creates, updates and removes account labels | Write | | `manage_label_associations` | Puts labels on campaigns, ad groups and criteria, or removes them | Write | The official server reads anything GAQL can return and writes only assets and labels. Source: Google Ads MCP docs page (last updated 30 October 2026) and the googleads/google-ads-mcp README at v0.0.6[3](https://adctrl.ai/blog/google-ads-mcp/#ref-3), [1](https://adctrl.ai/blog/google-ads-mcp/#ref-1) Every write uses what Google calls Propose & Confirm. In plain terms, the server first does a dry run and shows what would change. It only makes the change when a second call repeats the exact request with a checksum, a short code from the dry run, after you say yes. A missing or mismatched checksum is rejected before anything is touched. **Google's server has no tool for budgets, bids, statuses or keywords**, and none for creating campaigns. Google's docs put it this way: "This implementation is strictly read-only. It cannot modify bids, pause campaigns, or create new assets." The last part is already out of date, because v0.0.6 creates assets[3](https://adctrl.ai/blog/google-ads-mcp/#ref-3), [2](https://adctrl.ai/blog/google-ads-mcp/#ref-2). The current release is v0.0.6. To me that version number says **early software**, so I'd expect tools and defaults to change between releases and would pin the version I tested. The README shows how to run one exact published version with pipx. ## What does using the official server look like? Using Google's official server means asking questions in normal language while the assistant picks the tool. These two only read: In AdCtrl, write: only reads your accounts ``` List the Google Ads accounts you can access. ``` That one calls `list_accessible_customers` and returns the customer IDs and account names your login reaches. In AdCtrl, write: only reads your accounts ``` Show clicks, cost, conversions and status for each campaign in account 123-456-7890 over the last 30 days. ``` That one runs a GAQL query through `search`, which returns metrics plus budget and status fields. The assistant then writes the summary from those rows, so **check its maths against the numbers it shows you**. A write looks different. Ask it to create a label called "Q4 test" and put it on one campaign, and that becomes two proposals in a row: first `manage_labels` creates the label, then `manage_label_associations` attaches it, since the attachment refers to the new label. Each proposal first comes back as a dry run with a list of the changes and a checksum. The assistant shows you that list, and only after you approve does it send the same request again with the checksum[1](https://adctrl.ai/blog/google-ads-mcp/#ref-1). ## Is the official server read-only? **A fresh install of Google's server can write**; only the docs page still says read-only. The two Google sources disagree: **Google's docs page says** The mode is "Read-only (current release)", and the implementation "cannot modify bids, pause campaigns, or create new assets" (page last updated 30 October 2026)[3](https://adctrl.ai/blog/google-ads-mcp/#ref-3). **Google's code says** Release v0.0.6 on 2 November 2026 adds four write tools for assets and labels, and the bundled config switches them on by default[2](https://adctrl.ai/blog/google-ads-mcp/#ref-2). ![Screenshot of Google's Google Ads MCP server docs page with the highlighted note: This implementation is strictly read-only. It cannot modify bids, pause campaigns, or create new assets.](https://adctrl.ai/media/blog/google-ads-mcp/evidence-docs-readonly-v1.webp) Screenshot of Google's docs page, 4 November 2026: the note still says the implementation "is strictly read-only" and "cannot … create new assets", two days after the write tools shipped. ![Screenshot of the google-ads-mcp README on GitHub listing the write tools create_asset, upload_video_asset, manage_labels and manage_label_associations](https://adctrl.ai/media/blog/google-ads-mcp/evidence-repo-writes-v1.webp) Screenshot of the google-ads-mcp README on GitHub, 4 November 2026: four write tools behind Propose & Confirm, and the advice to set two options to false for a read-only deployment. To keep a deployment read-only, put these two lines in your `tools_config.yaml`, as the README says: - `labels: false` - `assets: false` I read it as a reporting server that is slowly growing write tools, with a checksum on every change. If I were setting it up on a client account, I'd **ship it read-only first** and turn writes on later, once I trusted how the assistant behaves. Note Read-only doesn't mean private. The README says the server exposes your account data to whichever assistant you connect it to. Self-hosting changes who holds the Google login; the AI app still sees the results. ## Do you still need a developer token? **You can ignore developer tokens now**: Google sunset them on 9 September 2026, and the latest server no longer asks for one[3](https://adctrl.ai/blog/google-ads-mcp/#ref-3), [5](https://adctrl.ai/blog/google-ads-mcp/#ref-5). A developer token was a key sent with every Google Ads API call, and the README's leftover "Configure Developer Token (Optional)" step can be skipped[1](https://adctrl.ai/blog/google-ads-mcp/#ref-1). Check your Google Cloud project's access level instead. Existing token access was transferred to Cloud projects. A new project starts at **Test access, which covers test accounts only**, and a Test-access project gets an error when it calls a live (production) account. To use the server on real accounts, apply for Explorer access or higher; the FAQ below has the steps. ## How hard is the official setup? Google's official setup is **a developer task**: you need someone who can create a Google Cloud project, install a Python package and, for claude.ai or ChatGPT, deploy a web service. If that isn't you, ask whoever looks after your website hosting or Google Cloud. Google publishes no setup time, and there's no licence fee. Cloud Run usage beyond Google's monthly free tier is billed to your own Google Cloud billing account[6](https://adctrl.ai/blog/google-ads-mcp/#ref-6). A few terms you'll meet: - **OAuth client:** the app identity (a client ID and secret) you create in Google Cloud so people can sign in with Google and grant access. - **stdio vs Streamable HTTP:** with stdio your AI app starts the server as a program on your own computer; with Streamable HTTP it runs as a web service with a URL. - **Cloud Run:** Google Cloud's service for running a program like this at a public web address. The steps, in order: 1. Pick a Google Cloud project and create OAuth credentials or a service account. 2. Install `google-ads-mcp` from PyPI or GitHub; v0.0.6 was the latest release when checked. 3. Decide on writes: keep the default, or set the two `false` lines above. 4. Run it locally over stdio, or deploy it to Cloud Run so it answers at `/mcp`. Google's docs also point to Google Ads API agent skills and the Developer Assistant, a plugin for Google Antigravity and Claude Code that writes client library code. ## How do you connect it to Claude or ChatGPT? **Claude Desktop can run Google's server locally** through its config file. claude.ai and ChatGPT connect from their own cloud, so they need a remote URL added as a custom connector, and the local setup doesn't carry over to them. For Claude Desktop, Google's docs give a ready-made `mcpServers` entry in the [configuration section](https://developers.google.com/google-ads/api/docs/developer-toolkit/mcp-server#configuration). It starts the server with `pipx run --spec git+https://github.com/googleads/google-ads-mcp.git google-ads-mcp` and points `GOOGLE_APPLICATION_CREDENTIALS` at your credentials file. In Claude Desktop that entry goes in `claude_desktop_config.json`. For a Cloud Run deployment, Google's docs list four requirements: - **URL:** your Cloud Run address with `/mcp` at the end, such as `https://your-cloud-run-url.a.run.app/mcp`. - **Sign-in:** OAuth 2.0 with your own OAuth client ID and secret. - **Redirect URIs:** add `https://claude.ai/api/mcp/auth_callback` and `https://chatgpt.com/connector_platform_oauth_redirect` to the OAuth client. - **Access:** deploy with `--allow-unauthenticated` plus application-level OAuth, because Claude and ChatGPT sign users in with OAuth, not Cloud IAM tokens. Which plans can add a remote MCP server, per Anthropic's and OpenAI's help pages: | App | Plan | Remote MCP server | | --- | --- | --- | | Claude | Free | One custom connector | | Claude | Pro, Max, Ultra | Yes | | Claude | Team, Enterprise | Yes; owners (and on Enterprise, a custom role) add them | | ChatGPT | Business, Enterprise/Edu | Full MCP, including writes; web only | | ChatGPT | Pro | Read/fetch only | | ChatGPT | Plus, Free | Not stated by OpenAI | Claude allows a custom connector on every plan; ChatGPT's full custom MCP support is limited to Business and Enterprise/Edu. Source: Anthropic's custom connector help article and OpenAI's help article on custom MCP servers, read 4 November 2026[4](https://adctrl.ai/blog/google-ads-mcp/#ref-4), [7](https://adctrl.ai/blog/google-ads-mcp/#ref-7) In Claude, Pro and Max users go to Customize > Connectors, click "+ Add", then "Add custom connector"; the server must be reachable from Anthropic's IP ranges, and Anthropic does not verify custom connectors[4](https://adctrl.ai/blog/google-ads-mcp/#ref-4). In ChatGPT's current Plugins experience you select the plus button and then "Add custom MCP server", without turning on Developer Mode first. OpenAI's article doesn't mention Plus or Free, so I won't guess about them. A hosted connector skips the Cloud Run part. AdCtrl goes into Claude as a custom connector at `https://app.adctrl.ai/mcp`, and in ChatGPT, adding it by address works on plans that allow custom MCP servers, which OpenAI lists as Business and Enterprise/Edu. The [getting started steps](https://adctrl.ai/docs/#getting-started) have the current menus. ## Is there a Google Ads MCP server URL? **Google offers no public hosted URL for its server**; the docs mention a hosted endpoint pilot for allowlisted participants only, with no public sign-up. For everyone else the URL is the one you deploy, such as your Cloud Run address ending in `/mcp`. On 4 November 2026 I searched Claude's connectors directory and the Plugins directory in ChatGPT for "google ads" and found no Google-published app in either. Claude's directory listed three third-party connectors: Windsor.ai, Supermetrics Marketing Analytics and Adspirer Search Ads. Listings change, so check again before you rely on that[8](https://adctrl.ai/blog/google-ads-mcp/#ref-8), [9](https://adctrl.ai/blog/google-ads-mcp/#ref-9). ## Who is each option for? Google's official option mostly reads, with asset and label writes, and fits a team with someone technical. **Several hosted connectors now change campaigns too**; they differ in how a change gets approved and what you see before it goes through. - **Google's server**: No licence fee, you run it; reads with GAQL and writes only assets and labels (Self-hosted) - **Windsor.ai**: Says it can "create, pause, and optimize campaigns, budgets, and bids" (Hosted) - **Supermetrics**: Shows each proposed change before it goes live; you choose when approval is needed (Hosted) - **Adspirer Search Ads**: Says it "plans, launches, and autonomously runs" search campaigns (Hosted) - **AdCtrl**: Before-and-after preview with the spend effect, then a readback of what Google saved (Hosted) All three of the others are listed in Claude's directory, and Windsor.ai lists 320 more sources and Supermetrics 200+. I'm not going to rank them. **Read each vendor's approval step closely**, because that decides what happens when the assistant gets something wrong. | Option | What it changes | Before a change goes through | Cost and limits | | --- | --- | --- | --- | | Google's server (you host) | Assets and labels | Dry run, then your approval with a checksum | No licence fee; Cloud Run past the free tier is billed to you; no budgets, bids, statuses or keywords | | Windsor.ai | Campaigns, budgets, bids and keywords (34 Google Ads actions) | New campaigns paused; most pause, enable and update actions can be undone; approval flow not checked | Writes run through the free Windsor MCP server; plan pricing not checked | | Supermetrics | Creates and updates campaigns (early access) | Change shown before it goes live; you choose when approval is needed, from none to all live changes | Early access, included in an existing Supermetrics subscription; subscription price not checked | | Adspirer Search Ads | "Plans, launches, and autonomously runs" search campaigns | Not checked | Not checked | | AdCtrl | Budgets, bids, keywords and campaigns | Before and after with spend effect, your approval in Claude or ChatGPT (per your app's permission setting), a check that nothing changed, then a readback | $19 or $39 a month, or $99 per user on Agency (excl. VAT); can't publish Tag Manager versions; no unified attribution model (each platform reports its own conversions); AI plan billed separately | As of 4 November 2026, Google's server mostly reads while several hosted connectors make changes; they differ in what you see and approve before a change goes through. Source: Google docs and repo, Cloud Run pricing, Claude's directory, Windsor.ai and Supermetrics docs, AdCtrl docs and pricing[3](https://adctrl.ai/blog/google-ads-mcp/#ref-3), [1](https://adctrl.ai/blog/google-ads-mcp/#ref-1), [10](https://adctrl.ai/blog/google-ads-mcp/#ref-10), [8](https://adctrl.ai/blog/google-ads-mcp/#ref-8), [6](https://adctrl.ai/blog/google-ads-mcp/#ref-6), [11](https://adctrl.ai/blog/google-ads-mcp/#ref-11), [12](https://adctrl.ai/blog/google-ads-mcp/#ref-12) If you only need reporting and someone on your team is happy in Google Cloud, I'd run the official server. No third-party vendor sits between you and Google, and you own the OAuth client. If you change budgets, bids or search terms every week, the official tool list won't cover it, and you'll be picking between hosted connectors on how they approve changes. Our [audit checklist](https://adctrl.ai/blog/google-ads-audit-checklist/) shows which reads matter before you change anything. ## What does a change look like through AdCtrl? AdCtrl, a hosted connector, puts **every change through a preview first**: it reads the current settings, shows the before and after with any effect on spend, and applies only what you approved[10](https://adctrl.ai/blog/google-ads-mcp/#ref-10). You ask for a change in Claude or ChatGPT. AdCtrl reads the current settings and prepares a preview with the account, the before and after, and any effect on spend. You approve it in your AI app. AdCtrl checks that nothing changed since the preview, sends exactly what you approved to Google, and reads the account back to report what Google saved. ![AdCtrl's preview card for a real budget change on my agency's own paused test campaign: average daily budget 1 DKK before, 2 DKK after, flagged as a spend change and not applied](https://adctrl.ai/media/blog/google-ads-mcp/budget-preview-real-v2.webp) A real AdCtrl preview from my agency's own paused test campaign, captured on 4 November 2026: the average daily budget goes from 1 DKK to 2 DKK, flagged as a spend change. Nothing went to Google because nobody approved it, and the preview expired unused. In AdCtrl, write: prepares a change preview you approve ``` Raise the daily budget of the campaign "YOUR CAMPAIGN" from 1 to 2 DKK. Show me the preview before you apply anything. ``` Whether Claude or ChatGPT asks you before applying depends on the approval settings in your AI app, which you choose ([approval settings](https://adctrl.ai/docs/#approvals)). The [how changes work](https://adctrl.ai/docs/#changes) section covers the rest, including what happens when Google doesn't confirm a change. ## Frequently asked questions ### How do I test Google Ads MCP safely on a real account? With Google's server, start with `labels: false` and `assets: false` so it can only read. With a hosted connector, check whether it has a read-only switch per account and turn it on first. Either way, ask a read-only question first and compare the answer with the Google Ads interface. ### What can the official server's asset and label writes change? `create_asset` creates text, image, YouTube video, sitelink, callout, structured snippet and other assets. `manage_labels` creates, updates or removes labels, and `manage_label_associations` puts them on or takes them off campaigns, ad groups, ad group criteria and the customer. Labels are handy for tagging what you want to report on; none of these tools touch budgets, bids or statuses. ### How do manager (MCC) accounts work? With Google's server you pass the manager's ID as `login_customer_id` on each call, or set `GOOGLE_ADS_LOGIN_CUSTOMER_ID` once as the default. `list_accessible_customers` returns the customer IDs your login can access directly, such as the manager account itself; client accounts under it are reached by passing that manager ID as `login_customer_id`. ### Can I change budgets from Claude without a hosted connector? Not through Google's server, which has no budget tool. Google's Developer Assistant, a plugin for Claude Code and Antigravity, generates client library code, including mutate scripts, which a developer can run. Several hosted connectors can: Windsor.ai and Supermetrics describe campaign and budget changes in their own docs, and AdCtrl changes budgets and bids after you approve a preview. ### How does a new Cloud project get past Test access? Test access covers test accounts only. Apply for Explorer access on the Google Ads API Overview page in Cloud Console; Google says review is automated and approved in most cases, for up to 2,880 operations a day on production accounts. Basic and Standard access need brand verification of your Cloud project first[5](https://adctrl.ai/blog/google-ads-mcp/#ref-5). Google's MCP docs ask for Explorer, Basic or Standard access before you use the server. ### Who sees my Google Ads data? Any MCP server passes the data you ask for to the AI app you connect. Anthropic does not verify custom connectors, so you are trusting whoever runs the server. With Google's server that is you; with a hosted connector it is the vendor, so read its scopes and data handling before you connect it. ## What to do next Google's server is a good way to get GAQL reporting into Claude or ChatGPT with no licence fee, if someone can host it. Its only writes are assets and labels. For budgets, bids or keywords from Claude or ChatGPT you need something beyond the official server, such as a hosted connector with a preview and approval step[1](https://adctrl.ai/blog/google-ads-mcp/#ref-1), [10](https://adctrl.ai/blog/google-ads-mcp/#ref-10). **Learn more:** read Claude for Google Ads for day-to-day workflows, or [Meta Ads MCP](https://adctrl.ai/blog/meta-ads-mcp/) if you run both platforms. **Try it:** connect AdCtrl with the [getting started steps](https://adctrl.ai/docs/#getting-started), ask a read-only question first, and look at a preview before you approve anything. Every [plan](https://adctrl.ai/#pricing) comes with a 3-day free trial, no card needed. ## Sources 1. [googleads/google-ads-mcp: README and tools_config.yaml (v0.0.6)](https://github.com/googleads/google-ads-mcp), Google, 2 November 2026. Accessed 4 November 2026. 2. [Implement asset and label management with propose-and-confirm flow (PR #139) and release v0.0.6](https://github.com/googleads/google-ads-mcp/pull/139), Google, 2 November 2026. Accessed 4 November 2026. 3. [Google Ads MCP server: Developer integration guide](https://developers.google.com/google-ads/api/docs/developer-toolkit/mcp-server), Google, 30 October 2026. Accessed 4 November 2026. 4. [Get started with custom connectors using remote MCP](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-MCP), Anthropic. Accessed 4 November 2026. 5. [API access management and developer token sunset](https://developers.google.com/google-ads/api/docs/api-policy/developer-token), Google, 9 September 2026. Accessed 4 November 2026. 6. [Cloud Run pricing](https://cloud.google.com/run/pricing), Google, 4 November 2026. Accessed 4 November 2026. 7. [Connecting custom MCP servers in ChatGPT](https://help.openai.com/en/articles/12584461-connecting-custom-mcp-servers-in-chatgpt), OpenAI, 28 October 2026. Accessed 4 November 2026. 8. [Claude connectors directory search, 'google ads' (own check)](https://claude.com/marketplace/connectors-plugins?q=google+ads), Anthropic, 4 November 2026. Accessed 4 November 2026. 9. **Own data:** Searched Claude's public connectors directory and ChatGPT's Plugins directory for 'google ads' and 'adctrl' to see whether Google publishes a first-party Google Ads app and whether AdCtrl is listed.. Sample: 2 directories, 4 searches. Period: 2026-11-04. Measure: count. No account data; ChatGPT viewed in the owner's signed-in session, so personal/workspace listings may appear. 10. [AdCtrl docs: connect Google Ads and Meta Ads to Claude or ChatGPT](https://adctrl.ai/docs/), AdCtrl, 3 November 2026. Accessed 4 November 2026. 11. [How to manage ad campaigns with AI tools](https://docs.supermetrics.com/docs/how-to-manage-ad-campaigns-with-ai-tools), Supermetrics, 30 October 2026. Accessed 4 November 2026. 12. [How Windsor MCP Write Actions Work](https://windsor.ai/documentation/windsor-mcp/write-actions/), Windsor.ai, 4 November 2026. Accessed 4 November 2026. 13. [google-ads-mcp release history (GitHub releases, repository metadata, PyPI)](https://github.com/googleads/google-ads-mcp/releases/tag/v0.0.3), Google (GitHub) / PyPI, 10 September 2026. Accessed 4 November 2026. 14. **Own data:** A real AdCtrl budget preview, requested through the AdCtrl connector, raising the average daily budget of my agency's own paused test campaign from 1 DKK to 2 DKK; not applied. Sample: one preview on one paused test campaign in my agency's own Google Ads account. Period: 2026-11-04. Measure: single capture; tool output saved in artifacts/evidence-budget-preview-2026-11-04.json. My agency's own account; no client data. ## Related articles - [**Meta Ads MCP: what it can change and how to lock it down** What Meta's official Ads MCP server can read and change, why some accounts aren't enabled, and how to block budget and campaign changes.](https://adctrl.ai/blog/meta-ads-mcp/) ## Keep going [Learn more first **Meta Ads MCP: what it can change and how to lock it down** Keep reading before you change anything.](https://adctrl.ai/blog/meta-ads-mcp/) [Ready to try it **Run this in Claude or ChatGPT with AdCtrl** Connect Google Ads and Meta Ads, ask in plain words and approve every change. 3-day free trial.](https://app.adctrl.ai/app) ![Kaan Catalkaya](https://adctrl.ai/media/founder-kaan-v1.webp) About the author [Kaan Catalkaya](https://adctrl.ai/#founder), Founder of AdCtrl Kaan Catalkaya founded AdCtrl and runs his own performance agency, where he manages Google Ads and Meta Ads for clients. AdCtrl gives Claude and ChatGPT the playbooks he uses on that client work. ## Put your AI to work on your campaigns. AdCtrl connects Claude or ChatGPT to Google Ads, Meta Ads, GA4, Tag Manager and Search Console. Ask in plain words and approve every change. [Start free](https://app.adctrl.ai/app) 3-day free trial · no card needed A product by mondaybrew ApS · CVR 45217779 · Vesterbrogade 74, 3. sal, 1620 København V, Denmark Google, Meta, ChatGPT and Claude are trademarks of their respective owners. AdCtrl is an independent product by mondaybrew ApS. --- Source: https://adctrl.ai/blog/meta-ads-mcp/ Last updated: 2026-11-04 Meta Ads MCP # Meta Ads MCP: what Meta's official connector can change, and how to lock it down The 88 documented tools, the rules Meta gives you per ad account, what those rules don't cover, and how other connectors approve a change. ![Kaan Catalkaya](https://adctrl.ai/media/founder-kaan-v1.webp) By [Kaan Catalkaya](https://adctrl.ai/blog/meta-ads-mcp/#author), Founder of AdCtrl Published 4 November 2026 · 17 min read ![Dark AdCtrl title card reading 'Meta Ads MCP: what Meta's connector can change', with an abstract before-and-after diff motif](https://adctrl.ai/media/blog/meta-ads-mcp/hero-v1.webp) ## Short answer - Meta's official ads MCP server is a free, Meta-hosted open beta with 88 documented tools on 4 November 2026, and not every ad account has access yet. - Meta's server can edit live campaigns and turn ads on; only new campaigns, ad sets and ads start out paused. - Rules in Meta Business Suite block 7 actions per ad account, including budget edits above an amount you set; check them before you connect. - Meta's rules have no named action for pixel event rules, A/B tests or lift studies, and don't say whether the targeting-and-audience rule covers custom-audience tools, so your AI app's tool settings are the sure way to block those. - Meta says an account is unlikely to be banned simply for using its server; the real risk is an assistant with write access and no rules. Meta Ads MCP is Meta's own connector that lets Claude, ChatGPT and other AI assistants read and change a Meta ad account. It is free from Meta, hosted by Meta and still in open beta. **It can edit live campaigns and turn ads on**, so set the per-account rules in Meta Business Suite before you connect it[1](https://adctrl.ai/blog/meta-ads-mcp/#ref-1), [2](https://adctrl.ai/blog/meta-ads-mcp/#ref-2). I run a performance agency and I build AdCtrl, one of the third-party connectors compared further down, so AdCtrl's limits are in that table too. The Google side is in my [Google Ads MCP guide](https://adctrl.ai/blog/google-ads-mcp/). Checked 4 November 2026 against Meta's developer docs, product page and Help Center[3](https://adctrl.ai/blog/meta-ads-mcp/#ref-3), [4](https://adctrl.ai/blog/meta-ads-mcp/#ref-4). - **88** documented tools, 4 Nov 2026[1](https://adctrl.ai/blog/meta-ads-mcp/#ref-1) - **7** actions you can block per ad account[5](https://adctrl.ai/blog/meta-ads-mcp/#ref-5) - **$0** from Meta to connect - **3** budget triggers in the rules API ## What is the Meta Ads MCP server? Meta's ads MCP server is **a remote server Meta runs at `https://mcp.facebook.com/ads`** that "lets you manage Meta ads directly from an AI agent". MCP (Model Context Protocol) is the standard Claude, ChatGPT and other assistants use to call outside tools, and Meta says its server works with any MCP-compatible agent. The server is one half of what Meta calls Meta ads AI connectors; the other half is a command-line tool. "Meta Ads MCP" also gets used for third-party connectors built on Meta's Marketing API. This page keeps them apart and calls the official one Meta's server. 1. 29 Apr 2026: Meta announces ads AI connectors in open beta 2. 16 Jul 2026: Connection through your own Meta app 3. 11 Aug 2026: Jon Loomer finds his ad accounts allowed "7 of 7" actions by default 4. 22 Sep 2026: Rules through the Marketing API, in an update to Meta's July post[6](https://adctrl.ai/blog/meta-ads-mcp/#ref-6) 5. 4 Nov 2026: Still open beta; not all ad accounts have access ## What can Meta's official server do as of November 2026? Meta's developer docs list **88 distinct tools across seven category pages**, and many of them write. I counted the rows on each category page; the overview's own "Available tools" page was empty when I checked. | Category | Tools | What the writes touch | | --- | --- | --- | | Ad creation and management | 28 | Campaigns, ad sets, ads, creatives, custom audiences and customer lists | | Catalog creation and management | 31 | Catalogs, products, product sets and feeds, including deletes | | Signals and datasets | 13 | Pixel event rules and parameters, including deletes | | Comprehensive reporting | 7 | Read only | | A/B tests and conversion lift | 7 | Test and lift study set-up | | Help and troubleshooting | 2 | Read only | | Activity logs | 1 | Read only | Five of Meta's seven tool categories can change something; reporting, help and activity logs only read. Source: Meta's ads MCP server overview and seven tool pages, counted 4 November 2026[3](https://adctrl.ai/blog/meta-ads-mcp/#ref-3), [1](https://adctrl.ai/blog/meta-ads-mcp/#ref-1), [7](https://adctrl.ai/blog/meta-ads-mcp/#ref-7) Your account may not see all 88. Meta says it is **rolling out tool access gradually** and tells you to ask your agent which tools you have. Meta's Help Center groups the same work into nine areas, adding custom audiences and partnership ads as their own items. Ask that first: In AdCtrl, write: only reads your accounts ``` Which tools do you have access to on Meta's ads MCP server? Group them into reads and changes. ``` In AdCtrl, write: only reads your accounts ``` Show spend, results and cost per result for each ad set in my ad account over the last 7 days, compared with the 7 days before. ``` The second prompt should only need the reporting tools. The assistant writes the summary from the rows Meta returns, so **check its maths against Ads Manager** the first few times. ## What can it change in your ad account? Meta's server can **create, edit and switch on** campaigns, ad sets and ads, and change audiences, catalogs and pixel event rules. Four tools on the ad management page matter most for safety: - `ads_update_entity` will "Update fields on an existing campaign, ad set, or ad", live ones included. - `ads_activate_entity` will "Change a paused campaign, ad set, or ad to active", which Meta notes "starts spending budget". - `ads_update_custom_audience_users` will "Add or remove users on a customer list audience by uploading hashed personal data." - `ads_delete_custom_audience` will "Delete a custom audience." Creation is the protected part. Meta's docs say "Write tools create entities in a paused state; your AI client asks for confirmation before activation." **Meta doesn't describe `ads_update_entity` as paused or drafted**, so I'd assume a budget or targeting edit on a live ad set can take effect when it is applied[1](https://adctrl.ai/blog/meta-ads-mcp/#ref-1). ## Paused or draft: what do Meta's own pages say? Meta's pages use both words. The developer docs say new campaigns, ad sets and ads are created paused; the product page says new campaigns "are created as drafts by default" and that "all new campaigns are created in a paused state for human review before going live". The Help Center adds an "Ads MCP draft mode" that saves new campaign work for review[1](https://adctrl.ai/blog/meta-ads-mcp/#ref-1), [2](https://adctrl.ai/blog/meta-ads-mcp/#ref-2), [4](https://adctrl.ai/blog/meta-ads-mcp/#ref-4). ![Screenshot of Meta's ads MCP server developer docs: write tools create entities in a paused state, and the AI client asks for confirmation before activation](https://adctrl.ai/media/blog/meta-ads-mcp/evidence-meta-paused-v1.webp) Screenshot of Meta's developer docs, 4 November 2026: new entities are created paused, and the AI client asks before activation. Either way, Meta's pages agree: **nothing new spends until someone switches it on**. Meta also says "Changes require your authorisation through your AI tool" and "Any actions taken on your behalf require your authorisation through the AI agent". About running campaigns, the only thing it says is that draft mode "avoids automatically pausing running campaigns when you make changes", so treat live edits as taking effect once you authorise them[2](https://adctrl.ai/blog/meta-ads-mcp/#ref-2), [4](https://adctrl.ai/blog/meta-ads-mcp/#ref-4). ## Is Meta's server free, and is it still in beta? **Meta charges nothing to connect.** The product page says "There's no additional cost from Meta to connect. Your AI tool's own subscription terms still apply." On 4 November 2026 the same page still called the connectors an open beta[2](https://adctrl.ai/blog/meta-ads-mcp/#ref-2). Note Meta's beta note says "Features and capabilities may change as we learn and iterate." Re-check your rules whenever your agent reports new tools. Meta hasn't said what happens to pricing after the beta. For a beta whose tool list moves, I'd note which tools your account had on the day you set your rules, so you notice when new ones show up. ## Why does it say is_ads_mcp_enabled: false? **The account isn't in Meta's rollout yet.** Meta's product page says "Not all ad accounts have access yet due to phased rollout", and the Help Center says "If you can't see Ads MCP server, you don't have access to this feature yet". The flag name `is_ads_mcp_enabled: false` comes from Pipeboard, which writes that some accounts "still get is_ads_mcp_enabled: false" on Meta's server. Meta's own pages don't use the name, and **Meta gives no request form or date** for access[8](https://adctrl.ai/blog/meta-ads-mcp/#ref-8). What you can check, in order: 1. Ask someone with full control of the business portfolio to open Settings in Meta Business Suite, then Integrations. Meta says those people manage the rules; it doesn't say whether others see the menu. 2. If Ads MCP server isn't listed there, the business doesn't have access yet, and the rules can't be set either. 3. If it is listed, open the ad account you connected. Meta doesn't say whether every account listed there is enabled, so try a read prompt against that exact account. 4. Ask the agent which tools it has; Meta rolls tool access out gradually. Third-party connectors are an option in the meantime. Pipeboard, for example, says its server "uses the standard Meta Marketing API and works on every account you have access to". ## How do you lock down Meta's connector before you connect it? You lock it down with **Meta's rules per ad account**, then with your AI app's settings per tool. The rules are set by someone with full control of the business portfolio, and Meta's server enforces them. I haven't tested these rules on my own accounts yet; this section comes from Meta's pages and Jon Loomer's write-up. ### Where the rules live Open Settings in Meta Business Suite, then Integrations, then Ads MCP server. Pick an ad account or catalog and allow or block each action. Once some actions are blocked, the account shows Limited next to "Take actions in this ad account". Jon Loomer's ad accounts all allowed "7 of 7" actions by default when he checked in August 2026. Meta doesn't document a default, so look at your own count before you connect anything. ### The seven actions My default on a client account would be **`edit_budget` and `edit_status` blocked**, creation allowed. New objects arrive paused, and a person turns them on in Ads Manager. The rules API names seven ad-account actions plus `all`; a rule only denies, so anything you don't block stays allowed. | Rule action | What it blocks | Notes | | --- | --- | --- | | `create_campaign` | New campaigns | | | `create_ad_set` | New ad sets | | | `create_ad` | New ads | | | `edit_budget` | Budget changes | Block all, or only above a cap; daily, lifetime or both | | `edit_targeting` | Targeting and audience changes | | | `edit_creative` | Creative edits | | | `edit_status` | Delivery status changes, such as turning ads on | Blocking it stops the agent turning ads on or off | | `all` | Every agent action on that ad account | Also covers tests and lift studies; Meta doesn't say whether it reaches pixel tools | Seven named actions plus "all" per ad account; catalogs have their own rules for products and product sets. Source: Meta's ads MCP server rules best practices page, read 4 November 2026[5](https://adctrl.ai/blog/meta-ads-mcp/#ref-5) ### The budget cap The budget rule has two modes in Business Suite: block every budget change, or block only budgets set above an amount you enter ("Budgets set above this amount"). The API version can trigger on a percentage change, an absolute change or an absolute maximum, and Meta's own example is "deny any budget increase above 20%". ### Partners and agencies A partner with access to your ad account can set its own rules for that account, and those rules only bind the partner's people, "meaning people in the partner business". So an agency's rules don't bind the client's own team, and the client sets its own. Agencies running many accounts can set rules from code. In a 22 September 2026 update to its July developer post, Meta announced a Marketing API endpoint to manage "agent controls in bulk, across many ad accounts and catalogs at once"; the API doc adds that there is no batch call, so it is one call per rule per asset. It is limited availability: a business that isn't enrolled gets error code 10 on the ad account endpoint and HTTP 403 on the catalog endpoint[5](https://adctrl.ai/blog/meta-ads-mcp/#ref-5), [6](https://adctrl.ai/blog/meta-ads-mcp/#ref-6). ### How the rule types fit together Meta's pages answer some precedence questions and leave others open: | Question | What Meta states | Not stated by Meta | | --- | --- | --- | | `all` vs the named actions | `all` denies "Every agent action on the account"; rules only deny, so there is no allow rule for it to conflict with | Whether Business Suite shows `all` as its own switch | | Ad account vs catalog | A rule applies to "a specific ad account or product catalog"; catalogs have their own actions | Whether an account rule reaches catalog tools used in its ads | | Owner vs partner rules | Partner rules apply only to the partner's employees | Whether a partner's rules can loosen the owner's for the partner's people | | Budget cap: Business Suite vs the API | Business Suite: block all, or budgets above an amount. API: percentage change, absolute change or absolute maximum | Whether Business Suite offers a percentage cap | | Who can set rules | Business Suite: people with full control of the portfolio, and partners for accounts shared with them. API: enrolled businesses only | Who sees the menu without full control | Rules deny actions per ad account or catalog; how overlapping rules combine is not documented. Source: Meta's rules best practices page and Help Center, read 4 November 2026[5](https://adctrl.ai/blog/meta-ads-mcp/#ref-5), [4](https://adctrl.ai/blog/meta-ads-mcp/#ref-4) ### What the rules don't cover The rule list has **no action for pixel event rules, A/B tests or lift studies**. For audiences, `edit_targeting` denies "Targeting and audience changes", but Meta doesn't say whether that covers creating, uploading to or deleting custom audiences. I got that by setting the rule table against the tool list. On an account where those matter, `all` blocks every agent action on the ad account, but Meta doesn't say whether that includes pixel tools; blocking those tools in your AI app is the sure option. ### Your AI app's settings Claude adds a second layer. Loomer describes Claude's connector settings for Meta's server, where "You can choose whether a tool is always allowed, blocked, or should request approval." He also found "there's still no way to limit access to ad accounts from this level", so Claude's settings can't narrow it to one ad account; Meta's rules are where you do that[9](https://adctrl.ai/blog/meta-ads-mcp/#ref-9). ### The checklist - You have full control of the business portfolio, or you've asked the person who does - Ads MCP server shows under Settings > Integrations in Meta Business Suite - You've opened each ad account and read its "x of 7" count - `edit_targeting` is blocked if audiences on the account matter - `edit_status` is blocked on accounts where nothing should go live without a person - `edit_budget` is blocked, or capped with "Budgets set above this amount" - Client accounts have rules set by the client, since partner rules bind only the partner's people - Catalogs used in ads have rules of their own - In Claude, the audience, customer-list, pixel and test tools are set to Blocked or Needs approval - You asked the agent which tools it has, and noted the count - Your first prompt on a live account is a read ## How do you connect it to Claude, ChatGPT or Claude Code? Meta's server connects with **a URL and a Facebook login**. Meta's get-started page says "Owning a Meta app is not a prerequisite on using the ads MCP server", and Meta's product page says standard setup is to "enter one URL in your AI tool and sign in with Facebook". The URL is `https://mcp.facebook.com/ads`. Meta names "ChatGPT, Claude and Perplexity plus data, cloud and marketing platforms, including Snowflake and Databricks"; other applications connect "using their own app". In Claude, Meta's server goes in as a custom connector. When I searched Claude's connectors directory on 4 November 2026 for "meta ads", "meta" and "facebook", none of the results was published by Meta. Which Claude and ChatGPT plans allow a custom MCP server is in the plan table of my [Google Ads MCP guide](https://adctrl.ai/blog/google-ads-mcp/). ### With your own Meta app (Claude Code, Codex and others) The own-app route is a developer task: you need a Meta app, and you sign in through OAuth or pass a user or system user access token (a system user is a non-person login, usually set up by whoever administers your Business Manager). If you use a system user token, it has to come from an Employee-role system user; Meta says Admin-role system user tokens can't access the server[10](https://adctrl.ai/blog/meta-ads-mcp/#ref-10). The get-started page lists the requirements: - **Permissions:** `ads_mcp_management`, plus `ads_read` or `ads_management`. - **Claude Code:** `claude mcp add --transport http --client-id meta-ads https://mcp.facebook.com/ads` Agencies have one more step. Meta's developer post says "If you manage data on behalf of other businesses, for example you are an agency or a partner, you need to submit your app for review". ## Is it safe, and can it get your ad account banned? **Meta answers the ban question itself**: "It's safe to connect your ad account through Meta's ads MCP server, and it's unlikely that an account would be banned simply for using it." That statement covers Meta's own server, not third-party connectors[4](https://adctrl.ai/blog/meta-ads-mcp/#ref-4). What I'd watch for is an assistant with write access changing a live budget or switching an ad on because it misread a request. Meta's paused-by-default creation helps with new objects, and the rules above cover most of the rest, provided someone set them; tests need `all` or your AI app's tool settings, and for pixel tools Meta doesn't say whether `all` reaches them, so block those in your AI app. ## Who is each Meta connector for? Meta's own connector suits an account that is already in Meta's rollout and an owner who will set the rules. Several third-party connectors change Meta campaigns too, and **each describes its own safeguards**, from paused creation to approval levels. - **Meta's server**: Hosted by Meta; 88 documented tools; rules per ad account[1](https://adctrl.ai/blog/meta-ads-mcp/#ref-1) (Official) - **Pipeboard**: Campaigns created paused; read-only tokens; scoped tokens depend on plan (Hosted) - **Windsor.ai**: 20 Meta write actions; created paused; most pause and update actions can be undone (Hosted) - **Supermetrics**: You choose when a person must approve, from never to every live change (Hosted) - **Adspirer**: 36 Meta tools; creates everything paused; can't delete campaigns (Hosted) - **AdCtrl**: Preview of each change, approval in your AI app, then a readback (Hosted) **Choose Meta's server if** - Your ad account is in Meta's rollout - You'll set the per-account rules before connecting - You want no third party between you and Meta **Choose a third-party connector (Pipeboard, Windsor.ai, Supermetrics, Adspirer or AdCtrl) if** - Your account still says it isn't enabled - You want a specific approval model, such as Supermetrics' approval levels - You run Google Ads and Meta from the same chat ## How does each connector approve a change? The connectors differ most in **what happens between "do it" and the change**. I'm not ranking them; read the approval column for the accounts you'd connect. | Option | What it says it can change on Meta | How a change gets approved | Limits and cost | | --- | --- | --- | --- | | Meta's server | Campaigns, ad sets, ads, creatives, audiences, catalogs, pixel event rules, tests | New objects paused; AI client asks before activation; per-account rules block actions | No cost from Meta; open beta; phased rollout per account | | Pipeboard | Bulk budget and status updates; duplicates campaigns, ad sets, ads and creatives | Campaigns created paused; read-only tokens; tokens scoped to accounts and tools | Token availability "depends on your plan"; price not checked | | Windsor.ai | 20 Meta actions: create, duplicate, turn on or pause, set budgets, update, boost a post | Created paused; most pause, turn-on and update actions can be undone; no approval step stated on its page | Runs through the free Windsor MCP server; plan price not checked | | Supermetrics | View, create and update campaigns (early access) | Owner picks: no approval, going live, budget plus going live, or all live changes | Early access, free with an existing Supermetrics subscription | | Adspirer | 36 Meta tools; launches and pauses campaigns | Creates everything paused for review before going live; cannot delete existing campaigns | Price not checked | | AdCtrl | Reports by campaign, ad set, ad and placement; creates campaigns, ad sets and ads | Preview, approval in Claude or ChatGPT, a check that nothing changed, then a readback; new objects paused | $19 or $39 a month, or $99 per user (excl. VAT); a third party holds the Meta connection; ChatGPT can't treat spending differently from edits; some features depend on Meta eligibility | As of 4 November 2026 every option here can change Meta campaigns; they differ in what you see and approve first. Source: Meta's docs, product page and Help Center; Pipeboard, Windsor.ai, Supermetrics and Adspirer pages; AdCtrl docs and pricing[1](https://adctrl.ai/blog/meta-ads-mcp/#ref-1), [2](https://adctrl.ai/blog/meta-ads-mcp/#ref-2), [8](https://adctrl.ai/blog/meta-ads-mcp/#ref-8), [11](https://adctrl.ai/blog/meta-ads-mcp/#ref-11), [12](https://adctrl.ai/blog/meta-ads-mcp/#ref-12), [13](https://adctrl.ai/blog/meta-ads-mcp/#ref-13), [14](https://adctrl.ai/blog/meta-ads-mcp/#ref-14), [15](https://adctrl.ai/blog/meta-ads-mcp/#ref-15) For the Google Ads version of this comparison, see [Google Ads MCP](https://adctrl.ai/blog/google-ads-mcp/). ## What does a Meta change look like with a preview first? AdCtrl, the hosted connector I build, shows **a preview of each change** in your conversation, waits for your approval in Claude or ChatGPT, checks that nothing changed since the preview, then reads back what Meta saved. Each ad account is either read only or allows changes, and new campaigns, ad sets and ads are created paused. The [how changes work](https://adctrl.ai/docs/#changes) and [approval settings](https://adctrl.ai/docs/#approvals) sections have the details[15](https://adctrl.ai/blog/meta-ads-mcp/#ref-15). ![AdCtrl preview card for a Meta ad set budget change, showing the ad account, the ad set and the budget before and after, with example data](https://adctrl.ai/media/blog/meta-ads-mcp/meta-preview-example-v1.webp) AdCtrl's preview card for a Meta ad set budget change, shown with example data. Nothing is sent to Meta until the change is approved. In AdCtrl, write: prepares a change preview you approve ``` Raise the daily budget of the ad set "YOUR AD SET" from 300 to 400 DKK. Show me the preview before you apply anything. ``` ## Frequently asked questions ### Can I make Meta's server read-only? Set the ad account's rule to `all` blocked; that denies every agent action on the account, including A/B tests and lift studies, which have no named action. Meta doesn't say whether that reaches pixel tools, so block those in your AI app too. In Claude you can set every write tool to Blocked. ### Can I limit Meta's server to one client's ad account? Not from Claude's connector settings, according to Jon Loomer's August 2026 check: "there's still no way to limit access to ad accounts from this level"[9](https://adctrl.ai/blog/meta-ads-mcp/#ref-9). Set `all` blocked on the accounts it shouldn't touch, or connect with a login that only has the one account. ### Does a budget cap stop a 20% increase? In the API, yes: `edit_budget` can trigger on a percentage change, and Meta's own example is denying any budget increase above 20%. In Business Suite the cap is an amount, set under "Budgets set above this amount". ### Does it work in Codex or Cursor? Meta's supported list doesn't name them. Meta says its server works with any MCP-compatible agent, names ChatGPT, Claude and Perplexity plus data, cloud and marketing platforms, and says developers can connect other applications using their own app. Claude Code has a documented command that passes your app ID. ### Do Meta's rules apply to other connectors? Meta describes them as rules "Our ads MCP server will enforce". For any other connector, read that vendor's own approval and scope settings instead of assuming Meta's rules carry over. ### Where do I see what the agent changed? Meta's server has an activity logs category with one tool. Ask the agent for recent activity after any session that wrote something, and compare it with Ads Manager. ## What to do next Meta's server is free, hosted by Meta and can change more than most people expect from a beta. Before you connect it, open Settings > Integrations > Ads MCP server, block `edit_status` and `edit_budget` or cap budgets, and decide what to do about pixel rules and tests, which the named rules don't cover, and custom audiences, where Meta's rule wording is unclear[5](https://adctrl.ai/blog/meta-ads-mcp/#ref-5), [4](https://adctrl.ai/blog/meta-ads-mcp/#ref-4). **Learn more:** read [Google Ads MCP](https://adctrl.ai/blog/google-ads-mcp/) if you run both platforms, or browse the [blog](https://adctrl.ai/blog/) for the rest of the cluster. **Try it:** if you'd rather approve a preview of each change, connect AdCtrl with the [getting started steps](https://adctrl.ai/docs/#getting-started), ask a read-only question first, and look at a preview before you approve anything. Every [plan](https://adctrl.ai/#pricing) comes with a 3-day free trial. ## Sources 1. [Ad creation and management (tool list); counted with the six other category pages](https://developers.facebook.com/documentation/ads-commerce/ads-ai-connectors/ads-mcp-server/ads-mcp-server-tools-ad-creation-and-management), Meta. Accessed 4 November 2026. 2. [Meta ads MCP server: connect AI tools](https://www.facebook.com/business/tools/ads-mcp-server), Meta. Accessed 4 November 2026. 3. [Ads MCP Server (overview)](https://developers.facebook.com/documentation/ads-commerce/ads-ai-connectors/ads-mcp-server/ads-mcp-server-overview), Meta. Accessed 4 November 2026. 4. [Manage ads from an AI agent with Meta ads AI connectors](https://www.facebook.com/business/help/1456422242197840), Meta. Accessed 4 November 2026. 5. [Rules best practices (ads MCP server rules API)](https://developers.facebook.com/documentation/ads-commerce/ads-ai-connectors/ads-mcp-server/ads-mcp-server-rules-best-practices), Meta. Accessed 4 November 2026. 6. [Meta's ads MCP server is now available for developers](https://developers.facebook.com/blog/post/2026/07/16/meta-ads-mcp-server/), Meta, 16 July 2026. Accessed 4 November 2026. 7. **Own data:** Counted the tool rows in the Markdown versions of Meta's seven ads MCP server category pages to get the number of documented tools. Sample: 7 category pages; 89 rows, 88 distinct tool names. Period: 2026-11-04. Measure: count. Public documentation; no account data. 8. [Meta Ads MCP Server (Pipeboard guide)](https://pipeboard.co/guides/meta-ads-mcp), Pipeboard. Accessed 4 November 2026. 9. [Meta Ads AI Connectors Get More Security Controls](https://www.jonloomer.com/meta-ads-ai-connectors-security-controls/), Jon Loomer, 11 August 2026. Accessed 4 November 2026. 10. [Get started (ads MCP server)](https://developers.facebook.com/documentation/ads-commerce/ads-ai-connectors/ads-mcp-server/ads-mcp-server-get-started), Meta. Accessed 4 November 2026. 11. [Pipeboard home (access and permissions)](https://pipeboard.co/), Pipeboard. Accessed 4 November 2026. 12. [How Windsor MCP Write Actions Work](https://windsor.ai/documentation/windsor-mcp/write-actions/), Windsor.ai. Accessed 4 November 2026. 13. [How to manage ad campaigns with AI tools](https://docs.supermetrics.com/docs/how-to-manage-ad-campaigns-with-ai-tools), Supermetrics, 27 April 2026. Accessed 4 November 2026. 14. [Meta Ads — manage from any AI client](https://www.adspirer.com/integrations/platforms/meta-ads), Adspirer. Accessed 4 November 2026. 15. [AdCtrl docs](https://adctrl.ai/docs/), AdCtrl. Accessed 4 November 2026. 16. [Introducing Meta Ads AI Connectors](https://www.facebook.com/business/news/meta-ads-ai-connectors), Meta, 29 April 2026. Accessed 4 November 2026. 17. **Own data:** Searched Claude's public connectors directory for 'meta ads', 'meta' and 'facebook' to see whether Meta publishes a listed connector and which third parties are listed. Sample: 1 directory, 3 searches. Period: 2026-11-04. Measure: count. Public directory, not signed in to an account. ## Related articles - [**Google Ads MCP: official server vs hosted connectors (2026)** What Google's official Google Ads MCP server can and can't do, how to add it to Claude or ChatGPT, and when a hosted connector is simpler.](https://adctrl.ai/blog/google-ads-mcp/) ## Keep going [Learn more first **Google Ads MCP: official server vs hosted connectors (2026)** Keep reading before you change anything.](https://adctrl.ai/blog/google-ads-mcp/) [Ready to try it **Run this in Claude or ChatGPT with AdCtrl** Connect Google Ads and Meta Ads, ask in plain words and approve every change. 3-day free trial.](https://app.adctrl.ai/app) ![Kaan Catalkaya](https://adctrl.ai/media/founder-kaan-v1.webp) About the author [Kaan Catalkaya](https://adctrl.ai/#founder), Founder of AdCtrl Kaan Catalkaya founded AdCtrl and runs his own performance agency, where he manages Google Ads and Meta Ads for clients. AdCtrl gives Claude and ChatGPT the playbooks he uses on that client work. ## Put your AI to work on your campaigns. AdCtrl connects Claude or ChatGPT to Google Ads, Meta Ads, GA4, Tag Manager and Search Console. Ask in plain words and approve every change. [Start free](https://app.adctrl.ai/app) 3-day free trial · no card needed A product by mondaybrew ApS · CVR 45217779 · Vesterbrogade 74, 3. sal, 1620 København V, Denmark Google, Meta, ChatGPT and Claude are trademarks of their respective owners. AdCtrl is an independent product by mondaybrew ApS.