<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: adam williams</title>
    <description>The latest articles on DEV Community by adam williams (@adam_williams_86976b16263).</description>
    <link>https://dev.to/adam_williams_86976b16263</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4176222%2F51a94871-ebca-42e2-896a-cb7d90f2b167.jpg</url>
      <title>DEV Community: adam williams</title>
      <link>https://dev.to/adam_williams_86976b16263</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adam_williams_86976b16263"/>
    <language>en</language>
    <item>
      <title>Google Ads in Claude, with an approve button</title>
      <dc:creator>adam williams</dc:creator>
      <pubDate>Sun, 11 Oct 2026 03:22:40 +0000</pubDate>
      <link>https://dev.to/adam_williams_86976b16263/connecting-google-ads-to-claude-and-letting-it-make-changes-i-approve-303a</link>
      <guid>https://dev.to/adam_williams_86976b16263/connecting-google-ads-to-claude-and-letting-it-make-changes-i-approve-303a</guid>
      <description>&lt;p&gt;I built &lt;a href="https://camberstack.io" rel="noopener noreferrer"&gt;Camberstack&lt;/a&gt;, a hosted MCP server that connects Google Ads to Claude (and ChatGPT, Cursor, or any MCP client). This post is the setup and a real example of using it, so you can decide whether it's useful for your account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why connect Google Ads to an AI at all
&lt;/h2&gt;

&lt;p&gt;Most of what I do in Google Ads is the same handful of questions: what did each campaign cost last month, which searches are eating budget without converting, what should I block. The Google Ads UI answers all of them, but it's a lot of clicking. Claude can answer them in one sentence each, &lt;em&gt;if&lt;/em&gt; it can read the account.&lt;/p&gt;

&lt;p&gt;The catch is that letting an AI &lt;em&gt;change&lt;/em&gt; an ad account is scary. So the design rule is: &lt;strong&gt;the AI can read anything, but every change is a proposal you approve, and every applied change can be undone.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup (about two minutes)
&lt;/h2&gt;

&lt;p&gt;You need a Google account with access to Google Ads. No developer token or Google Cloud project, because the server is hosted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude (web or desktop):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Settings → Connectors → Add → &lt;strong&gt;Add custom connector&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name it Camberstack, URL: &lt;code&gt;https://camberstack.io/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sign in with Google. The consent screen shows exactly what's shared: Google Ads, plus optional read-only Search Console.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Claude Code:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude mcp add --transport http camberstack https://camberstack.io/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;a href="https://camberstack.io/google-ads-claude" rel="noopener noreferrer"&gt;full guide with screenshots&lt;/a&gt; covers Team/Enterprise plans and troubleshooting. There's also a &lt;a href="https://camberstack.io/google-ads-chatgpt" rel="noopener noreferrer"&gt;ChatGPT version&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real example
&lt;/h2&gt;

&lt;p&gt;Everything below uses the built-in demo account: a fictional plumbing business with six months of sample data. Changes there never reach Google, so you can repeat this yourself. Just ask Claude: &lt;em&gt;"Show me Camberstack's demo account."&lt;/em&gt; (The sample numbers shift a little day to day.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"How did each campaign do in the last 30 days?"&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Campaign&lt;/th&gt;
&lt;th&gt;Spend&lt;/th&gt;
&lt;th&gt;Conversions&lt;/th&gt;
&lt;th&gt;Cost/conv&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Emergency Plumbing – Search&lt;/td&gt;
&lt;td&gt;$346.51&lt;/td&gt;
&lt;td&gt;7.2&lt;/td&gt;
&lt;td&gt;$48.13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance Max – Services&lt;/td&gt;
&lt;td&gt;$270.73&lt;/td&gt;
&lt;td&gt;1.5&lt;/td&gt;
&lt;td&gt;$180.48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Water Heaters – Search&lt;/td&gt;
&lt;td&gt;$199.23&lt;/td&gt;
&lt;td&gt;1.8&lt;/td&gt;
&lt;td&gt;$110.68&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Drain Cleaning – Search&lt;/td&gt;
&lt;td&gt;$158.37&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brand – Northwind&lt;/td&gt;
&lt;td&gt;$15.06&lt;/td&gt;
&lt;td&gt;2.2&lt;/td&gt;
&lt;td&gt;$6.85&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Drain Cleaning spent $158 with zero conversions. So:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Which search terms cost money without converting?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Among the top results: &lt;em&gt;"how to unclog a drain"&lt;/em&gt; (9 clicks, $19.77) and &lt;em&gt;"tankless water heater reviews"&lt;/em&gt; (7 clicks, $19.82). Those are people researching, not people about to call a plumber.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Block those kinds of searches. Show me the change first."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude doesn't change anything yet. It creates a proposal, which is dry-run against Google so it either works or fails before you approve, and shows it to you:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Add 1 negative keyword(s) to campaign "Drain Cleaning – Search": "how to"
2. Add 1 negative keyword(s) to campaign "Water Heaters – Search": "reviews"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You say "apply it", and only then does it go to the account. If you change your mind later: &lt;strong&gt;"Undo that."&lt;/strong&gt; It reverses exactly what it applied, and nothing else.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it can and can't do
&lt;/h2&gt;

&lt;p&gt;It can change negative keywords, budgets and end dates, pause/enable, bids, bid strategy, location and language targeting, and conversion goals. It can also build whole Search campaigns, which are always created &lt;strong&gt;paused&lt;/strong&gt;, so building and spending are two separate approvals. Risky changes (turning a campaign on, doubling a budget) carry a warning in the proposal.&lt;/p&gt;

&lt;p&gt;It can't delete anything you built, touch billing, or change anything outside Google Ads. With Search Console connected, it can also tell you which searches you're paying for that already rank organically.&lt;/p&gt;

&lt;p&gt;One honest caveat: Claude asks before running tools that change things, &lt;em&gt;unless&lt;/em&gt; you've set that tool to "always allow". Keep the confirmation on for &lt;code&gt;apply_changes&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free on one Google Ads account, every tool, no card: &lt;a href="https://camberstack.io" rel="noopener noreferrer"&gt;camberstack.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;No Google Ads account? Connect anyway and ask for the demo account.&lt;/li&gt;
&lt;li&gt;The server is open source (MIT): &lt;a href="https://github.com/awilliams-2020/camberstack-mcp" rel="noopener noreferrer"&gt;github.com/awilliams-2020/camberstack-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it, I'd like to hear what broke or what you wished it could do. I read every comment.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>claude</category>
      <category>google</category>
    </item>
  </channel>
</rss>
