# Google AI Overview Citation Tracker - Cited vs Ranking (`centorprat/ai-overview-citation-tracker`) Actor

For your keywords: does Google show an AI Overview, which sites it cites, is YOUR domain cited, and how that compares with your organic rank. Flags click-loss risk, cited-without-ranking wins, citation share vs competitors and domains to target.

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

## Pricing

from $8.50 / 1,000 keyword trackeds

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

## Google AI Overview Citation Tracker — Cited vs Ranking

Ranking on Google and being cited in its **AI Overview** are now two different games. In our tests, the share of AI Overview sources that also ranked in the organic top 10 swung from 15% to 100% depending on the keyword and the day. This Actor tracks both, for every keyword you care about, and tells you where you're winning, where you're losing clicks, and who gets cited instead.

### Per keyword

- **AI Overview shown?** (and its type)
- **Your organic rank** and **your citation position** in the AI Overview (subdomains count)
- **Status:**
  - `cited-and-ranking`
  - `cited-not-ranking`: a win to build on
  - `click-loss-risk`: you rank top-3, but the AI Overview answers the query without citing you
  - `ranking-not-cited`
  - `absent`
  - `no-ai-overview`
- **Cited sources** in order, **competitors cited**, competitor organic ranks
- Whether the overview **names your brand** even without citing your site
- **Organic overlap:** what share of the cited sources also rank top 10

### Across your keyword set

- AI Overview coverage %, and your citation rate when an overview is shown
- **Citation share** vs your competitors
- **Top cited domains**, and **domains to target**: third parties AI keeps citing for your topics
- **Click-loss-risk** and **cited-without-ranking** keyword lists
- Prioritised **actions**
- With a history store: **citations gained / lost** and AI Overviews appearing / disappearing since the last run

### Example (real data)

```json
{ "keyword": "how to choose a crm", "aiOverviewShown": true, "status": "cited-not-ranking",
  "yourOrganicRank": null, "yourCitationPosition": 1, "brandNamedInOverview": true,
  "competitorsCited": ["salesforce.com"], "sourcesAlsoInOrganicTop10Pct": 30 }
```

Here HubSpot (via community.hubspot.com) is the **first source** in the AI Overview while not ranking in the organic top 10. In another run, for **"crm software"**, HubSpot ranked #3 organically, but the AI Overview cited salesforce.com and not HubSpot, so it was flagged `click-loss-risk`.

Results change between fetches, because Google's results and overviews vary. Schedule it with a history store and read the trend, not a single snapshot. A run takes about 1–3 minutes, since the Google scraper is the slow part.

### Input

| Field | Type | Description |
|---|---|---|
| `keywords` | array | Searches to track. |
| `yourDomain` | string | Your site (subdomains count). |
| `competitorDomains` | array | Up to 10 for share and ranks. |
| `brandName` | string | Detect brand mentions in the overview text. |
| `countryCode` / `languageCode` | string | Google market (default US). |
| `historyStore` | key-value store | Pick one to track changes across runs. |
| `webhookUrl` | string | POST the report here. |

### One API call, JSON back

Run it synchronously: one POST starts the run and returns the results in the same response. No run to poll, which is what an AI agent wants mid-task:

```bash
curl -X POST "https://api.apify.com/v2/acts/centorprat~ai-overview-citation-tracker/run-sync-get-dataset-items" -H "Authorization: Bearer <APIFY_TOKEN>" \
     -H "Content-Type: application/json" -d '{"keywords": ["how to choose a crm"], "yourDomain": "hubspot.com"}'
```

The body takes the same fields as the normal input. Same pay-per-event price; failed checks aren't charged.

### Cost

One `keyword-tracked` event per keyword. The underlying Google Search Scraper (results page + AI Overview, about $0.0075 per keyword) is billed to your run. Apify requires a $0.50 run budget for it; that's a cap, not the charge.

### Ready-made tasks

- [AI Overview Click-Loss Risk Finder](https://apify.com/centorprat/ai-overview-citation-tracker/examples/ai-overview-click-loss-risk)
- [Google AI Overview Monitor - Citations Gained & Lost](https://apify.com/centorprat/ai-overview-citation-tracker/examples/google-ai-overview-monitor)

### For AI agents / MCP

```
https://mcp.apify.com/?tools=actors,docs,centorprat/ai-overview-citation-tracker
```

Loads as `centorprat--ai-overview-citation-tracker`. Claude Code:

```
claude mcp add apify -- npx -y @apify/actors-mcp-server --actors centorprat/ai-overview-citation-tracker
```

### FAQ

**Why do overview citations and rankings differ?** AI Overviews pick sources that answer the question directly (forums, guides, videos, comparison pages), often not the pages that rank. Track both.

**What does "click-loss risk" mean?** You rank in the top 3, but an AI Overview sits above you and doesn't cite you, so searchers may get the answer without clicking.

**Does Google always show an AI Overview?** No. Coverage varies by query, and `aiOverviewCoveragePct` tells you how often it appears for your set.

### Related actors

- [AI Share of Voice](https://apify.com/centorprat/ai-share-of-voice): brand mentions across ChatGPT, Gemini, Claude, Perplexity and the real apps.
- [AI Crawler Access Test](https://apify.com/centorprat/ai-crawler-access-test)
- [On-Page SEO Audit](https://apify.com/centorprat/on-page-seo-audit)

# Actor input Schema

## `keywords` (type: `array`):

Searches to track (one per line), e.g. "best crm for small business".

## `yourDomain` (type: `string`):

e.g. "hubspot.com" (subdomains count). Enables cited/ranking status, click-loss risk and citation share.

## `competitorDomains` (type: `array`):

Up to 10 competitor domains for citation share and ranks.

## `brandName` (type: `string`):

Reports whether the AI Overview text names your brand, even when it doesn't cite your site.

## `countryCode` (type: `string`):

Two-letter Google country (default us).

## `languageCode` (type: `string`):

Google interface language, e.g. "en", "de".

## `historyStore` (type: `string`):

Pick (or create) a key-value store; each run then reports citations gained / lost and AI Overviews appearing / disappearing for your keywords. Schedule weekly.

## `maxKeywords` (type: `integer`):

Cap per run.

## `webhookUrl` (type: `string`):

If set, the report is POSTed here as JSON when the run completes.

## Actor input object example

```json
{
  "keywords": [
    "how to choose a crm"
  ],
  "yourDomain": "hubspot.com",
  "maxKeywords": 50
}
```

# Actor output Schema

## `report` (type: `string`):

First row: summary (AI Overview coverage, your citation rate, status counts, click-loss-risk keywords, cited-without-ranking wins, citation share vs competitors, top cited domains, domains to target, organic overlap, actions, trend). Then one row per keyword (AI Overview shown, status, your organic rank and citation position, cited sources, competitors cited, overview excerpt).

# 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 = {
    "keywords": [
        "how to choose a crm"
    ],
    "yourDomain": "hubspot.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("centorprat/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 = {
    "keywords": ["how to choose a crm"],
    "yourDomain": "hubspot.com",
}

# Run the Actor and wait for it to finish
run = client.actor("centorprat/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 '{
  "keywords": [
    "how to choose a crm"
  ],
  "yourDomain": "hubspot.com"
}' |
apify call centorprat/ai-overview-citation-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,centorprat/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/zjwhQqBamNIkTpL58/builds/0Uo4yXh2hB4loqoZL/openapi.json
