# Grok Brand Visibility Tracker: Mentions & Cited Sources (`spokentext/grok-brand-visibility`) Actor

See whether Grok recommends your brand. Give your brand, your competitors and the questions customers ask: get which brands each answer names and in what order, the websites it cites, and your share of answers. Uses xAI's official API with web search.

- **URL**: https://apify.com/spokentext/grok-brand-visibility.md
- **Developed by:** [clement](https://apify.com/spokentext) (community)
- **Categories:** SEO tools, AI
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $60.00 / 1,000 answers

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

### What is Grok Brand Visibility Tracker?

**Grok Brand Visibility Tracker** shows **whether Grok recommends your brand** when people ask the questions your customers ask. Give it your brand, your competitors and a list of questions. For each question you get which brands the answer names, in what order, and which websites it cites, plus your **share of answers** across the whole run.

It is built for marketers, SEO and GEO specialists and agencies who need to measure **AI search visibility** without asking an assistant the same questions by hand.

### What can this Grok tracker do?

- **Built for Grok.** Answers come from xAI's official API, with live web search switched on.
- **Brand analysis, not just text.** Mentions, position, competitors named, cited websites and a run summary.
- **Spot competitors you did not list.** Every product or name the answer puts in bold is reported too.
- **Any language and location.** Ask in your customers' language, from the country or city you choose.
- **Pay per answer.** No subscription, and nothing charged for questions that fail.

Because it runs on Apify, you also get:

- **Scheduling:** repeat the same questions every week and follow your share of answers over time.
- **API access:** start runs and read results from your own code.
- **Integrations:** send results to Make, Zapier, n8n, Google Sheets and more.
- **Monitoring:** get alerted when a run fails or returns less than expected.
- **Exports:** download results as JSON, CSV or Excel.

### What data can you get from Grok answers?

| Data | What it tells you |
|---|---|
| Brand mentioned | Whether the answer names your brand |
| Brand position | Whether your brand comes first, or after competitors |
| Competitors mentioned | Who Grok recommends instead of you |
| Highlighted terms | Products and names in bold, even ones you did not list |
| Cited websites | The sources behind the answer, where a mention would count |
| Search queries | What the model searched for before answering |
| Share of answers | How often each brand appears across the whole run |

### How to track your brand in Grok

1. Enter **your brand** and, if needed, other spellings of it.
2. List the **competitors** you want to compare against.
3. Write the **questions** a customer would ask, one per line, such as "What are the best running shoes for flat feet?".
4. Optionally set how many **times to ask each question**, and the **location of the person asking**.
5. Click **Start**. When the run finishes, open the **Output** tab for the answers and the summary.
6. To follow your visibility over time, save the run as a task and add a weekly **schedule**.

Live answers need a paid Apify plan. On the free plan, the Actor returns clearly labelled sample rows and charges nothing for your questions, so you can see the exact output format.

### How much does it cost to track a brand in Grok?

You pay per answer. The price depends on your Apify Store discount tier:

| Store discount tier | Price per answer |
|---|---|
| Bronze | $0.07 |
| Silver | $0.065 |
| Gold and above | $0.06 |

At the Bronze price:

| Usage | Answers | Cost |
|---|---|---|
| 20 questions, once | 20 | $1.40 |
| 20 questions, asked 3 times each | 60 | $4.20 |
| 20 questions, asked 3 times, every week for a month | 240 | $16.80 |

Questions that fail are not charged. Set the run's maximum charge to cap spending: the Actor stops before exceeding it.

### Input example

```json
{
    "brand": "Brooks",
    "brandAliases": [
        "Brooks Running"
    ],
    "competitors": [
        "ASICS",
        "Hoka",
        "New Balance",
        "Saucony",
        "Nike"
    ],
    "questions": [
        "Which running shoe brand is best for beginners?",
        "What are the best running shoes for flat feet?",
        "What are the most comfortable running shoes for long distances?"
    ],
    "repeats": 1
}
```

| Field | Meaning |
|---|---|
| `brand` | The brand you want to track |
| `brandAliases` | Other spellings of your brand (optional) |
| `competitors` | The brands to compare against |
| `questions` | What your customers would ask, up to 100 per run |
| `repeats` | Times to ask each question, from 1 to 5 |
| `location` | Country or city of the person asking (optional) |

### Output example

These are real results for the input above, captured on 2026-11-03, with the names of the cited websites replaced by `example.com`. Across the run:

| Brand | Share of answers | Named first | Average position |
|---|---|---|---|
| Brooks (your brand) | 100% | 2 | 1.3 |
| ASICS | 100% | 1 | 2.7 |
| Hoka | 100% | 0 | 3.3 |
| New Balance | 100% | 0 | 4.7 |
| Saucony | 66.7% | 0 | 4 |
| Nike | 66.7% | 0 | 3.5 |

#### One result per answer

```json
{
    "question": "What are the best running shoes for flat feet?",
    "repeat": 1,
    "status": "ok",
    "brand": "Brooks",
    "brandMentioned": true,
    "brandPosition": 1,
    "brandsMentioned": [
        {
            "name": "Brooks",
            "isOwnBrand": true,
            "mentions": 1,
            "position": 1
        },
        {
            "name": "ASICS",
            "isOwnBrand": false,
            "mentions": 1,
            "position": 2
        },
        {
            "name": "Hoka",
            "isOwnBrand": false,
            "mentions": 1,
            "position": 3
        },
        {
            "name": "Saucony",
            "isOwnBrand": false,
            "mentions": 1,
            "position": 4
        },
        {
            "name": "New Balance",
            "isOwnBrand": false,
            "mentions": 1,
            "position": 5
        }
    ],
    "competitorsMentioned": [
        "ASICS",
        "Hoka",
        "Saucony",
        "New Balance"
    ],
    "highlightedTerms": [
        "Brooks Adrenaline GTS 25",
        "ASICS Gel-Kayano 32/33"
    ],
    "citedSources": [
        {
            "url": "https://example.com/stability-shoes-flat-feet",
            "domain": "example.com",
            "title": null
        }
    ],
    "citedDomains": [
        "example.com"
    ],
    "searchQueries": [
        "best running shoes for flat feet 2026",
        "best stability running shoes for overpronation flat feet"
    ],
    "answer": "**For flat feet (often causing overpronation), choose stability running shoes with guide rails, medial posts, or structured support to...",
    "answerIsAiGenerated": true,
    "model": "grok-4.3",
    "answeredAt": "2026-11-03T22:01:23.962Z"
}
```

| Field | Meaning |
|---|---|
| `brandMentioned` | Whether the answer names your brand |
| `brandPosition` | Order in which your brand first appears among the tracked brands. 1 means it was named first |
| `brandsMentioned` | Every tracked brand found, in order of first appearance, with the number of mentions |
| `highlightedTerms` | Products or names the answer put in bold, tracked or not |
| `citedSources`, `citedDomains` | The web pages and websites the answer cites |
| `searchQueries` | The web searches the model ran before answering |
| `answer` | The full answer text. It is generated by an AI model |

#### Run summary

The **Summary** link in the Output tab gives the figures across all answers:

```json
{
    "brand": "Brooks",
    "answersAnalysed": 3,
    "answersFailed": 0,
    "brands": [
        {
            "name": "Brooks",
            "isOwnBrand": true,
            "answersMentioning": 3,
            "shareOfAnswers": 100,
            "namedFirst": 2,
            "averagePosition": 1.3
        },
        {
            "name": "ASICS",
            "isOwnBrand": false,
            "answersMentioning": 3,
            "shareOfAnswers": 100,
            "namedFirst": 1,
            "averagePosition": 2.7
        }
    ],
    "topCitedDomains": [
        {
            "domain": "example.com",
            "answers": 1
        }
    ]
}
```

### Use cases

- **Brand monitoring:** check whether Grok recommends you, a competitor, or nobody you know.
- **Share of voice over time:** schedule the same questions weekly and compare your share of answers.
- **Generative engine optimization (GEO):** see which websites Grok relies on in your market, to know where a mention would count.
- **Client reporting:** give agency clients a repeatable measure of their AI visibility.
- **Wider AI monitoring:** add Grok to the assistants you already track.

### Tips for reliable results

- **Ask like a customer.** "What is the best CRM for a small team?" reveals more than a question that names your brand.
- **Ask each question 3 times or more.** AI answers vary, so a single answer can mislead.
- **Keep the same questions over time.** Changing them makes weeks impossible to compare.
- **Add other spellings of your brand,** so that no mention is missed.

### FAQ

#### How do I check if Grok mentions my brand?

Enter your brand and the questions your customers ask, then start the run. `brandMentioned` tells you for each question, and the summary gives your share across all of them.

#### Are these the same answers people see in the Grok app?

They come from Grok, reached through xAI's official developer interface with web search on. They are not guaranteed to be identical to what a given person sees in the app: the app can personalise answers or use another Grok model, and any AI answer varies from one time to the next. Treat the results as a measurement of how the model tends to answer, not as a copy of one person's screen.

#### Why do answers change between runs?

AI assistants do not give the same answer twice. Set **Times to ask each question** to 3 or more for a steadier share figure.

#### How are brands detected?

By looking for each name you provide as a whole word, ignoring upper and lower case. Add alternative spellings under **Other spellings of your brand**. Very short or common names, such as "On" or "Apple", can match ordinary words; check `brandsMentioned` against the answer text for those.

#### Can I ask questions for a specific country?

Yes. Set **Location of the person asking** to a country or city, and write the questions in that market's language.

#### Can I use it from my own code, Make, Zapier or n8n?

Yes. Call it through the Apify API (see below), or connect it with Apify's integrations for Make, Zapier and n8n.

#### What happens to my questions?

They are sent to xAI's model to be answered, with storage switched off for each request. Results are stored only in your own Apify account.

### Limits

- Tracks the brands you list. Other names appear only in `highlightedTerms`.
- The model decides for each question whether to search the web, so some answers have no cited sources.
- Answers are kept short (about 250 words). The model decides how many searches to run, usually two or three.
- Up to 100 questions and 5 repetitions per run.

### Other Actors you may find useful

| Actor | What it does |
|---|---|
| [AI Share of Voice](https://apify.com/spokentext/ai-share-of-voice) | This measure across OpenAI GPT, Grok, Meta AI and Mistral in one run, with a comparison |
| [Meta AI Brand Visibility Tracker](https://apify.com/spokentext/meta-ai-brand-visibility) | The same measure for Meta AI |
| [Mistral AI Brand Visibility Tracker](https://apify.com/spokentext/mistral-brand-visibility) | The same measure for Mistral's AI, the assistant built in France |
| [Keyword Search Volume](https://apify.com/spokentext/keyword-search-volume) | Google search volume, CPC and difficulty for your keywords |
| [Keyword Ideas Generator](https://apify.com/spokentext/keyword-ideas) | Long-tail keyword ideas, to find the questions customers ask |
| [TikTok Transcript](https://apify.com/spokentext/tiktok-transcript) | What is said in TikTok videos, with creator and public counts |
| [Instagram Reels Transcript](https://apify.com/spokentext/instagram-reel-transcript) | What is said in Instagram Reels, with creator and public counts |
| [Spotify Podcast Transcript](https://apify.com/spokentext/spotify-podcast-transcript) | Find out what podcasts say about your market |

### Run it from the API

With cURL:

```bash
curl -X POST "https://api.apify.com/v2/acts/spokentext~grok-brand-visibility/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "brand": "Brooks", "competitors": ["ASICS", "Hoka"], "questions": ["What are the best running shoes for flat feet?"] }'
```

With Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("spokentext/grok-brand-visibility").call(run_input={
    "brand": "Brooks",
    "competitors": ["ASICS", "Hoka"],
    "questions": ["What are the best running shoes for flat feet?"],
})
for answer in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(answer["question"], answer["brandMentioned"], answer["brandPosition"])
```

This Actor is an independent tool. It is not affiliated with or endorsed by xAI or X; their names only describe the assistant it measures.

### Feedback

Something failed or gave a wrong result? Open an issue in the **Issues** tab of this page, with the error message from your results: every report is read and fixed. If the Actor saved you time, a rating helps others find it.

# Actor input Schema

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

The brand, product or company name to look for in the answers.

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

Other names that should count as your brand, such as a longer name or an abbreviation.

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

Other brands to look for, so you can compare how often and how early each one is named.

## `questions` (type: `array`):

The questions your customers would ask an AI assistant, one per line, written the way a person would ask. Up to 100 per run.

## `repeats` (type: `integer`):

AI answers vary from one time to the next. Asking each question several times gives a steadier share figure. Each repetition is charged as one answer.

## `location` (type: `string`):

A country or city, such as France or New York. The answer is written for someone located there. Leave empty for no particular location.

## Actor input object example

```json
{
  "brand": "Brooks",
  "brandAliases": [
    "Brooks Running"
  ],
  "competitors": [
    "ASICS",
    "Hoka",
    "New Balance",
    "Saucony",
    "Nike"
  ],
  "questions": [
    "What are the best running shoes for flat feet?",
    "Which running shoe brand is best for beginners?",
    "What are the most comfortable running shoes for long distances?"
  ],
  "repeats": 1
}
```

# Actor output Schema

## `answers` (type: `string`):

No description

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

No description

# 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": "Brooks",
    "brandAliases": [
        "Brooks Running"
    ],
    "competitors": [
        "ASICS",
        "Hoka",
        "New Balance",
        "Saucony",
        "Nike"
    ],
    "questions": [
        "What are the best running shoes for flat feet?",
        "Which running shoe brand is best for beginners?",
        "What are the most comfortable running shoes for long distances?"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("spokentext/grok-brand-visibility").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": "Brooks",
    "brandAliases": ["Brooks Running"],
    "competitors": [
        "ASICS",
        "Hoka",
        "New Balance",
        "Saucony",
        "Nike",
    ],
    "questions": [
        "What are the best running shoes for flat feet?",
        "Which running shoe brand is best for beginners?",
        "What are the most comfortable running shoes for long distances?",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("spokentext/grok-brand-visibility").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 '{
  "brand": "Brooks",
  "brandAliases": [
    "Brooks Running"
  ],
  "competitors": [
    "ASICS",
    "Hoka",
    "New Balance",
    "Saucony",
    "Nike"
  ],
  "questions": [
    "What are the best running shoes for flat feet?",
    "Which running shoe brand is best for beginners?",
    "What are the most comfortable running shoes for long distances?"
  ]
}' |
apify call spokentext/grok-brand-visibility --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,spokentext/grok-brand-visibility"
        }
    }
}
```

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/ssfpWn0cngBbN7k1w/builds/tpgEjoT0BXACc1ULg/openapi.json
