# GEO Radar - AI Brand Visibility Monitor (`primevision/geo-radar`) Actor

Track whether AI assistants recommend YOUR brand. Checks your prompts against Gemini, Perplexity, ChatGPT and Google AI Overviews; reports mentions, positions, cited sources and share of voice vs competitors.

- **URL**: https://apify.com/primevision/geo-radar.md
- **Developed by:** [Prime Vision](https://apify.com/primevision) (community)
- **Categories:** Marketing
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 prompt check (with citations)s

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Radar — AI Brand Visibility Monitor

**Does AI recommend your brand — or your competitor?** GEO Radar is a generative engine optimization (GEO) monitor: it checks your customer prompts against **Gemini, Perplexity, ChatGPT (web search) and Google AI Overviews**, and tells you exactly where you stand in AI search — mentions, position, cited sources, and **share of voice vs competitors**.

AI assistants are the new search results page. If your brand isn't in the answer, you don't exist. Enterprise GEO platforms run $100–500/month on self-serve tiers (and $30k+/year on enterprise contracts) — GEO Radar gives you the same core data **pay-per-check**, no subscription: 50 prompts × 2 engines weekly is a few dollars a month.

### What you get for every prompt × engine

- **Mentioned?** — is your brand in the AI's answer at all
- **Position** — are you named first, or after two competitors
- **Cited?** — does the AI cite YOUR domain as a source (and at which position)
- **Competitor breakdown** — same metrics for every competitor you list
- **Cited sources** — the exact pages the AI pulled from (your GEO target list)
- **Run summary** — mention rate, citation rate, average position and **share of voice** per engine

### Engines and API keys

| Engine | Key needed | Where to get it |
|---|---|---|
| Google Gemini | none — built-in shared key (fair-use limits) | optional override: [aistudio.google.com](https://aistudio.google.com) |
| Perplexity | your key, required | [perplexity.ai/settings/api](https://www.perplexity.ai/settings/api) |
| ChatGPT (web search) | your OpenAI key, required | [platform.openai.com](https://platform.openai.com) |
| Google AI Overviews | your SerpApi key, required | [serpapi.com](https://serpapi.com) |

**Gemini out of the box:** the built-in shared key answers from the model's knowledge (no live Google Search grounding — that quota requires a billed Google key). Such checks are flagged `grounded: false`, carry no citations, and are billed at the cheaper *basic check* rate. Plug in your own billing-enabled Gemini key to get fully grounded answers with cited sources.

### Example output

```json
{
  "engine": "perplexity",
  "prompt": "best crypto tax software europe",
  "brand_mentioned": true,
  "brand_position": 2,
  "brand_cited": true,
  "brand_citation_position": 3,
  "competitors": [
    {"name": "Koinly", "mentioned": true, "position": 1, "citation_position": 1}
  ],
  "cited_sources": [
    {"position": 1, "url": "https://koinly.io/blog/...", "domain": "koinly.io"}
  ]
}
```

Failed checks are recorded in the dataset too (with an `error` column), and the run summary — mention rate, citation rate, share of voice per engine — is saved to the run's OUTPUT record.

### How to use

1. Enter your **brand** (name, aliases, domain — domain enables citation tracking).
2. List **competitors** you want share-of-voice against.
3. Add the **prompts** your buyers actually ask ("best X for Y", "X vs Y", "is X trustworthy") — up to 100 per run.
4. Pick **engines** and run — or put it on a weekly [Schedule](https://docs.apify.com/schedules) to build an AI-visibility trend line.

### Who uses this

- **SEO/GEO agencies** — sell AI search optimization audits to clients without enterprise tooling
- **SaaS founders** — track whether AI recommends you in your category and which pages get cited
- **Content teams** — find which sources AI trusts in your niche, then get cited there
- **Brand monitoring** — catch when ChatGPT or Gemini starts recommending a competitor first

# Actor input Schema

## `brand` (type: `object`):

The brand to track. Example: {"name": "Acme", "aliases": \["Acme Corp"], "domain": "acme.com"} — domain enables citation tracking.

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

Competitor brands for share-of-voice. Same shape as brand.

## `prompts` (type: `array`):

The questions your customers ask AI assistants (e.g. "best CRM for small business"). Each prompt is checked against each engine. Max 100 prompts per run.

## `engines` (type: `array`):

Which AI engines to monitor. Gemini works with the built-in key; Perplexity, ChatGPT and Google AI Overviews need your own API key (fields below).

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

Two-letter country code for Google AI Overviews localization.

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

Two-letter language code for Google AI Overviews localization.

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

Override the built-in shared key with your own (aistudio.google.com). A key with billing enabled unlocks Google-Search-grounded answers with citations.

## `geminiModel` (type: `string`):

Pin a specific Gemini model id (default: gemini-flash-latest).

## `perplexityApiKey` (type: `string`):

Required for the Perplexity engine (perplexity.ai/settings/api).

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

Required for the ChatGPT (web search) engine (platform.openai.com).

## `serpapiKey` (type: `string`):

Required for the Google AI Overviews engine (serpapi.com).

## Actor input object example

```json
{
  "brand": {
    "name": "Acme",
    "aliases": [],
    "domain": "acme.com"
  },
  "competitors": [
    {
      "name": "Globex",
      "domain": "globex.com"
    }
  ],
  "prompts": [
    "best widget software for startups"
  ],
  "engines": [
    "gemini"
  ],
  "country": "us",
  "language": "en"
}
```

# 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": {
        "name": "Acme",
        "aliases": [],
        "domain": "acme.com"
    },
    "competitors": [
        {
            "name": "Globex",
            "domain": "globex.com"
        }
    ],
    "prompts": [
        "best widget software for startups"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("primevision/geo-radar").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": {
        "name": "Acme",
        "aliases": [],
        "domain": "acme.com",
    },
    "competitors": [{
            "name": "Globex",
            "domain": "globex.com",
        }],
    "prompts": ["best widget software for startups"],
}

# Run the Actor and wait for it to finish
run = client.actor("primevision/geo-radar").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": {
    "name": "Acme",
    "aliases": [],
    "domain": "acme.com"
  },
  "competitors": [
    {
      "name": "Globex",
      "domain": "globex.com"
    }
  ],
  "prompts": [
    "best widget software for startups"
  ]
}' |
apify call primevision/geo-radar --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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