{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Search Visibility Tracker: Brand in AI",
    "description": "Returns, for each question asked to OpenAI, Claude and Perplexity models, whether your brand was named, its position and list rank, competitors named, share of voice and cited links. Monitor mode shows what changed since the last run. No AI account needed.",
    "version": "0.0",
    "x-build-id": "Hy0siDYl7KAERRdMB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/brightknot~ai-search-visibility-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-brightknot-ai-search-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/brightknot~ai-search-visibility-tracker/runs": {
      "post": {
        "operationId": "runs-sync-brightknot-ai-search-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/brightknot~ai-search-visibility-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-brightknot-ai-search-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"
        ],
        "properties": {
          "brand": {
            "title": "Brand",
            "type": "string",
            "description": "Your brand or product name, as people write it, e.g. Notion."
          },
          "brandAliases": {
            "title": "Other names for the brand",
            "type": "array",
            "description": "Other spellings or product names that count as a mention, e.g. Notion AI, notion.so.",
            "items": {
              "type": "string"
            }
          },
          "brandDomains": {
            "title": "Brand websites",
            "type": "array",
            "description": "Your domains, e.g. notion.com. Used to tell you when an answer links to your site.",
            "items": {
              "type": "string"
            }
          },
          "competitors": {
            "title": "Competitors",
            "type": "array",
            "description": "Competitor names to track in the same answers. Each row shows which ones were named and in what order.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Product category",
            "type": "string",
            "description": "Used to write prompts for you when the Prompts field is empty, e.g. 'note-taking apps for teams' gives 'What are the best note-taking apps for teams?' and similar questions."
          },
          "prompts": {
            "title": "Prompts",
            "type": "array",
            "description": "The questions your buyers ask an AI assistant, one per item. Leave empty to use 5 to 7 questions written from the category, brand and first two competitors. Each prompt is asked of every model.",
            "items": {
              "type": "string"
            }
          },
          "models": {
            "title": "AI models",
            "type": "array",
            "description": "OpenRouter model ids to ask. If empty: ~openai/gpt-luna-latest (OpenAI), anthropic/claude-haiku-5.5 (Anthropic) and perplexity/sonar (Perplexity, live web search with citations). Any id from openrouter.ai/models works.",
            "items": {
              "type": "string"
            }
          },
          "repeatsPerPrompt": {
            "title": "Ask each question this many times",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "AI answers change from one ask to the next. Ask 3 times for a steadier visibility rate. Each answer is billed.",
            "default": 1
          },
          "market": {
            "title": "Market (optional)",
            "type": "string",
            "description": "Adds 'I am based in ...' to every question, e.g. United Arab Emirates or Germany, to see local answers."
          },
          "judgeSentiment": {
            "title": "Rate how the brand is described",
            "type": "boolean",
            "description": "When the brand is named, a second, small model call rates the description as positive, neutral or negative and gives a one-line reason.",
            "default": false
          },
          "judgeModel": {
            "title": "Model for the sentiment rating",
            "type": "string",
            "description": "OpenRouter model id used for the sentiment rating.",
            "default": "anthropic/claude-haiku-5.5"
          },
          "monitorMode": {
            "title": "Monitor mode: compare with the last run",
            "type": "boolean",
            "description": "Remember each answer's result and, on later runs, add what changed: gained mention, lost mention, moved up, moved down, same. Schedule it weekly to track your visibility.",
            "default": true
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Keeps a separate history for each name. Use one name per brand or client.",
            "default": "default"
          },
          "includeAnswerText": {
            "title": "Include the full answer text",
            "type": "boolean",
            "description": "Add the model's full answer to each row. Turn off for smaller rows.",
            "default": true
          },
          "maxAnswers": {
            "title": "Max answers per run",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "Stop after this many answers (prompts x models x repeats). Each answer is billed.",
            "default": 600
          },
          "llmProvider": {
            "title": "Model provider",
            "enum": [
              "apify",
              "openrouter"
            ],
            "type": "string",
            "description": "With the Apify proxy, model usage is added to your Apify bill. With your own key, OpenRouter bills you directly.",
            "default": "apify"
          },
          "openrouterApiKey": {
            "title": "OpenRouter API key",
            "type": "string",
            "description": "Only needed when the provider is 'My own OpenRouter key'."
          },
          "maxOutputTokens": {
            "title": "Max answer length (tokens)",
            "minimum": 200,
            "maximum": 2048,
            "type": "integer",
            "description": "Upper limit for each answer. The Apify proxy allows at most 2,048.",
            "default": 1200
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many model calls run at the same time.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}