# GEO Visibility Score - AI Brand Monitoring (`dltik/geo-visibility-score`) Actor

Track how often your brand appears in ChatGPT, Claude, Gemini & Perplexity responses. Computes a GEO Score (0-100), mention rate, citation rate, Share of Voice vs competitors, and gaps with actionable recommendations. Alternative to Semrush AI Visibility ($99+/mo).

- **URL**: https://apify.com/dltik/geo-visibility-score.md
- **Developed by:** [Walid](https://apify.com/dltik) (community)
- **Categories:** SEO tools, Marketing, AI
- **Stats:** 47 total users, 14 monthly users, 100.0% runs succeeded, 5 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00005 / actor start

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/platform/actors/running/actors-in-store#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 Score — AI Brand Monitoring

**GEO Visibility Score** measures how often your brand appears in ChatGPT, Claude, Gemini, and Perplexity responses — and computes a single **GEO Score (0–100)** you can track over time. Get mention rate, citation rate, Share of Voice vs competitors, gap analysis, and 5 actionable recommendations to improve your AI visibility.

The AI equivalent of Google Search Console, for generative engines.

> ⭐ **Found this useful?** Click the **Bookmark** button at the top of [this page](https://apify.com/dltik/geo-visibility-score) — it helps the scraper stay visible to others who need it. Takes 1 click. No signup beyond your existing Apify account.

***

### What can GEO Visibility Score measure about your brand?

- 📈 **GEO Score (0–100)** — a single composite score combining mention rate, citation rate, position quality, and platform coverage
- 🗣️ **Mention rate** — % of AI responses that mention your brand
- 🔗 **Citation rate** — % of responses that cite your domain as a source
- 📡 **Platform coverage** — which AI platforms mention you (GPT-4o, Claude, Gemini, Perplexity)
- ⚔️ **Share of Voice** — how your mention rate compares to competitors across the same prompts
- 🕳️ **Gap analysis** — exact prompts where competitors appear but you don't
- 💡 **Recommendations** — 5 specific actions tailored to your gaps (content to create, pages to build, citations to earn)

***

### What data does GEO Visibility Score extract?

| Field | Description |
|-------|-------------|
| `geo_score` | Composite AI visibility score 0–100 |
| `mention_rate` | % of prompts where your brand was mentioned |
| `citation_rate` | % of prompts where your domain was cited |
| `platform_coverage` | % of LLMs that mentioned your brand at least once |
| `share_of_voice` | Mention % per brand across all prompts |
| `gaps` | Prompts where competitors appeared but you didn't |
| `recommendations` | 5 AI-generated action items to improve your score |
| `llms_tested` | Which models were queried |

***

### How to measure your AI brand visibility

1. **[Create a free Apify account](https://apify.com/sign-up)**
2. **Open [GEO Visibility Score](https://apify.com/dltik/geo-visibility-score)** in Apify Store
3. **Enter your brand name, domain, and keywords** (e.g. `Notion`, `notion.so`, `["project management", "team wiki"]`)
4. **Add your OpenRouter API key** (get one free at [openrouter.ai/keys](https://openrouter.ai/keys))
5. **Click Start** — typical run takes 1–3 minutes
6. **Download your GEO report** in JSON, CSV, or Excel

Schedule weekly runs to track your score over time as you publish new content.

***

### How much does it cost to measure AI brand visibility?

**$0.05 per prompt analyzed** via Apify Pay-Per-Event. Plus your own OpenRouter API usage (typically $0.001–0.005 per prompt).

| Run size | Prompts analyzed | Apify cost | OpenRouter cost |
|----------|-----------------|------------|----------------|
| Quick test (1 keyword, 3 prompts, 3 LLMs) | 9 | ~$0.45 | ~$0.01 |
| Standard (3 keywords, 5 prompts, 3 LLMs) | 45 | ~$2.25 | ~$0.05 |
| Full audit (10 keywords, 5 prompts, 4 LLMs) | 200 | ~$10.00 | ~$0.20 |

> Apify costs are charged per event. OpenRouter costs are deducted from your own API key balance. No monthly subscription for either.

**Tip:** Set `promptsPerKeyword: 3` and use 2–3 keywords for a $1 test run.

***

### Input

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `brand` | string | ✅ | — | Your brand name (e.g. `Notion`) |
| `domain` | string | ✅ | — | Your domain without `https://` (e.g. `notion.so`) |
| `keywords` | array | ✅ | — | Keywords to analyze (e.g. `["project management", "team wiki"]`) |
| `competitors` | array | ❌ | `[]` | Competitor brands for Share of Voice |
| `brandAliases` | array | ❌ | `[]` | Alternate names / abbreviations for your brand |
| `promptsPerKeyword` | integer | ❌ | `5` | Prompts generated per keyword (1–20) |
| `includePerplexity` | boolean | ❌ | `true` | Include Perplexity in the analysis |
| `country` | string | ❌ | `US` | Country context for prompts |
| `language` | string | ❌ | `en` | Language for generated prompts |
| `openrouterApiKey` | string | ❌ | env var | Your OpenRouter API key |
| `perplexityApiKey` | string | ❌ | env var | Your Perplexity API key |

***

### Output example

```json
{
  "_type": "geo_visibility_report",
  "brand": "Notion",
  "domain": "notion.so",
  "date": "2026-03-28T14:30:00Z",
  "geo_score": 72,
  "mention_rate": 68.5,
  "citation_rate": 22.0,
  "platform_coverage": 100.0,
  "llms_tested": ["openai/gpt-4o-mini", "anthropic/claude-haiku-4.5", "google/gemini-2.0-flash-001"],
  "share_of_voice": {
    "Notion": 48.2,
    "Asana": 31.5,
    "Trello": 20.3
  },
  "gaps": [
    {
      "prompt": "Best project management tool for remote teams",
      "llm": "gpt-4o-mini",
      "competitors_present": ["Asana", "Monday.com"],
      "brand_mentioned": false
    }
  ],
  "recommendations": [
    "Create a dedicated page comparing Notion vs Asana for remote teams — it's a common AI prompt where you're currently absent.",
    "Add /llms.txt to notion.so with a Markdown summary of key use cases.",
    "Earn citations in at least 3 SaaS review publications (G2, Capterra, Product Hunt) to improve citation rate.",
    "Publish a comprehensive FAQ page targeting 'project management for remote teams' with Schema.org FAQ markup.",
    "Ensure GPTBot and ClaudeBot are allowed in robots.txt and not rate-limited."
  ]
}
```

***

### Use GEO Visibility Score via API

Track your GEO Score programmatically, integrate with your analytics dashboard, or trigger runs from CI/CD after publishing new content.

**Python:**

```python
import requests, time

token = "YOUR_APIFY_TOKEN"

## Start a run
run = requests.post(
    "https://api.apify.com/v2/acts/dltik~geo-visibility-score/runs",
    headers={"Authorization": f"Bearer {token}"},
    json={
        "brand": "Notion",
        "domain": "notion.so",
        "keywords": ["project management", "team wiki"],
        "openrouterApiKey": "YOUR_OPENROUTER_KEY"
    }
).json()

run_id = run["data"]["id"]

## Wait and fetch results
time.sleep(90)
results = requests.get(
    f"https://api.apify.com/v2/acts/dltik~geo-visibility-score/runs/{run_id}/dataset/items",
    headers={"Authorization": f"Bearer {token}"}
).json()

print(f"GEO Score: {results[0]['geo_score']}/100")
```

**curl:**

```bash
curl -X POST "https://api.apify.com/v2/acts/dltik~geo-visibility-score/runs" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "brand": "Notion",
    "domain": "notion.so",
    "keywords": ["project management"],
    "openrouterApiKey": "YOUR_OPENROUTER_KEY"
  }'
```

***

### Schedule weekly GEO Score monitoring

Use **Apify Schedules** to run GEO Visibility Score every Monday and track your score trend over time. Connect to **Google Sheets, Slack, or Zapier** via webhooks to get weekly reports automatically.

***

### FAQ

**What is a GEO Score?**
GEO Score is a composite metric (0–100) that combines brand mention rate, domain citation rate, position quality (how prominently you're mentioned), and platform coverage (how many AI models mention you). 70+ is good, 50–69 needs work, below 50 means you're nearly invisible to AI.

**How is this different from Semrush AI Visibility?**
Semrush AI Visibility costs $99+/month and only tracks a fixed set of queries. GEO Visibility Score runs on your own keywords, uses your own API keys, costs a few dollars per run, and gives you full raw data. You can also schedule it as often as you like.

**Which LLMs do you query?**
By default: GPT-4o Mini (OpenAI), Claude Haiku (Anthropic), and Gemini Flash (Google). Optionally: Perplexity. All accessed via OpenRouter with your own API key.

**I have a high GEO Score but no Perplexity citations. Why?**
Perplexity citations depend on whether your domain is indexed by Bing (which Perplexity uses). Check your Bing Webmaster Tools, and ensure PerplexityBot is allowed in robots.txt. You can use [GEO Site Audit](https://apify.com/dltik/geo-site-audit) to verify bot access.

**My brand name has multiple words or special characters. What should I enter?**
Enter the brand name exactly as it appears in writing (e.g. `Monday.com`, `HubSpot`). Use `brandAliases` for abbreviations or alternate spellings (e.g. `["monday", "monday dot com"]`).

**Can I run this for multiple brands at once?**
Start one run per brand. With Apify's API you can trigger them in parallel and aggregate results in your own dashboard.

**I need a custom integration or white-label report.**
Open an issue on the [Issues tab](https://apify.com/dltik/geo-visibility-score/issues) or contact us through Apify.

***

⭐ **Found GEO Visibility Score useful? Bookmark it** — Apify ranks actors by bookmarks, so it's the strongest signal for Store visibility. One click = directly helps this actor stay surfaced for new users.

***

### Complete your GEO analysis with the full suite

| Actor | What it does | Start with this if... |
|-------|-------------|----------------------|
| ✅ [GEO Site Audit](https://apify.com/dltik/geo-site-audit) | Technical AI readiness score | **Always start here** |
| 📊 [GEO Visibility Score](https://apify.com/dltik/geo-visibility-score) | GEO Score, mention rate, citation rate | You want your baseline AI visibility |
| ⚔️ [GEO Competitor Research](https://apify.com/dltik/geo-competitor-research) | Share of Voice vs competitors | You know which competitors to track |
| 🔍 [GEO Prompt Research](https://apify.com/dltik/geo-prompt-research) | AI keyword research & prompt scoring | You want to find new AI ranking opportunities |
| 💬 [GEO Brand Sentiment](https://apify.com/dltik/geo-brand-sentiment) | How AI models describe your brand | You want to understand AI brand perception |

# Actor input Schema

## `brand` (type: `string`):

Your brand name (e.g. Apify, Houset, HubSpot)

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

Your domain (e.g. apify.com)

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

Keywords/topics to test (e.g. \["web scraping tool", "data extraction"])

## `brandAliases` (type: `array`):

Alternative brand names or product names

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

Competitor brand names for Share of Voice comparison

## `llms` (type: `array`):

OpenRouter model IDs to query

## `promptsPerKeyword` (type: `integer`):

Number of prompt variants per keyword (1-20)

## `includePerplexity` (type: `boolean`):

Include Perplexity for citation tracking (requires perplexityApiKey below)

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

Target country for prompts (e.g. US, FR, DE)

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

Language for generated prompts (e.g. en, fr)

## Actor input object example

```json
{
  "brand": "Apify",
  "domain": "apify.com",
  "keywords": [
    "web scraping tool",
    "data extraction API"
  ],
  "llms": [
    "openai/gpt-4o-mini",
    "anthropic/claude-haiku-4.5",
    "google/gemini-2.0-flash-001"
  ],
  "promptsPerKeyword": 5,
  "includePerplexity": false,
  "country": "US",
  "language": "en"
}
```

# Actor output Schema

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

GEO Score and full visibility breakdown per LLM and keyword.

# 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 = {
    "brand": "Apify",
    "domain": "apify.com",
    "keywords": [
        "web scraping tool",
        "data extraction API"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/geo-visibility-score").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 = {
    "brand": "Apify",
    "domain": "apify.com",
    "keywords": [
        "web scraping tool",
        "data extraction API",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("dltik/geo-visibility-score").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "brand": "Apify",
  "domain": "apify.com",
  "keywords": [
    "web scraping tool",
    "data extraction API"
  ]
}' |
apify call dltik/geo-visibility-score --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=dltik/geo-visibility-score",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/mskPcYCT4z1oTcQrn/builds/nBnJjJovh5Sb9jXYM/openapi.json
