Research Methodology

How LeadValets Tests Search and AI Visibility

JFBy Jonathan Floyd, Founder|Last updated:

This page documents how LeadValets measures search visibility and AI answer engine visibility for plumbing and HVAC companies. It covers the Search Authority Snapshot, the full Search Authority Audit™, and the Search Authority Tracker™. Every score, ranking change, and AI recommendation we report is produced using the methods described here — nothing is simulated or staged.

Sections marked [CONFIRM] contain process details that are being finalized. They will be replaced with confirmed language before the next update.

1How we choose queries

We test visibility using the questions that real buyers type into Google and AI answer engines — not generic keyword lists. Queries are built from four components: the trade (e.g., "plumber"), the service (e.g., "water heater repair"), the city or service area, and the intent type (emergency, high-value commercial, best-company comparison, general local service, or informational).

Each tracked project uses a set of rendered questions generated from PromptTemplate records, with variables filled in from the client's BusinessLocation data. The same question set is sent to every AI engine so results are directly comparable.

[CONFIRM] Query selection criteria

Confirm the exact criteria for including a query in the tracked set: minimum search volume threshold, whether Google Suggest / People Also Ask expansions are used, how many queries per client by default, and who approves the final list.

2How we control for location and device

AI answer engines and Google results both vary by the searcher's location. To produce consistent, comparable measurements, every query is run with an explicit geographic context tied to the client's service area.

[CONFIRM] Location and device controls

Confirm: (a) whether queries include the city name in the prompt text or rely on a location parameter, (b) whether tests run from a fixed datacenter IP, a residential proxy, or a geo-located browser session, (c) whether device type (desktop vs. mobile) is held constant or tested separately, and (d) how often location is re-verified.

3Which AI engines we test and how answers are recorded

We test the AI answer engines that plumbing and HVAC buyers are most likely to use when researching a contractor. Each engine is tested with the same rendered question, and the full response is saved.

For every response, we record:

  • Date — the timestamp the response was collected.
  • Engine — the AI answer engine and model/surface version (e.g., ChatGPT GPT-5, Gemini 3, Perplexity Pro, Claude Sonnet, Google AI Overviews).
  • Prompt — the exact rendered question text sent to the engine.
  • Full response — the complete text returned, stored verbatim in the ProviderRun record.
  • Source URL and screenshot — when available, the URL and a dated screenshot of the response.

[CONFIRM] Engine list and collection method

Confirm: (a) the exact list of engines tested by default, (b) whether responses are collected manually (admin-verified), via API, or via automated browser session, (c) whether follow-up prompts are used, and (d) the cadence (weekly, monthly, quarterly).

4Mention vs. recommendation vs. citation: definitions

These three terms describe different levels of visibility in an AI answer. They are not interchangeable — a business can be mentioned without being recommended, and cited without being mentioned by name.

Mention

The tracked business's name appears anywhere in the AI response — in the answer text, a list, a table, or a source citation. The business is named, but not necessarily endorsed.

Recommendation

The AI response positions the tracked business as a good choice for the buyer's need. This includes being listed in a "top picks" or "best companies" list, or being described with positive evaluative language ("a reliable option," "highly rated"). A recommendation is a subset of a mention — every recommendation is also a mention, but not every mention is a recommendation.

Primary recommendation

The tracked business is the first or most prominently recommended company in the response. This is the highest visibility level — the equivalent of ranking #1 in Google's Map Pack.

Citation

A source URL in the AI response links to or references the tracked business's website, Google Business Profile, or a third-party listing about them. A citation can reference the business without naming it in the answer text — the link is the signal. Citations are tracked separately in the Citation record with the source URL, domain, and source type (company website, directory, review platform, etc.).

The Tracker measures each of these as rates: mention rate, recommendation rate, primary recommendation rate, and citation rate — each calculated as the percentage of eligible responses where the event occurred.

5How competitors are selected

Each tracked project includes a set of competitor businesses so we can measure share of voice — not just whether the client is visible, but how visible they are relative to the other companies a buyer might choose.

[CONFIRM] Competitor selection process

Confirm: (a) how many competitors are tracked by default, (b) whether competitors are chosen by the client, by LeadValets, or both, (c) whether competitors are drawn from Google Maps results, AI responses, or a separate list, and (d) whether competitors can be added or removed mid-project.

6How ranking and call changes are calculated for client results

Case study results are reported as before-and-after comparisons with dated evidence. We do not report a ranking change without a dated screenshot or a call-tracking log entry that shows the starting and ending state.

[CONFIRM] Ranking and call calculation

Confirm: (a) which ranking positions are tracked (Map Pack, organic, AI answer position), (b) whether rankings are averaged across queries or reported per-query, (c) the call-tracking source used (client call forwarding service, Google forwarding numbers, or manual logs), (d) how seasonality is accounted for, and (e) the minimum observation period before a result is reported.

7How the Snapshot and Audit scores are weighted

The Search Authority Snapshot runs a server-side crawl of your homepage — the same way a non-JavaScript crawler would see it. Each check is binary (pass or fail), and the two scores are the sum of weighted passes. No check is ever staged or simulated — if we cannot fetch your site, we tell you.

Snapshot: SEO Readiness Score (0–100)

Total: 100 points

CheckWeightWhat it measures
HTTP status 20015Your server responds successfully to crawler requests.
HTTPS enabled10Your site is served over a secure connection.
Title tag present15Your homepage has a <title> tag describing your business.
Meta description present10Your homepage has a meta description summarizing what you do.
Visible word count ≥ 30010Your raw HTML contains at least 300 words of visible text before JavaScript runs.
sitemap.xml present10A sitemap.xml file exists at your site root.
Phone number visible in raw HTML10A US-format phone number appears as text in your HTML source.
tel: link present10Your phone number is wrapped in a clickable <a href="tel:…"> link.
City name in title, H1, or body10Your city appears in your title tag, H1 heading, or body text.

Snapshot: AI Readiness Score (0–100)

Total: 100 points

CheckWeightWhat it measures
JSON-LD structured data present20Your homepage includes at least one JSON-LD block with a @type.
llms.txt present15An llms.txt file exists at your site root to guide AI answer engines.
robots.txt allows Googlebot10Your robots.txt does not block Googlebot with Disallow: /.
robots.txt allows OAI-SearchBot10Your robots.txt does not block OAI-SearchBot (ChatGPT Search).
robots.txt allows ClaudeBot10Your robots.txt does not block ClaudeBot.
robots.txt allows PerplexityBot10Your robots.txt does not block PerplexityBot.
Title tag present5Your homepage has a <title> tag.
Meta description present5Your homepage has a meta description.
Visible word count ≥ 30010Your raw HTML contains at least 300 words of visible text.
City name in body text5Your city appears somewhere in your body text.

Snapshot: Local Visibility Score

The Local Visibility score uses the Google Places API to check your Google Business Profile presence and accuracy. It appears only when a Google Places API key is configured. If it is not, the Snapshot shows "Local check runs in the full audit" and the full Search Authority Audit™ covers it.

Full Audit: AEO Score (0–100)

The full Search Authority Audit™ produces an overall AEO score from seven weighted categories. Each category is scored 0–100 independently, then combined using the weights below.

CategoryWeightWhat it measures
Answer Readiness20Whether your site content directly answers the questions buyers ask AI engines.
Entity Clarity15How clearly your business name, services, and location are structured for AI extraction.
Local Authority15Google Business Profile completeness, local citations, and geographic relevance signals.
Structured Data15JSON-LD schema coverage across your site (LocalBusiness, FAQPage, Services, etc.).
Trust & Citation10Review quantity and recency, domain authority, and external citation consistency.
Technical Accessibility10Crawlability, page speed, mobile rendering, and indexability.
Topical Authority15Content depth and breadth across your service categories and locations.

How Snapshot checks are performed

  • Server-side fetch: We fetch your homepage HTML with a standard HTTP request — no JavaScript execution. This mirrors how search engines and AI crawlers first see your site.
  • Raw HTML parsing: Title tags, meta descriptions, JSON-LD, phone numbers, and city names are extracted from the raw HTML source, not the rendered DOM.
  • robots.txt: We fetch /robots.txt and check whether Googlebot, OAI-SearchBot, ClaudeBot, and PerplexityBot are blocked by a Disallow: / rule.
  • llms.txt: We check whether /llms.txt exists at your site root.
  • sitemap.xml: We check whether /sitemap.xml exists at your site root.
  • Failed checks: The three highest-priority failed checks are shown with a plain-English description and a one-line fix. Priority is based on impact: HTTP status and HTTPS first, then bot blocking, then content and structured data.

What the Snapshot does not do

  • It does not execute JavaScript — content loaded client-side is invisible to the Snapshot, just as it is to many crawlers.
  • It does not crawl multiple pages — only your homepage (or the URL you enter).
  • It does not test what AI engines actually recommend — that requires the full Search Authority Tracker™.
  • It does not check backlinks, reviews, or Google Business Profile data — those are covered in the full audit.

8Sample sizes, limitations, and update schedule

We are transparent about what our data can and cannot tell you. AI answer engines are non-deterministic — the same prompt can return different responses on different runs. We account for this by testing the same question set repeatedly and reporting rates, not single observations.

[CONFIRM] Sample sizes and update schedule

Confirm: (a) the default number of queries per tracked project, (b) the number of runs per query per reporting period, (c) the reporting frequency (monthly, quarterly), (d) known limitations (non-determinism, model version changes, geo-variance), and (e) when this methodology page is reviewed and updated.

9Corrections policy: how to report an error and how corrections are dated

If you find an error in any LeadValets report, case study, or methodology description, we want to know. Contact us at jfloyd@leadvalets.com with a description of the error and, if applicable, a link to the page or report.

[CONFIRM] Corrections process

Confirm: (a) the turnaround time for reviewing a reported error, (b) whether corrections are noted inline or in a changelog, (c) whether the "Last updated" date at the top of this page is bumped for every correction or only for substantive methodology changes, and (d) whether past versions of this page are archived.

When a correction is made, the "Last updated" date at the top of this page is updated to reflect the change.