{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Visibility Tracker: ChatGPT, Gemini & Google AI Overviews",
    "description": "See whether ChatGPT, Gemini and Google AI Overviews recommend your brand or your competitors. Get a visibility score, share of voice, the prompts you're missing from, the sites AI cites, and a white-label HTML report. $0.04 per answer, report free. No API keys.",
    "version": "0.1",
    "x-build-id": "Gn2vSAwQhWc9EQzp7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/wulfcare~ai-visibility-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-wulfcare-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/wulfcare~ai-visibility-tracker/runs": {
      "post": {
        "operationId": "runs-sync-wulfcare-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/wulfcare~ai-visibility-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-wulfcare-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",
        "properties": {
          "yourBrand": {
            "title": "Your brand",
            "type": "string",
            "description": "Your brand name, then any other names and your website, separated by commas: \"Pipedrive, Pipedrive CRM, pipedrive.com\". The report scores how often and how high AI recommends you, and whether it cites your site. Leave empty to just see who AI recommends."
          },
          "competitors": {
            "title": "Competitors",
            "type": "array",
            "description": "The brands you compete with, one per line, in the same format: name, other names, website. Their scores and share of voice sit next to yours in the report.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category (writes the prompts for you)",
            "type": "string",
            "description": "What you sell, the way a customer would put it: \"CRM for small business\", \"dentist in Brisbane\", \"running shoes for flat feet\". The Actor writes the buyer questions people ask AI (\"What is the best ...?\", \"Which ... would you recommend?\", \"alternatives to <competitor>\"). Use it, your own prompts below, or both."
          },
          "promptCount": {
            "title": "Number of prompts to write",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many questions to write from the category (1-50). Each is asked once on every engine you pick.",
            "default": 10
          },
          "prompts": {
            "title": "Your own prompts",
            "type": "array",
            "description": "Optional. Exact questions to ask, one per line, e.g. \"best CRM for a real estate agency\". Prompts that name a tracked brand (\"Is HubSpot good?\") are answered and shown, but left out of the scores, since they name the brand whatever its visibility.",
            "items": {
              "type": "string"
            }
          },
          "engines": {
            "title": "AI engines",
            "type": "array",
            "description": "Where to ask. Every engine is asked as a new, logged-out visitor, so you see what your customers see, not an API answer.",
            "items": {
              "type": "string",
              "enum": [
                "chatgpt",
                "gemini",
                "google_ai_overview"
              ],
              "enumTitles": [
                "ChatGPT (with web search)",
                "Google Gemini",
                "Google AI Overviews (top of Google search)"
              ]
            },
            "default": [
              "chatgpt",
              "gemini",
              "google_ai_overview"
            ]
          },
          "country": {
            "title": "Country",
            "enum": [
              "US",
              "GB",
              "AU",
              "CA",
              "NZ",
              "IE",
              "IN",
              "SG",
              "ZA",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "SE",
              "PL",
              "BR",
              "MX",
              "JP",
              "AE"
            ],
            "type": "string",
            "description": "Where your customers are. Google AI Overviews are searched for this country. ChatGPT is asked through a residential IP address in this country when it isn't the US (this uses your Apify residential proxy). Gemini doesn't localise logged-out answers by country.",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Two-letter language code for Google and the browser (en, de, fr, es, ...). Write your prompts in the same language.",
            "default": "en"
          },
          "repeats": {
            "title": "Ask each prompt this many times",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "AI answers change between askings. Asking each prompt 2-3 times gives steadier scores. Every answer is its own row and its own charge.",
            "default": 1
          },
          "maxRunMinutes": {
            "title": "Stop asking after (minutes)",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "When time is up, no more prompts are asked and the report is written from the answers so far. Leave empty to ask everything. The run also stops in time before its own timeout."
          },
          "projectName": {
            "title": "Project name (tracks changes over time)",
            "type": "string",
            "description": "Optional. Give the brand or client a name, e.g. \"acme-weekly\", and schedule this Actor (weekly is typical). Each run is saved under the name in your account, and the report shows the score trend and the prompts you gained or lost since the last run."
          },
          "reportTitle": {
            "title": "Report title",
            "type": "string",
            "description": "Optional. Heading of the HTML report (default: \"AI Visibility Report: <your brand>\")."
          },
          "agencyName": {
            "title": "Prepared by (agency name)",
            "type": "string",
            "description": "Optional. Shown on the HTML report as \"Prepared by ...\", for agencies sending it to clients. The report carries no Apify branding."
          },
          "proxyConfiguration": {
            "title": "Proxy for ChatGPT",
            "type": "object",
            "description": "Leave off: ChatGPT is asked from Apify's servers, and if it ever asks for sign-in the run moves to Apify residential proxy by itself. Set a proxy here to choose one yourself. Google engines always use Apify's servers directly (Google refuses proxy traffic).",
            "default": {
              "useApifyProxy": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}