Google AI Mode names local businesses and then cites somebody else. Across 8 US local markets we pulled the AI Mode answer and the Google Maps ranking for the same query, and of the 57 references AI Mode cited, only 5 pointed at a ranked business's own website. The businesses were not invisible: 30 of the 160 businesses Maps ranked were named in the prose. They were just named without being linked. The citation went to the directory, the local paper's round-up, or the Reddit thread that mentioned them. Both halves are one API call each with Scavio: /api/v2/google/maps/search for the ranking and /api/v2/google/ai-mode for the answer and its reference list.
If you only read one number, read that one: being named and being cited are different outcomes, and local SEO advice mostly optimises for the first while measuring the second.
What we measured
Four cities (Austin, Denver, Tampa, Portland) crossed with two high-intent local verticals (plumbers, dentists). Eight markets, two calls each:
POST /api/v2/google/maps/searchwith"plumbers in Austin, TX"for what Google ranks.POST /api/v2/google/ai-modewith"best plumbers in Austin, TX"for what the AI surface answers and cites.
Then two counts. First, how many of the Maps-ranked businesses were named anywhere in the AI Mode prose, by normalised title match. Second, how many of AI Mode's cited references resolved to a domain that one of those ranked businesses uses as its website.
Every query returned exactly 20 Maps results. That is worth stating plainly, because local-AI studies often quote a figure near ninety businesses per query and then compute a percentage against it. The search endpoint returns a page of 20; anything larger is paging, and if your denominator is wrong every ratio downstream is wrong with it.
Named: 30 of 160. Cited: 5 of 57.
| Market | Maps results | Named in AI Mode | AI Mode references | Own-site citations |
|---|---|---|---|---|
| Plumbers, Austin TX | 20 | 6 | 6 | 0 |
| Plumbers, Denver CO | 20 | 4 | 6 | 0 |
| Plumbers, Tampa FL | 20 | 5 | 8 | 1 |
| Plumbers, Portland OR | 20 | 6 | 7 | 1 |
| Dentists, Austin TX | 20 | 4 | 6 | 0 |
| Dentists, Denver CO | 20 | 1 | 7 | 0 |
| Dentists, Tampa FL | 20 | 4 | 6 | 1 |
| Dentists, Portland OR | 20 | 0 | 11 | 2 |
| Total | 160 | 30 | 57 | 5 |
Naming rate is 18.8 percent and reasonably stable, between 4 and 6 businesses in six of the eight markets. Own-site citation rate is 8.8 percent of references, and in half the markets it was zero.
Dentists in Portland is the interesting outlier in both directions: AI Mode cited the most sources there (11) and named none of the twenty businesses Maps ranked. It answered the question using a different set of businesses than the ones holding the local pack.
Where the citations actually go
Counted by domain across all 57 references:
- Editorial round-ups, 23. Local newspaper and magazine "best plumbers in..." pages. The single most-cited category.
- Directories, 14. Yelp appeared 7 times, Zocdoc 4, Thumbtack 3.
- Google's own panel, 8. Exactly one per market, every market.
- The business's own site, 5.
- Reddit and other UGC, 5. Reddit alone was cited 4 times, as often as Zocdoc.
- Booking platforms, 2. ServiceTitan and HousecallPro booking pages, which are neither the business's site nor a directory but a scheduling widget the business pays for.
Two things fall out of that list. A local business that has never thought about the local paper's annual round-up is invisible to the largest citation category in the sample. And a Reddit thread from 2024 asking for plumber recommendations is, to AI Mode, a comparable source to Zocdoc.
Google cites Google, in every market
All 8 markets returned exactly one google.com reference, and in each case it was a searchviewer business panel rather than a link out. Here is the real reference list from Austin plumbers, unedited:
[
{ "title": "The Best Plumbers Near Austin, According to Locals",
"link": "https://www.statesman.com/best/map/best-plumbers-austin/",
"source": "Austin American-Statesman", "index": 0 },
{ "title": "Radiant Plumbing, Air Conditioning, & Electrical",
"link": "https://www.google.com/searchviewer/10?svid=CAwSHBIaCgNwdnESE0Nnd3ZaeTh4YUdNeE9YWjRjemcYCg",
"source": "google.com", "index": 1 },
{ "title": "Water Heater / Hot Water",
"link": "https://book.housecallpro.com/book/Magic-Plumbing-ATX/...",
"source": "housecallpro.com", "index": 2 },
{ "title": "Plumbing", "link": "https://book.servicetitan.com/yosrufdxq9f79lxzi2en41yu",
"source": "servicetitan.com", "index": 3 },
{ "title": "AUSTIN'S BEST PLUMBING - Updated August 2026 - Yelp",
"link": "https://m.yelp.com/biz/austins-best-plumbing-austin",
"source": "Yelp", "index": 4 },
{ "title": "Plumber recommendations? : r/Austin - Reddit",
"link": "https://www.reddit.com/r/Austin/comments/1bas2a9/plumber_recommendations/",
"source": "Reddit", "index": 5 }
]Six references. One newspaper, one Google-hosted panel, two booking widgets, one Yelp page, one Reddit thread from 2024. Zero plumber websites, in a market where Maps had twenty of them with a working URL each.
The opening paragraph of that same answer named Radiant Plumbing, Austin's Greatest Plumbing and Reliant Plumbing. All three rank in the Maps top twenty. None of the three was cited.
Reproducing it
Both calls take a bearer token and a JSON body. The AI Mode response carries text_blocks for the prose and references for the citation list, so the check for "am I cited" is a domain match against references, not a string search of the answer:
import requests
H = {"Authorization": "Bearer YOUR_SCAVIO_KEY"}
ai = requests.post("https://api.scavio.dev/api/v2/google/ai-mode",
headers=H, json={"query": "best plumbers in Austin, TX",
"gl": "us", "hl": "en"}).json()
cited = {r["link"].split("/")[2].replace("www.", "") for r in ai["references"]}
print("mysite.com" in cited)
maps = requests.post("https://api.scavio.dev/api/v2/google/maps/search",
headers=H, json={"query": "plumbers in Austin, TX"}).json()
for b in maps["local_results"]:
print(b["position"], b["title"], b["rating"], b.get("website"))A Maps result carries position, title, place_id, rating, reviews, phone, website, operating_hours and gps_coordinates. All 160 results in this study had a website value, which is what made the domain match possible at all.
Where this measurement is soft, and where our API is
Worth saying out loud rather than burying:
- Name matching is normalised string containment. A business trading under a name different from its Maps listing is counted as not named. The 18.8 percent figure is a floor, not a precise count.
- AI Mode answers vary between runs. The same query can return a different reference count minutes apart. Eight markets is enough to show a pattern of the shape "own-site citations are rare," not enough to put a confidence interval on 8.8 percent.
- Our v2 responses are cached. Two of the sixteen calls in this study came back with
cached: trueand a two-millisecond response time. That is good for your bill and bad for the word "realtime," so if you are tracking day-to-day movement, treat a cached hit as the previous reading rather than a fresh one. - Uncached, AI Mode is slow. Between 7.8 and 13.4 seconds per query in this run, against 3.6 to 5.0 seconds for Maps. Budget for it if you are checking hundreds of markets in a loop.
local_resultsis one page. Twenty rows. There is no parameter in this study that changes that, and we did not page.
What to do with this
The practical read is that local AI visibility has two separate jobs, and most local SEO effort only touches one.
Ranking in the local pack is job one, and it is well understood. Job two is getting onto the surfaces AI Mode treats as sources: the local paper's round-up, Yelp, the vertical directory that owns your category, and the community threads where people ask for recommendations by name. In this sample those four categories were 42 of 57 citations. Your own site was 5.
That also gives you a cheap test. Pull the reference list for the ten queries that matter in your city, count how many cite a page you can influence, and you have a target list that is specific rather than a guess about what the model likes.
Stop guessing at both halves
If you want this measured rather than assumed, you now own a small pile of ongoing work: two surfaces to query, an AI Mode answer that shifts between runs, a domain-matching step, and a Maps page size you have to keep honest in your denominator. None of it is hard. All of it is a job that runs weekly forever.
Scavio absorbs the collection half. POST /api/v2/google/ai-mode returns the answer with its full references array, POST /api/v2/google/maps/search returns the ranked businesses with their websites, and the proxy rotation, layout changes and retry logic behind both are our problem rather than your cron job.
It costs 1 credit per call, at $0.01 per credit, with no monthly commitment. The entire study on this page, 16 calls across 8 markets, cost 16 cents. Tracking 20 local markets on both surfaces every week is 40 calls a week, about $1.60 a month.
Start with 50 free credits, no card required — enough to run all 8 markets above three times over and check every number in this post yourself.
Reference: Google search API docs for the AI Mode and Maps endpoints.