Between September 2nd and October 22nd, 2026 this site spent $810.83 on Google Ads. That bought 1,365 impressions and 56 clicks, at an average of $14.48 each.
It produced zero conversions. Zero inquiries. Nothing.
Over roughly the same period, AI assistants sent seven people. One of them became the only genuine inbound opportunity this site has ever produced.
I want to be careful about what that does and does not mean, because the obvious reading is too tidy and I do not think it is quite right. But the numbers are worth publishing in full, partly because almost nobody publishes theirs, and partly because the most useful finding was not which channel won. It was how badly I was counting one of them, and that I only found out because I went looking for something else.
What $810.83 actually bought
The campaigns were ordinary: Search only, no Search Partners, no Display, exact and phrase match keywords around custom software, CRM development, system integration and business process automation. Not a scattergun setup. The kind of thing you would build if you had read the documentation and were being careful.
| Metric | Value |
|---|---|
| Spend | $810.83 |
| Impressions | 1,365 |
| Clicks | 56 |
| Click-through rate | 4.10% |
| Average cost per click | $14.48 |
| Conversions | 0 |
| Inquiries | 0 |
A 4.10% click-through rate is not bad. The ads were written well enough that people clicked them. The problem was entirely about who.
The search terms are the whole story
Google reports the actual queries that triggered your ads, as distinct from the keywords you bought. That report is the single most useful screen in the product and the one I would check first in any underperforming account.
Here is a representative slice of what this money was spent on:
crm components diagram— one click, $5.51. Somebody wanted a diagram.qnxt software— one click, $14.88. A healthcare claims platform I have no connection to.appwrite io,actix web,nextjs crm,payload cms,django gui builder— developers researching frameworks.base44 pricing,lovable crm template,softr website,react no code builder— people shopping for a no-code tool to build it themselves.virtusa corp,dxc luxoft,belatrix software,vega it novi sad,creatio boston— people navigating to other firms by name.
None of these people were going to hire anyone. They wanted a diagram, a framework, a tool, or a different company.
Meanwhile the queries that were the right shape showed up and went nowhere:
software consultant— 6 impressions, 0 clickshubspot implementation— 4 impressions, 0 clicksintegrations consulting,system integration consultant,software implementation consultant,crm implementation specialist— 1 to 2 impressions each, 0 clicks
Those are buyers. There were almost none of them, and the ad was shown for a fraction of the few that existed.
Why bidding harder would not have fixed it
This is the part I got wrong first, so it is worth being explicit about.
When an account underdelivers, the instinct is to raise the bid. Google helps that instinct along. But the diagnostic that actually answers the question is the impression share split: how much of the available auction you lost to budget versus how much you lost to rank.
Lost to budget means you ran out of money and should spend more. Lost to rank means you were outranked, and that is a quality and relevance problem that more money does not solve.
Across every configuration tried — including a $15 maximum bid at $70 a day — this account lost 64% to 90% of impression share to rank, and frequently 0% to budget. The money was never the constraint.
The reason sat in the Quality Score components, which are worth reading separately rather than as one number:
| Component | Result |
|---|---|
| Quality Score | 2–5 out of 10 |
| Ad relevance | Above average, on every scored keyword |
| Landing page experience | Below average, on every scored keyword |
Ads matched the keywords well. The landing page did not match what the person who typed those keywords wanted. Which, given the search terms above, is exactly right — the page is for a business owner with a process problem, and the traffic was developers looking for a library.
Low Quality Score raises your cost per click and lowers your position at the same time, which is why the account was simultaneously expensive and invisible. That is not a bidding problem wearing a disguise. It is the auction correctly reporting that the ads were being shown to the wrong people.
The thing I should have checked before spending anything
Late in this, I ran the candidate keyword themes through Google's own Keyword Planner to get search volumes. I should have done that on day one. Two results stopped the strategy I was about to propose:
Local has no volume. custom software development phoenix, software developer phoenix, software development company phoenix and business software consultant all return 10 searches a month for the entire state of Arizona — which is Google's lowest reported bucket, meaning somewhere between one and ten. The live data agreed: those keywords drew zero impressions across three weeks. "Target your local market" is advice that assumes your local market is searching. Mine is not.
The adjacent niche is unaffordable. Terms around preventive maintenance and CMMS software have genuine volume — cmms at 14,800 a month, preventive maintenance software at 1,000 — at top-of-page bids of $25.49 to $155.54. That is a market where venture-funded software companies are buying the same words. At any budget a one-person consultancy would set, you are not on that page.
Twenty minutes with the Keyword Planner before launch would have reframed the entire exercise. The cost of skipping it was not the $810. It was running an experiment whose result was determined before it started.
The channel I was not measuring
While that was happening, something else was. I only found it because I went looking for the origin of an opportunity that had arrived without explanation.
The person who contacted me said they had found the business through Google. That was true, and it was also the last step rather than the first. The server log showed their first visit five days earlier, arriving with utm_source=chatgpt.com on the URL — the tag ChatGPT appends to links inside its answers. The Google search came later, and it was a search for the company name, by someone who already had the name.
What settles it is what the site does not rank for. Across 90 days there were zero organic impressions for any query about maintenance, assets, equipment, QR codes, inventory or tracking — the entire subject area of what they needed. A Google search for the problem could not have surfaced this site, because this site does not appear in those results at all.
So I built the report I should have had already. Over 90 days:
| AI crawler | Requests | Distinct pages |
|---|---|---|
| Meta | 2,086 | 86 |
| OpenAI | 472 | 94 |
| Amazon | 427 | 99 |
| ByteDance | 325 | 73 |
| Anthropic | 265 | 110 |
| Perplexity | 193 | 149 |
| Common Crawl | 17 | 17 |
| Google-Extended | 15 | 15 |
Roughly 3,800 fetches. Against that, seven human referrals — six from ChatGPT, one from Copilot. Five were single-page bounces. Two were real: one read three pages, one read ten across three different service pages. One of those two became the opportunity.
What the analytics actually showed
The intuition here is that analytics should have caught this on its own. Assistants tag the links they emit, utm_source is exactly the thing analytics is built to read, and so the tooling ought to have been telling me all along. That intuition is half right, and the half that is wrong is worth the detail.
GA4 added an AI Assistant channel to its default channel group in May 2026. It recognizes chatgpt.com as a source, sets the session medium to ai-assistant, and files the session under a channel named for it. It works.
It also caught two of the seven.
| Arrival | Tag on the URL | GA4 session | Server log |
|---|---|---|---|
| Oct 10, ChatGPT | utm_source=chatgpt.com | AI Assistant | Yes |
| Sep 11, Copilot | utm_source=copilot.com | Unassigned | Yes |
| Five more, ChatGPT | utm_source=chatgpt.com | No session recorded | Yes |
All seven arrived tagged the same way: a utm_source naming the assistant, and no utm_medium. That omission is why the Copilot visit landed in Unassigned despite GA4 correctly recording copilot.com as its source — default channel rules key on medium, and there was no medium to key on. The ChatGPT visit that did land in AI Assistant had its medium filled in by Google's own recognition of the source, which evidently did not happen for the others.
Why five produced no GA4 session at all, I cannot tell you from this data, and I would rather say so than invent a mechanism. Five of the seven were single-page visits in the server log, so the mundane explanation is the likely one: the measurement tag did not get a chance to fire, or was blocked. That is the ordinary attrition of client-side analytics, and it is why a server log and an analytics property will always disagree slightly about small numbers.
Search Console cannot show you any of it — it reports Google's own result pages, and a chat answer is not one.
So: the channel exists, it is worth turning on, and at this volume it undercounted by more than half. When the number you are deciding on is seven or two, that gap is the decision.
The setup I would now recommend is all three at once. Use GA4's AI Assistant channel as the headline figure. Add a custom channel group keyed on session source to catch the assistants that arrive without a medium — GA4 applies custom groups retroactively, so you see your own history the moment you create one. And keep reading the raw access log, because it is the only one of the three you can audit line by line.
I had been running paid search against a dashboard for seven weeks. The thing that actually worked did show up in it — twice, once under a channel called Unassigned.
What I am not claiming
This is one account, one niche, one seven-week window, and a sample of seven referrals. It is a case study. It is not evidence about your business, and anyone presenting numbers at this scale as a trend is selling something.
Several honest caveats:
- Seven referrals is not a channel. It is a signal. If it stays at seven a quarter it will never pay a bill on its own.
- The ads were not run perfectly. They were run carefully, but delivery was intermittent — only 23 of 51 days had any impressions at all — and a larger, longer test might read differently.
- Attribution is genuinely hard. I am confident about the assistant referral because the tag is unambiguous and the organic data rules out the alternative. I would not be confident about a case with weaker evidence, and neither should you be.
- Nothing here says AI search is a replacement. It says one channel was measured and the other was not, and the unmeasured one happened to be where the outcome came from.
What I changed
I did not stop the ads. There is promotional credit on the account and letting it expire unspent teaches nothing. What changed was the targeting: narrower keywords chosen from measured volume rather than intuition, pointed at a page written for that specific query, at a bid ceiling set from the Keyword Planner's own range rather than from hope.
The larger change was on the other side. Being fetched 3,800 times and cited roughly never is a specific, diagnosable condition, and the diagnosis turned out to be structural: the pages a buyer would need were written as positioning rather than as answers. Assistants retrieve a page, split it into chunks, and score each chunk on its own — and a chunk only gets quoted if it answers something without the rest of the page around it. Good prose that builds an argument across six paragraphs is exactly the wrong shape for that, however well written it is.
So the service pages and the commercial posts now carry explicit questions with self-contained answers, and declare what they are about in structured data rather than leaving it to be inferred from the prose. Whether that moves anything is an open question, and I will publish the result either way.
The one number I would ask you to go and find
If you take one thing from this: go and grep your own access log for chatgpt.com.
Then compare it against what GA4 reports for the AI Assistant channel over the same period. If the two numbers match, your setup is honest and you can stop thinking about it. If they do not, you have just learned the size of your own blind spot, which costs about thirty seconds to find out.
Mine was seven in ninety days against two in GA4, and one of the seven mattered more than $810.83 of the channel I was actually watching.