{
  "openapi": "3.0.1",
  "info": {
    "title": "ChatGPT Scraper: Perplexity, Gemini, AI Mode & AI Overview",
    "description": "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.",
    "version": "0.1",
    "x-build-id": "cmPJpyXHPFYyedxsf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hyperbach~ai-search-answers/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hyperbach-ai-search-answers",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/hyperbach~ai-search-answers/runs": {
      "post": {
        "operationId": "runs-sync-hyperbach-ai-search-answers",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/hyperbach~ai-search-answers/run-sync": {
      "post": {
        "operationId": "run-sync-hyperbach-ai-search-answers",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "queries": {
            "title": "Queries (prompts)",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string",
              "maxLength": 2000
            },
            "default": []
          },
          "queriesText": {
            "title": "Queries as text (paste a list)",
            "maxLength": 1000000,
            "type": "string",
            "description": "Paste a whole list instead: one query per line. Merged with `queries`; duplicates are folded.",
            "default": ""
          },
          "engines": {
            "title": "Engines",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string",
              "enum": [
                "chatgpt",
                "gemini",
                "google_ai_mode",
                "google_ai_overview",
                "perplexity",
                "chatgpt_api",
                "gemini_api",
                "claude_api"
              ],
              "enumTitles": [
                "ChatGPT (web answer: chatgpt.com with search)",
                "Gemini (web answer: gemini.google.com)",
                "Google AI Mode",
                "Google AI Overview (on the search page, with the organic results)",
                "Perplexity (API: Sonar, with web search)",
                "ChatGPT (API: the model, with web search)",
                "Gemini (API: the model, with grounding)",
                "Claude (API: the model, with web search)"
              ]
            },
            "default": []
          },
          "country": {
            "title": "Country",
            "pattern": "^([A-Za-z]{2}|[0-9]{3,8})$",
            "type": "string",
            "description": "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).",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "pattern": "^[A-Za-z]{2,3}(-[A-Za-z]{2,4})?$",
            "type": "string",
            "description": "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.",
            "default": "en"
          },
          "readMode": {
            "title": "Read mode (live or the standard queue)",
            "enum": [
              "auto",
              "live",
              "queued"
            ],
            "type": "string",
            "description": "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`.",
            "default": "auto"
          },
          "repeats": {
            "title": "Repeats per cell",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "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.",
            "default": 1
          },
          "brand": {
            "title": "Brand to track",
            "maxLength": 100,
            "type": "string",
            "description": "The brand's name as the engines write it (`HubSpot`). Matched whole-word, case-insensitive, over the answer's text.",
            "default": ""
          },
          "brandAliases": {
            "title": "Brand aliases",
            "type": "array",
            "description": "Other spellings or product names that count as the brand (`HubSpot CRM`, `Hubspot`). Needs `brand`.",
            "items": {
              "type": "string",
              "maxLength": 100
            },
            "default": []
          },
          "brandDomain": {
            "title": "Brand domain",
            "pattern": "^(https?://)?([A-Za-z0-9-]+\\.)*[A-Za-z0-9-]+\\.[A-Za-z]{2,}(/.*)?$|^$",
            "type": "string",
            "description": "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`.",
            "default": ""
          },
          "competitors": {
            "title": "Competitors",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string",
              "maxLength": 100
            },
            "default": []
          },
          "competitorDomains": {
            "title": "Competitor domains",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string",
              "maxLength": 253
            },
            "default": []
          },
          "brandSentiment": {
            "title": "Judge the sentiment toward the brand (add-on)",
            "type": "boolean",
            "description": "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`.",
            "default": false
          },
          "forceWebSearch": {
            "title": "Make ChatGPT search the web",
            "type": "boolean",
            "description": "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.",
            "default": false
          },
          "apiWebSearch": {
            "title": "Web search for the API engines",
            "type": "boolean",
            "description": "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.",
            "default": true
          },
          "chatgptApiModel": {
            "title": "ChatGPT API model",
            "enum": [
              "gpt-4.1-mini",
              "gpt-4.1-nano"
            ],
            "type": "string",
            "description": "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).",
            "default": "gpt-4.1-mini"
          },
          "geminiApiModel": {
            "title": "Gemini API model",
            "enum": [
              "gemini-3.5-flash-lite"
            ],
            "type": "string",
            "description": "The model for `gemini_api`: the model the Actor was measured and priced on.",
            "default": "gemini-3.5-flash-lite"
          },
          "claudeApiModel": {
            "title": "Claude API model",
            "enum": [
              "claude-haiku-4-5-20251001"
            ],
            "type": "string",
            "description": "The model for `claude_api`: the model the Actor was measured and priced on.",
            "default": "claude-haiku-4-5-20251001"
          },
          "perplexityModel": {
            "title": "Perplexity model",
            "enum": [
              "sonar"
            ],
            "type": "string",
            "description": "The Perplexity model for `perplexity`: the model the Actor was measured and priced on (exactly 10 sources on every answer in our test).",
            "default": "sonar"
          },
          "onlyChanges": {
            "title": "Only cells whose brand fields moved (for a schedule)",
            "type": "boolean",
            "description": "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.",
            "default": false
          },
          "stateStoreName": {
            "title": "Memory name",
            "pattern": "^[a-zA-Z0-9_-]{0,60}$",
            "type": "string",
            "description": "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.",
            "default": ""
          },
          "maxItems": {
            "title": "Max charged rows",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "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.",
            "default": 0
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}