{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Brand Visibility Tracker — ChatGPT, Gemini, Perplexity",
    "description": "Monitor your brand visibility and brand mentions in AI search results — ChatGPT, Google AI Overviews, Gemini, Perplexity and Copilot. Track competitor mentions and share of voice, run it daily for continuous AEO/GEO optimization, and get the page that beat you plus how to win it back.",
    "version": "0.12",
    "x-build-id": "azWkxmbSxMI6t7Rdv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/inovaflow~ai-brand-monitoring/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-inovaflow-ai-brand-monitoring",
        "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/inovaflow~ai-brand-monitoring/runs": {
      "post": {
        "operationId": "runs-sync-inovaflow-ai-brand-monitoring",
        "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/inovaflow~ai-brand-monitoring/run-sync": {
      "post": {
        "operationId": "run-sync-inovaflow-ai-brand-monitoring",
        "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": {
          "prompts": {
            "title": "Questions to track (the AI search prompts your customers ask)",
            "uniqueItems": true,
            "type": "array",
            "description": "The questions your customers ask AI engines, one per line. Each is checked across every selected engine and country, and the actor notes whether your brand appears, who else does, and who gets cited.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "brand": {
            "title": "Your brand name",
            "type": "string",
            "description": "Your brand name — matched whole-word, case-insensitive in every AI answer. Leave blank and the brand-mention columns stay empty.",
            "default": ""
          },
          "brandAliases": {
            "title": "Other names for your brand",
            "uniqueItems": true,
            "type": "array",
            "description": "Other spellings of your brand — product names, abbreviations, former names. Each alias counts as a brand mention. Leave empty to match the main brand name only.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "brandDomains": {
            "title": "Your website domains",
            "uniqueItems": true,
            "type": "array",
            "description": "The domains you own, so the actor can detect when an answer cites you (not just names you). Leave empty and citation tracking is skipped.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "competitors": {
            "title": "Competitors to watch (share of voice in AI answers)",
            "uniqueItems": true,
            "type": "array",
            "description": "Rival brands to track alongside yours, one per line — type a name (e.g. HubSpot) or its website (e.g. hubspot.com). A website pins the exact site the competitor deep-dive crawls; a plain name lets us find it from the AI answers' own citations. Drives share-of-voice comparisons and the deep-dive pick. Leave empty to monitor your brand alone.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "country": {
            "title": "Countries to check from",
            "uniqueItems": true,
            "type": "array",
            "description": "Which countries' AI answers to check. Each country runs the questions in its regional language and locale, so you see what local customers see. Default: United States.",
            "items": {
              "type": "string",
              "enum": [
                "us",
                "uk",
                "ca",
                "au",
                "de",
                "fr",
                "es",
                "it",
                "nl",
                "cz",
                "sk",
                "pl",
                "jp",
                "br",
                "mx",
                "cl",
                "in",
                "at",
                "ch",
                "be",
                "ie",
                "pt",
                "se",
                "no",
                "dk",
                "fi",
                "ro",
                "hu",
                "gr",
                "tr",
                "ua",
                "ae",
                "sa",
                "il",
                "eg",
                "za",
                "sg",
                "hk",
                "tw",
                "kr",
                "id",
                "th",
                "vn",
                "ph",
                "my",
                "nz",
                "ar",
                "co",
                "pe"
              ],
              "enumTitles": [
                "United States",
                "United Kingdom",
                "Canada",
                "Australia",
                "Germany",
                "France",
                "Spain",
                "Italy",
                "Netherlands",
                "Czechia",
                "Slovakia",
                "Poland",
                "Japan",
                "Brazil",
                "Mexico",
                "Chile",
                "India",
                "Austria",
                "Switzerland",
                "Belgium",
                "Ireland",
                "Portugal",
                "Sweden",
                "Norway",
                "Denmark",
                "Finland",
                "Romania",
                "Hungary",
                "Greece",
                "Turkey",
                "Ukraine",
                "United Arab Emirates",
                "Saudi Arabia",
                "Israel",
                "Egypt",
                "South Africa",
                "Singapore",
                "Hong Kong",
                "Taiwan",
                "South Korea",
                "Indonesia",
                "Thailand",
                "Vietnam",
                "Philippines",
                "Malaysia",
                "New Zealand",
                "Argentina",
                "Colombia",
                "Peru"
              ]
            },
            "default": [
              "us"
            ]
          },
          "surfaces": {
            "title": "AI engines to check",
            "uniqueItems": true,
            "type": "array",
            "description": "Which AI engines to check each question on. Each engine adds one check per question per country. Default: Google AI Overview + Perplexity.",
            "items": {
              "type": "string",
              "enum": [
                "aio",
                "ai_mode",
                "gemini",
                "perplexity",
                "chatgpt",
                "copilot"
              ],
              "enumTitles": [
                "Google AI Overview",
                "Google AI Mode",
                "Google Gemini",
                "Perplexity",
                "ChatGPT",
                "Microsoft Copilot"
              ]
            },
            "default": [
              "aio",
              "perplexity"
            ]
          },
          "outputEmail": {
            "title": "Your email address",
            "type": "string",
            "description": "Type an email address and every run emails you the report — a short summary in the email, with the full report attached as a formatted Markdown file (the same content as the Notion page: visibility score, trend, wins/losses, and competitor moves). Sent from ai-brand-monitoring@apify.inovaflow.app (no-reply). Leave blank to skip email."
          },
          "publishVisibilityPage": {
            "title": "Publish a shareable visibility page (recommended)",
            "type": "boolean",
            "description": "Publish a live, branded web page — your visibility score, trend, per-engine breakdown, the exact AI answers that named you, and the competitor teardown — updated in place at one private link on every run, with ‹ › arrows to browse past runs (dark & light mode). The link rides along in your report (and email/Slack if set). Free, and on by default. 👉 See a live example of what you'd get: https://api.apify.com/v2/key-value-stores/olXkAoxi12sHFIPOr/records/index.html?signature=X0kgDxlVqZ3Az4nla4Um",
            "default": true
          },
          "slackConnector": {
            "title": "Slack account (optional)",
            "type": "string",
            "description": "Connect Slack to receive a short daily summary — visibility score, trend, wins and losses, and competitor moves — in your team's channel. Leave unconnected and results are saved to the dataset only."
          },
          "slackChannel": {
            "title": "Slack channel",
            "type": "string",
            "description": "The Slack channel to post the summary in — channel name (#ai-visibility) or channel ID (C0123ABCD). Only used when a Slack connector is set."
          },
          "notionConnector": {
            "title": "Notion account",
            "type": "string",
            "description": "Connect Notion to get a dated summary page each run with score trends, per-engine breakdowns, and competitor teardowns. Leave unconnected and results are saved to the dataset only."
          },
          "notionParentPage": {
            "title": "Notion page for the dated reports (link or ID)",
            "type": "string",
            "description": "The Notion page where dated run-summary pages are created inside. Paste the full page link or just its 32-character ID. Only used when a Notion connector is set."
          },
          "notionResultsPage": {
            "title": "Notion results table (link or ID, optional)",
            "type": "string",
            "description": "A Notion page or database that accumulates one row per question × engine × country on every run. Paste a blank page and the table is built on first run; paste an existing database to append directly. Leave empty to skip the growing table."
          },
          "watchCompetitors": {
            "title": "Competitor deep-dive — read the page that beat you",
            "type": "boolean",
            "description": "Enables the competitor deep-dive: one competitor per run is crawled, analysed, and turned into copy-paste fixes for your losing questions. Rotates competitors so the same one isn't re-analysed within 7 days. Off by default; adds a small extra cost.",
            "default": false
          },
          "deepDivePrompt": {
            "title": "Custom write-up prompt (optional)",
            "type": "string",
            "description": "Extra instructions added on top of the built-in AEO analyst prompt for the competitor write-up (they extend the built-in rubric, they don't replace it). Leave blank to use just the built-in prompt. Only used when the deep-dive is on."
          },
          "deepDiveModel": {
            "title": "Write-up model",
            "enum": [
              "haiku",
              "sonnet"
            ],
            "type": "string",
            "description": "Which Claude model writes the deep-dive analysis. Haiku is fast and cheap (default); Sonnet is more thorough but costs more. Only used when the deep-dive is on.",
            "default": "haiku"
          },
          "anthropicApiKey": {
            "title": "Your Anthropic API key (optional)",
            "type": "string",
            "description": "Your Anthropic API key (sk-ant-…). With it, the AI write-up charges go to your Anthropic account and the actor doesn't bill the AI step. Leave blank to use the built-in AI for a small flat charge. Only used when the deep-dive is on."
          },
          "apifyMcpConnector": {
            "title": "Run the scrapers on a specific Apify account (MCP connector)",
            "type": "string",
            "description": "An Apify MCP connector for a different Apify account, so the scraper and crawler runs bill to that account instead of the one running this actor. Leave unconnected to use the current account automatically. Server URL: https://mcp.apify.com/?tools=actors."
          },
          "apifyToken": {
            "title": "…or paste an Apify API token",
            "type": "string",
            "description": "An API token from a different Apify account — same purpose as the connector above, without the OAuth flow. Leave blank to use the account running this actor."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}