datagrit

datagrit › Data › Google AI Overview Citation & Brand Tracker

Data

Google AI Overview Citation & Brand Tracker

Track which sources and domains Google AI Overview cites for each search query, with brand mentions and organic rank in one row.

Run it on Apify StoreUse the APIfrom $14.00 per 1,000 results + $10 per run · no code needed
from $14.00 per 1,000 results + $10 per runpay only for query results you get
JSON · CSV · Excelexport or call via API
Scheduled runsdaily or weekly feeds with Apify schedules
v0.2updated 2026-10-08

Google AI Overview Citation & Brand Tracker checks a list of Google search queries and tells you, for each one, whether Google shows an AI Overview, which sources it cites and in what order, whether your brand is named in the answer, and where your domain ranks in the organic results. Every query becomes one flat row you can export as JSON, CSV or Excel, call through the Apify API, or feed into n8n, Make and AI agents through MCP.

It is built for SEO and content teams, agencies and brand owners who want to measure visibility inside AI answers (often called AEO or GEO) instead of only in the ten blue links.

Why track AI Overview citations?

Output fields

Each row contains the query, market, aiOverviewPresent, aiOverviewText, citationCount, citedDomains, citations, the tracked domain fields (trackedDomainCited, trackedDomainsCited, bestCitationPosition, trackedDomainOrganicRank), the brand fields (brandMentioned, brandsMentioned, brandMentionCount), organicResults, sourceUrl and scrapedAt. Tracking fields are null when you did not set domains or brands.

A status row has found: false, a reason (noResults or fetchFailed) and a message; it is not charged.

How reliable is the data?

aiOverviewPresent: false means the results page Google returned for that request had no AI Overview; the row still carries the organic results. Google decides per request whether to show an AI Overview, so a query can flip between checks, which is why the Actor is meant to run on a schedule. An unreadable page is requested up to three times before it becomes a free fetchFailed row. The run message counts how many AI Overviews were found, how many had parsed citations and how many queries had organic results. If Google changes its page layout, the run fails with a message instead of delivering wrong rows: a page that carries citation records or the AI Overview disclaimer ("AI responses may include mistakes") but no AI Overview container is treated as unreadable, and a run that parses no organic results from any page stops with an error. Queries without an AI Overview (local, navigational and result queries often have none) and AI Overviews without source links are normal and never fail a run.

Is it legal to scrape Google results?

The Actor reads publicly visible search result pages without logging in and without bypassing access controls. You are responsible for using the data in line with applicable laws and the terms of the service. If you find an issue, open it in the Issues tab.

Output fields

Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.

FieldTypeDescriptionExample
querystringThe search query this row belongs to.what is kubernetes
glstringCountry code of the Google market the query was checked in.us
hlstringInterface language of the Google results page.en
foundbooleanFalse only on a status row, which is free and carries the reason in the reason and message fields.true
aiOverviewPresentbooleanTrue when Google showed an AI Overview for the query, false when it did not.true
aiOverviewTextstringPlain text of the AI Overview with line breaks between paragraphs and list items. Null when there is no AI Overview.Kubernetes is an open-source system for automating deployment, scaling and manag
citationCountintegerNumber of distinct source pages cited by the AI Overview.7
citedDomainsarrayDistinct domains cited by the AI Overview, in order of first appearance.["kubernetes.io","redhat.com"]
citationsarrayCited source pages in the order Google lists them: position, URL, domain and site name.[{"position":1,"url":"https://kubernetes.io/docs/concep
trackedDomainCitedbooleanTrue when at least one of your tracked domains is cited in the AI Overview. Null when no domains were tracked.true
trackedDomainsCitedarrayWhich of your tracked domains are cited in the AI Overview. Null when no domains were tracked.["kubernetes.io"]
bestCitationPositionintegerPosition of the first citation that belongs to a tracked domain. Null when none is cited or no domains were tracked.1
brandMentionedbooleanTrue when at least one tracked brand name appears in the AI Overview text. Null when no brand names were tracked.true
brandsMentionedarrayWhich tracked brand names appear in the AI Overview text. Null when no brand names were tracked.["Kubernetes"]
brandMentionCountintegerTotal number of times tracked brand names appear in the AI Overview text. Null when no brand names were tracked.4
organicResultCountintegerNumber of organic results parsed from the first results page.9
trackedDomainOrganicRankintegerPosition of the first organic result that belongs to a tracked domain. Null when none ranks on the first page or no domains were tracked.2
organicResultsarrayOrganic results of the first page: position, title, domain and displayed URL.[{"position":1,"title":"Kubernetes","domain&q
reasonstringOnly on a status row: noResults or fetchFailed.fetchFailed
messagestringOnly on a status row: plain-language explanation of why the query produced no result row.Google did not return a readable results page for this query after several attem
sourceUrlstringGoogle search URL the row was read from.https://www.google.com/search?q=what+is+kubernetes&hl=en&gl=us
scrapedAtstringISO 8601 timestamp of the run that produced the row.2026-10-08T08:00:00.000Z

Sample record

{
  "query": "what is kubernetes",
  "gl": "us",
  "hl": "en",
  "found": true,
  "aiOverviewPresent": true,
  "aiOverviewText": "Kubernetes is an open-source system for automating deployment, scaling and management of containerized applications.",
  "citationCount": 7,
  "citedDomains": [
    "kubernetes.io",
    "redhat.com"
  ],
  "citations": [
    {
      "position": 1,
      "url": "https://kubernetes.io/docs/concepts/overview/",
      "domain": "kubernetes.io",
      "site": "Kubernetes"
    }
  ],
  "trackedDomainCited": true,
  "trackedDomainsCited": [
    "kubernetes.io"
  ],
  "bestCitationPosition": 1,
  "brandMentioned": true,
  "brandsMentioned": [
    "Kubernetes"
  ],
  "brandMentionCount": 4,
  "organicResultCount": 9,
  "trackedDomainOrganicRank": 2,
  "organicResults": [
    {
      "position": 1,
      "title": "Kubernetes",
      "domain": "kubernetes.io",
      "displayedUrl": "https://kubernetes.io"
    }
  ],
  "reason": "fetchFailed",
  "message": "Google did not return a readable results page for this query after several attempts.",
  "sourceUrl": "https://www.google.com/search?q=what+is+kubernetes&hl=en&gl=us",
  "scrapedAt": "2026-10-08T08:00:00.000Z"
}

Input

FieldNameTypeWhat it does
queries requiredSearch queriesarrayGoogle search queries to check. Each query is one Google results page and produces one row. Duplicates are removed.
glCountry (gl)stringTwo-letter country code of the Google market, for example us, gb, de or pl. Controls which results and which AI Overview Google serves.
hlInterface language (hl)stringLanguage code of the Google results page, for example en, de, pl or pt-BR. The AI Overview is written in this language.
trackedDomainsDomains to trackarrayYour own domains or competitor domains, for example example.com. Subdomains match too. Rows then show whether the domain is cited in the AI Overview, at which citation position, and its organic rank. Leave empty to only list all citations.
brandNamesBrand names to trackarrayBrand or product names to look for in the AI Overview text, case-insensitive. Rows show whether each name is mentioned and how many times.
maxItemsMaximum rowsintegerStop after this many result rows in total across all queries. You are charged per result row, so this caps the cost of a run.

Call it from your code

Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.

curl -X POST "https://api.apify.com/v2/acts/datagrit~google-ai-overview-citation-tracker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["how to lower blood pressure","what is kubernetes","best running shoes for flat feet","how does a heat pump work","is intermittent fasting safe","what causes inflation","how to learn python fast","symptoms of vitamin d deficiency","how to start a vegetable garden","what is a roth ira","how to remove a stripped screw","what is a good credit score"],"trackedDomains":["kubernetes.io","mayoclinic.org"],"brandNames":["Kubernetes"],"maxItems":14}'
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/google-ai-overview-citation-tracker').call({
  "queries": [
    "how to lower blood pressure",
    "what is kubernetes",
    "best running shoes for flat feet",
    "how does a heat pump work",
    "is intermittent fasting safe",
    "what causes inflation",
    "how to learn python fast",
    "symptoms of vitamin d deficiency",
    "how to start a vegetable garden",
    "what is a roth ira",
    "how to remove a stripped screw",
    "what is a good credit score"
  ],
  "trackedDomains": [
    "kubernetes.io",
    "mayoclinic.org"
  ],
  "brandNames": [
    "Kubernetes"
  ],
  "maxItems": 14
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Install with npm i apify-client.

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/google-ai-overview-citation-tracker").call(run_input={
  "queries": [
    "how to lower blood pressure",
    "what is kubernetes",
    "best running shoes for flat feet",
    "how does a heat pump work",
    "is intermittent fasting safe",
    "what causes inflation",
    "how to learn python fast",
    "symptoms of vitamin d deficiency",
    "how to start a vegetable garden",
    "what is a roth ira",
    "how to remove a stripped screw",
    "what is a good credit score"
  ],
  "trackedDomains": [
    "kubernetes.io",
    "mayoclinic.org"
  ],
  "brandNames": [
    "Kubernetes"
  ],
  "maxItems": 14
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)

Install with pip install apify-client.

Frequently asked questions

Does it cover Google AI Mode?

No. It reads the AI Overview shown on the regular results page.

Do results match what I see in my browser?

Google personalises and varies AI Overviews, so a single check is a sample. Run the same list on a schedule and compare over time.

How many queries per run?

Up to 10,000 queries; runs read several queries in parallel.

Can I schedule runs?

Yes, use Apify schedules or call the Actor from your own workflow.

Try Google AI Overview Citation & Brand Tracker on Apify

Guide

How to track which sources Google AI Overview cites for your queries — Check a list of Google queries for AI Overview citations, brand mentions and organic rank, per country, in Python or cURL and without a browser.

Related Actors

Public procurement

UK Contract Expiry Radar - Recompete Leads

UK public contracts ending soon with incumbent supplier, buyer, value and contact - recompete leads from Contracts Finder award notices.

from $3.50 / 1,000 results
Company data

French Company Finder - Sirene Financials

French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.

from $5.60 / 1,000 results