# Google AI Overview Tracker 🔍 (is your brand cited?) (`tagadanar/google-ai-overview-tracker`) Actor

Check a list of keywords against Google and get, per keyword, whether an AI Overview appeared, its full text, every page it cited, and a flag saying whether your brand or domain is in it. Keywords Google did not answer come back marked, never as a silent no. No API key.

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

## Pricing

from $5.60 / 1,000 ai overview checks

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google AI Overview Tracker: is your brand cited?

Give it a list of keywords. Get back, for each one, whether Google showed an AI
Overview, the full text it wrote, every page it cited, and a straight yes or no
on whether your brand or your domain is in it.

This is the question SEO teams started getting asked in 2025 and still cannot
answer from a rank tracker: not "where do I rank", but "does Google's AI answer
mention me at all, and who is it quoting instead".

Google now shows an AI Overview on roughly **43% of US searches** (Similarweb,
May 2026 — it was ~15% a year earlier). If your buyers see an AI answer before
they see a single blue link, whether that answer cites you is not a curiosity,
it is your visibility.

### What it costs, next to the usual tools

| Tool | What you pay | Notes |
|---|---|---|
| **This actor** | **$0.03 per keyword checked, everything included** | AI Overview text, cited sources and per-brand citation flags in one row; no subscription, no separate platform bill |
| Ahrefs Brand Radar | $50/month for 2,500 checks, up to $250/month | subscription add-on; ~$0.02 per check, committed monthly |
| Semrush AI Visibility Toolkit | from $99/month per domain | 25–200 tracked prompts per day depending on tier |
| SerpApi | $25/1,000 searches (Starter), $10/1,000 (Production) | the AI Overview officially needs a second request cycle |
| DataForSEO | $1.20–4 per 1,000 with the AI Overview surcharge | raw SERP JSON — the parsing, brand matching and honesty logic are yours to build |
| Other Apify AI Overview actors | $0.003 to $0.05 per query | raw overview scrape; most report a plain false when they cannot read the page |

Keywords that could not be checked are not charged. You pay for answers, not
for attempts.

*Pricing note: the all-in price above takes effect on September 5, 2026. Until
then this actor charges $0.008 per keyword checked, with platform usage (the
Google SERP proxy and compute, typically around $3 per 1,000 keywords) billed
to your own Apify account — the free monthly platform credit covers hundreds
of checks.*

### What you get per keyword

| Field | What it tells you |
|---|---|
| `query` | the keyword you asked about |
| `hasAiOverview` | `true`, `false`, or `null`. Never a guess (see below) |
| `aiOverviewStatus` | `present`, `absent`, `unknown` or `blocked` |
| `aiOverviewText` | the full text Google wrote |
| `aiOverviewWordCount` | how long the answer was |
| `sources` | every cited page: `position`, `title`, `url`, `domain` |
| `citedDomains` | just the domains, deduplicated, for quick pivoting |
| `sourceCount` | how many pages it cited |
| `brands` | per brand: `isCited`, `isLinkedSource`, `isMentionedInText`, `citedPositions`, `citedUrls` |
| `brandsCited` | the subset of your brands that made it in |
| `anyBrandCited` | one flag for dashboards |
| `detectionNote` | plain English reason when there is no answer |
| `charged` | whether this row cost you anything |
| `searchUrl` | the Google URL, so you can check any row by hand |

#### Cited is not the same as mentioned

Two things people mean by "am I in the AI Overview", kept separate because they
lead to different work:

- `isLinkedSource` means Google cited one of your pages as a source. That is the
  one that can send you traffic.
- `isMentionedInText` means Google named you in the answer without linking you.
  Being recommended by name with no link is a real outcome, and a links-only
  tracker cannot see it.

`isCited` is true when either is.

### The honest part: blocked is not the same as no

An AI Overview tracker that reports `false` when it simply failed to read the
page is worse than useless, because the column looks fine and quietly tells you
your visibility dropped. This actor cannot do that, by construction.

There are four states, not two:

- `present`: an AI Overview was there and it was read.
- `absent`: Google returned a normal results page with no AI Overview on it.
- `blocked`: Google did not return a readable page at all. `blockReason` says
  which wall it was. Not charged.
- `unknown`: the run could not confirm it is able to see AI Overviews at all, so
  a missing overview cannot be called a real absence. Not charged.

That last state exists because of something we measured rather than assumed: when
Google decides not to show an AI Overview, it does not leave a placeholder. The
page contains no AI Overview markup whatsoever. So a keyword with no overview and
a keyword whose overview never reached us look identical.

To tell them apart, every run first checks a control keyword that is known to
produce an AI Overview. If the control comes back with one, the run has proved it
can see them and its `false` answers are trustworthy. If the control comes back
empty, every `false` in that run is downgraded to `unknown`, and the run says so
in its status message. You get a loud "could not tell" instead of a quiet wrong
answer.

### Who buys this

**In-house SEO tracking AI visibility.** Feed your money keywords weekly, watch
`anyBrandCited` over time, and see which competitor domains Google keeps quoting
in the answers you want to be in.

**Content teams deciding what to write.** `sources` is a list of the exact pages
Google considers authoritative for a query. That is a content brief.

**Agencies reporting to clients.** One row per keyword, with the overview text
attached, so a client can read what Google actually said about their category
instead of taking your word for it.

**Anyone auditing a traffic drop.** If organic clicks fell on informational
keywords, checking which of them now carry an AI Overview is the first thing to
rule in or out.

### Input examples

Check a handful of keywords and look for your brand:

```json
{
  "queries": [
    "best crm for small business",
    "how to choose a project management tool",
    "what is technical seo"
  ],
  "brands": ["hubspot.com", "HubSpot"],
  "country": "us"
}
```

Just collect the overviews, no brand matching:

```json
{
  "queries": ["best running shoes for flat feet"],
  "country": "gb"
}
```

Track English keywords in a non-English market:

```json
{
  "queries": ["best erp for manufacturing", "sap alternatives"],
  "brands": ["odoo.com"],
  "country": "de",
  "language": "en"
}
```

### Questions people ask

**How often does Google actually show an AI Overview?**
Published studies through 2025 and 2026 put it somewhere between 15% and 45% of
searches depending on who is measuring and what they sampled, and it moves: one
large study tracked it rising to about 25% mid-2025 and settling near 16% later
in the year. Informational and question-shaped keywords trigger them far more
than navigational ones. Expect a good share of your list to come back `absent`,
and treat that as data.

**Why is `hasAiOverview` sometimes null?**
Because the run could not honestly say `false`. Either Google blocked that
request, or the run's control check failed. Both cases carry a `detectionNote`
explaining which, and neither is charged.

**Do I need an API key or a SerpApi account?**
No. Nothing to sign up for, nothing to paste in.

**Can it check Google in another country?**
Yes, pick the country in the input. The language follows it automatically unless
you set one, which is what you want when you track English keywords in Germany.

**Does it handle a keyword list from another actor?**
Yes. Paste an array, a single string, a comma-separated list, or pipe in a
dataset of objects with a `keyword` or `query` field. Bad input never fails the
run, it comes back with an explanation.

**Does it click "show more" to get the full overview?**
It reads the overview Google delivers with the results page. Where Google
truncates an answer behind an expander, the text you get is the part Google
served, and `aiOverviewWordCount` tells you how much that was.

**Is this the same as tracking ChatGPT or Perplexity?**
No. This is Google's AI Overview specifically, the block above the blue links on
google.com.

### Related actors

- Keyword Comparison and Seasonality: which of your keywords is actually bigger,
  and when it peaks.
- Google Trends Scraper: interest over time for the terms you are tracking.

***

Keywords: google ai overview tracker, ai overview checker, sge tracker, ai
overview api, google ai overview scraper, brand citation tracking, ai visibility
monitoring, generative engine optimization, geo seo tool, serpapi alternative,
ai overview rank tracker, google sge monitoring, ai search visibility.

# Actor input Schema

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

The search terms you want checked. Each one gets its own row telling you whether Google showed an AI Overview, what it said, and which pages it cited. Question-style and "best X for Y" keywords trigger AI Overviews far more often than brand or navigational ones.

## `brands` (type: `array`):

Names or domains to look for inside each AI Overview, for example <code>hubspot.com</code> or <code>HubSpot</code>. Each keyword's row then carries a flag per brand: cited as a linked source, named in the text, or neither. Leave this empty to just collect the overviews.

## `country` (type: `string`):

AI Overviews differ by country, and so do the pages they cite. Pick the market you actually sell in.

## `language` (type: `string`):

Leave on automatic and the language follows the country. Set it when you track a language that is not the country's default, such as English keywords in Germany.

## Actor input object example

```json
{
  "queries": [
    "best crm for small business",
    "what is technical seo"
  ],
  "brands": [
    "hubspot.com",
    "monday.com"
  ],
  "country": "us",
  "language": ""
}
```

# Actor output Schema

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

One record per keyword: whether an AI Overview appeared, its text, its cited sources and your brand flags.

# 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": [
        "best crm for small business",
        "what is technical seo"
    ],
    "brands": [
        "hubspot.com",
        "monday.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/google-ai-overview-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": [
        "best crm for small business",
        "what is technical seo",
    ],
    "brands": [
        "hubspot.com",
        "monday.com",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/google-ai-overview-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": [
    "best crm for small business",
    "what is technical seo"
  ],
  "brands": [
    "hubspot.com",
    "monday.com"
  ]
}' |
apify call tagadanar/google-ai-overview-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tagadanar/google-ai-overview-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/ykMeP8T1DhKgFkgYY/builds/Id3dC2ZcfnIIht8Bi/openapi.json
