{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Search Rank Tracker - ChatGPT & AI Brand Visibility",
    "description": "Track how ChatGPT, Claude, Gemini & Perplexity talk about your brand. Runs your target prompts, scores mentions, recommendations & share-of-voice vs competitors, extracts cited sources, and alerts you via webhook when your AI visibility changes. The rank tracker for AI search (GEO).",
    "version": "0.0",
    "x-build-id": "CleF2FR0hFmc5NBuY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/signalgrove~ai-search-rank-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-signalgrove-ai-search-rank-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/signalgrove~ai-search-rank-tracker/runs": {
      "post": {
        "operationId": "runs-sync-signalgrove-ai-search-rank-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/signalgrove~ai-search-rank-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-signalgrove-ai-search-rank-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": [
          "brandName",
          "prompts"
        ],
        "properties": {
          "brandName": {
            "title": "Brand name",
            "type": "string",
            "description": "The brand, product, or company whose AI visibility you want to track (e.g. \"Notion\")."
          },
          "brandAliases": {
            "title": "Brand aliases",
            "type": "array",
            "description": "Other names the brand goes by (e.g. \"Notion HQ\", \"notion.so\"). Mentions of any alias count as brand mentions.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "competitors": {
            "title": "Competitors",
            "maxItems": 10,
            "type": "array",
            "description": "Competitor brands to score share-of-voice against (up to 10).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "prompts": {
            "title": "Prompts to test",
            "minItems": 1,
            "maxItems": 50,
            "type": "array",
            "description": "The questions a potential customer might ask an AI assistant (e.g. \"What is the best note-taking app for teams?\"). One query is billed per prompt per provider.",
            "items": {
              "type": "string"
            }
          },
          "providers": {
            "title": "AI providers",
            "uniqueItems": true,
            "type": "array",
            "description": "Which AI assistants to query.",
            "items": {
              "type": "string",
              "enum": [
                "openai",
                "anthropic",
                "gemini",
                "perplexity"
              ],
              "enumTitles": [
                "ChatGPT (OpenAI)",
                "Claude (Anthropic)",
                "Gemini (Google)",
                "Perplexity"
              ]
            },
            "default": [
              "openai",
              "anthropic",
              "gemini",
              "perplexity"
            ]
          },
          "enableWebSearch": {
            "title": "Prefer web-grounded answers",
            "type": "boolean",
            "description": "Ask providers to use their web search / grounding mode where available. Falls back to plain answers automatically if grounding fails.",
            "default": true
          },
          "apiKeys": {
            "title": "Your own API keys (optional)",
            "type": "object",
            "description": "Bring-your-own-keys mode: JSON object with any of \"openai\", \"anthropic\", \"gemini\", \"perplexity\". Queries made with your keys are billed at the reduced BYOK event rate. Keys are used only for this run and never stored."
          },
          "models": {
            "title": "Model overrides (optional)",
            "type": "object",
            "description": "JSON object overriding the default model per provider, e.g. {\"openai\": \"gpt-4o-search-preview\"}."
          },
          "webhookUrl": {
            "title": "Alert webhook URL (optional)",
            "type": "string",
            "description": "POSTed a JSON summary after each run, including changes vs the previous run. Use for Slack/Discord/Zapier alerts."
          },
          "alertOnlyOnChange": {
            "title": "Only call webhook when something changed",
            "type": "boolean",
            "description": "If enabled, the webhook fires only when visibility, recommendation status, or share-of-voice moved vs the previous run.",
            "default": false
          },
          "trackingId": {
            "title": "Tracking ID (optional)",
            "type": "string",
            "description": "Identifier for run-over-run comparison history. Defaults to a slug of the brand name."
          },
          "maxParallel": {
            "title": "Max parallel queries",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many provider queries to run concurrently.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}