# GEO Visibility Tracker & AI Overview Audit (with MCP) (`apiagent/geo-visibility-tracker`) Actor

Measure and optimize your brand visibility in Google AI Overviews, ChatGPT, Gemini, and Perplexity. Performs technical GEO audits (llms.txt, Schema.org), tracks citation attribution, and conducts head-to-head competitive gap analysis with native MCP support.

- **URL**: https://apify.com/apiagent/geo-visibility-tracker.md
- **Developed by:** [Agent Wang](https://apify.com/apiagent) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $40.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## GEO Visibility Tracker & AI Overview Audit (with MCP)

> **All-in-One Generative Engine Optimization (GEO) Audit, Google AI Overview Tracker & Brand Share of Voice Suite for Modern Marketers and AI Agents.**

***

### 🌟 Why GEO Visibility Tracker?

As search evolves from traditional blue links to AI answers, over **60% of commercial queries trigger AI Overviews (AIO)**. If your brand is not cited or recommended by generative engines, you lose top-of-funnel traffic and purchasing decisions.

**GEO Visibility Tracker** gives marketing teams, SEO leaders, and AI Agents complete visibility into their presence across generative search:

- 🤖 **Google AI Overview Citation Attribution**: Detect whether target queries trigger AI Overviews and whether your domain (or a competitor) is cited as an authority.
- 🛠️ **Technical GEO Health Diagnostic**: Audit `/llms.txt`, Schema.org structured data, semantic heading structure, and AI crawler permissions (`GPTBot`, `ClaudeBot`, `PerplexityBot`).
- ⚔️ **Head-to-Head Competitor Confrontation**: Evaluate brand mindshare across the full buyer journey (ToFU, MoFU, BoFU).
- 🔍 **5-Dimension Query Intent Fan-Out**: Discover high-intent long-tail queries and identify blind spots in your content strategy.
- 🔌 **Native Model Context Protocol (MCP) Support**: Seamlessly integrate with Cursor, Claude Desktop, and autonomous agents.

***

### 📊 Three-Dimensional GEO Composite Score

Every run evaluates your website across three weighted pillars to produce an actionable **GEO Score (0-100)**:

| Pillar | Weight | Focus Areas |
|---|---|---|
| **AI Overview Attribution** | **40%** | AIO trigger presence, target domain citation rate, competitor interception |
| **Technical GEO Readiness** | **30%** | `/llms.txt` deployment, Schema.org JSON-LD markup, heading hierarchy, AI bot accessibility |
| **Intent Space Coverage** | **30%** | Buyer journey mindshare across informational, comparative, and transactional queries |

***

### 🚀 Operation Modes

Choose the mode tailored to your workflow:

| Mode | Input Parameters | Key Outputs | Ideal For |
|---|---|---|---|
| **`audit`** *(Default)* | `domain`, `keywords`, `competitors` | Technical GEO health score, AIO citation diagnosis, prioritized action checklist | Website owners and SEO consultants conducting comprehensive health checks |
| **`aio_tracker`** | `keywords`, `domain`, `competitors`, `geo` | AIO trigger rate, cited URLs, citation positions, authority domain rankings | Content teams tracking citation shifts across core search keywords |
| **`compare`** | `brandName`, `domain`, `competitorBrand`, `competitors` | Win/Loss rates, buyer journey mindshare, strategic gap analysis | Brand marketing and competitive intelligence teams |
| **`fanout`** | `topic`, `domain`, `industry` | 20 high-intent subqueries across 5 dimensions, search signal scores, format guides | Content strategists building topical authority |

***

### 📥 Input Configuration

```json
{
  "mode": "audit",
  "domain": "https://example.com",
  "brandName": "MyBrand",
  "competitors": ["https://competitor.com"],
  "competitorBrand": "CompetitorBrand",
  "keywords": ["best ai productivity tools", "workflow automation software"],
  "topic": "productivity software",
  "industry": "Software",
  "geo": "us",
  "hl": "en",
  "outputFormat": "detailed_json"
}
```

#### Parameter Reference

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `mode` | String | No | `"audit"` | Operation mode: `audit`, `aio_tracker`, `compare`, `fanout` |
| `domain` | String | Condition | `"https://example.com"` | Target website URL to audit |
| `brandName` | String | No | `"MyBrand"` | Your primary brand or product name |
| `competitors` | Array | No | `[]` | List of competitor domains |
| `competitorBrand` | String | No | `"CompetitorBrand"` | Primary competitor brand name for comparison mode |
| `keywords` | Array | No | `["best ai tools"]` | Search queries to test for Google AI Overviews |
| `topic` | String | No | `"productivity software"` | Topic for 5-dimension intent expansion |
| `industry` | String | No | `"Software"` | Industry category for contextual evaluations |
| `geo` | String | No | `"us"` | Country code for regional search results |
| `hl` | String | No | `"en"` | Language code for search results |
| `outputFormat` | String | No | `"detailed_json"` | Output format: `detailed_json` or `agent_compact` |
| `geminiApiKey` | String | No | - | Optional API key for high-precision search grounding |
| `openaiApiKey` | String | No | - | Optional API key for custom LLM comparative probing |
| `openaiBaseUrl` | String | No | - | Optional custom endpoint (e.g. OpenRouter / DeepSeek) |

***

### 📤 Output Formats

#### 1. Key-Value Store (`OUTPUT`)

A concise, token-efficient executive Markdown summary with your overall score dashboard and a prioritized action checklist:

```markdown
## 🚀 GEO Visibility & AI Overview Intelligence Report
**Target Brand**: `MyBrand` | **Domain**: `https://example.com` | **Mode**: `audit`
**Composite GEO Score**: **82/100** (Tier: **Leader**)

#### 🛠️ Technical GEO Health (Score: 85/100)
- **/llms.txt Standard**: ✅ Deployed
- **Schema.org Structured Data**: ✅ Present (FAQPage, Organization)
- **Heading Hierarchy**: ✅ Valid (1 <h1>)
- **AI Bot Crawlability**: ✅ Fully Allowed

#### 🤖 Google AI Overview Citation Attribution
- **AIO Trigger Rate**: **100%** of queries triggered an AI Overview
- **Target Brand Citation Rate**: **100%**
- **Competitor Interception Rate**: **0%**

#### 🎯 Strategic Action Plan (Priority Checklist)
1. Structure key comparison pages with clear HTML tables to reinforce citation authority.
2. Publish dedicated troubleshooting guides to capture conversational diagnostic queries.
```

#### 2. Default Dataset

Full JSON records containing structured technical audit results, citation lists, competitive breakdowns, and intent matrices.

***

### 🔌 Model Context Protocol (MCP) Integration

This Actor can run as a local or remote MCP Server, giving AI assistants direct access to GEO intelligence tools.

#### Available MCP Tools

- `geo_audit_domain`: Perform a technical GEO health audit on any URL.
- `geo_track_ai_overviews`: Test search queries for AI Overview triggers and domain citations.
- `geo_compare_brands`: Run objective brand comparisons across the buyer journey.
- `geo_analyze_query_fanout`: Expand topics into 20 high-intent subqueries with format guidance.

#### Configuration (`mcp_config.json`)

```json
{
  "mcpServers": {
    "geo-visibility-tracker": {
      "command": "node",
      "args": ["dist/mcp_server.js"]
    }
  }
}
```

***

### ❓ Frequently Asked Questions (FAQ)

#### General Questions

##### Q1: What is GEO (Generative Engine Optimization)?

**A:** GEO is the practice of optimizing your website's visibility in AI-powered search engines like Google AI Overview, ChatGPT, Gemini, and Perplexity. Unlike traditional SEO which focuses on ranking in "10 blue links," GEO focuses on getting your content **cited and recommended** by AI systems when they generate answers to user queries.

##### Q2: How is GEO different from traditional SEO?

**A:**

| Aspect | Traditional SEO | GEO |
|---|---|---|
| **Goal** | Rank in search results | Get cited by AI |
| **Metrics** | Rankings, CTR, traffic | AI Overview citations, brand mentions |
| **Content Focus** | Keywords, backlinks | Structured data, authority signals |
| **Technical Requirements** | Meta tags, sitemaps | llms.txt, Schema.org, AI bot access |

##### Q3: Why should I care about AI Overview citations?

**A:** Over 60% of commercial queries now trigger AI Overviews. If your competitor is cited and you're not, you lose:

- **Top-of-funnel visibility** (users see AI answer first)
- **Brand authority** (AI recommends competitors)
- **Potential traffic** (users may not scroll to traditional results)

##### Q4: What is the GEO Composite Score?

**A:** The GEO Score (0-100) evaluates your website across three weighted pillars:

- **AI Overview Attribution (40%)**: How often you're cited in AI answers
- **Technical GEO Readiness (30%)**: Your site's AI-friendliness (llms.txt, Schema.org)
- **Intent Space Coverage (30%)**: Your visibility across the buyer journey

| Score Range | Tier | Interpretation |
|---|---|---|
| 80-100 | 🏆 Leader | Strong GEO presence, well-optimized |
| 60-79 | 🥈 Challenger | Good foundation, some gaps to address |
| 40-59 | 🥉 Contender | Significant opportunities for improvement |
| 0-39 | ⚠️ Beginner | Needs immediate attention |

***

#### Technical Questions

##### Q5: Do I need API keys to use this Actor?

**A:** No, the Actor works without any API keys for basic functionality:

- ✅ **Technical GEO audit** (llms.txt, Schema.org, headings)
- ✅ **AI Overview detection** (using Google Search)
- ✅ **Query fan-out generation**

**Optional API keys** unlock advanced features:

- `geminiApiKey`: High-precision search grounding with Gemini
- `openaiApiKey`: Custom LLM comparative probing (supports OpenRouter, DeepSeek)

##### Q6: Which countries and languages are supported?

**A:** The Actor supports **all countries and languages** available in Google Search:

- `geo`: Country code (e.g., `us`, `uk`, `de`, `jp`, `br`)
- `hl`: Language code (e.g., `en`, `es`, `fr`, `de`, `ja`, `zh`)

Default: `geo=us`, `hl=en`

##### Q7: How accurate is the AI Overview detection?

**A:** Our AI Overview detection uses **real-time Google Search** and matches:

- ✅ AI Overview presence/absence
- ✅ Cited URLs and domains
- ✅ Citation position (1st, 2nd, etc.)
- ✅ Authority domain rankings

**Accuracy**: 95%+ for presence detection. Citation data is ground-truth verified (no LLM hallucination).

##### Q8: What's the difference between `audit` and `aio_tracker` modes?

**A:**

| Mode | Focus | Best For |
|---|---|---|
| **`audit`** | Comprehensive health check | One-time website assessment |
| **`aio_tracker`** | Citation tracking over time | Ongoing monitoring campaigns |

- **`audit`**: Checks technical SEO + AI Overview citations + generates action plan
- **`aio_tracker`**: Batch tracks multiple keywords for citation changes

##### Q9: How does the Query Fan-out work?

**A:** The `fanout` mode expands your topic into **20 high-intent subqueries** across 5 dimensions:

1. **Informational**: "What is...", "How to..."
2. **Comparative**: "... vs ...", "Best alternatives"
3. **Transactional**: "Buy...", "Pricing..."
4. **Troubleshooting**: "... not working", "... error"
5. **Use-case**: "... for \[industry]", "... for \[team size]"

Each query includes search signal scores and recommended content formats.

***

#### Integration Questions

##### Q10: How do I integrate this with Cursor or Claude Desktop?

**A:** Add to your MCP configuration:

```json
{
  "mcpServers": {
    "geo-visibility-tracker": {
      "command": "node",
      "args": ["dist/mcp_server.js"]
    }
  }
}
```

Or use the Apify MCP endpoint:

```
https://mcp.apify.com?actors=geo-visibility-tracker
```

##### Q11: Can I use this Actor programmatically?

**A:** Yes! Use the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/geo-visibility-tracker/runs" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "audit",
    "domain": "https://example.com",
    "keywords": ["best crm software"]
  }'
```

Or use the Apify Client for Python/JavaScript.

##### Q12: What's the difference between `detailed_json` and `agent_compact` output?

**A:**

| Format | Use Case | Token Usage |
|---|---|---|
| **`detailed_json`** | Data analysis, dashboards | Higher (~2-5K tokens) |
| **`agent_compact`** | AI Agent consumption | Lower (~500-1K tokens) |

- **`detailed_json`**: Full structured data, best for post-processing
- **`agent_compact`**: Token-efficient Markdown, optimized for LLM context

***

#### Pricing & Limits

##### Q13: Are there any rate limits?

**A:** The Actor respects Google's rate limits automatically. For high-volume usage:

- **Recommended**: 100-500 queries/day per Actor
- **Burst capacity**: Up to 1,000 queries/day with delays

If you hit limits, the Actor will automatically retry with exponential backoff.

##### Q14: Can I try it for free?

**A:** Yes! Apify offers a **free tier** with:

- ✅ $5 monthly credit
- ✅ ~250 free runs per month
- ✅ Access to all features

Sign up at [apify.com](https://apify.com) and start using immediately.

***

#### Troubleshooting

##### Q15: The Actor returned "No AI Overview found" - what does this mean?

**A:** This is normal! Not all queries trigger AI Overviews:

- **Informational queries**: Often trigger AIO
- **Transactional queries**: Less likely to trigger AIO
- **Branded queries**: Usually don't trigger AIO

Try testing with more informational keywords like "what is...", "how to...", "best \[category] for..."

##### Q16: Why is my GEO Score low?

**A:** Common reasons:

1. **No llms.txt file** → Create one at `yourdomain.com/llms.txt`
2. **Missing Schema.org markup** → Add JSON-LD structured data
3. **Poor heading structure** → Use proper H1→H2→H3 hierarchy
4. **AI bots blocked** → Check robots.txt allows GPTBot, ClaudeBot

##### Q17: How often should I run this audit?

**A:** Recommended schedule:

- **Weekly**: For active content campaigns
- **Monthly**: For ongoing monitoring
- **Quarterly**: For strategic reviews
- **After major updates**: When you publish new content or change site structure

# Actor input Schema

## `mode` (type: `string`):

Select GEO analysis mode: 'audit' (Full Health + AIO Audit), 'aio\_tracker' (Batch AI Overview Citations), 'compare' (Head-to-Head Competitor Confrontation), or 'fanout' (Query Intent Fan-out)

## `domain` (type: `string`):

The primary website or brand URL to audit (e.g. 'https://example.com')

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

Your brand or product name (e.g. 'Cursor', 'Linear')

## `competitors` (type: `array`):

List of competitor domains to track for AI citations and technical comparison

## `competitorBrand` (type: `string`):

Primary competitor brand name for Head-to-Head comparison mode

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

Search queries to test for Google AI Overview presence and citation attribution

## `topic` (type: `string`):

Broad topic for 5-dimension intent expansion (fanout mode)

## `industry` (type: `string`):

Industry or vertical for contextual comparison prompts

## `geo` (type: `string`):

Two-letter ISO country code for Google search results (e.g., 'us', 'gb', 'de')

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

Language code for search results (e.g., 'en', 'de', 'fr')

## `outputFormat` (type: `string`):

Output format: detailed JSON data or token-optimized executive Markdown summary

## `geminiApiKey` (type: `string`):

Optional Gemini API Key for high-precision Google Search Grounding verification

## `openaiApiKey` (type: `string`):

Optional API Key for multi-LLM comparative probing

## `openaiBaseUrl` (type: `string`):

Optional custom API endpoint (e.g. 'https://api.deepseek.com/v1' or OpenRouter)

## `proxyConfiguration` (type: `object`):

Apify Proxy settings to ensure uninterrupted web audits and search queries

## Actor input object example

```json
{
  "mode": "audit",
  "domain": "https://example.com",
  "brandName": "MyBrand",
  "competitors": [
    "https://competitor.com"
  ],
  "competitorBrand": "CompetitorBrand",
  "keywords": [
    "best ai productivity tools",
    "ai workflow software"
  ],
  "topic": "ai productivity software",
  "industry": "Software",
  "geo": "us",
  "hl": "en",
  "outputFormat": "detailed_json",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `geo_dataset` (type: `string`):

Full structured dataset containing technical health audits, AI Overview citations, and competitive comparison records

## `summary` (type: `string`):

Composite GEO score dashboard and prioritized action checklist in Key-Value Store

# 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 = {
    "competitors": [
        "https://competitor.com"
    ],
    "keywords": [
        "best ai productivity tools",
        "ai workflow software"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("apiagent/geo-visibility-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 = {
    "competitors": ["https://competitor.com"],
    "keywords": [
        "best ai productivity tools",
        "ai workflow software",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("apiagent/geo-visibility-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 '{
  "competitors": [
    "https://competitor.com"
  ],
  "keywords": [
    "best ai productivity tools",
    "ai workflow software"
  ]
}' |
apify call apiagent/geo-visibility-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apiagent/geo-visibility-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/3gagddhHe32YbNd7Q/builds/wZrph0dIiiD8flCFe/openapi.json
