# Google AI Overview Citation & Brand Tracker (`datagrit/google-ai-overview-citation-tracker`) Actor

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

- **URL**: https://apify.com/datagrit/google-ai-overview-citation-tracker.md
- **Developed by:** [datagrit](https://apify.com/datagrit) (community)
- **Categories:** SEO tools, Marketing
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Google AI Overview Citation & Brand Tracker do?

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?

- **Measure AI visibility.** See for which queries your domain is cited, at which citation position, and for which queries a competitor is cited instead.
- **Watch your brand in the answer text.** Brand names are counted inside the AI Overview text, so you can tell a mention without a link from a citation.
- **Compare AI and organic rank.** The same row shows your first organic position, so pages that rank but are never cited stand out.
- **Report by market.** Set the country and language and run the same list for several markets on a schedule to build a trend.
- **Feed content planning.** The full AI Overview text and the list of cited pages show what Google considers a good source for a topic.

### Example output

| query | aiOverviewPresent | citationCount | trackedDomainCited | bestCitationPosition | brandMentioned | trackedDomainOrganicRank |
|---|---|---|---|---|---|---|
| what is kubernetes | true | 6 | true | 1 | true | 1 |

```json
{
  "query": "what is kubernetes",
  "gl": "us",
  "hl": "en",
  "found": true,
  "aiOverviewPresent": true,
  "aiOverviewText": "Kubernetes (often called K8s) is an open-source platform that automates the deployment, scaling, and management of containerized applications. ...",
  "citationCount": 6,
  "citedDomains": ["kubernetes.io", "azure.microsoft.com", "youtube.com", "ubuntu.com", "redhat.com", "reddit.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": 2,
  "organicResultCount": 5,
  "trackedDomainOrganicRank": 1,
  "organicResults": [
    { "position": 1, "title": "Overview", "domain": "kubernetes.io", "displayedUrl": "https://kubernetes.io › docs › concepts › overview" }
  ],
  "sourceUrl": "https://www.google.com/search?q=what+is+kubernetes&hl=en&gl=us",
  "scrapedAt": "2026-10-08T08:00:00.000Z"
}
```

### How much does it cost?

You pay per result row, and the price per row is lower on higher Apify plans. A row is charged when the query returned a readable results page: with or without an AI Overview, the row carries the organic results. Queries with no results at all, or whose page cannot be read, give a free status row. The Apify free plan includes monthly credit to try it, and the maximum spend you set on a run stops the Actor when it is reached.

### Input

- **Search queries** – the Google queries to check, one row each.
- **Country (gl)** and **Interface language (hl)** – the Google market; the AI Overview differs by both.
- **Domains to track** – your domains or competitors; subdomains match. Fills the cited, citation position and organic rank fields.
- **Brand names to track** – names searched in the AI Overview text, case-insensitive.
- **Maximum rows** – total cap across all queries.

### 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.

### FAQ

**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.

### Related Actors

See other data Actors from the same publisher on the Store profile.

# Changelog

This Actor's version history is a separate document: https://apify.com/datagrit/google-ai-overview-citation-tracker/changelog.md

# Actor input Schema

## `queries` (type: `array`):

Google search queries to check. Each query is one Google results page and produces one row. Duplicates are removed.

## `gl` (type: `string`):

Two-letter country code of the Google market, for example us, gb, de or pl. Controls which results and which AI Overview Google serves.

## `hl` (type: `string`):

Language code of the Google results page, for example en, de, pl or pt-BR. The AI Overview is written in this language.

## `trackedDomains` (type: `array`):

Your 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.

## `brandNames` (type: `array`):

Brand or product names to look for in the AI Overview text, case-insensitive. Rows show whether each name is mentioned and how many times.

## `maxItems` (type: `integer`):

Stop after this many result rows in total across all queries. You are charged per result row, so this caps the cost of a run.

## Actor input object example

```json
{
  "queries": [
    "how to lower blood pressure",
    "what is kubernetes"
  ],
  "gl": "us",
  "hl": "en",
  "trackedDomains": [],
  "brandNames": [],
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

All extracted records as a dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "how to lower blood pressure",
        "what is kubernetes"
    ],
    "gl": "us",
    "hl": "en",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("datagrit/google-ai-overview-citation-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": [
        "how to lower blood pressure",
        "what is kubernetes",
    ],
    "gl": "us",
    "hl": "en",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("datagrit/google-ai-overview-citation-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "how to lower blood pressure",
    "what is kubernetes"
  ],
  "gl": "us",
  "hl": "en",
  "maxItems": 20
}' |
apify call datagrit/google-ai-overview-citation-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datagrit/google-ai-overview-citation-tracker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/I9BTeimFlHSDNhI92/builds/THhgpCwEN17sIFcKZ/openapi.json
