Back to Blog
Case study9 min readSep 3, 2026

How I Created a Real Google Ads Campaign From ChatGPT

One prompt, five tool calls, three live Search campaigns — one per language — pointing at our own landing page. Including the four things ChatGPT could not do at creation and had to be told to fix.

The prompt I used

create new google ads campaign for
https://ai.loomascale.com/google-ads-chatgpt for loomascale.

The final goal is to transform high-intended users into signups
and subscriptions.

Design the campaign regions, languages

That is the whole thing, word for word — I have only split it into three blocks here so it is easier to read. Two decisions are hiding in it.

First, I named the goal, not the tactic. Not "build a campaign with these keywords" but "turn high-intent users into signups and subscriptions". Everything downstream — which countries, which match types, what counts as a good click — follows from that sentence, and if I had specified the tactic instead I would have got my own assumptions back in a nicer format.

Second, I handed over regions and languages on purpose. Those are the two settings I would normally guess at, and they are the two where I most wanted to see whether it would reason or just pick something.

What it did before it created anything

It worked for three minutes and fifty seconds across five tool calls, and only the last of those created anything.

It read the connected ad account. It pulled keyword ideas for the page I gave it. It resolved the place names it had chosen into the geo targets Google actually accepts — which matters, because an unrecognised place name is refused before anything is built rather than leaving half a campaign behind.

Then it told me something I had not asked for:

"google ads mcp" shows roughly 2,400 monthly searches across the markets it had selected, while the explicit ChatGPT-integration queries are much smaller. So it made MCP the core acquisition angle instead of leaning only on "connect ChatGPT to Google Ads" searches.

I did not ask for keyword research. I asked for a campaign. It went and looked first, and the finding changed the shape of what it built. That is the part of this that I keep thinking about.

What came back

  • Campaign: LoomaScale | ChatGPT Google Ads | High Intent
  • Campaign ID: 24217769491
  • Landing page: https://ai.loomascale.com/google-ads-chatgpt
  • Budget: 800 UAH/day
  • Bidding: Maximize Clicks, Max CPC 300 UAH
  • Primary optimization goal: SIGNUP
  • Language: English
  • Location setting: Presence only — users physically in the target countries
  • Regions: United States, United Kingdom, Canada, Australia, Germany, Netherlands, Sweden, Denmark

And, in its own words, the campaign was paused and not spending yet.

That pause is not politeness. The tool that creates a campaign has no status parameter at all — the status is fixed in our code before the request ever reaches Google, and the only value the tool can report back is PAUSED. There is no way to phrase a prompt that makes a campaign go live on creation, which is the entire reason I am willing to let an assistant do this on a real account. Going live is a separate tool, and I have to ask for it.

The keyword cluster it built was tight: "google ads mcp", "connect chatgpt to google ads", "google ads chatgpt integration", "chatgpt google ads connector", "manage google ads with chatgpt", "chatgpt google ads plugin", "run google ads from chatgpt". Seven terms, one theme, no drift into "google ads agency" or "ppc management".

The four things I still had to fix — in the same chat

This is the honest part, and it is the reason I am writing this post rather than just tweeting the screenshot. The structure was right. Several defaults were not, and every one of them is a limit of the creation tool rather than a bad decision by the model.

Match types. Everything the create call adds is broad match — the tool has no match-type parameter, so seven broad keywords is all it can produce. Broad match on a term like "google ads mcp" will happily find you people searching for anything adjacent. So the next step was adding the Exact and Phrase versions and deleting the broad ones. Two more tool calls, thirty seconds of reading.

Negative keywords. The create call cannot add them either; negatives are a separate call, and in Google Ads they live at ad group level rather than campaign level. We added job, jobs, salary, course, certification, Reddit and the rest of the low-commercial-intent pattern. On a term this technical, that list is the difference between buying signups and buying curiosity.

The bid cap. A freshly created campaign is Maximize Clicks with no ceiling, which on a small daily budget is a good way to buy four expensive clicks and stop. Max CPC 300 UAH went on afterwards.

The geo mode. New campaigns inherit Google's default, which targets people interested in your locations as well as people in them. For a product where the country is a proxy for purchasing power, interest is noise. Switching it to presence only was a one-line ask.

The primary optimization goal — SIGNUP — was also set after the fact, for the same reason: the create call builds the campaign, and the goal is a separate setting.

None of that took long, and all of it happened in the same conversation without me opening the Google Ads interface. But if you read a post claiming an assistant builds a finished campaign in one shot, that post is selling you something. What it builds is a correct skeleton and a set of defaults you have to look at.

Why those eight countries, and not Spain, Poland or India

The eight were United States, United Kingdom, Canada, Australia, Germany, Netherlands, Sweden and Denmark. Its reasoning, which I agreed with: for an English-language page, start where SaaS purchasing power and everyday English use overlap, and expand later based on actual signup cost rather than on hope. Spain, Poland, India and worldwide targeting were left out deliberately, not forgotten.

I want to be careful about how much credit that deserves. It is a starting hypothesis, not a finding. The only thing that will tell us whether Denmark belongs in that list is the cost per signup from Denmark, and that number does not exist yet. What the reasoning did buy me is a list I can argue with, which is more than a country picker gives you.

One campaign per language, not one campaign with three

I run three landing pages for this topic, one per language, each a separate indexable URL with its own canonical and hreflang. So I ran the same session twice more and now have three campaigns:

  • English — sends traffic to /google-ads-chatgpt, targets the eight markets above, keyword cluster in English.
  • Spanish — sends traffic to the Spanish page, targets Spain, Mexico, Chile, Argentina, Colombia and the United States, with "conectar chatgpt a google ads", "integración chatgpt google ads", "conector google ads chatgpt" and "gestionar google ads con chatgpt" alongside the English head term.
  • Ukrainian — sends traffic to the Ukrainian page, targets Ukraine, Poland, Germany and Czechia, with "підключити chatgpt до google ads", "інтеграція chatgpt google ads" and "керувати google ads через chatgpt".

"google ads mcp" stays in English in all three, because that is what people type regardless of the language they are reading in. The negatives were translated: empleo, trabajo, salario, curso, certificación for Spanish; робота, вакансії, зарплата, курс, навчання for Ukrainian.

Four reasons for the split rather than one campaign with three languages on it:

  • The ad has to match the page. A Spanish ad pointing at an English page is a bounce you paid for. One campaign cannot send different languages to different URLs.
  • Language targeting is a campaign setting, not an ad group one. Splitting is not a preference; it is how the setting works.
  • Budgets are not shared. Each campaign carries its own daily budget, so Spanish cannot quietly eat what I meant to spend on Ukrainian.
  • Cost per signup arrives per language. That is the number I will act on, and a merged campaign averages it into uselessness.

The United States appears in both the English and Spanish campaigns, which sounds like self-competition and is not: the language setting keeps them in separate auctions.

Then I typed "activate it"

activate it

Going live is its own tool, and it is fenced deliberately. It refuses to activate any campaign that was not created through LoomaScale, there is a daily cap on how many campaigns can be activated, and the budget is checked again at go-live rather than trusted from creation time. All three campaigns are enabled now.

There are no results in this post because there are no results yet. What I will judge them on, in two weeks: cost per signup per language, and the share of search terms that are actually about running ads from a chat. Not clicks, not click-through rate, not impression share. If the Denmark hypothesis is wrong, the search terms will say so before the conversion data does.

What I would tell someone doing this tomorrow

Name the goal, not the tactic. "Turn high-intent users into signups" produced a better campaign than any keyword list I would have pasted in.

Make it look before it builds. The 2,400-searches finding arrived because the prompt left room for research. A prompt that dictates the keywords never produces it.

Expect broad match. Everything created comes out broad. Plan on adding Exact and Phrase and removing the rest — it is two calls, and skipping it is how a tight cluster turns into a wide one.

Check the geo mode and the bid cap before activating. Both default to something looser than you want, and both are one sentence to change.

The review is the work. The campaign took four minutes to create and about twenty to read properly. That ratio is the whole thing: creation is now cheap enough that judgement is the only scarce part left.

If you want to try the same session on your own account, the setup takes about two minutes, and the prompt above is a stripped-down version of the fuller templates in 15 templates you can paste today. How approvals and write access work is in the documentation, and the page these campaigns point at is Google Ads and ChatGPT, connected.

— Andrii Pasika, founder of LoomaScale (more about me)

FAQ

Can ChatGPT create a Google Ads campaign on its own?
It can create the whole structure — budget, campaign, geo and language targeting, ad group, responsive search ad and keywords — in a single call, once your Google Ads account is connected to it through a connector. What it cannot do in that call is set match types, add negative keywords, cap the bid or change the location mode, so a real campaign takes a few follow-up asks in the same conversation.
Does the campaign go live automatically?
No. The creation tool has no status parameter at all: the campaign is paused before the request reaches Google, and PAUSED is the only status it can report back. Going live is a separate tool that has to be asked for, it refuses campaigns it did not create itself, and it re-checks the budget at that moment.
Do I need to grant write access for this?
Yes. Reading spend, search terms and conversions works with read access alone, but creating anything needs the manage-campaigns permission, and that is checked on our server on every call rather than taken from what the assistant claims. Without it the answer is a refusal explaining what to reconnect.
Why one campaign per language instead of one multi-language campaign?
Because language targeting is a campaign-level setting and each language has its own landing page. One campaign cannot send Spanish traffic to a Spanish page and English traffic to an English one, budgets are per campaign so a split keeps each language's spend where you put it, and cost per signup arrives per language instead of averaged into one number you cannot act on.
How many requests does a session like this use?
Every successful tool call counts as one request, and calls that fail cost nothing. The creation call is a single request even though it makes about seven changes in the account, but the follow-ups for match types, negatives, bidding, targeting and activation each count too, so a full campaign lands somewhere around a dozen. Ask the assistant to check your quota before starting a long session; checking is free.

Try it on your own account

Connect Google Ads, add LoomaScale to ChatGPT or Claude, and ask your first question. Nothing goes live without your approval.