{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Visibility Tracker: Brand in ChatGPT, Gemini & Perplexity",
    "description": "No-code AI brand visibility tracker: ask ChatGPT, Gemini, Perplexity & Claude your buyers' questions with your own API keys. See if your brand is mentioned, its rank, share of voice vs competitors and cited sources. Excel export.",
    "version": "0.1",
    "x-build-id": "KDRZJhVYf8rCPfb8T"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/alpine-data~ai-brand-visibility/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-alpine-data-ai-brand-visibility",
        "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/alpine-data~ai-brand-visibility/runs": {
      "post": {
        "operationId": "runs-sync-alpine-data-ai-brand-visibility",
        "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/alpine-data~ai-brand-visibility/run-sync": {
      "post": {
        "operationId": "run-sync-alpine-data-ai-brand-visibility",
        "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": {
          "brand": {
            "title": "1. Your brand",
            "type": "string",
            "description": "The brand you want to track. Type the name, the website, or both: HubSpot, hubspot.com or HubSpot (hubspot.com). Adding the website lets the Actor also detect when AI answers cite your site. Extra spellings go in 'Other spellings' below."
          },
          "competitors": {
            "title": "2. Competitors",
            "type": "array",
            "description": "One competitor per line (or separated by commas). Same format as your brand: name, website, or 'Name (website)'. Use | for extra spellings, e.g. Zoho CRM | zoho.com | Zoho. Up to 30.",
            "items": {
              "type": "string"
            }
          },
          "questions": {
            "title": "3. Questions your customers ask AI",
            "type": "array",
            "description": "One question (prompt) per line, written the way a buyer would ask ChatGPT, e.g. 'What is the best CRM for a small business?'. Each question is asked once per AI assistant = one check ($0.011; $0.0099 on Apify Scale, $0.0088 on Business plans). Up to 500.",
            "items": {
              "type": "string"
            }
          },
          "openaiApiKey": {
            "title": "4. OpenAI API key (ChatGPT)",
            "type": "string",
            "description": "Add at least one API key (this one or any of the next three). Each assistant with a key is asked; assistants without a key are skipped. OpenAI keys start with sk- and are created at platform.openai.com/api-keys (needs billing enabled). No key at all? Start runs a free demo with sample answers (not real, not charged)."
          },
          "geminiApiKey": {
            "title": "Google Gemini API key",
            "type": "string",
            "description": "Optional if you added another key. Starts with AIza. Create one for free at aistudio.google.com/apikey. With a key, Gemini is asked; without one it is skipped."
          },
          "perplexityApiKey": {
            "title": "Perplexity API key",
            "type": "string",
            "description": "Optional if you added another key. Starts with pplx-. Create one at perplexity.ai/settings/api. Perplexity answers always include the web sources it cited. With a key, Perplexity is asked; without one it is skipped."
          },
          "anthropicApiKey": {
            "title": "Anthropic API key (Claude)",
            "type": "string",
            "description": "Optional if you added another key. Starts with sk-ant-. Create one at console.anthropic.com. With a key, Claude is asked; without one it is skipped."
          },
          "assistants": {
            "title": "Which AI assistants to ask",
            "type": "array",
            "description": "Leave all ticked: every assistant you gave a key for is asked. Untick one to skip it without deleting its key.",
            "items": {
              "type": "string",
              "enum": [
                "openai",
                "gemini",
                "perplexity",
                "anthropic"
              ],
              "enumTitles": [
                "ChatGPT (OpenAI)",
                "Gemini (Google)",
                "Perplexity",
                "Claude (Anthropic)"
              ]
            },
            "default": [
              "openai",
              "gemini",
              "perplexity",
              "anthropic"
            ]
          },
          "openaiModel": {
            "title": "ChatGPT model",
            "type": "string",
            "description": "OpenAI model used for the ChatGPT checks. The ChatGPT app may use a different model than the API. You can also type any other model ID your key has access to.",
            "default": "gpt-6-luna"
          },
          "geminiModel": {
            "title": "Gemini model",
            "type": "string",
            "description": "Google model used for the Gemini checks. You can also type any other model ID your key has access to.",
            "default": "gemini-3.8-flash"
          },
          "perplexityModel": {
            "title": "Perplexity model",
            "type": "string",
            "description": "Perplexity model. Sonar answers always search the web and return citations. You can also type any other model ID your key has access to.",
            "default": "sonar"
          },
          "anthropicModel": {
            "title": "Claude model",
            "type": "string",
            "description": "Anthropic model used for the Claude checks. You can also type any other model ID your key has access to.",
            "default": "claude-haiku-5-5"
          },
          "webSearch": {
            "title": "Let ChatGPT, Gemini and Claude search the web",
            "type": "boolean",
            "description": "Off = answers come from the model's own knowledge (like asking without browsing). On = the models may search the web and cite sources, which is closer to ChatGPT Search / Gemini in Google, but your API bill per question is higher (web-search fees). Perplexity always searches.",
            "default": false
          },
          "extraContext": {
            "title": "Add to every question (optional)",
            "type": "string",
            "description": "Text appended to each question, e.g. 'I am based in Germany.' or 'Answer in German.' Leave empty to ask the questions exactly as written."
          },
          "samplesPerQuestion": {
            "title": "Ask each question how many times",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "AI answers change from run to run. Asking 2–3 times per assistant gives a more stable mention rate. Each answer is one check ($0.011, less on Apify Scale/Business plans).",
            "default": 1
          },
          "maxChecks": {
            "title": "Max checks per run (cost limit)",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The run stops after this many checks, so you never pay more than you expect. 20 checks = max $0.22. One check = one question answered by one assistant.",
            "default": 100
          },
          "brandAliases": {
            "title": "Other spellings of your brand",
            "type": "array",
            "description": "Product names, old names or common misspellings that should count as your brand, e.g. HubSpot CRM, Hub Spot.",
            "items": {
              "type": "string"
            }
          },
          "caseSensitive": {
            "title": "Match upper/lower case exactly",
            "type": "boolean",
            "description": "Turn on for brands that are also common words, e.g. 'Apple' (brand) vs 'apple' (fruit) or 'Close' vs 'close'.",
            "default": false
          },
          "compareWithLastRun": {
            "title": "Show change vs. the last run",
            "type": "boolean",
            "description": "Adds 'change vs last run' columns to the brand summary (free).",
            "default": true
          },
          "stateKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Optional. Use different names to keep separate trend histories for the same brand."
          },
          "includeAnswerText": {
            "title": "Include the full AI answer text",
            "type": "boolean",
            "description": "Adds the full answer to each row (long text). Turn off for a smaller download.",
            "default": true
          },
          "includeSummaryRows": {
            "title": "Add brand and question summary rows to the dataset",
            "type": "boolean",
            "description": "Adds free summary rows (share of voice per brand and assistant, results per question) after the check rows. They are always in the Excel report too.",
            "default": true
          },
          "systemPrompt": {
            "title": "System prompt (advanced)",
            "type": "string",
            "description": "Optional instructions sent to every model, e.g. 'You are a helpful shopping assistant.' Leave empty to get the model's default behaviour."
          },
          "mockMode": {
            "title": "Developer test mode",
            "type": "boolean",
            "description": "Internal QA only: fake answers, works only for the Actor owner. Ignored for everyone else.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}