{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Visibility Tracker: 7 AI Assistants",
    "description": "See how AI assistants answer when buyers ask about your category. Calls the official APIs of ChatGPT, Perplexity, Gemini, Claude and Grok, plus Google AI Overviews and AI Mode. Reports whether your brand is named, how early, whether your site is cited, and which rivals appear alongside you.",
    "version": "1.0",
    "x-build-id": "st7rxXJFbtaIVeopc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/babel42~ai-visibility-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-babel42-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/babel42~ai-visibility-tracker/runs": {
      "post": {
        "operationId": "runs-sync-babel42-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/babel42~ai-visibility-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-babel42-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"
        ],
        "properties": {
          "brand": {
            "title": "Brand name",
            "maxLength": 120,
            "type": "string",
            "description": "The brand, product or company to measure. Use the name a customer would write, not the legal entity name."
          },
          "brandDomain": {
            "title": "Brand domain",
            "type": "string",
            "description": "Your website, as a bare host such as ahrefs.com. Required for citation tracking, which reports whether AI answers used your own site as a source. Also used to look up the real search demand that seeds generated questions."
          },
          "brandAliases": {
            "title": "Brand aliases",
            "maxItems": 10,
            "type": "array",
            "description": "Other spellings that count as your brand: abbreviations, the legal name, common misspellings, or a former name. Omitting a real alias silently undercounts your mentions.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "What you sell, phrased as a buyer would say it. This is what the generated questions are about, so be specific: 'SEO tools for agencies' produces a far better question set than 'software'."
          },
          "competitors": {
            "title": "Competitors to track",
            "maxItems": 15,
            "type": "array",
            "description": "Rivals to count in the same answers, which is what makes share of voice meaningful. Accepts a plain name, or Name|domain.com to match their site in citations too.",
            "items": {
              "type": "string"
            }
          },
          "discoverCompetitors": {
            "title": "Discover competitors automatically",
            "type": "boolean",
            "description": "Find brands the AI recommends alongside or instead of yours, beyond the competitors you listed. Charged per check. Every discovered name is verified against the answer text before it counts, and discovered rivals are included in competitor mentions, top competitors and share of voice.",
            "default": false
          },
          "customQueries": {
            "title": "Your own questions",
            "maxItems": 50,
            "type": "array",
            "description": "Exact questions to ask, one per entry. Supplying these switches off generation. Avoid naming your own brand in a question: it guarantees a mention and inflates your score. Any question that does name the brand is flagged and excluded from the headline metrics.",
            "items": {
              "type": "string"
            }
          },
          "queryTemplates": {
            "title": "Question templates",
            "type": "array",
            "description": "Ready made question shapes built from your category. The first six never name your brand and are safe for measuring visibility. The last three do name it, which is useful for reputation and comparison but is excluded from the headline score.",
            "items": {
              "type": "string",
              "enum": [
                "best_tools",
                "recommendations",
                "how_to_choose",
                "for_use_case",
                "pricing",
                "reviews",
                "alternatives",
                "brand_reviews",
                "brand_comparison"
              ],
              "enumTitles": [
                "Best in category (does not name your brand)",
                "Direct recommendation (does not name your brand)",
                "How to choose (does not name your brand)",
                "For my use case (does not name your brand)",
                "Pricing and value (does not name your brand)",
                "What users say (does not name your brand)",
                "Alternatives to my brand (names your brand)",
                "Reviews of my brand (names your brand)",
                "My brand vs competitors (names your brand)"
              ]
            }
          },
          "generateQueries": {
            "title": "Write the questions for me",
            "type": "boolean",
            "description": "Write the questions for you from the keywords your domain already ranks for in Google, weighted by real monthly search volume. On by default. Turn it off only if you are supplying your own questions or picking templates. Generated questions never name your brand.",
            "default": true
          },
          "maxQueries": {
            "title": "Maximum questions",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Total questions to ask. Every question is asked on every AI assistant you select, so billed checks are questions multiplied by assistants. Up to 50 questions per run.",
            "default": 3
          },
          "assistants": {
            "title": "AI assistants to check",
            "minItems": 1,
            "type": "array",
            "description": "Pick which AI assistants to ask. Every question you set is asked on every assistant you pick here. Claude is billed as a separate premium check. Each result records whether the assistant searched the live web for that answer, so you can tell a searched answer from a remembered one.",
            "items": {
              "type": "string",
              "enum": [
                "chatgpt",
                "perplexity",
                "gemini",
                "claude",
                "ai_overviews",
                "ai_mode",
                "grok"
              ],
              "enumTitles": [
                "ChatGPT (live web search)",
                "Perplexity (live web search)",
                "Gemini (Google Search grounding)",
                "Claude (live web search, premium check)",
                "Google AI Overviews (live)",
                "Google AI Mode (live)",
                "Grok (training knowledge)"
              ]
            },
            "default": [
              "chatgpt",
              "ai_overviews"
            ]
          },
          "market": {
            "title": "Country",
            "type": "string",
            "description": "Two letter country code to target, such as gb or us. Gemini and Grok have no location parameter, so for those two the country is carried in the question text instead, which is a weaker signal. The run notes say so explicitly."
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "Optional city for local intent, for example London. Applies to the AI assistants that accept a location."
          },
          "includeSentiment": {
            "title": "Classify sentiment",
            "type": "boolean",
            "description": "Judge whether each answer portrays your brand positively, neutrally or negatively. Billed separately per mention. A classification that cannot be made is reported as unknown rather than guessed as neutral.",
            "default": false
          },
          "responseFormat": {
            "title": "Answer detail",
            "enum": [
              "detailed",
              "concise"
            ],
            "type": "string",
            "description": "How much of each AI answer to keep on the row. Concise is roughly a quarter of the size and is the right choice when an AI agent is reading the output.",
            "default": "detailed"
          },
          "mode": {
            "title": "Run mode",
            "enum": [
              "quick",
              "standard"
            ],
            "type": "string",
            "description": "Quick is built for AI agents: few questions, concise answers, finishes inside a tool call timeout. Standard is built for scheduled monitoring.",
            "default": "quick"
          },
          "demoMode": {
            "title": "Dry run",
            "type": "boolean",
            "description": "Build and report the exact question set and AI assistants without calling any provider and without charging anything. Use it to check a configuration before you spend.",
            "default": false
          },
          "maxBudgetUsd": {
            "title": "Maximum spend for this run",
            "minimum": 0.01,
            "type": "number",
            "description": "Refuse to start if the projected charge exceeds this. Checked before any paid call is made, so an oversized run costs you nothing. The projection prices Claude checks at the premium rate."
          },
          "monitorId": {
            "title": "Monitor ID",
            "type": "string",
            "description": "A stable label for a recurring monitor, written onto every row. Keep it and the question set unchanged between scheduled runs or your trend line is not comparable."
          },
          "includeSummaryItem": {
            "title": "Add the run summary to the results",
            "type": "boolean",
            "description": "Append the aggregated summary as an extra item in the results dataset. Off by default so the results stay a single record type: mixing the summary in makes every column read 99 percent complete instead of 100, because the summary carries none of the per check fields. The summary is always written to the key value store under RUN_SUMMARY either way.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}