{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Brand Visibility Tracker: ChatGPT, Gemini & Perplexity (GEO)",
    "description": "Check how often ChatGPT (OpenAI web search), Gemini and Perplexity mention your brand vs competitors for real buyer prompts. Mention rate over repeated runs, cited URLs, share of voice, sources AI cites. Bring your own API key. $0.04 per prompt x engine.",
    "version": "0.1",
    "x-build-id": "u9zOgbJ1Lb3L0hvwU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sefran1~ai-brand-visibility-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sefran1-ai-brand-visibility-checker",
        "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/sefran1~ai-brand-visibility-checker/runs": {
      "post": {
        "operationId": "runs-sync-sefran1-ai-brand-visibility-checker",
        "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/sefran1~ai-brand-visibility-checker/run-sync": {
      "post": {
        "operationId": "run-sync-sefran1-ai-brand-visibility-checker",
        "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 or product name",
            "type": "string",
            "description": "The name to look for in AI answers (case-insensitive, whole words). Leave the sample \"Notion\" and run without keys to see a recorded demo."
          },
          "domain": {
            "title": "Your website / domain",
            "type": "string",
            "description": "Used to detect when AI engines cite your site, e.g. notion.so or apify.com/yourname/your-actor (a path limits matching to that section)."
          },
          "brandAliases": {
            "title": "Brand aliases",
            "type": "array",
            "description": "Other spellings that count as a mention (e.g. product names, old names).",
            "items": {
              "type": "string"
            }
          },
          "caseSensitive": {
            "title": "Case-sensitive brand match",
            "type": "boolean",
            "description": "Turn on when your brand is also a common word (e.g. \"Regateo\" vs \"regateo\" in Spanish). Check mentionSnippets to audit matches.",
            "default": false
          },
          "competitors": {
            "title": "Competitors",
            "type": "array",
            "description": "Competitor names to compare share of voice against.",
            "items": {
              "type": "string"
            }
          },
          "prompts": {
            "title": "Buyer prompts",
            "type": "array",
            "description": "Questions your buyers ask AI assistants. Up to 50. Leave empty and fill \"description\" to auto-generate them.",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "title": "What you sell (for auto-generated prompts)",
            "type": "string",
            "description": "Used only when \"prompts\" is empty: one or two sentences about your product, e.g. \"Price-history browser extension for second-hand marketplaces in Spain\"."
          },
          "numPrompts": {
            "title": "Number of prompts to generate",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Only used with auto-generation.",
            "default": 5
          },
          "language": {
            "title": "Prompt language",
            "type": "string",
            "description": "Language for generated prompts, e.g. en, es, fr, de, pt, it.",
            "default": "en"
          },
          "country": {
            "title": "Buyer country (ISO code)",
            "type": "string",
            "description": "Optional two-letter country, e.g. ES or GB. Sent to OpenAI web search as the user location and used for generated prompts."
          },
          "engines": {
            "title": "AI engines",
            "type": "array",
            "description": "Leave empty to use every engine you gave a key for.",
            "items": {
              "type": "string",
              "enum": [
                "gemini",
                "openai",
                "perplexity"
              ],
              "enumTitles": [
                "Google Gemini (Google Search grounding)",
                "OpenAI / ChatGPT models (web search)",
                "Perplexity Sonar"
              ]
            }
          },
          "runsPerPrompt": {
            "title": "Runs per prompt",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "AI answers change on every run, so each prompt is asked several times and the mention rate is the share of runs that name you. All runs of one prompt on one engine are one billable check.",
            "default": 3
          },
          "geminiApiKey": {
            "title": "Gemini API key",
            "type": "string",
            "description": "From aistudio.google.com/apikey. Free-tier keys usually cannot use Google Search grounding on current models; the Actor then falls back to answers without web search and marks them webSearch=false."
          },
          "openaiApiKey": {
            "title": "OpenAI API key",
            "type": "string",
            "description": "From platform.openai.com/api-keys. Uses the Responses API web_search tool."
          },
          "perplexityApiKey": {
            "title": "Perplexity API key",
            "type": "string",
            "description": "From perplexity.ai/settings/api."
          },
          "geminiModel": {
            "title": "Gemini model",
            "type": "string",
            "description": "Default gemini-flash-latest."
          },
          "openaiModel": {
            "title": "OpenAI model",
            "type": "string",
            "description": "Default gpt-4.1-mini (supports web search)."
          },
          "perplexityModel": {
            "title": "Perplexity model",
            "type": "string",
            "description": "Default sonar."
          },
          "webSearch": {
            "title": "Use web search",
            "type": "boolean",
            "description": "Ask engines to search the web like ChatGPT Search / AI Overviews. Off = model memory only.",
            "default": true
          },
          "allowUngroundedFallback": {
            "title": "Gemini: fall back to no web search if grounding is unavailable",
            "type": "boolean",
            "description": "If Gemini web-search grounding is not available for your key (free tier), answer without web search instead of failing; records are marked webSearch=false.",
            "default": true
          },
          "includeFullAnswers": {
            "title": "Include every full answer",
            "type": "boolean",
            "description": "Adds all raw answers and citations to each record (larger dataset).",
            "default": false
          },
          "maxConcurrency": {
            "title": "Parallel checks",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many prompt x engine checks run in parallel. Lower it if your provider rate-limits you.",
            "default": 4
          },
          "demo": {
            "title": "Demo mode",
            "type": "boolean",
            "description": "Return the recorded sample instead of calling any AI engine (not charged).",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}