The business we’re auditing
River City Drains is an illustrative, fictionaldrain-cleaning and plumbing service used to make the audit concrete. The findings are the kind real audits surface; the company isn’t real. It’s a single-location service business with a small React website, a Google Business Profile claimed years ago, and a handful of directory listings — a very common starting point.
The owner’s complaint is the one we hear most: “I asked ChatGPT for the best drain company in town and it never mentions us.” The audit’s job is to turn that frustration into a specific list of reasons and fixes — not vague advice about “doing more SEO.”
The five checks
Every audit on this site runs the same five checks, in the order an answer engine itself works: it has to find and read a page before consistent details matter, and details have to agree before corroboration counts. That order is the Crawl-Read-Cite Ladder — these checks sort onto its Crawl, Read and Cite rungs. None of this needs paid tools — a browser, the AI engines themselves, Google’s free Rich Results Test and a spreadsheet are enough.
Read the page the way a crawler does (View Source)
Open the business’s key pages, right-click and choose “View Source,” and search the raw HTML (Ctrl/Cmd+F) for the business name, full address and phone number. If they aren’t there — because the page only fills in after JavaScript runs — a retrieval layer can’t read them either.
Run the prompts a customer would actually type
Ask ChatGPT, Perplexity and Google's AI Overviews the real recommendation questions — "best [service] in [town]", "who does [service] near [neighborhood]" — in a fresh/logged-out session. Record whether the business is named, named correctly, and with the right details.
Check the structured data against what's on the page
Paste each page into Google’s Rich Results Test (or read the
application/ld+jsonblock in View Source) and confirm there is LocalBusinessschema whose name, address and phone match the visible text exactly — and that any FAQ schema mirrors questions the page genuinely answers.Compare the listings and citations side by side
Put the website, Google Business Profile, Foursquare, Apple Maps and the top directory listings in one table. Note every disagreement in name, address, phone, hours and category — those conflicts are what make an engine treat the business as ambiguous.
Write down findings and a fix list, in priority order
For each gap, record what an engine sees today and the single concrete change that closes it. Order the list the way an engine works — crawlable and readable first, consistent details next, corroboration last.
The audit, step by step
1. View Source — what a crawler actually sees
We opened the River City Drains homepage, right-clicked, chose “View Source,” and searched the raw HTML for the phone number. It wasn’t there. The source was essentially an empty <div id="root">— the name, address and phone only appeared once the React app hydrated in the browser. To a retrieval layer that reads the initial HTML, this business had no contact details at all. That single finding explains a lot: if an engine can’t read the NAP, it can’t confidently name the business.
If your name, address and phone aren’t in View Source, the AI layer reading the page can’t see them either — no amount of “AI optimization” fixes that.
2. Prompt tests — ask what a customer asks
In fresh, logged-out sessions we ran the same three prompts a real customer might type, in each engine:
- “Best drain cleaning company in [town]?” — ChatGPT named three competitors and not River City Drains; Perplexitynamed two, both with citations to directory pages; Google’s AI Overviewshowed a map pack the business wasn’t in.
- “Who fixes a blocked drain near [neighborhood]?” — no engine surfaced the business, even though its real service area covers that neighborhood.
- “Is River City Drains any good?” (a direct, name-it-yourself prompt) — ChatGPT hedged that it couldn’t find much information and offered the old phone number from a stale listing. That last detail is the tell: the engine had a record, just an out-of-date one.
Recording the exact wording matters. “Not recommended” and “recommended with the wrong phone number” are different problems with different fixes — and only the name-it-yourself prompt revealed that an old listing was leaking bad data.
3. Schema check — are the facts machine-readable?
We pasted each page into Google’s Rich Results Test and also scanned View Source for an application/ld+jsonblock. There wasn’t one anywhere on the site — “no items detected.” Schema doesn’t manufacture authority, but its absence means the few facts the page did state were left for the engine to infer rather than read directly. Adding LocalBusiness schema whose name, address and phone match the visible text exactly is one of the cheapest wins on the list.
4. Listing & citation consistency
Finally we put the website beside the Google Business Profile, Foursquare, Apple Maps and the top two directory listings in a single table. The conflicts jumped out: two different business names (“River City Drains” vs. “River City Drain Co.”), an old suite number on the profile, and a previous phone number still live on Foursquare — the very source ChatGPT leans on for local answers. To an engine cross-checking sources, these disagreements read as risk, and risky candidates get left out.
Findings & the fix list
Here’s the full audit summary — what an engine sees today, and the single concrete change that closes each gap. We work the list top-down, because a page has to be readable before consistent details or corroboration can help it.
| Check | What the audit found | Verdict | The fix |
|---|---|---|---|
| View Source — name, address, phone in raw HTML | Phone and address only appeared after the React app hydrated; View Source showed an empty <div id="root"> and no NAP text. | Needs fix | Server-render the contact block (or add a static footer with NAP in plain HTML) so the details are in the initial response. |
| Indexed in Google | site:rivercitydrains.example returned the homepage and one service page; the two location pages were missing. | Needs fix | Submit the location pages, fix an internal-link orphan, and confirm they aren't blocked or noindex'd. |
| LocalBusiness schema matches visible text | No JSON-LD on any page; the Rich Results Test reported "no items detected." | Needs fix | Add LocalBusiness schema with the same name, address, phone and hours shown on the page. |
| Google Business Profile vs. website NAP | Profile listed "River City Drain Co." and an old suite number; the site said "River City Drains" with the new address. | Needs fix | Pick one canonical name and address; update the profile and the site so they match character-for-character. |
| Foursquare / Apple Maps listing | A stale Foursquare listing carried the previous phone number — the same data ChatGPT leans on for local answers. | Needs fix | Claim and correct the Foursquare listing; verify the phone and category match the canonical set. |
| Answers real customer questions in plain text | Service pages were mostly stock imagery and a "quality you can trust" tagline — nothing on pricing, areas covered or emergency hours. | Needs fix | Add a short, self-contained answer block to each service page: what's included, areas served, response time, rough pricing. |
Notice the pattern: none of these are exotic, and the most damaging one — NAP missing from View Source — is also the most fixable. Run the same five checks on your own business and you’ll get a list that looks a lot like this. The walkthrough for testing your AI-search visibility covers the prompt-test step in more detail if you want to start there.
Where Google Business Profile and Foursquare fit
Two of the six findings above were listing problems, which is typical. Here’s the honest, non-salesy version of why those listings carry so much weight in a local audit.
Your Google Business Profile and Foursquare listing are among the cleanest, most structured descriptions of your business anywhere — name, location, category, hours, reviews. AI assistants lean on exactly this kind of local data: ChatGPT’s local results reportedly draw on a combination of Foursquare and Google Business Profile data — on the order of 70% between them — with Foursquare reportedly the larger. You can’t claim a Foursquare listing as directly, so an accurate, complete Google Business Profile is the practical lever most owners can actually control. Treat these listings as a strong content and entity signal the model reads — not a service you have to buy. The audit’s consistency check is really just making sure they tell the same story as your website.
River City Drains is a fictional, illustrative example, and AI engines behave differently from one another and change over time — so treat this procedure as a durable method rather than a set of guarantees, and figures like the Foursquare share as reported numbers that can shift. That’s exactly why we run a live, public experiment: to keep testing which fixes actually move AI visibility, and to fold real results into examples like this one as the baseline data lands.
Frequently asked questions
What does an AI visibility audit example look like?
How do I run an AI visibility audit for a service business?
What tools do I need to do this audit?
Does the Google Business Profile really matter that much?
Is this example a real business?
Keep going
Start with what AI can see about you
The fastest first step in any AI visibility audit is the prompt test — a plain-English walkthrough, no account required.
Test your AI-search visibility