{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Visibility Tracker - ChatGPT, Perplexity, Claude Mentions",
    "description": "Track whether OpenAI, Perplexity and Claude mention and cite your brand for the prompts your buyers ask: rank, list position, cited domains, competitors, share of voice and changes since the last run. Official APIs with your own keys, small fee per check.",
    "version": "0.1",
    "x-build-id": "eAZfcZfKaARCaS5fy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/maksym_kotenko~ai-visibility-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-maksym_kotenko-ai-visibility-tracker",
        "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/maksym_kotenko~ai-visibility-tracker/runs": {
      "post": {
        "operationId": "runs-sync-maksym_kotenko-ai-visibility-tracker",
        "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/maksym_kotenko~ai-visibility-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-maksym_kotenko-ai-visibility-tracker",
        "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",
        "required": [
          "brand",
          "prompts"
        ],
        "properties": {
          "brand": {
            "title": "Your brand",
            "type": "string",
            "description": "The brand name exactly as people write it, e.g. HubSpot. A name with a capital letter matches HubSpot, Hubspot and HUBSPOT but not the plain word, so Notion skips \"a notion of\". A lowercase name matches any case."
          },
          "brandDomains": {
            "title": "Your website domains",
            "type": "array",
            "description": "Domains you own, e.g. hubspot.com. Subdomains count too. Used to tell when an AI answer cites your site as a source, the strongest visibility signal.",
            "items": {
              "type": "string"
            }
          },
          "brandAliases": {
            "title": "Brand aliases",
            "type": "array",
            "description": "Other names the AI may use for your brand: product names, abbreviations, a former name. Each one counts as a mention of your brand.",
            "items": {
              "type": "string"
            }
          },
          "competitors": {
            "title": "Competitors",
            "type": "array",
            "description": "One competitor per line as Name | domain, e.g. Zoho CRM | zoho.com, or just a name or a domain. Up to 25. Each row shows whether and where every competitor appears, and the summary gives share of voice.",
            "items": {
              "type": "string"
            }
          },
          "prompts": {
            "title": "Prompts to ask",
            "type": "array",
            "description": "One question per line, the way your buyers ask AI assistants: best CRM for a small business, HubSpot alternatives, which CRM integrates with Gmail. Up to 200. Each prompt is asked on every selected engine.",
            "items": {
              "type": "string"
            }
          },
          "engines": {
            "title": "AI engines",
            "type": "array",
            "description": "Engines to ask. OpenAI = the official Responses API with web search, Perplexity = the official Agent API, Claude = the official Anthropic Messages API with web search. Each prompt on each engine is one check. Engines without an API key below are skipped.",
            "items": {
              "type": "string",
              "enum": [
                "openai",
                "perplexity",
                "claude"
              ],
              "enumTitles": [
                "OpenAI (web search)",
                "Perplexity",
                "Claude (web search)"
              ]
            },
            "default": [
              "openai",
              "perplexity",
              "claude"
            ]
          },
          "openaiApiKey": {
            "title": "OpenAI API key",
            "type": "string",
            "description": "Your own key from platform.openai.com. Stored encrypted by Apify, never logged or written to the output. OpenAI bills you directly for the tokens and web search calls of each check."
          },
          "perplexityApiKey": {
            "title": "Perplexity API key",
            "type": "string",
            "description": "Your own key from console.perplexity.ai. Stored encrypted by Apify, never logged or written to the output. Perplexity bills you directly for each answer."
          },
          "anthropicApiKey": {
            "title": "Anthropic API key (Claude)",
            "type": "string",
            "description": "Your own key from platform.claude.com (starts with sk-ant-). Stored encrypted by Apify, never logged or written to the output. Anthropic bills you directly for the tokens and web searches of each check. Web search must be allowed for your organization in the Claude Console."
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Optional two-letter country code such as US, GB or DE. Every engine searches as if the user were there. Write your prompts in that country's language."
          },
          "openaiModel": {
            "title": "OpenAI model",
            "type": "string",
            "description": "Model used with web search. The default gpt-6-luna is the cheapest; the web search call itself costs the same on every model. Use a larger model such as gpt-6.1-sol to get closer to ChatGPT answers.",
            "default": "gpt-6-luna"
          },
          "forceWebSearch": {
            "title": "Always search the web on OpenAI and Claude",
            "type": "boolean",
            "description": "On (default): every OpenAI answer is grounded in a fresh web search, and Claude is told to search before answering, so citations are almost always there. Off: the model decides, like ChatGPT and claude.ai do; answers from memory have no citations and cost less.",
            "default": true
          },
          "perplexityPreset": {
            "title": "Perplexity preset",
            "enum": [
              "fast",
              "low"
            ],
            "type": "string",
            "description": "fast (default) is the successor of the Sonar model: one search, cheapest. low runs a few search steps like Pro Search and costs more.",
            "default": "fast"
          },
          "claudeModel": {
            "title": "Claude model",
            "type": "string",
            "description": "Model used with web search. The default claude-haiku-5-5 is the cheapest; a web search costs the same on every model. Use claude-sonnet-5-5 or claude-opus-5-5 to get closer to claude.ai answers, at 20-40 times the token price.",
            "default": "claude-haiku-5-5"
          },
          "claudeMaxSearches": {
            "title": "Max Claude searches per check",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Upper limit on web searches Claude may run for one answer; each search is billed by Anthropic ($0.01 each in October 2026). Comparison prompts use more searches when allowed.",
            "default": 3
          },
          "runsPerPrompt": {
            "title": "Runs per prompt",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "AI answers vary between requests. Ask each prompt 2-3 times for a steadier mention rate. Every run is a separate check.",
            "default": 1
          },
          "maxChecks": {
            "title": "Max checks per run",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Safety cap on prompts x runs x engines. Checks above the cap are not asked and not charged.",
            "default": 100
          },
          "trackChanges": {
            "title": "Compare with the previous run",
            "type": "boolean",
            "description": "Keeps the last result of every check in your named key-value store ai-visibility-tracker-state, so each row and the summary show what changed: gained, lost, moved up or down, new and lost cited domains.",
            "default": true
          },
          "stateKey": {
            "title": "Tracking key",
            "type": "string",
            "description": "Separates tracking histories, e.g. one per client or project. Runs with the same brand and key compare with each other.",
            "default": "default"
          },
          "includeAnswer": {
            "title": "Include the full answer",
            "type": "boolean",
            "description": "Adds the complete AI answer as Markdown to each row. Switch off for smaller datasets.",
            "default": true
          },
          "includeSummaryRow": {
            "title": "Add a summary row",
            "type": "boolean",
            "description": "Adds one free row at the end with mention rate, citation rate, average rank, share of voice and top cited domains per engine. The same summary is always in the key-value store as SUMMARY.",
            "default": true
          },
          "concurrency": {
            "title": "Parallel checks",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many checks run at the same time. Lower it if your API key has tight rate limits.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}