{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Brand Visibility Tracker (ChatGPT, Gemini...)",
    "description": "AI brand visibility tracker: run prompt sets across OpenAI, Gemini, Perplexity and Claude web search via official APIs. Get mentions, rank, sentiment, cited URLs and share of voice vs competitors, with history and Slack reports. Bring your own keys, $0.04 per check.",
    "version": "0.0",
    "x-build-id": "xeIqWzKUcfqNvGmU2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tiger19935~ai-brand-visibility-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tiger19935-ai-brand-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/tiger19935~ai-brand-visibility-tracker/runs": {
      "post": {
        "operationId": "runs-sync-tiger19935-ai-brand-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/tiger19935~ai-brand-visibility-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-tiger19935-ai-brand-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",
        "properties": {
          "brand": {
            "title": "Brand name",
            "type": "string",
            "description": "The brand to track, exactly as people write it (for example Notion). Matching is case-insensitive and whole-word."
          },
          "brandAliases": {
            "title": "Brand aliases",
            "type": "array",
            "description": "Other spellings or product names that count as a mention of your brand (for example Notion AI). Whole-word, case-insensitive.",
            "items": {
              "type": "string"
            }
          },
          "brandDomains": {
            "title": "Brand domains",
            "type": "array",
            "description": "Your own domains (for example notion.so). Used to tell whether an answer cites your website. Leave empty to skip.",
            "items": {
              "type": "string"
            }
          },
          "competitors": {
            "title": "Competitors",
            "type": "array",
            "description": "Competitor names for rank and share of voice. Add aliases after pipes, for example: Evernote | Evernote Business.",
            "items": {
              "type": "string"
            }
          },
          "prompts": {
            "title": "Prompts",
            "type": "array",
            "description": "Questions a buyer might ask an AI assistant, one per line. Each prompt is checked on every selected provider and locale (one billed provider-check each).",
            "items": {
              "type": "string"
            }
          },
          "locales": {
            "title": "Locales",
            "type": "array",
            "description": "Locale codes such as en-US, de-DE, fr-FR. The country is passed to each provider as the user location where supported, and the answer language is requested.",
            "items": {
              "type": "string"
            }
          },
          "providers": {
            "title": "Providers",
            "type": "array",
            "description": "Which AI engines to query. A provider is skipped with a warning if no API key is available for it.",
            "items": {
              "type": "string",
              "enum": [
                "perplexity",
                "openai",
                "gemini",
                "anthropic"
              ],
              "enumTitles": [
                "Perplexity Sonar",
                "OpenAI (Responses API web search)",
                "Google Gemini (Google Search grounding)",
                "Anthropic Claude (web search tool)"
              ]
            },
            "default": [
              "perplexity",
              "openai",
              "gemini",
              "anthropic"
            ]
          },
          "perplexityApiKey": {
            "title": "Perplexity API key",
            "type": "string",
            "description": "Your own Perplexity API key. Stored as a secret, never logged."
          },
          "openaiApiKey": {
            "title": "OpenAI API key",
            "type": "string",
            "description": "Your own OpenAI API key (needs access to the Responses API web_search tool). Stored as a secret, never logged."
          },
          "geminiApiKey": {
            "title": "Gemini API key",
            "type": "string",
            "description": "Your own Google AI Studio / Gemini API key. Stored as a secret, never logged."
          },
          "anthropicApiKey": {
            "title": "Anthropic API key",
            "type": "string",
            "description": "Your own Anthropic API key (web search must be enabled for your organization). Stored as a secret, never logged."
          },
          "useOwnerKeys": {
            "title": "Use the actor owner's provider keys",
            "type": "boolean",
            "description": "Only works if the actor owner has configured provider keys as environment variables. Off by default: with your own keys you pay only this actor's event prices.",
            "default": false
          },
          "perplexityModel": {
            "title": "Perplexity model",
            "type": "string",
            "description": "Perplexity model name. Change it if the default is retired.",
            "default": "sonar"
          },
          "openaiModel": {
            "title": "OpenAI model",
            "type": "string",
            "description": "OpenAI model that supports the web_search tool in the Responses API. Change it if the default is retired.",
            "default": "gpt-4.1-mini"
          },
          "geminiModel": {
            "title": "Gemini model",
            "type": "string",
            "description": "Gemini model that supports Google Search grounding. Change it if the default is retired.",
            "default": "gemini-2.5-flash"
          },
          "anthropicModel": {
            "title": "Anthropic model",
            "type": "string",
            "description": "Claude model that supports the web search tool. Change it if the default is retired.",
            "default": "claude-haiku-4-5"
          },
          "maxItems": {
            "title": "Max provider checks",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Upper bound on prompt x locale x provider checks per run. Also caps your spend. Free Apify plans are limited to 25 results per run.",
            "default": 20
          },
          "generateReport": {
            "title": "Generate aggregated report",
            "type": "boolean",
            "description": "Adds one report row with mention rate, rank, sentiment, share of voice, top cited domains and the change since the previous run. Billed as one report event.",
            "default": true
          },
          "trackHistory": {
            "title": "Save history for deltas",
            "type": "boolean",
            "description": "Stores a snapshot in a named key-value store so the next run can show what changed.",
            "default": true
          },
          "historyLabel": {
            "title": "History label",
            "type": "string",
            "description": "Optional label to keep separate histories for the same brand (for example weekly-us). Defaults to the brand name."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Optional Slack incoming webhook. The report summary is posted there after each run. Schedule the actor weekly for a weekly report."
          },
          "includeAnswerText": {
            "title": "Include answer text",
            "type": "boolean",
            "description": "Store the AI answer (truncated to 6,000 characters) in each row.",
            "default": true
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel provider requests. Lower it if you hit provider rate limits.",
            "default": 3
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 15,
            "maximum": 300,
            "type": "integer",
            "description": "Timeout per provider request. Web-search answers can take 20 to 60 seconds.",
            "default": 90
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}