# ChatGPT Scraper: Search Answers, Citations & Sources API (`plainrows/chatgpt-search-scraper`) Actor

ChatGPT scraper and MCP tool for ChatGPT search: send prompts, get ChatGPT's answer with web search as JSON: markdown text, ChatGPT citations and sources, search results, fan-out queries, brands and products. No account, no browser. $0.008 per answer, + $0.001 per run; empty/failed answers are free.

- **URL**: https://apify.com/plainrows/chatgpt-search-scraper.md
- **Developed by:** [PlainRows](https://apify.com/plainrows) (community)
- **Categories:** SEO tools, AI, MCP servers
- **Features:** Limited permissions
- **Stats:** 9 total users, 7 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.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.
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

## ChatGPT Search Scraper: Answers, Citations & Sources API

Give it **a list of prompts** and get one row per prompt: **ChatGPT's answer with web search (Markdown), every source it cites (rank, URL, domain, title), the web search results it read, the searches it ran (fan-out queries), and the brands and products it names**.

A **ChatGPT scraper alternative**: no browser, no proxies, no CAPTCHAs, no OpenAI account. Prompts run five at a time, usually 15 to 30 seconds each; a prompt not answered within 3 minutes gets a free row. **You only pay for prompts that got an answer: $0.008 per answer**, plus $0.001 per run.

**Where the answers come from:** this Actor gets ChatGPT's answers (with web search) through a commercial data API that collects them from ChatGPT. Answers vary with the model, the time and the location, so they can differ from what you see in your own ChatGPT account.

### Typical uses

- **AI search visibility (GEO / AEO)**: which sites does ChatGPT cite, which brands and products does it recommend, for the prompts your buyers type?
- **Citation research**: `sources` and `citedDomains` show the pages ChatGPT relies on; `searchResults` shows what it read but did not cite.
- **Query research**: `fanOutQueries` shows the web searches ChatGPT ran behind one prompt: keywords to target.
- **Answers with sources for your app or agent**: ChatGPT search as plain JSON, with the citations kept apart from the text.
- **Weekly reports**: schedule a run and send the rows to Google Sheets, Looker Studio, Slack, n8n, Make or Zapier.

### What you get for each prompt

| Field | Description |
|---|---|
| `prompt` | The prompt asked |
| `answer`, `answerLength` | ChatGPT's answer as Markdown (headings, lists, tables, images, links) |
| `sources`, `sourcesCount` | Each cited source: `rank`, `url`, `domain`, `title`, `snippet`, `publicationDate` (up to 50) |
| `citedDomains` | Domains cited, in order, without duplicates |
| `searchResults`, `searchResultsCount` | Web search results ChatGPT read: `rank`, `url`, `domain`, `title`, `description` (up to 50) |
| `fanOutQueries` | Web searches ChatGPT ran for the answer |
| `brandEntities` | Brands and products named in the answer: `name` (as written), `title`, `category`, `urls` |
| `products` | The brand entities of category `product` |
| `model`, `chatgptUrl`, `answeredAt` | Model reported by the data source, a link that opens the prompt in ChatGPT, when it answered |
| `found`, `status`, `message` | `ANSWERED` for a billed row; free rows say why: `EMPTY_ANSWER`, `UNREADABLE`, `REJECTED`, `PROVIDER_ERROR`, `NOT_CHECKED` |
| `country`, `languageCode`, `checkedAt` | Location and language of the answer; when the run started |

Missing values are `null` or empty lists, never guessed.

### Input

```json
{
  "prompts": ["best standing desk for small spaces", "Which CRM do small agencies recommend in 2026?"],
  "country": "US",
  "languageCode": "en",
  "includeSearchResults": true
}
```

- **prompts**: up to 200 prompts per run, 1 to 500 characters each. Each prompt is one answer.
- **country** (default US): US, GB, CA, AU, IE, IN, DE, AT, CH, FR, BE, ES, MX, IT, NL, PT, BR, PL, SE, JP.
- **languageCode** (optional): two-letter code; default is the main language of the country.
- **includeSearchResults** (default true): turn it off to keep only the count of search results. The price does not change.

### Pricing

Pay per event, no subscription:

- **ChatGPT answer: $0.008** per prompt that got a non-empty answer, at every Apify plan, free plan included.
- **Actor start: $0.001** per run.

Empty answers, prompts the data source refused or failed, answers that came back in an unexpected format, and prompts not reached (budget or timeout) get a free row with `found: false` and the reason. The run never spends more than the maximum cost you set.

**Free Apify plan:** each run asks the first 3 prompts, so you can test the output. A paid Apify plan removes this limit.

### Good to know

- **Answers vary from one run to the next**, even for the same prompt: track trends over several runs, not a single answer.
- Not every answer cites sources: ChatGPT searches the web when it decides to, so `sources` can be empty on general-knowledge prompts (the answer is still billed).
- For one table of brand mentions across ChatGPT, Gemini and Google AI Mode, use [AI Visibility Tracker](https://apify.com/plainrows/ai-search-brand-visibility); for Perplexity, [Perplexity Search API](https://apify.com/plainrows/perplexity-search-api).
- Not affiliated with OpenAI.

### What this is not

- Not the OpenAI API: you cannot pick the model, set a system prompt or continue a conversation. One prompt, one fresh answer.
- Not a login-based scraper: no account, no chat history, no personal context.
- Not a rank tracker for Google: for Google results use a SERP tool.

### Run summary

Each run stores a summary in the key-value store (`OUTPUT`): prompts asked, answers billed, empty answers (`promptsEmpty`), prompts that failed and are worth a retry (`promptsFailed`), unreadable answers (`promptsUnreadable`), and anything skipped because of the free-plan or budget limit.

### Use it from code, automations or AI agents

**API (one call, results returned directly):**

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~chatgpt-search-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"prompts": ["best standing desk for small spaces"]}'
```

**n8n, Make, Zapier:** use the Apify integration, pick `plainrows/chatgpt-search-scraper`, schedule it and send the rows to Google Sheets or Slack.

**AI agents (MCP tool):** add `https://mcp.apify.com?tools=plainrows/chatgpt-search-scraper` to Claude, Cursor or any MCP client, then ask "What does ChatGPT answer to these prompts, and which sites and products does it cite?".

### FAQ

**Is this a ChatGPT search API?**
Yes: one call per list of prompts, JSON rows back with the answer, its sources and the searches behind it, usable from the Apify API, n8n, Make, Zapier or as an MCP tool.

**How do I see if ChatGPT cites my site?**
Look for your domain in `citedDomains` (and its position in `sources.rank`); `searchResults` tells you if ChatGPT read your page without citing it.

**Do I pay for empty answers or errors?**
No. Only prompts with a non-empty answer are charged ($0.008), plus $0.001 per run.

**How do I track the same prompts every week?**
Save your input as a task in the Apify Console, then add a weekly schedule to it (Schedules > Create, pick the task). Each run adds a new dataset: compare `citedDomains` and `brandEntities` from one week to the next to see who gains or loses ChatGPT citations. 20 prompts a week cost $0.161 per run ($0.008 × 20 + $0.001), about $0.70 a month.

### For AI agents

- **Use when:** You have one or more prompts and need ChatGPT's answer with web search as data: the markdown answer, the sources it cites, the web results it read, its fan-out search queries and the brands and products it names, for example to track how ChatGPT answers the same prompts every week.
- **Do not use for:** Brand visibility scores across several AI engines at once (use plainrows/ai-search-brand-visibility), Perplexity answers (use plainrows/perplexity-search-api) or Google AI Mode answers (use plainrows/google-ai-mode-api). It does not log into a ChatGPT account and does not keep a conversation between prompts.
- **Input JSON (minimal):** `{"prompts": ["best standing desk for small spaces"]}`
- **Output fields:** `prompt`, `status`, `found`, `message`, `answer`, `answerLength`, `sources`, `sourcesCount`, `citedDomains`, `searchResults`, `searchResultsCount`, `fanOutQueries`, `brandEntities`, `products`, `model`, `chatgptUrl`, `answeredAt`, `country`, `languageCode`, `checkedAt`, `schemaVersion`
- **Price per result:** $0.008 per `chatgpt-answer` on the Starter plan, plus $0.001 per run (other plans: see the pricing table)
- **Median run time:** 50 s (successful runs of the last 30 days)
- **Success rate (30 days):** 100% of 38 public runs

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Planner Alternative (Bulk Search Volume & CPC)](https://apify.com/plainrows/keyword-planner-alternative) · [Google Keyword Planner API (Google Ads Search Volume & CPC)](https://apify.com/plainrows/google-keyword-planner-api) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Google Trends Keyword Discovery (Rising & Related)](https://apify.com/plainrows/google-trends-keyword-discovery) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [Competitor Keywords API (Ranked Keywords)](https://apify.com/plainrows/competitor-keywords-api) · [Bulk Website Traffic Checker](https://apify.com/plainrows/website-traffic-checker) · [PPC Competitor Keywords (SpyFu Alternative)](https://apify.com/plainrows/ppc-competitor-keywords) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Backlink API (Referring Domains & Backlinks Data)](https://apify.com/plainrows/backlink-api) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [SEO Audit API (On-Page SEO Checker)](https://apify.com/plainrows/seo-audit-api) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility) · [AI Overview Tracker (Google AI Overview Citations)](https://apify.com/plainrows/ai-overview-tracker) · [Perplexity Search API (Answers & Citations)](https://apify.com/plainrows/perplexity-search-api) · [Google AI Mode API (Answers & Citations)](https://apify.com/plainrows/google-ai-mode-api) · [Gemini Search Scraper (Answers & Citations)](https://apify.com/plainrows/gemini-search-scraper) · [AI Citations Finder (LLM Mentions in ChatGPT & AI Overviews)](https://apify.com/plainrows/ai-citations-finder) · [Keyword Rank Checker (Google SERP Position)](https://apify.com/plainrows/keyword-rank-checker) · [Google Search API (SERP Scraper & Web Results)](https://apify.com/plainrows/google-search-api) · [Bing Search API (Bing SERP & Web Results)](https://apify.com/plainrows/bing-search-api)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Google Maps Email Extractor](https://apify.com/plainrows/google-maps-email-extractor) · [Google Maps Businesses Without Website](https://apify.com/plainrows/google-maps-no-website-leads) · [Yellow Pages Australia Scraper](https://apify.com/plainrows/yellowpages-au-scraper) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [Website Email Extractor](https://apify.com/plainrows/website-email-extractor) · [Contact Details Scraper (Emails, Phones, Socials)](https://apify.com/plainrows/contact-details-scraper) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Workday Jobs Scraper](https://apify.com/plainrows/workday-jobs-scraper) · [Greenhouse Jobs Scraper](https://apify.com/plainrows/greenhouse-jobs-scraper) · [Lever Jobs Scraper](https://apify.com/plainrows/lever-jobs-scraper) · [Ashby Jobs Scraper](https://apify.com/plainrows/ashby-jobs-scraper) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Reed.co.uk Jobs Scraper (UK)](https://apify.com/plainrows/reed-jobs-scraper) · [jobs.ch & jobup.ch Jobs Scraper (Switzerland)](https://apify.com/plainrows/jobs-ch-scraper) · [Arbeitsagentur Jobs Scraper (Germany)](https://apify.com/plainrows/arbeitsagentur-jobs-scraper) · [Gupy Jobs Scraper (Brazil)](https://apify.com/plainrows/gupy-jobs-scraper) · [Catho Jobs Scraper (Brazil)](https://apify.com/plainrows/catho-jobs-scraper) · [Vagas.com.br Jobs Scraper (Brazil)](https://apify.com/plainrows/vagas-jobs-scraper) · [Jobs.cz Scraper (Czech Republic)](https://apify.com/plainrows/jobs-cz-scraper) · [Remote Jobs Scraper (Himalayas, RemoteOK, Jobicy)](https://apify.com/plainrows/remote-jobs-aggregator) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Amazon Keyword Research (Search Volume & Reverse ASIN)](https://apify.com/plainrows/amazon-keyword-research) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices) · [Google Hotels Scraper](https://apify.com/plainrows/google-hotels-scraper) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews) · [Trustpilot Reviews Scraper](https://apify.com/plainrows/trustpilot-reviews)
- **Marketplaces and classifieds:** [Property Finder Scraper (UAE)](https://apify.com/plainrows/propertyfinder-scraper) · [Redfin Scraper (US Homes for Sale)](https://apify.com/plainrows/redfin-scraper) · [Otomoto Scraper (Polish Car Listings)](https://apify.com/plainrows/otomoto-scraper) · [Otodom Scraper (Poland Property)](https://apify.com/plainrows/otodom-scraper) · [Imovirtual Scraper (Portugal Property)](https://apify.com/plainrows/imovirtual-scraper) · [Standvirtual Scraper (Portugal Cars)](https://apify.com/plainrows/standvirtual-scraper) · [Immoweb Scraper (Belgium Property)](https://apify.com/plainrows/immoweb-scraper) · [Blocket Scraper (Sweden)](https://apify.com/plainrows/blocket-scraper) · [FINN.no Scraper (Norway)](https://apify.com/plainrows/finn-scraper) · [coches.net Scraper (Spain Cars)](https://apify.com/plainrows/coches-net-scraper) · [2dehands Scraper (Belgium)](https://apify.com/plainrows/2dehands-scraper) · [Storia Scraper (Romania Property)](https://apify.com/plainrows/storia-scraper) · [Autovit Scraper (Romania Cars)](https://apify.com/plainrows/autovit-scraper) · [FINN.no Car Scraper (Norway Cars)](https://apify.com/plainrows/finn-cars-scraper) · [DBA Scraper (Denmark)](https://apify.com/plainrows/dba-scraper) · [Tori.fi Scraper (Finland)](https://apify.com/plainrows/tori-scraper)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Search API (JSON)](https://apify.com/plainrows/youtube-search-api) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [PDF to Markdown Converter (PDF to Text for AI & RAG)](https://apify.com/plainrows/pdf-to-markdown) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [Google Reviews Scraper](https://apify.com/plainrows/google-reviews-scraper) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper) · [App Store & Google Play App Details Scraper](https://apify.com/plainrows/app-details-scraper) · [Google Play Reviews Scraper](https://apify.com/plainrows/google-play-reviews-scraper) · [App Store Reviews Scraper](https://apify.com/plainrows/app-store-reviews-scraper)

### Support

Missing a field or found a bug? Open an issue on this page. Issues are read and answered.

# Actor input Schema

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

One prompt per line, as you would type it in ChatGPT. Up to 200 prompts per run, 1 to 500 characters each. Each prompt is one ChatGPT answer with web search. Free Apify plan: 3 prompts per run (paid plans: no limit). Example: \["best standing desk for small spaces", "Which CRM do small agencies recommend in 2026?"].

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

Country ChatGPT answers and searches the web from (two-letter ISO code). Example: "GB" for answers from the United Kingdom.

## `languageCode` (type: `string`):

Two-letter language code, e.g. "en", "de", "fr". Default: the main language of the country. Example: "de" with country "CH" for German answers from Switzerland.

## `includeSearchResults` (type: `boolean`):

Add the web search results ChatGPT read (url, domain, title, description). Off: only their count. The price per answer does not change. Example: false to keep only the answer and its cited sources.

## Actor input object example

```json
{
  "prompts": [
    "best standing desk for small spaces",
    "Which CRM do small agencies recommend in 2026?",
    "best running shoes for flat feet"
  ],
  "country": "US",
  "includeSearchResults": true
}
```

# 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": [
        "best standing desk for small spaces",
        "Which CRM do small agencies recommend in 2026?",
        "best running shoes for flat feet"
    ],
    "country": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/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": [
        "best standing desk for small spaces",
        "Which CRM do small agencies recommend in 2026?",
        "best running shoes for flat feet",
    ],
    "country": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/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": [
    "best standing desk for small spaces",
    "Which CRM do small agencies recommend in 2026?",
    "best running shoes for flat feet"
  ],
  "country": "US"
}' |
apify call plainrows/chatgpt-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plainrows/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/NADCvY5zPW6fyIxDf/builds/pgrtEFmtvduob64yA/openapi.json
