{"schemaVersion":"1.0","canonicalUrl":"https://www.iamgeorgekelly.com/field-guide/ai-visibility-metrics-reference","markdownUrl":"https://www.iamgeorgekelly.com/field-guide/ai-visibility-metrics-reference/index.md","editorialNote":"AI-assisted research and drafting. Provider-specific claims link to primary sources. Frameworks are editorial proposals; worked examples are illustrative and are not employer performance results.","publication":{"name":"iamgeorgekelly","url":"https://www.iamgeorgekelly.com"},"citation":"George Kelly. AI visibility metrics: impressions, citations, referrals, and outcomes iamgeorgekelly. Updated 2026-09-18. https://www.iamgeorgekelly.com/field-guide/ai-visibility-metrics-reference","slug":"ai-visibility-metrics-reference","title":"AI visibility metrics: impressions, citations, referrals, and outcomes","description":"A source-linked metric dictionary for people and agents building AI visibility reports. Includes units, formulas, interpretation limits, and a versioned JSON download.","category":"Measurement","status":"published","published":"2026-09-18","updated":"2026-09-18","author":"George Kelly","answer":"An AI visibility report needs named units and evidence. Search impressions measure exposure, citations describe observed answers, sessions describe collected visits, and inquiries describe reviewed outcomes. Keep them as separate observations with their original scope. A larger combined “AI score” would hide which part actually changed.","sections":[{"id":"metric-reference","title":"Ten metrics with explicit boundaries","paragraphs":["Use this reference as a reporting contract. The provider rows describe Google reporting; the remaining rows are editorial conventions for a review ledger. Preserve that distinction when reusing the JSON in an agent workflow."],"table":{"headers":["Metric","Unit and calculation","What it does not establish"],"rows":[["Web impressions","impressions; Count","Unique people or on-site visits"],["Web clicks","clicks; Count","GA4 sessions or isolated AI clicks"],["Web CTR","percent; 100 × Web clicks / Web impressions; null when impressions = 0","AI CTR when divided by an AI-only denominator"],["Google AI Search impressions","impressions; Count; overlaps overall Web impressions","Additional exposure to add to Web totals, or AI visits"],["AI Assistant sessions","sessions; Sessions classified as AI Assistant","Google AI Overviews and AI Mode visits"],["Organic Search sessions","sessions; Sessions classified as Organic Search","A separation of AI search from other organic visits"],["Observed answer citations","answer observations; Count observations containing a verified link to the target URL","All-market share, all prompts, or a site visit"],["Resource requests","requests; Count matching method, path, period, and verified identity rule","A unique human, a citation, or agent identity from user-agent text alone"],["Qualified inquiries","inquiries; Count unique inquiries meeting written fit criteria","Revenue, incremental effect, or attribution to an unobserved source"],["Planned search clicks","modeled clicks; Impressions × assumed CTR percent / 100","A ranking forecast or measured audience growth"]]},"sources":["performance","ai-launch","channels"],"download":{"url":"/downloads/ai-visibility-metrics.json","label":"Download the versioned metric dictionary (JSON)"}},{"id":"observation-contract","title":"Attach evidence to every observation","paragraphs":["A value without its report context is easy to misuse. Store the metric identifier, value, availability status, property, date boundaries, timezone, filters, aggregation, evidence location, and capture time. Use null for an unknown value; zero is a positive claim that the observed count was zero.","The example below describes a missing observation. It is a fictional record, deliberately incomplete. An agent should request or collect the missing evidence before turning it into a measured baseline."],"code":"{\n  \"exampleOnly\": true,\n  \"metricId\": \"google_ai_search_impressions\",\n  \"value\": null,\n  \"dataStatus\": \"unavailable\",\n  \"propertyOrDataset\": \"sc-domain:example.com\",\n  \"startDate\": \"2026-09-01\",\n  \"endDate\": \"2026-09-14\",\n  \"timezone\": \"America/Los_Angeles\",\n  \"aggregation\": \"property\",\n  \"filters\": {},\n  \"evidenceReference\": \"Replace with a saved report\",\n  \"capturedAt\": null\n}"},{"id":"invalid-joins","title":"Reject these four misleading joins","paragraphs":["Consider a fictional reporting packet: 1,000 Web impressions, 20 Web clicks, 60 Google AI impressions, and three observed citations in a ten-answer manual panel. Web CTR is 2%. The remaining figures answer different questions."],"table":{"headers":["Tempting calculation","Review result"],"rows":[["1,000 + 60 = 1,060 total impressions","Reject: the AI exposure is already included in Web reporting"],["20 / 60 = 33.3% AI CTR","Reject: the numerator is not AI-only clicks"],["Three citations / ten answers = 30% of all AI answers","Reject: 30% describes only that saved panel"],["20 clicks minus collected sessions = people who rejected consent","Reject: the difference does not identify people or its cause"]]}},{"id":"acceptance-rules","title":"A short acceptance checklist for an agent","paragraphs":["Before writing a performance claim, inspect the observation rather than relying on the label supplied by the previous step. A report can pass arithmetic checks while still answering the wrong question."],"list":["Resolve metricId against the dictionary and retain its unit.","Check that the cited evidence exists and matches the selected dates and property.","Require matching filters and aggregation before computing a ratio.","Carry unavailable and preliminary statuses into the summary.","Keep raw observations, supported exclusions, and modeled scenarios separate.","State what changed in the measured unit; leave an unproven cause unresolved."]},{"id":"use-the-reference","title":"Use it in a report without inventing an API","paragraphs":["Download the JSON and record its schemaVersion and updated date with your analysis. It is a static vocabulary, not a feed of live performance data. The sourceUrl field points to the provider reference where applicable; a null sourceUrl marks an editorial convention rather than a provider metric.","If a provider adds a new measure or changes a definition, review the source and update the local mapping explicitly. Do not silently relabel older observations to fit the newest report. Preserve the original evidence so another reviewer can reconstruct the conclusion."],"links":[{"slug":"search-console-ga4-vercel-traffic","label":"Reconcile reports with different units","reason":"Apply the dictionary without forcing clicks, sessions, and page views to match."}]}],"sources":[{"id":"performance","title":"Search Console: Performance report","url":"https://support.google.com/webmasters/answer/7576553?hl=en","note":"Defines search impressions, clicks, and CTR. The scenario formulas and decision rules here are editorial calculations.","checked":"2026-09-18"},{"id":"ai-launch","title":"Google Search Central: Generative AI performance reports","url":"https://developers.google.com/search/blog/2026/06/gen-ai-performance-reports","note":"Confirms the August 31 worldwide rollout, available dimensions, and inclusion within overall performance. It does not provide a traffic forecast.","checked":"2026-09-18"},{"id":"channels","title":"Google Analytics: Default channel group","url":"https://support.google.com/analytics/answer/9756891?hl=en","note":"Defines AI Assistant and Organic Search classification. Collection and session scope still matter.","checked":"2026-09-18"}],"related":["search-console-generative-ai-report","ga4-ai-referral-traffic","ai-visibility-measurement","search-impressions-clicks-planner"]}