# ChatGPT Scraper: Perplexity, Gemini, AI Mode & AI Overview (`hyperbach/ai-search-answers`) Actor

AI search answers scraper: what ChatGPT search, Perplexity, Gemini, AI Mode, AI Overviews and the ChatGPT, Gemini and Claude APIs answer for your queries, with every cited source and brands named. AI visibility and LLM rank tracker: brand mentions, rank, citations, share of voice. Pay per answer.

- **URL**: https://apify.com/hyperbach/ai-search-answers.md
- **Developed by:** [Hyperbach](https://apify.com/hyperbach) (community)
- **Categories:** AI, SEO tools, Automation
- **Stats:** 4 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.02 / 1,000 web answer from the standard queues

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 Scraper: Perplexity, Gemini, AI Mode & AI Overview

**What ChatGPT, Gemini, Google AI Mode, Google AI Overviews, Perplexity and the ChatGPT, Gemini and Claude APIs answer for your queries: the whole answer as Markdown, every source the engine cited (URL, domain, title), what it searched, the brands it named, and, for a brand you track, whether it is mentioned, how often, in which position, whether its site is cited, which competitors are named and cited, and its share of voice.** One row per query × engine × repeat, with a typed status on every cell: `answered` (charged), `no_answer` (the engine gave none: free), `not_read` with the reason (free), `invalid` (free). Any country, 1,000 queries a run; a list is read from the source's standard queue at a lower price (ready in 1–3 minutes), 1–2 queries live. An optional sentiment judge per brand. No login, no API key, no proxy. Ready-made: [a weekly brand tracker on ChatGPT and AI Overviews that delivers only the changes](https://apify.com/hyperbach/ai-search-answers/examples/chatgpt-and-google-ai-overview-brand-tracker-only-changes) and [one brand on the five engine views](https://apify.com/hyperbach/ai-search-answers/examples/brand-visibility-in-chatgpt-gemini-perplexity-and-google-ai).

### Why this AI search answers scraper

- **Every cell accounted for, nothing charged for an empty one.** The lane's most-used actors end green with work missing (a Google AI Mode scraper delivered 0 rows in 3 of 3 runs and a Copilot scraper 0 in 2 of 2, every run SUCCEEDED; a tracker "shows Succeeded, but it finished only 28 of its 40 checks"). Here every query × engine × repeat gets a row with one of four statuses and a `charged` flag: `answered`, `no_answer` (the engine gave none), `not_read` (the source refused or failed it, the queue did not answer in 12 minutes, the cap or the time limit stopped the run before it: the reason is on the row), `invalid` (a query over the engine's length, a location the source does not know). A run with cells the source did not read ends PARTIAL and says how many; a run where the source read none ends FAILED at $0. A cell your own settings rule out (a country or language that engine lacks) is a free `not_read` row with the reason and does not change the run's status; when your settings rule out every cell, the run is rejected before any task, at $0.
- **The whole answer and every source, never cut.** Other actors cut the AI Overview to 280–476 characters or return `sources` empty while the engine cited 7–9 pages. Here `answer_markdown` is the engine's whole answer (on 22 ordinary queries in our test: ChatGPT 740–8,600 characters, Gemini 750–9,900, Google AI Mode 2,000–5,900, AI Overviews 400–4,900, Perplexity 1,200–2,100), `sources` every source the engine showed with URL, domain, title, snippet and publication date where the engine gives one, `answer_sections` each paragraph, table or card with the sources it cites, `cited_domains` the distinct domains, and the cards and links around the text: ChatGPT's product cards (`products`) and local business cards (`local_results`), the links written into Google's answer (`answer_links`) and the ads Google AI Mode shows inside it (`ads_in_answer`). An answer the engine wrote without searching says so (`status_detail`: the engine cited nothing) instead of a missing field.
- **Eight engines, two routes, labelled.** ChatGPT and Gemini web answers (the engine's own search page), Google AI Mode and Google AI Overviews (with the organic results beside the overview), Perplexity (Sonar), and the ChatGPT, Gemini and Claude APIs with web search. Every row says its `route` (web or api), `read_mode` (live or queued), `model` (gpt-6, 3.5 Flash-Lite, sonar, gpt-4.1-mini-2025-04-14, …) and `web_search`, so an API answer is never sold as the engine's page. Microsoft Copilot is not served: there is no route to it.
- **Brand tracking for the price of an answer.** Give `brand`, its aliases and domain, and the competitors with their domains: every answered row carries `brand_mentioned`, `brand_mention_count`, `brand_position` (its rank among the brands named, by first mention), `brand_cited` and `brand_cited_urls`, `competitors_named`, `competitors_cited`, `share_of_voice`, and `brands_named` (ChatGPT's own entity list, every brand it named; the tracked set on the other engines). The run summary gives each engine's mention rate, cited rate and positions, the competitors' counts, the top cited domains and a visibility score with its formula stated. Ready-made: [Notion across the five engine views](https://apify.com/hyperbach/ai-search-answers/examples/brand-visibility-in-chatgpt-gemini-perplexity-and-google-ai).
- **The variance measured, not hidden.** ChatGPT and Gemini answer differently from read to read (the same five brands on 4 of 4 reads of our test query, in a moving order and with other sources); Google's AI Mode and AI Overview held our test query's answer for hours, but not every query's: 12 ordinary queries read twice 8 minutes apart kept the same text on 5 of 12 in each view. `repeats` reads a cell up to five times, each its own row with `repeat`, and the summary states the rate over the repeats; with one read the row says `reads_in_run` 1.
- **The standard queue for a list: the same row at a lower price.** A run of 1–2 web cells is read live (ChatGPT 20–80 s, Google 4–17 s); a list goes through the source's standard queue (one post per engine of up to 100 tasks, ready in 1–3 minutes, polled every 10 s) and is charged as `web_answer_queued` instead of `web_answer_live`. `readMode` forces either. The API engines are always live (seconds).
- **What the engine searched, not only what it cited.** ChatGPT rows carry `search_results` (the pages the engine retrieved, 7–24 per answer on ordinary queries) and `fan_out_queries` (the queries it ran itself) as the source serves them, on every row where the engine searched. `forceWebSearch` makes ChatGPT search a query it would answer from memory.
- **A memory for a schedule.** `onlyChanges` with a `stateStoreName` turns a saved task on a schedule into a change feed: a cell is delivered only when its brand fields moved (named, position, cited, the brands named) since the last delivery; every delivered row carries `change_type`, the previous brand fields and the history of this memory's reads of the cell, with the whole answer. Ready-made: [a weekly Asana tracker on ChatGPT and AI Overviews](https://apify.com/hyperbach/ai-search-answers/examples/chatgpt-and-google-ai-overview-brand-tracker-only-changes).
- **Plain HTTPS to a paid API, 256 MB, seconds per cell.** No browser, no page, no proxy. A sentiment add-on on request (`brandSentiment`): a typed classifier reads the sentences around the brand and answers two questions, with its confidence on the row.

### Who it's for

- **SEO and GEO teams** — which pages each engine cites for the queries they care about, in the markets they sell in: the sources, the domains, what the engine searched, the whole answer to read.
- **Brand and product marketing** — whether the brand is named and recommended when a buyer asks the engines, in which position, against which competitors, with the sentiment and a share of voice per engine, on a schedule.
- **Agencies and SaaS builders** — a cross-engine brand report per client from one run: typed rows per cell, a summary record with the rates, and `onlyChanges` for a weekly feed.
- **Developers and agents** — typed rows with stable snake_case names, a status and a charged flag on every row, the model and route on every answer, a run summary to check a pipeline against.

### Quick start

**One query on ChatGPT (web), live**

```json
{
  "queries": [
    "What are the top 5 CRM tools"
  ]
}
```

**The five engine views of one query, with a tracked brand and its competitors**

```json
{
  "queries": [
    "What are the top 5 CRM tools"
  ],
  "engines": [
    "chatgpt",
    "gemini",
    "google_ai_mode",
    "google_ai_overview",
    "perplexity"
  ],
  "brand": "HubSpot",
  "brandAliases": [
    "HubSpot CRM"
  ],
  "brandDomain": "hubspot.com",
  "competitors": [
    "Salesforce",
    "Zoho CRM",
    "Pipedrive"
  ],
  "competitorDomains": [
    "salesforce.com",
    "zoho.com",
    "pipedrive.com"
  ]
}
```

**A list of queries from the standard queue, the brand judged**

```json
{
  "queries": [
    "best CRM software 2026",
    "best crm for small business",
    "HubSpot alternatives 2026"
  ],
  "engines": [
    "chatgpt",
    "google_ai_overview"
  ],
  "brand": "HubSpot",
  "brandDomain": "hubspot.com",
  "brandSentiment": true
}
```

**The ChatGPT and Gemini APIs with web search, in Germany**

```json
{
  "queries": [
    "beste CRM Software für kleine Unternehmen"
  ],
  "engines": [
    "chatgpt_api",
    "gemini_api"
  ],
  "country": "DE",
  "language": "de"
}
```

### Output

One row per query × engine × repeat (a cell):

| field | meaning |
|---|---|
| `row_type` | `answer` on every row: one row per query × engine × repeat. |
| `query` | The query as asked, trimmed; exact duplicates were folded. |
| `engine` | The engine id: `chatgpt`, `gemini`, `google_ai_mode`, `google_ai_overview`, `perplexity`, `chatgpt_api`, `gemini_api`, `claude_api`. |
| `engine_label` | The engine's name as a person would say it (`ChatGPT (web)`, `Google AI Overview`, `Perplexity (API)`). |
| `route` | `web` (the engine's own search page, read through a scraping API) or `api` (the model's API answer). |
| `read_mode` | `live` (read at once) or `queued` (the source's standard queue, the same row at a lower price). The API engines are always live. |
| `repeat` | Which repeat of the cell this row is (1..`repeats`). |
| `reads_in_run` | How many times the cell was asked in this run (`repeats`): 1 means one sample of an engine whose answer varies. |
| `status` | `answered` (the engine's answer; the only charged status), `no_answer` (the engine gave none; free), `not_read` (the source refused or failed it, the queue did not answer in time, the cap, the charge limit or the time limit stopped the run before it; free; the reason in `status_detail`), `invalid` (a query over the engine's length; free). |
| `status_detail` | The reason behind a `no_answer`, `not_read` or `invalid` row, and on an answered row whose engine cited nothing, that note. |
| `charged` | `true` on a row you were charged for (`answered`); `false` on every free row. |
| `scraped_at` | When the Actor read the cell (UTC, ISO 8601). |
| `answered_at` | When the source read the engine, as the source stamps it (UTC). |
| `country` | The country the cell was asked from, as given (`US`, `GB`, or a numeric Google location code). |
| `location_code` | The Google location code the engine was asked from (2840 = United States, 2826 = United Kingdom, 2276 = Germany). |
| `language_code` | The engine's locale the cell was asked in (`en`, `de`, `pt-BR`); null on the API rows (the model takes no locale: its answer follows the language of the query). |
| `task_id` | The source's own id of the task that read this cell (for support; on a queued cell the queue's task id). |
| `model` | The model behind the answer as the source reports it: `gpt-6` (ChatGPT web), `3.5 Flash-Lite` (Gemini web), `sonar`, `gpt-4.1-mini-2025-04-14`, …; null on the Google views. |
| `web_search` | On an API row: whether the model searched the web (`true` with `apiWebSearch`, always on Perplexity); null on the web rows (the engine's page searches by itself). |
| `check_url` | A URL that reproduces the query on the engine's own site (chatgpt.com, google.com); null on the API rows. |
| `answer_markdown` | The engine's whole answer as Markdown, as the source serves it (headings, lists, tables, image and link Markdown kept). Null on a `no_answer`, `not_read` or `invalid` row. |
| `answer_chars` | The answer's length in characters (0 when there is none). |
| `item_types` | The kinds of blocks the source found in the answer (`chat_gpt_text`, `chat_gpt_table`, `chat_gpt_images`, `gemini_text`, `ai_overview`, `organic`, …). |
| `answer_sections` | The answer block by block: objects with `type` (text, table, products, video, ad, …), `markdown` and `sources` (the URLs that block cites). Per-statement citations live here. |
| `sources` | Every source the engine cited, deduplicated by URL: objects with `url`, `domain`, `title`, `snippet`, `source_name`, `publication_date` (where the engine gives them). Empty when the engine cited nothing. |
| `sources_count` | How many sources the engine cited. |
| `cited_domains` | The distinct domains of the sources, in citation order (without `www.`). |
| `search_results` | On a ChatGPT (web) row: the pages the engine retrieved while answering (`url`, `domain`, `title`, `description` where the engine gives one), cited or not; null when it did not search. |
| `search_results_count` | How many pages ChatGPT retrieved; null when it did not search. |
| `fan_out_queries` | The queries the engine ran itself while answering (ChatGPT web and the API answers with web search); null when none. |
| `organic_results` | On a Google AI Overview row: the organic results on the same page (`rank`, `url`, `domain`, `title`). |
| `ai_overview_async` | On a Google AI Overview row: `true` when Google loaded the overview after the page (the source's asynchronous read), `false` when it was on the page. |
| `products` | On a ChatGPT (web) row: the product cards the engine showed (`title`, `url`, `domain`, `tag`, `price`, `currency`, `rating`, `image_url`); null when none. |
| `local_results` | On a ChatGPT (web) row: the local business cards the engine showed (`title`, `description`, `address`, `phone`, `url`, `domain`, `rating`, `reviews_count`); null when none. |
| `images_count` | How many image blocks the answer carries. |
| `ads_in_answer` | On a Google AI Mode row: the paid element shown inside the answer, when any: its own sentence, then each ad as `advertiser — title — snippet`. |
| `answer_links` | On a Google AI Mode / AI Overview row: the links written into the answer's text (`url`, `domain`, `title`; e.g. a brand name linked to its site), apart from the references in `sources`. They count for `brand_cited` and `competitors_cited`. Null when none. |
| `brand` | The tracked brand (`brand`), echoed; null when none was given. |
| `brand_mentioned` | Whether the answer names the brand or an alias (whole word, case-insensitive). |
| `brand_mention_count` | How many times the answer's text names the brand or an alias (link targets, bare URLs and images are not counted; a longer competitor name that contains an alias counts for the competitor). |
| `brand_position` | The brand's rank among `brands_named` by first mention (1 = named first); null when not named. |
| `brand_cited` | Whether a cited source or a link in the answer's text is on the brand's domain or a subdomain of it (`brandDomain`; a more specific competitor domain takes its own URLs); null without a domain. |
| `brand_cited_urls` | The cited URLs on the brand's domain. |
| `brands_named` | The brands the answer names, by first mention: ChatGPT's own entity list where served (every brand it named), else the tracked brand and competitors found in the text. |
| `brands_named_source` | `engine` (the engine's own entity list) or `tracked` (the tracked set found in the text). |
| `competitors_named` | The competitors (`competitors`) the answer names. |
| `competitors_cited` | The competitors whose domain (`competitorDomains`) a cited source is on. |
| `share_of_voice` | The brand's mentions over the mentions of the brand and its competitors (0–1); null when none is named. |
| `brand_sentiment` | With `brandSentiment`: how the answer speaks of the brand, −1 (negative) … 1 (strongly positive), from a typed classifier over the sentences around the brand; null without the add-on or when the brand is not named. |
| `brand_sentiment_label` | `negative` (under −0.25), `neutral`, `positive` (over 0.25). |
| `brand_recommended` | With `brandSentiment`: `yes` (recommended, ranked at the top or named the best for a stated need), `no` (named with drawbacks, advised against, ranked below alternatives), `unclear` (listed or compared with no verdict). |
| `brand_sentiment_confidence` | The judge's confidence (0–1), the lower of its two answers. |
| `input_tokens` | On an API row: the input tokens the model used (the source's count). |
| `output_tokens` | On an API row: the output tokens the model produced. |
| `change_type` | With a memory (`stateStoreName` / `onlyChanges`, or any buyer run): `new` (first delivery of this cell), `changed` (a brand field moved since the last delivery), `unchanged`. |
| `changed_fields` | With a memory: which watched brand fields moved since this cell was last delivered (`mentioned`, `position`, `cited`, `brands`); null on a new cell. |
| `previous_brand_mentioned` | With a memory: whether the brand was named when this cell was last delivered to you. |
| `previous_brand_position` | With a memory: the brand's position when this cell was last delivered to you. |
| `mention_history_own` | With a memory: this memory's reads of the cell, newest last (`read_at`, `brand_mentioned`, `brand_position`). |

Example record:

```json
{
  "row_type": "answer",
  "query": "What are the top 5 CRM tools",
  "engine": "chatgpt",
  "engine_label": "ChatGPT (web)",
  "route": "web",
  "read_mode": "live",
  "repeat": 1,
  "reads_in_run": 1,
  "status": "answered",
  "status_detail": null,
  "charged": true,
  "scraped_at": "2026-10-13T22:32:59Z",
  "answered_at": "2026-10-13 20:43:43 +00:00",
  "country": "US",
  "location_code": 2840,
  "language_code": "en",
  "task_id": "10132043-1380-0629-0000-88223b3dbbeb",
  "model": "gpt-6",
  "web_search": null,
  "check_url": "https://chatgpt.com/?prompt=What%20are%20the%20top%205%20CRM%20tools",
  "answer_markdown": "The **top 5 CRM (Customer Relationship Management) tools** depend on your business size, budget, and whether you need sales automation, marketing, customer support, or an all-in-one platform.\n\nHere are five leading CRM platforms worth considering in 2026, based on their capabilities, typical use cases, and overall value.\n\n![Logo HubSpot – Logos PNG](https://images.openai.com/static-rsc-4/3SuTllK0wLZetI-oDt8qz2lcCEFUgtJyLhbpRHNkZ5zkU6Cx2U9qgicruwYie7zHbRXgcw3te8AcLFDFF1fFNc1DFOcBTeNebb3uSlvWXIED0r9NxZQH3ohwXUQwDW1srkvylU44YFc3L9VWHh5drs7U6uXiqmiJ7vk6yEx6CM9uVWSOqA2GnlaYOXqtlb0o?purpose=fullsize)\n\n## 1\\. HubSpot CRM\n\n(Best overall for many small businesses)\n\nEasy to use, with contact management, deal tracking, email tools, and marketing features. A good choice for businesses that want sales and marketing in one place.\n\n**Best for\\:** Startups and small to midsize businesses.\n\n**Pricing\\:** Free tools available; paid plans vary by product and tier.\n\nWebsite: [hubspot.com](https://www.hubspot.com/)\n\n---\n\n![Salesforce - AI Tool Review | LinkGo](https://images.openai.com/static-rsc-4/I_Jsun259NxXgspjAS9ba6hv5D2HjnKRV8zmWfkaJs1inE2ektYtWv6Q1ehQn0NvyXjoW_r9mV3pUW-CZ7xQqGIJlnMb5KGJeVEgigEBon4VrfOMELAjPuQfOtponMZn7MJHD0ImybVqQXdOwFGfkIqNccyeKfo8ofqUJ61Jup2JtwRfreZl5APCQGHFj0ny?purpose=fullsize)\n\n## 2\\. Salesforce Sales Cloud\n\n(Best for enterprise)\n\nHighly customizable, with advanced sales forecasting, workflow automation, reporting, and a large integration ecosystem.\n\n**Best for\\:** Large organizations and complex sales processes.\n\n**Pricing\\:** Paid plans; entry-level pricing depends on the edition.\n\nWebsite: [salesforce.com](https://www.salesforce.com/)\n\n---\n\n![TheProwess | Zoho CRM'de Yeni Dönem: Eski Arayüz 15 Temmuz'da Tamamen Kaldırılıyor](https://images.openai.com/static-rsc-4/mhOzD_IXTeMyjegHs7_31H-nZlvGoIQWY2PfiTmHpwuQOA09A9NutmTAM8TWT2HF-7JryptkgV-lS_xHcaI7d43ujbBUTvqfxj-z3nk-gdRQr3-Ei-qigHIPik-T14ytWC4EuYLl0he93dU9qCw5sHTS1LPdprZuUjTWv0UHX5wzcmxSTdtKBrPPwq-xdGBE?purpose=fullsize)\n\n## 3\\. Zoho CRM\n\n(Best value for money)\n\nOffers lead management, workflow automation, analytics, and integrations with Zoho's broader business applications.\n\n**Best for\\:** Small and midsize businesses that want robust features on a budget.\n\n**Pricing\\:** Free edition available in some markets; paid tiers offered.\n\nWebsite: [zoho.com/crm](https://www.zoho.com/crm/)\n\n---\n\n![Pipedrive Culture | Comparably](https://images.openai.com/static-rsc-4/LL0qs5ZEn5bajHXZMpCmlJ4Q8G8bG-uCRPdMDaugOTZ5M83xr5SdfSJtpaTsU9pV5XZU_j6tdK98aLeb5eQtmf3jAulEyqWXtwu_NCqqantmt4RgTKgW92e5jqAqiwI5Gvz6HoJSFRLf0DV2WCKF0F5we1qdhyYgERFOvFPWSwO__wWT47lukE3R9cSOeuBr?purpose=fullsize)\n\n## 4\\. Pipedrive\n\n(Best for sales pipeline management)\n\nA visual, sales-focused CRM that helps teams track deals, schedule follow-ups, and see where each opportunity stands.\n\n**Best for\\:** Sales reps, small sales teams, and B2B businesses.\n\n**Pricing\\:** Paid plans, typically with a trial.\n\nWebsite: [pipedrive.com](https://www.pipedrive.com/)\n\n---\n\n![#d365 #d365fo #dynamics365 #microsoftdynamics365 #dynamics365 #systemsaccountants #erp #financetransformation #businesscentral #d365bc | Danny Jones](https://images.openai.com/static-rsc-4/8flbuPsqgOj11WfeP_iAe6dJ6795Bt3Mdv1S0yPrtgz9MqdGlTtz1SCBtPCXLI46XUp8IUkjAWW3wyYhovI6O63nyR9ihC69xEFFsE3YQNFq0K4WgxoBhSr9u6ewZluTF0Z1hXTsS1A-g5J2bU53a9HtJ08ELPwFPIJgp6X1u9aMZPfOyunc22djl2ZNRUlY?purpose=fullsize)\n\n## 5\\. Microsoft Dynamics 365 Sales\n\nStrong integration with Microsoft 365, Teams, and Power BI, along with sales insights and automation capabilities.\n\n**Best for\\:** Companies already using Microsoft's business ecosystem.\n\n**Pricing\\:** Paid licenses; costs depend on the plan and licensing arrangement.\n\nWebsite: [dynamics.microsoft.com](https://dynamics.microsoft.com/)\n\nThese five platforms appear consistently in current CRM comparisons, although the best choice depends on your use case. [technologyadvice.com](https://technologyadvice.com/crm/)[www.g2.com](https://www.g2.com/articles/best-crm-software)[techyorker.com](https://techyorker.com/crm-systems-comparison-salesforce-hubspot-dynamics-365-zoho-pipedrive-and-freshsales/)\n\n## Quick comparison\n\n| CRM | Main strength | Ideal business |\n|--------|--------|--------|\n| HubSpot | All-in-one sales and marketing | Small to midsize |\n| Salesforce | Customization and scalability | Midmarket to enterprise |\n| Zoho CRM | Affordability and breadth | Small to midsize |\n| Pipedrive | Simple deal tracking | Sales-focused teams |\n| Microsoft Dynamics 365 | Microsoft integration | Microsoft-centric organizations |\n\n\n## Which one should you choose?\n\n- **For an easy starting point\\:** HubSpot\n- **For a large or complex organization\\:** Salesforce\n- **For a lower-cost, feature-rich solution\\:** Zoho CRM\n- **For managing sales leads and closing deals\\:** Pipedrive\n- **For a company using Microsoft 365\\:** Dynamics 365\n\n**One question to narrow this down\\:** What type of business will you use the CRM for?\n\n1\\. Business size\n\nSolo or startup\n\nSmall business\n\nMid-size business\n\nLarge enterprise\n\n---\n\n2\\. Main goal\n\nSales and lead management\n\nMarketing and email automation\n\nCustomer service and support\n\nAll-in-one business management\n\n---\n\n3\\. Budget per user per month\n\nFree\n\nUnder \\$50\n\n\\$50–\\$150\n\n\\$150+\n\n[Find my best CRM]",
  "answer_chars": 5319,
  "item_types": [
    "chat_gpt_text",
    "chat_gpt_images",
    "chat_gpt_table"
  ],
  "answer_sections": [
    {
      "type": "text",
      "markdown": "The **top 5 CRM (Customer Relationship Management) tools** depend on your business size, budget, and whether you need sales automation, marketing, customer support, or an all-in-one platform.\n\nHere are five leading CRM platforms worth considering in 2026, based on their capabilities, typical use cases, and overall value.\n\n",
      "sources": []
    },
    {
      "type": "text",
      "markdown": "\n\n## 1\\. HubSpot CRM\n\n(Best overall for many small businesses)\n\nEasy to use, with contact management, deal tracking, email tools, and marketing features. A good choice for businesses that want sales and marketing in one place.\n\n**Best for\\:** Startups and small to midsize businesses.\n\n**Pricing\\:** Free tools available; paid plans vary by product and tier.\n\nWebsite: [hubspot.com](https://www.hubspot.com/)\n\n---\n\n",
      "sources": [
        "https://www.hubspot.com/"
      ]
    },
    {
      "type": "text",
      "markdown": "\n\n## 2\\. Salesforce Sales Cloud\n\n(Best for enterprise)\n\nHighly customizable, with advanced sales forecasting, workflow automation, reporting, and a large integration ecosystem.\n\n**Best for\\:** Large organizations and complex sales processes.\n\n**Pricing\\:** Paid plans; entry-level pricing depends on the edition.\n\nWebsite: [salesforce.com](https://www.salesforce.com/)\n\n---\n\n",
      "sources": [
        "https://www.salesforce.com/"
      ]
    },
    {
      "type": "text",
      "markdown": "\n\n## 3\\. Zoho CRM\n\n(Best value for money)\n\nOffers lead management, workflow automation, analytics, and integrations with Zoho's broader business applications.\n\n**Best for\\:** Small and midsize businesses that want robust features on a budget.\n\n**Pricing\\:** Free edition available in some markets; paid tiers offered.\n\nWebsite: [zoho.com/crm](https://www.zoho.com/crm/)\n\n---\n\n",
      "sources": [
        "https://www.zoho.com/crm/"
      ]
    },
    {
      "type": "text",
      "markdown": "\n\n## 4\\. Pipedrive\n\n(Best for sales pipeline management)\n\nA visual, sales-focused CRM that helps teams track deals, schedule follow-ups, and see where each opportunity stands.\n\n**Best for\\:** Sales reps, small sales teams, and B2B businesses.\n\n**Pricing\\:** Paid plans, typically with a trial.\n\nWebsite: [pipedrive.com](https://www.pipedrive.com/)\n\n---\n\n",
      "sources": [
        "https://www.pipedrive.com/"
      ]
    },
    {
      "type": "text",
      "markdown": "\n\n## 5\\. Microsoft Dynamics 365 Sales\n\nStrong integration with Microsoft 365, Teams, and Power BI, along with sales insights and automation capabilities.\n\n**Best for\\:** Companies already using Microsoft's business ecosystem.\n\n**Pricing\\:** Paid licenses; costs depend on the plan and licensing arrangement.\n\nWebsite: [dynamics.microsoft.com](https://dynamics.microsoft.com/)\n\nThese five platforms appear consistently in current CRM comparisons, although the best choice depends on your use case. [technologyadvice.com](https://technologyadvice.com/crm/)[www.g2.com](https://www.g2.com/articles/best-crm-software)[techyorker.com](https://techyorker.com/crm-systems-comparison-salesforce-hubspot-dynamics-365-zoho-pipedrive-and-freshsales/)\n\n## Quick comparison\n\n",
      "sources": [
        "https://dynamics.microsoft.com/",
        "https://technologyadvice.com/crm/",
        "https://www.g2.com/articles/best-crm-software",
        "https://techyorker.com/crm-systems-comparison-salesforce-hubspot-dynamics-365-zoho-pipedrive-and-freshsales/"
      ]
    },
    {
      "type": "table",
      "markdown": "| CRM | Main strength | Ideal business |\n|--------|--------|--------|\n| HubSpot | All-in-one sales and marketing | Small to midsize |\n| Salesforce | Customization and scalability | Midmarket to enterprise |\n| Zoho CRM | Affordability and breadth | Small to midsize |\n| Pipedrive | Simple deal tracking | Sales-focused teams |\n| Microsoft Dynamics 365 | Microsoft integration | Microsoft-centric organizations |\n\n",
      "sources": []
    },
    {
      "type": "text",
      "markdown": "\n## Which one should you choose?\n\n- **For an easy starting point\\:** HubSpot\n- **For a large or complex organization\\:** Salesforce\n- **For a lower-cost, feature-rich solution\\:** Zoho CRM\n- **For managing sales leads and closing deals\\:** Pipedrive\n- **For a company using Microsoft 365\\:** Dynamics 365\n\n**One question to narrow this down\\:** What type of business will you use the CRM for?\n\n1\\. Business size\n\nSolo or startup\n\nSmall business\n\nMid-size business\n\nLarge enterprise\n\n---\n\n2\\. Main goal\n\nSales and lead management\n\nMarketing and email automation\n\nCustomer service and support\n\nAll-in-one business management\n\n---\n\n3\\. Budget per user per month\n\nFree\n\nUnder \\$50\n\n\\$50–\\$150\n\n\\$150+\n\n[Find my best CRM]",
      "sources": []
    }
  ],
  "sources": [
    {
      "url": "https://www.hubspot.com/",
      "domain": "hubspot.com",
      "title": "hubspot.com",
      "snippet": null,
      "source_name": null,
      "publication_date": null
    },
    {
      "url": "https://www.salesforce.com/",
      "domain": "salesforce.com",
      "title": "salesforce.com",
      "snippet": null,
      "source_name": null,
      "publication_date": null
    },
    {
      "url": "https://www.zoho.com/crm/",
      "domain": "zoho.com",
      "title": "zoho.com/crm",
      "snippet": null,
      "source_name": null,
      "publication_date": null
    },
    {
      "url": "https://www.pipedrive.com/",
      "domain": "pipedrive.com",
      "title": "pipedrive.com",
      "snippet": null,
      "source_name": null,
      "publication_date": null
    },
    {
      "url": "https://dynamics.microsoft.com/",
      "domain": "dynamics.microsoft.com",
      "title": "dynamics.microsoft.com",
      "snippet": null,
      "source_name": null,
      "publication_date": null
    },
    {
      "url": "https://technologyadvice.com/crm/",
      "domain": "technologyadvice.com",
      "title": "Best CRM Software for 2026",
      "snippet": null,
      "source_name": "TechnologyAdvice",
      "publication_date": "2026-10-02 00:00:00 +00:00"
    },
    {
      "url": "https://www.g2.com/articles/best-crm-software",
      "domain": "g2.com",
      "title": "11 Best CRM Software in 2026: I Evaluated 30+ Options",
      "snippet": null,
      "source_name": "G2",
      "publication_date": "2026-06-19 00:00:00 +00:00"
    },
    {
      "url": "https://techyorker.com/crm-systems-comparison-salesforce-hubspot-dynamics-365-zoho-pipedrive-and-freshsales/",
      "domain": "techyorker.com",
      "title": "CRM Systems Comparison: Which Platform Fits Your Team?",
      "snippet": null,
      "source_name": "TechYorker",
      "publication_date": "2026-08-14 00:00:00 +00:00"
    }
  ],
  "sources_count": 8,
  "cited_domains": [
    "hubspot.com",
    "salesforce.com",
    "zoho.com",
    "pipedrive.com",
    "dynamics.microsoft.com",
    "technologyadvice.com",
    "g2.com",
    "techyorker.com"
  ],
  "search_results": [
    {
      "url": "https://www.softwareadvice.com/crm/",
      "domain": "softwareadvice.com",
      "title": "25 Best CRM Software - 2026 Reviews & Pricing",
      "description": null
    },
    {
      "url": "https://technologyadvice.com/crm/",
      "domain": "technologyadvice.com",
      "title": "Best CRM Software for 2026",
      "description": null
    },
    {
      "url": "https://www.g2.com/articles/best-crm-software",
      "domain": "g2.com",
      "title": "11 Best CRM Software in 2026: I Evaluated 30+ Options",
      "description": null
    },
    {
      "url": "https://meetingnotes.com/blog/best-crm-software",
      "domain": "meetingnotes.com",
      "title": "Best CRMs of 2026: Customer Relationship Management Software Guide",
      "description": null
    },
    {
      "url": "https://pineo.com/blog/best-crm-2026",
      "domain": "pineo.com",
      "title": "Best CRM in 2026: Find the Right Platform for Your Business | Pineo",
      "description": null
    },
    {
      "url": "https://techyorker.com/crm-systems-comparison-salesforce-hubspot-dynamics-365-zoho-pipedrive-and-freshsales/",
      "domain": "techyorker.com",
      "title": "CRM Systems Comparison: Which Platform Fits Your Team?",
      "description": null
    },
    {
      "url": "https://crmcompare.net/blog/crm-platform-comparison-salesforce-vs-hubspot-vs-zoho-vs-pipedrive-roi-smb-2026",
      "domain": "crmcompare.net",
      "title": "CRM Platform Comparison: Salesforce vs HubSpot vs Zoho vs Pipedrive --- Which Offers the Best ROI for SMBs in 2026? — CRM Compare Hub",
      "description": null
    },
    {
      "url": "https://softwarerundown.com/best-crm-software-2026-salesforce-hubspot-pipedrive-comparison",
      "domain": "softwarerundown.com",
      "title": "Best CRM Software 2026: Salesforce vs HubSpot vs Pipedrive (Head-to-Head Comparison) | Software Rundown",
      "description": null
    },
    {
      "url": "https://www.vektorindex.com/blog/best-crm-software-2026",
      "domain": "vektorindex.com",
      "title": "Best CRM Software in 2026: HubSpot vs Salesforce vs Pipedrive (Full Comparison) | VektorIndex",
      "description": null
    },
    {
      "url": "https://aminibot.com/best-crm-software-salesforce-vs-hubspot-vs-zoho-vs-pipedrive-2026/",
      "domain": "aminibot.com",
      "title": "Best CRM Software 2026: Salesforce vs HubSpot vs Zoho CRM vs Pipedrive — In-Depth Comparison – Aminibot",
      "description": null
    },
    {
      "url": "https://www.itechguides.com/20-best-crm-software-trusted-by-top-companies-in-2026/",
      "domain": "itechguides.com",
      "title": "20 Best CRM Software Trusted by Top Companies in 2026",
      "description": null
    },
    {
      "url": "https://bestcrmpick.com/guides/best-crm-software",
      "domain": "bestcrmpick.com",
      "title": "Best CRM Software: Compare Features, Pricing & Reviews | BestCRMPick",
      "description": null
    },
    {
      "url": "https://www.gushwork.ai/feeds/blog/best-crm-software-comparison",
      "domain": "gushwork.ai",
      "title": "Best CRM Software Comparison 2026",
      "description": null
    },
    {
      "url": "https://tooldecisionengine.com/comparisons/hubspot-vs-zoho-crm-vs-pipedrive/",
      "domain": "tooldecisionengine.com",
      "title": "HubSpot vs Zoho CRM vs Pipedrive: Full Comparison (2026) | Tool Decision Engine",
      "description": null
    }
  ],
  "search_results_count": 14,
  "fan_out_queries": [
    "top CRM software 2026 reviews Salesforce HubSpot Zoho Microsoft Dynamics 365 Pipedrive",
    "best CRM software platforms 2026 Salesforce HubSpot Zoho Microsoft Dynamics 365 Pipedrive comparison"
  ],
  "organic_results": null,
  "ai_overview_async": null,
  "products": null,
  "local_results": null,
  "images_count": 5,
  "ads_in_answer": null,
  "answer_links": null,
  "brand": "HubSpot",
  "brand_mentioned": true,
  "brand_mention_count": 4,
  "brand_position": 1,
  "brand_cited": true,
  "brand_cited_urls": [
    "https://www.hubspot.com/"
  ],
  "brands_named": [
    "HubSpot CRM",
    "Salesforce Sales Cloud",
    "Zoho CRM",
    "Pipedrive",
    "Microsoft Dynamics 365 Sales"
  ],
  "brands_named_source": "engine",
  "competitors_named": [
    "Salesforce",
    "Zoho CRM",
    "Pipedrive",
    "Microsoft Dynamics 365"
  ],
  "competitors_cited": [
    "Salesforce",
    "Zoho CRM",
    "Pipedrive",
    "Microsoft Dynamics 365"
  ],
  "share_of_voice": 0.235,
  "brand_sentiment": 0.84,
  "brand_sentiment_label": "positive",
  "brand_recommended": "yes",
  "brand_sentiment_confidence": 0.73,
  "input_tokens": null,
  "output_tokens": null,
  "change_type": null,
  "changed_fields": null,
  "previous_brand_mentioned": null,
  "previous_brand_position": null,
  "mention_history_own": null
}
```

### Pricing

**Pay per answered cell, by route: no start fee, no minimum, no platform usage billed to you.** Prices fall with your Apify plan.

| per 1,000 | what one event is | Free | Starter | Scale | Business |
|---|---|---|---|---|---|
| `web_answer_queued` | an answered web cell (ChatGPT, Gemini, Google AI Mode, Google AI Overview) read from the source's standard queue: `readMode` auto on a list, or queued | $10.00 | $8.50 | $7.00 | $5.02123 |
| `web_answer_live` | the same web cell read live, in seconds: `readMode` auto on 1-2 web cells, or live | $16.6879 | $16.6879 | $16.6879 | $16.6879 |
| `api_answer` | an answered Perplexity cell, or a ChatGPT / Gemini / Claude API cell with `apiWebSearch` off | $25.82123 | $25.82123 | $25.82123 | $25.82123 |
| `api_answer_search` | an answered ChatGPT / Gemini / Claude API cell with web search (`apiWebSearch` on) | $130.20873 | $130.20873 | $130.20873 | $130.20873 |
| `brand_sentiment` | add-on on an answered row that carries a sentiment value (`brandSentiment` on) | $40.00 | $34.00 | $28.00 | $20.00 |

On the Free plan a web answer from the queue is **$0.01** ($0.00502123 on Business) and a live one $0.0166879: 100 queries on the four web engines (400 cells, queued) cost $4.00, and with `brandSentiment` on each answered row that carries a sentiment value adds $0.04. A run with one or two web cells is read live (auto) and charged as `web_answer_live`; set `readMode` to queued for the queue's price (ready in 1-3 minutes). Free: every `no_answer`, `not_read` and `invalid` row, the unchanged cells `onlyChanges` keeps back, and a run that failed before its first row. A run that stops early (a timeout, an abort) is charged for the rows it delivered. `maxItems` counts the charged rows; before the first request the log says the most the run can cost at your plan's prices. Enterprise plans have their own rates; the Actor's Pricing tab shows the price for your plan.

### Usage patterns

- **Track a brand on a schedule** — Save a run as a task with `brand`, `brandDomain`, the competitors, `onlyChanges` true and a `stateStoreName`, and schedule it. The first run delivers every cell and remembers it; later runs deliver only the cells whose brand fields moved (a brand gained or lost, a position change, a citation gained or lost, a new brand in the list), each with `change_type`, the previous fields and the memory's history. Every delivered row carries the whole answer, so the history is readable, not only scores. Ready-made: [the weekly tracker task](https://apify.com/hyperbach/ai-search-answers/examples/chatgpt-and-google-ai-overview-brand-tracker-only-changes).
- **Read a list cheaply** — Leave `readMode` on `auto`: a run of more than two web cells goes through the source's standard queue, which returns the same row for a lower price and is ready in 1–3 minutes. Use `live` when you need the answers within seconds and `queued` when you want the lower price for one or two cells. Example: [20 keywords on Google AI Overviews, with a site's citations](https://apify.com/hyperbach/ai-search-answers/examples/google-ai-overview-checker-which-keywords-cite-your-site).
- **Compare the web answer with the API answer** — Ask the same query on `chatgpt` and `chatgpt_api` (or `gemini` and `gemini_api`): the web row is the engine's search page (`route` web, model gpt-6), the API row the model with web search (`route` api, `web_search` true, the model you chose). The two differ in brands, sources and length; trackers that sell an API answer as the engine's page hide that difference.
- **Cap the cost** — `maxItems` caps the charged rows (a capped run starts no more cells than it can charge); the run's maximum total charge in the run options caps the money, and a cell the limit cannot pay for is a free `not_read` row that says so. Before the first request the log prints the most the run can cost at your plan's prices.

### Input configuration

| field | type | default | what it does |
|---|---|---|---|
| `queries` | `array` | `[]` | The questions to ask, one per entry, exactly as a person would type them into the engine (`What are the top 5 CRM tools`). Up to 1,000 a run; exact duplicates are folded. Also accepted: `queriesText` below, merged with this list. ChatGPT and Gemini take up to 2,000 characters, Google AI Mode and AI Overview 700, the API engines 500; a longer query is a free `invalid` row for that engine. |
| `queriesText` | `string` | `""` | Paste a whole list instead: one query per line. Merged with `queries`; duplicates are folded. |
| `engines` | `array` | `[]` | Which engines to ask; empty = ChatGPT (web). Web answers (the engine's own search page, read through a scraping API): `chatgpt`, `gemini`, `google_ai_mode`, `google_ai_overview`. API answers (the model's API, labelled `route` api on the row): `perplexity` (Sonar, always with web search), `chatgpt_api`, `gemini_api`, `claude_api` (with web search unless `apiWebSearch` is off). Microsoft Copilot is not served (no route). Each engine is its own row per query. |
| `country` | `string` | `"US"` | The country the query is asked from, as an ISO code (`US`, `GB`, `DE`) or a numeric Google location code. One country a run; it is echoed on every row as `location_code`. ChatGPT serves 191 countries, the Google views and the API engines any; an engine that does not serve the country gets free `not_read` rows that say so. The answer's market follows it (US $ / GB £ / DE €, the local shops and domains, in our test). |
| `language` | `string` | `"en"` | The interface language of the engine, as a code (`en`, `de`, `pt-BR`). One language a run. The answer's language follows the query's own wording; this sets the engine's locale. ChatGPT takes 128 languages, Gemini 95, Google 129; a code the engine lacks gets free `not_read` rows. |
| `readMode` | `auto` / `live` / `queued` | `"auto"` | How the web engines (ChatGPT, Gemini, Google AI Mode, Google AI Overview) are read. `auto` (the default) reads a run of 1–2 web cells live and a longer list through the source's standard queue, which answers the same row in 1–3 minutes at a lower price (`web_answer_queued` against `web_answer_live`). `live` and `queued` force one or the other. The API engines are always live. Every row says its `read_mode`. |
| `repeats` | `integer` | `1` | How many times to ask each query of each engine (1 to 5). ChatGPT and Gemini answer differently from read to read (in our test the same five brands on 4 of 4 reads, in a moving order); Google's AI Mode and AI Overview held our test query's answer for hours, but changed on 7 of 12 ordinary queries read twice 8 minutes apart. Each repeat is its own paid row with `repeat` 1..n; the run summary states each engine's mention rate and the positions seen over the repeats. |
| `brand` | `string` | `""` | The brand's name as the engines write it (`HubSpot`). Matched whole-word, case-insensitive, over the answer's text. |
| `brandAliases` | `array` | `[]` | Other spellings or product names that count as the brand (`HubSpot CRM`, `Hubspot`). Needs `brand`. |
| `brandDomain` | `string` | `""` | The brand's website (`hubspot.com` or a URL): `brand_cited` is true when a cited source is on this domain or a subdomain of it, and `brand_cited_urls` lists them. Needs `brand`. |
| `competitors` | `array` | `[]` | Competitor brand names (`Salesforce`, `Zoho CRM`): `competitors_named` lists the ones the answer names, and `share_of_voice` is the brand's mentions over the mentions of the brand and its competitors. |
| `competitorDomains` | `array` | `[]` | The competitors' websites, in the same order as `competitors` (`salesforce.com`, `zoho.com`): `competitors_cited` lists the competitors whose domain a cited source is on. Needs `competitors`; at most one domain per competitor. |
| `brandSentiment` | `boolean` | `false` | On every answered row that names the brand, a typed classifier reads the sentences around the brand and answers two questions: the sentiment (`brand_sentiment` −1..1 and its label) and whether the answer recommends the brand (`brand_recommended` yes / no / unclear), with a confidence. The `brand_sentiment` add-on is charged on each row that carries a value. Needs `brand`. |
| `forceWebSearch` | `boolean` | `false` | ChatGPT (web) answers some queries from memory without searching, and then cites nothing (a how-to, in our test). With this on, the query is asked with search forced: the answer carries sources. Off = the engine decides, as a person's query would. |
| `apiWebSearch` | `boolean` | `true` | For `chatgpt_api`, `gemini_api` and `claude_api`: ask the model with web search (grounding on Gemini) so the answer carries sources (`api_answer_search`); off = the bare model answer with no sources (`api_answer`). Perplexity's Sonar models always search. A model that does not support web search gets a free `not_read` row that says so. |
| `chatgptApiModel` | `gpt-4.1-mini` / `gpt-4.1-nano` | `"gpt-4.1-mini"` | The model for `chatgpt_api`. The two models the Actor was measured and priced on; gpt-4.1-nano does not support web search (a free `not_read` row says so unless `apiWebSearch` is off). |
| `geminiApiModel` | `gemini-3.5-flash-lite` | `"gemini-3.5-flash-lite"` | The model for `gemini_api`: the model the Actor was measured and priced on. |
| `claudeApiModel` | `claude-haiku-4-5-20251001` | `"claude-haiku-4-5-20251001"` | The model for `claude_api`: the model the Actor was measured and priced on. |
| `perplexityModel` | `sonar` | `"sonar"` | The Perplexity model for `perplexity`: the model the Actor was measured and priced on (exactly 10 sources on every answer in our test). |
| `onlyChanges` | `boolean` | `false` | For a saved task on a schedule: deliver an answered cell only when it is new to this memory or its brand fields (named, position, cited, the brands named) moved since it was last delivered to you; the unchanged cells are counted in the status message and not delivered (each read is still a paid task at the source; only the delivered rows are charged to you). The memory lives with the Actor per Apify account and `stateStoreName`. Every delivered row carries `change_type`, the previous brand fields and the history of this memory's reads of the cell. |
| `stateStoreName` | `string` | `""` | The name of the memory this run reads and writes (letters, digits, `-`, `_`). The same name across runs tracks the same cells; different tasks can keep different names. Empty = one default memory per account. |
| `maxItems` | `integer` | `0` | Stop after this many charged rows (answered cells; the free status rows do not count). A capped run starts no more cells than it can charge. 0 = no cap. |

### Errors

**A run does not fail because of your input.** When an input cannot be used — a date that is not a date, an id in the wrong form, two settings that contradict each other — the run ends **Succeeded**, charges nothing, and says what to change:

- the status message starts with `INPUT REJECTED`;
- the dataset holds one row, `{"error": true, "code": "…", "message": "…"}`, and no results;
- the key-value store record `ERROR` holds the same object.

From code, check `error` on the first row before reading results.

A query an engine gives no answer for is not an error: it gets one free row with `status` no_answer and the reason (Google showed no AI Overview on this page), and the run goes on with the others. A run that ends **Failed** is a fault on our side, never your input; it charges nothing, and we are alerted.

### FAQ

**Which engines are served, and why not Copilot?**

ChatGPT (web), Gemini (web), Google AI Mode, Google AI Overview, Perplexity (Sonar), and the ChatGPT, Gemini and Claude APIs. Microsoft Copilot is not served: no scraping API offers it, and its own site refuses every automated client we tried (20 of 20 conversation requests on 12 sessions across five network classes, a headless and a stealth browser included). Grok and the regional engines (Naver, Baidu, Yandex) are not served either.

**What does `no_answer` mean, and is it charged?**

The engine gave no answer for the cell: Google showed no AI Overview on the page (the organic results are still on the row), or the engine returned an empty answer. The row is free. It is not rare: Google showed no AI Overview for 3 of 16 ordinary queries in our test (a local query, "emergency plumber chicago", and 2 of 4 German product queries), and an overview can come and go between two reads (2 of 12 queries read twice 8 minutes apart).

**Why does a ChatGPT row have no sources?**

ChatGPT answers some queries from memory without searching (a how-to, in our test) and then cites nothing; `status_detail` says so and `search_results` is null. `forceWebSearch` makes it search such queries (0 → 2 sources on the how-to; [10 everyday questions with it on](https://apify.com/hyperbach/ai-search-answers/examples/chatgpt-search-answers-with-sources-and-fan-out-queries): searched 10 of 10). Gemini and Google AI Mode cite some answers not at all (Gemini 6 of 22, AI Mode 3 of 20 answers to ordinary queries in our test; the source's own answer carries no reference): the row says the engine cited nothing.

**How are the brand fields computed?**

A whole-word, case-insensitive match of the brand name and its aliases over the answer's Markdown; a name with a dot suffix (`Monday.com`) matches with or without it. `brand_position` is the brand's rank among `brands_named` by first mention (1 = named first). `brands_named` is ChatGPT's own entity list where the engine serves it (every brand it named, ordered by first mention; `brands_named_source` engine) and the tracked brand and competitors found in the text on the other engines (`brands_named_source` tracked). `brand_cited` is true when a cited source is on the brand's domain or a subdomain. `share_of_voice` is the brand's mentions over the mentions of the brand and its competitors.

**Why are the Gemini API's sources on vertexaisearch.cloud.google.com?**

They are not: the Gemini API (`gemini_api`, grounding) cites its sources through Google's redirect host (`vertexaisearch.cloud.google.com`), and the source also gives each citation's page URL, which is what `sources[].url`, `cited_domains` and `brand_cited` read. The web views (Gemini, Google AI Mode, AI Overview) cite final URLs too: 0 redirect tokens on 232 references in our test.

**How stable are the answers?**

ChatGPT and Gemini vary per read: on our test query the same five brands came back on 4 of 4 ChatGPT reads, in a moving order, with 7–9 sources that moved; Gemini named 7–8 brands. Google's AI Mode and AI Overview held our test query's answer for hours, but 12 ordinary queries read twice 8 minutes apart kept the same text on 5 of 12 in each view, and 2 AI Overviews of 12 were gone on the second read. Use `repeats` to measure a cell's rate instead of trusting one read; the summary's `brand_rates` give each engine's mention rate, cited rate and the positions seen. Example: [a brand's mention rate over 5 reads on ChatGPT and Gemini](https://apify.com/hyperbach/ai-search-answers/examples/chatgpt-and-gemini-brand-mention-rate-over-5-reads).

**What is the sentiment judge, and what does it cost?**

With `brandSentiment` on, every answered row that names the brand gets one call to a typed classifier (not a chat model) that reads the sentences around the brand and answers two questions: `brand_sentiment` (−1 negative … 1 strongly positive, with `brand_sentiment_label`) and `brand_recommended` (yes / no / unclear), with `brand_sentiment_confidence` (the lower of the two). On 19 real answers it read the 'alternatives' answers as negative and not recommended on four engines alike and the top-5 lists as positive. The `brand_sentiment` add-on is charged on each row that carries a value. Example: [Peloton on Perplexity and ChatGPT](https://apify.com/hyperbach/ai-search-answers/examples/perplexity-and-chatgpt-brand-sentiment-and-recommendation).

**Which countries and languages?**

`country` is an ISO code or a numeric Google location code; one country a run. ChatGPT serves 191 countries, the Google views and the API engines any geography. `language` is the engine's locale (ChatGPT 128 codes, Gemini 95, Google 129); the answer's own language follows the query's wording. The country changes the answer's market (US $ / GB £ / DE €, the local shops and domains, in our test). Example: [ChatGPT and Google AI Mode in Germany, in German](https://apify.com/hyperbach/ai-search-answers/examples/google-ai-mode-and-chatgpt-answers-in-germany-in-german).

**How long does a run take?**

Live: Google AI Mode 4–17 s a cell, AI Overview 3–16 s, Perplexity 4–6 s, the API engines 1–8 s, Gemini 17–43 s, ChatGPT 21–80 s (median 24 s), ten cells per engine at once. Queued: the post takes a second and the answers are ready in 28–186 s (polled every 10 s); a task the queue did not answer in 12 minutes is a free `not_read` row that names its task id, and when none of an engine's tasks is answered in 5 minutes the run stops waiting for that engine. One engine's queue can stall: in our test Gemini's left 4 tasks unanswered for more than 20 minutes while its live read answered in 22 s. ChatGPT cells the queue did not answer are read live instead, at the queued price, and the row says so; for the other engines run such cells again, or with `readMode` live.

**What happens on a timeout or an abort?**

The rows already delivered are charged; every cell that was started and not finished gets a free `not_read` row saying the time limit stopped the run; the run summary is written. A queued task the cut left in the queue is named on its row so you can see what was posted.

**Is there a cache?**

No buyer-facing cache: a query you ask is read now. Google's answers, like ChatGPT's, can change between two reads minutes apart (see the question on stable answers).

**Is there a conversation or thread id?**

No: the source serves no conversation or thread id on this route. `check_url` is a link that asks the engine the same query on its own site. Follow-up prompts in one conversation are not served.

### Integration

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('hyperbach/ai-search-answers').call({"queries": ["What are the top 5 CRM tools"]});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('hyperbach/ai-search-answers').call(run_input={'queries': ['What are the top 5 CRM tools']})
items = client.dataset(run['defaultDatasetId']).list_items().items
```

#### CLI

```bash
apify call hyperbach/ai-search-answers --input '{"queries": ["What are the top 5 CRM tools"]}'
```

#### REST

```bash
curl -X POST "https://api.apify.com/v2/acts/hyperbach~ai-search-answers/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H 'Content-Type: application/json' -d '{"queries": ["What are the top 5 CRM tools"]}'
```

### Support

apify@hyperbach.com

*This page is generated from the Actor's schemas and a live sample — it cannot describe a field the Actor does not have.*

# Actor input Schema

## `queries` (type: `array`):

The questions to ask, one per entry, exactly as a person would type them into the engine (`What are the top 5 CRM tools`). Up to 1,000 a run; exact duplicates are folded. Also accepted: `queriesText` below, merged with this list. ChatGPT and Gemini take up to 2,000 characters, Google AI Mode and AI Overview 700, the API engines 500; a longer query is a free `invalid` row for that engine.

## `queriesText` (type: `string`):

Paste a whole list instead: one query per line. Merged with `queries`; duplicates are folded.

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

Which engines to ask; empty = ChatGPT (web). Web answers (the engine's own search page, read through a scraping API): `chatgpt`, `gemini`, `google_ai_mode`, `google_ai_overview`. API answers (the model's API, labelled `route` api on the row): `perplexity` (Sonar, always with web search), `chatgpt_api`, `gemini_api`, `claude_api` (with web search unless `apiWebSearch` is off). Microsoft Copilot is not served (no route). Each engine is its own row per query.

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

The country the query is asked from, as an ISO code (`US`, `GB`, `DE`) or a numeric Google location code. One country a run; it is echoed on every row as `location_code`. ChatGPT serves 191 countries, the Google views and the API engines any; an engine that does not serve the country gets free `not_read` rows that say so. The answer's market follows it (US $ / GB £ / DE €, the local shops and domains, in our test).

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

The interface language of the engine, as a code (`en`, `de`, `pt-BR`). One language a run. The answer's language follows the query's own wording; this sets the engine's locale. ChatGPT takes 128 languages, Gemini 95, Google 129; a code the engine lacks gets free `not_read` rows.

## `readMode` (type: `string`):

How the web engines (ChatGPT, Gemini, Google AI Mode, Google AI Overview) are read. `auto` (the default) reads a run of 1–2 web cells live and a longer list through the source's standard queue, which answers the same row in 1–3 minutes at a lower price (`web_answer_queued` against `web_answer_live`). `live` and `queued` force one or the other. The API engines are always live. Every row says its `read_mode`.

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

How many times to ask each query of each engine (1 to 5). ChatGPT and Gemini answer differently from read to read (in our test the same five brands on 4 of 4 reads, in a moving order); Google's AI Mode and AI Overview held our test query's answer for hours, but changed on 7 of 12 ordinary queries read twice 8 minutes apart. Each repeat is its own paid row with `repeat` 1..n; the run summary states each engine's mention rate and the positions seen over the repeats.

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

The brand's name as the engines write it (`HubSpot`). Matched whole-word, case-insensitive, over the answer's text.

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

Other spellings or product names that count as the brand (`HubSpot CRM`, `Hubspot`). Needs `brand`.

## `brandDomain` (type: `string`):

The brand's website (`hubspot.com` or a URL): `brand_cited` is true when a cited source is on this domain or a subdomain of it, and `brand_cited_urls` lists them. Needs `brand`.

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

Competitor brand names (`Salesforce`, `Zoho CRM`): `competitors_named` lists the ones the answer names, and `share_of_voice` is the brand's mentions over the mentions of the brand and its competitors.

## `competitorDomains` (type: `array`):

The competitors' websites, in the same order as `competitors` (`salesforce.com`, `zoho.com`): `competitors_cited` lists the competitors whose domain a cited source is on. Needs `competitors`; at most one domain per competitor.

## `brandSentiment` (type: `boolean`):

On every answered row that names the brand, a typed classifier reads the sentences around the brand and answers two questions: the sentiment (`brand_sentiment` −1..1 and its label) and whether the answer recommends the brand (`brand_recommended` yes / no / unclear), with a confidence. The `brand_sentiment` add-on is charged on each row that carries a value. Needs `brand`.

## `forceWebSearch` (type: `boolean`):

ChatGPT (web) answers some queries from memory without searching, and then cites nothing (a how-to, in our test). With this on, the query is asked with search forced: the answer carries sources. Off = the engine decides, as a person's query would.

## `apiWebSearch` (type: `boolean`):

For `chatgpt_api`, `gemini_api` and `claude_api`: ask the model with web search (grounding on Gemini) so the answer carries sources (`api_answer_search`); off = the bare model answer with no sources (`api_answer`). Perplexity's Sonar models always search. A model that does not support web search gets a free `not_read` row that says so.

## `chatgptApiModel` (type: `string`):

The model for `chatgpt_api`. The two models the Actor was measured and priced on; gpt-4.1-nano does not support web search (a free `not_read` row says so unless `apiWebSearch` is off).

## `geminiApiModel` (type: `string`):

The model for `gemini_api`: the model the Actor was measured and priced on.

## `claudeApiModel` (type: `string`):

The model for `claude_api`: the model the Actor was measured and priced on.

## `perplexityModel` (type: `string`):

The Perplexity model for `perplexity`: the model the Actor was measured and priced on (exactly 10 sources on every answer in our test).

## `onlyChanges` (type: `boolean`):

For a saved task on a schedule: deliver an answered cell only when it is new to this memory or its brand fields (named, position, cited, the brands named) moved since it was last delivered to you; the unchanged cells are counted in the status message and not delivered (each read is still a paid task at the source; only the delivered rows are charged to you). The memory lives with the Actor per Apify account and `stateStoreName`. Every delivered row carries `change_type`, the previous brand fields and the history of this memory's reads of the cell.

## `stateStoreName` (type: `string`):

The name of the memory this run reads and writes (letters, digits, `-`, `_`). The same name across runs tracks the same cells; different tasks can keep different names. Empty = one default memory per account.

## `maxItems` (type: `integer`):

Stop after this many charged rows (answered cells; the free status rows do not count). A capped run starts no more cells than it can charge. 0 = no cap.

## Actor input object example

```json
{
  "queries": [
    "What are the top 5 CRM tools"
  ],
  "queriesText": "",
  "engines": [
    "chatgpt"
  ],
  "country": "US",
  "language": "en",
  "readMode": "auto",
  "repeats": 1,
  "brand": "",
  "brandAliases": [],
  "brandDomain": "",
  "competitors": [],
  "competitorDomains": [],
  "brandSentiment": false,
  "forceWebSearch": false,
  "apiWebSearch": true,
  "chatgptApiModel": "gpt-4.1-mini",
  "geminiApiModel": "gemini-3.5-flash-lite",
  "claudeApiModel": "claude-haiku-4-5-20251001",
  "perplexityModel": "sonar",
  "onlyChanges": false,
  "stateStoreName": "",
  "maxItems": 0
}
```

# Actor output Schema

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

All scraped records in the default dataset. One row per query × engine × repeat (a cell):

## `runSummary` (type: `string`):

How the run went: queries in, engines and read modes, cells by engine and status, answers charged, free rows, unchanged cells kept back (onlyChanges); the brand's mention rate, cited rate and positions per engine, the competitors named, the top cited domains, the visibility score and its formula; the judge's counts; the source's tasks, refusals, rate-limit waits and retries, the queue's unanswered tasks; notes and problems.

# 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 = {
    "queries": [
        "What are the top 5 CRM tools"
    ],
    "engines": [
        "chatgpt"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hyperbach/ai-search-answers").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 = {
    "queries": ["What are the top 5 CRM tools"],
    "engines": ["chatgpt"],
}

# Run the Actor and wait for it to finish
run = client.actor("hyperbach/ai-search-answers").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 '{
  "queries": [
    "What are the top 5 CRM tools"
  ],
  "engines": [
    "chatgpt"
  ]
}' |
apify call hyperbach/ai-search-answers --silent --output-dataset

```

## MCP server setup

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

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/4iiMWasfuLYMIjhRi/builds/cmPJpyXHPFYyedxsf/openapi.json
