# ChatGPT Search Scraper & AI Brand Visibility Tracker (`wulfcare/chatgpt-search-scraper`) Actor

Ask ChatGPT (with web search) your prompts and get the full answer, every cited source (title, URL, site), and a brand report: is your brand mentioned, where it ranks against competitors, the sentence it appears in, and whether your site is cited. No login or API key needed.

- **URL**: https://apify.com/wulfcare/chatgpt-search-scraper.md
- **Developed by:** [Wulfcare Data](https://apify.com/wulfcare) (community)
- **Categories:** SEO tools, AI, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$50.00 / 1,000 chatgpt answers

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?

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

## ChatGPT Search Scraper & AI Brand Visibility Tracker

Find out what ChatGPT tells people when they ask about your market. Give it the questions your customers ask ("best CRM for a small business", "which accounting app for a plumber?"), your brand and your competitors, and for every answer you get:

- **The full answer**, as markdown (with ChatGPT's inline citation links) and as plain text
- **Every cited source**: title, URL, website and whether it was cited inline
- **A brand report**: is your brand mentioned, **where it ranks** against your competitors (1 = named first), how many times, **the sentence it first appears in**, and **whether ChatGPT cites your website**
- **A share-of-voice summary of the whole run**: for each brand, the % of answers that mention it, its average rank, how often it's named first and how often its site is cited, plus the 25 websites ChatGPT cites most

Each prompt is asked in a **new, logged-out ChatGPT chat with web search**, exactly as a new visitor to chatgpt.com sees it. You don't need an OpenAI account, API key or ChatGPT Plus.

### What people use it for

- **AI visibility / GEO / AEO tracking**: how often ChatGPT recommends you for the questions that matter, and whether that improves after you change your content. Run it weekly on a schedule and chart the share-of-voice summary
- **Competitor share of voice**: who ChatGPT names first in your category, and who it leaves out
- **Citation research**: the exact pages and websites ChatGPT reads to answer questions in your niche. Those are the pages to get listed on, reviewed by or quoted in
- **Content gaps**: prompts where competitors are recommended and you aren't, with the sentence ChatGPT used for them
- **Client reporting for SEO agencies**: one run per client, with rows that drop straight into a spreadsheet or Looker Studio

### How to use it

1. Add your **prompts**, one per line. Write them the way a customer would ask.
2. Optional: add **your brand** and **competitors** as `Name, other name, website.com`, e.g. `Zoho CRM, Zoho, zoho.com`. A name counts as a mention in the answer, and a website counts both as a mention and as a citation.
3. Optional: **ask each prompt 3-5 times**. ChatGPT words every answer differently and the brands it names change too, so a few repeats give you a reliable share of voice instead of one snapshot.
4. Run it, then open the **Brand visibility** view, download JSON, CSV or Excel, or call the API. The **Share-of-voice summary** is in the run's Output tab (key-value store record `SUMMARY`).

### What you get

#### One row per answer

```json
{
  "prompt": "What is the best CRM for a small business?",
  "repeat": 1,
  "yourBrand": "HubSpot",
  "yourBrandMentioned": true,
  "yourBrandRank": 1,
  "yourBrandCited": true,
  "brandsMentioned": ["HubSpot", "Zoho CRM", "Pipedrive", "monday.com"],
  "brands": [
    {
      "brand": "HubSpot",
      "mentioned": true,
      "mentions": 3,
      "rank": 1,
      "firstMention": "HubSpot CRM - Most small businesses starting out - Very easy to learn, strong free plan, combines contacts, deals, email tracking, and basic automation.",
      "cited": true,
      "citedUrls": ["https://www.hubspot.com/products/crm"]
    },
    {
      "brand": "Salesforce",
      "mentioned": false,
      "mentions": 0,
      "rank": null,
      "firstMention": null,
      "cited": false,
      "citedUrls": []
    }
  ],
  "answerText": "There isn't one CRM that is best for every small business. The right choice depends on whether you mainly need sales tracking, marketing automation, customer support, or simple contact management...",
  "answer": "There isn't one CRM that is best for every small business... ([HubSpot](https://www.hubspot.com/products/crm)) ...",
  "sources": [
    { "title": "HubSpot CRM", "url": "https://www.hubspot.com/products/crm", "domain": "hubspot.com", "siteName": "hubspot.com", "citedInline": true },
    { "title": "Zoho CRM", "url": "https://www.zoho.com/crm/", "domain": "zoho.com", "siteName": "zoho.com", "citedInline": true }
  ],
  "sourceCount": 8,
  "citedDomains": ["hubspot.com", "zoho.com", "pipedrive.com", "freshworks.com", "monday.com"],
  "webSearch": true,
  "location": "US",
  "askedAt": "2026-09-30T03:47:10Z",
  "seconds": 8,
  "error": null
}
```

`rank` counts only the brands you track: 1 is the tracked brand ChatGPT names first. Every column is present on every row (`null` when there's no value). Without any brands, you still get the answer and every source.

#### Share-of-voice summary (record `SUMMARY`)

```json
{
  "answers": 20,
  "unanswered": 0,
  "brands": [
    { "brand": "HubSpot", "isYourBrand": true, "answersMentioning": 18, "mentionRate": 90.0, "averageRank": 1.3, "rankedFirst": 14, "answersCiting": 11, "citationRate": 55.0 },
    { "brand": "Zoho CRM", "isYourBrand": false, "answersMentioning": 17, "mentionRate": 85.0, "averageRank": 2.1, "rankedFirst": 3, "answersCiting": 9, "citationRate": 45.0 }
  ],
  "topCitedDomains": [{ "domain": "hubspot.com", "answersCiting": 11, "citationRate": 55.0 }],
  "prompts": [{ "prompt": "What is the best CRM for a small business?", "answers": 5, "yourBrandMentioned": 5, "topBrands": ["HubSpot", "Zoho CRM", "Pipedrive"] }]
}
```

### Pricing

**$0.05 per answer**, with no start fee and no monthly rental. **You're never charged for prompts ChatGPT didn't answer**: they're retried, and if they still fail, you get a free row with `error` saying why. The summary is free.

Set **Max cost per run** in the run options to cap your spend. The run stops cleanly when it gets there, and you keep every answer so far.

### Examples

**Weekly share of voice for your category** (schedule it weekly)

```json
{
  "prompts": ["What is the best CRM for a small business?", "best CRM for real estate agents", "HubSpot alternatives"],
  "yourBrand": "HubSpot, hubspot.com",
  "competitors": ["Salesforce, salesforce.com", "Zoho CRM, Zoho, zoho.com", "Pipedrive, pipedrive.com"],
  "repeats": 5
}
```

**Just the answers and sources** (no brand tracking)

```json
{ "prompts": ["best accounting software for tradies in Australia", "Xero vs MYOB for a sole trader"] }
```

**What ChatGPT tells people in the UK**

```json
{
  "prompts": ["best mortgage broker app"],
  "language": "en-GB",
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "GB" }
}
```

### Good to know

- **Logged-out ChatGPT with web search.** You see what a new visitor to chatgpt.com sees, on the model ChatGPT gives logged-out users. Nothing is personalised by chat history or memory.
- **Answers change.** ChatGPT is not deterministic: the same prompt can name different brands minutes apart. That's why *Ask each prompt this many times* exists, and why the summary gives rates rather than yes/no.
- **Speed**: an answer takes 6-20 seconds, and 2 run at a time, so about 6-10 answers a minute. 100 prompts take about 12-15 minutes.
- **Country**: by default you ask as a visitor in the US. For another country, pick Residential proxy and that country. The answer then reflects what ChatGPT shows people there.
- **Blocked servers**: now and then ChatGPT asks the server's IP address to sign in. The run then switches to US residential proxy by itself and carries on, at no extra cost to you.
- **Brand matching** is whole-word and case-insensitive: `Asana` doesn't match "asanas". Add other names (`Zoho CRM, Zoho`) to catch every way ChatGPT writes your brand, and your website to track citations exactly. Without a website, a source counts as your site when its domain contains your brand name (`quickbooks.intuit.com` for QuickBooks).

### Other Actors by Wulfcare Data

- [Google Hotels Prices Scraper](https://apify.com/wulfcare/google-hotels-scraper): every booking site's price for any hotel and dates, and hotel searches
- [Free YouTube Scraper](https://apify.com/wulfcare/youtube-scraper): YouTube videos, Shorts, channels and searches with views, likes, comments and channel stats, free
- [Google Trends Scraper](https://apify.com/wulfcare/google-trends-scraper): interest over time, rising queries and Trending Now
- [Google Play Scraper](https://apify.com/wulfcare/google-play-scraper) and [App Store Scraper](https://apify.com/wulfcare/app-store-scraper): app reviews, details and charts
- [YouTube Transcript Scraper](https://apify.com/wulfcare/youtube-transcript-scraper): transcripts and captions of YouTube videos
- [Google Jobs Scraper](https://apify.com/wulfcare/google-jobs-scraper): job listings from Google Jobs

Found a problem or need a field? Open an issue on the Issues tab.

# Actor input Schema

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

What to ask ChatGPT, one prompt per line. Write them the way your customers would ask, e.g. "best accounting software for a plumber". Each prompt is asked in a new, logged-out ChatGPT chat.

## `yourBrand` (type: `string`):

Optional. Your brand name, then any other names and your website, separated by commas: "HubSpot, HubSpot CRM, hubspot.com". Every answer then says whether it mentions you, your rank against the competitors below, and whether it cites your site.

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

Optional. Other brands to track, one per line, in the same format: name, other names, website.

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

ChatGPT words its answer differently each time, and the brands it names can change too. Ask the same prompt 3-5 times to get your share of mentions instead of a single snapshot. Every answer is its own row (and its own charge).

## `webSearch` (type: `boolean`):

On (recommended): ChatGPT searches the web and cites sources, like it does for most product questions. Off: ChatGPT decides for itself whether to search.

## `maxConcurrency` (type: `integer`):

How many chats run in parallel. 2 is a safe default; 3-4 is faster but needs 4 GB of memory.

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

Optional, e.g. en-GB, de-DE, fr-FR (default en-US). ChatGPT usually answers in the language of the prompt anyway.

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

Leave off to ask as a visitor in the US (fastest, and the answers most people see). If ChatGPT won't answer the server's own IP address, the run switches to US residential proxy by itself, at no extra cost to you. To see what ChatGPT tells people in another country, choose Residential proxy and that country.

## Actor input object example

```json
{
  "prompts": [
    "What is the best CRM for a small business?",
    "Which project management tool is best for a remote team?"
  ],
  "yourBrand": "HubSpot, hubspot.com",
  "competitors": [
    "Salesforce, salesforce.com",
    "Zoho CRM, Zoho, zoho.com",
    "Pipedrive, pipedrive.com",
    "monday.com"
  ],
  "repeats": 1,
  "webSearch": true,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "prompts": [
        "What is the best CRM for a small business?",
        "Which project management tool is best for a remote team?"
    ],
    "yourBrand": "HubSpot, hubspot.com",
    "competitors": [
        "Salesforce, salesforce.com",
        "Zoho CRM, Zoho, zoho.com",
        "Pipedrive, pipedrive.com",
        "monday.com"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("wulfcare/chatgpt-search-scraper").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 = {
    "prompts": [
        "What is the best CRM for a small business?",
        "Which project management tool is best for a remote team?",
    ],
    "yourBrand": "HubSpot, hubspot.com",
    "competitors": [
        "Salesforce, salesforce.com",
        "Zoho CRM, Zoho, zoho.com",
        "Pipedrive, pipedrive.com",
        "monday.com",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("wulfcare/chatgpt-search-scraper").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 '{
  "prompts": [
    "What is the best CRM for a small business?",
    "Which project management tool is best for a remote team?"
  ],
  "yourBrand": "HubSpot, hubspot.com",
  "competitors": [
    "Salesforce, salesforce.com",
    "Zoho CRM, Zoho, zoho.com",
    "Pipedrive, pipedrive.com",
    "monday.com"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call wulfcare/chatgpt-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wulfcare/chatgpt-search-scraper"
        }
    }
}
```

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/5JXxy8gC6e94xIM8J/builds/CGUVcdOZ1K9qHpgbE/openapi.json
