{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Visibility Tracker - Brand & Citation GEO",
    "description": "Track brand mentions and domain citations across Perplexity, ChatGPT, Gemini, and optional Claude. Returns one row per prompt x platform with share of voice, sentiment, cited URLs, source domains, and GEO recommendations. Use for SEO/GEO agencies and brand teams; not for website crawlability audits.",
    "version": "1.0",
    "x-build-id": "n3uNmYdJb4veZVbyB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~ai-visibility-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-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/khadinakbar~ai-visibility-tracker/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-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/khadinakbar~ai-visibility-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-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": [
          "brandName"
        ],
        "properties": {
          "brandName": {
            "title": "Brand name",
            "type": "string",
            "description": "Use this when you want to track one brand, company, product, or tool in AI answers. Enter the public name exactly as customers write it, for example \"Apify\". Required for every real scan and prefilled for testing. Not a competitor list; put rivals in competitors."
          },
          "targetDomain": {
            "title": "Target domain",
            "type": "string",
            "description": "Use this when you also want citation tracking for the brand website. Enter a bare domain such as \"apify.com\" or a URL like \"https://apify.com\". Defaults to blank, which skips owned-domain citation checks but still tracks brand mentions. Not a list of pages.",
            "default": ""
          },
          "industry": {
            "title": "Industry or category",
            "type": "string",
            "description": "Use this when built-in prompts should include the market category. Enter a short phrase such as \"web scraping tools\" or \"CRM software\". Defaults to \"software tools\" when blank. Not a keyword list; use queries for exact prompts.",
            "default": "software tools"
          },
          "competitors": {
            "title": "Competitors",
            "type": "array",
            "description": "Use this when you want share-of-voice against specific rivals. Enter brand names or domains, for example [\"Bright Data\", \"Octoparse\"]. Defaults to an empty list and accepts up to 10 values. Not the tracked brand; use brandName for that.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "queries": {
            "title": "Custom AI prompts",
            "type": "array",
            "description": "Use this when you have exact customer questions to test. Enter one prompt per line, for example \"What are the best web scraping tools?\". Defaults to empty, so the actor generates prompts from queryTemplates. Not search keywords; these are full questions sent to AI platforms.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "queryTemplates": {
            "title": "Query templates",
            "type": "array",
            "description": "Use this when you want standard buyer-intent prompt categories. Defaults to recommendations, alternatives, and category_leaders. Choose from the listed values; each selected template may create multiple prompts before maxQueries caps the run. Not used to rewrite custom queries.",
            "items": {
              "type": "string",
              "enum": [
                "recommendations",
                "alternatives",
                "category_leaders",
                "reviews",
                "comparisons"
              ],
              "enumTitles": [
                "Recommendations",
                "Alternatives",
                "Category leaders",
                "Reviews",
                "Comparisons"
              ]
            },
            "default": [
              "recommendations",
              "alternatives",
              "category_leaders"
            ]
          },
          "platforms": {
            "title": "AI platforms",
            "type": "array",
            "description": "Use this to choose which AI answer engines to check. Defaults to [\"perplexity\", \"chatgpt\", \"gemini\"] for bounded cost. Add \"claude\" only when you explicitly need a deeper audit; Claude is token-capped. Not a model-id field.",
            "items": {
              "type": "string",
              "enum": [
                "perplexity",
                "chatgpt",
                "gemini",
                "claude"
              ],
              "enumTitles": [
                "Perplexity",
                "ChatGPT",
                "Gemini",
                "Claude"
              ]
            },
            "default": [
              "perplexity",
              "chatgpt",
              "gemini"
            ]
          },
          "maxQueries": {
            "title": "Max prompts to run",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Use this to cap the number of unique prompts before multiplying by selected platforms. Defaults to 3, so the normal 3-platform run costs about $0.90 in event charges. Minimum 1 and maximum 10. Not the dataset item cap; each prompt x platform can create one row.",
            "default": 3
          },
          "responseFormat": {
            "title": "Response format",
            "enum": [
              "concise",
              "detailed"
            ],
            "type": "string",
            "description": "Use this to control how much AI-answer text is stored in each row. Defaults to \"concise\" for MCP and agent workflows. Choose \"detailed\" when a human will inspect answer context. Not a platform selector.",
            "default": "concise"
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Use this when another system should receive the run summary after completion. Enter an HTTPS endpoint such as \"https://hooks.zapier.com/hooks/catch/...\". Defaults to blank, so no webhook is sent. Not used for authentication or API keys.",
            "default": ""
          },
          "demoMode": {
            "title": "Demo mode",
            "type": "boolean",
            "description": "Use this when you want a no-charge connectivity check. When true, the actor writes OUTPUT and RUN_SUMMARY without calling AI providers. Defaults to false for real scans. Not a cached visibility report.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}