AI Visibility / GEO Monitor
Pricing
from $0.01 / 1,000 dataset items
Go to Apify Store
AI Visibility / GEO Monitor
Measure whether Claude mentions your brand in a live web-search-grounded answer, with sentiment and cited sources.
AI Visibility / GEO Monitor
Pricing
from $0.01 / 1,000 dataset items
Measure whether Claude mentions your brand in a live web-search-grounded answer, with sentiment and cited sources.
You can access the AI Visibility / GEO Monitor programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in Integrations settings in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.1", "x-build-id": "ueQNCL18fvbIwpyD1" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/westerly_breaker~ai-visibility-geo-monitor/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-westerly_breaker-ai-visibility-geo-monitor", "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/westerly_breaker~ai-visibility-geo-monitor/runs": { "post": { "operationId": "runs-sync-westerly_breaker-ai-visibility-geo-monitor", "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/westerly_breaker~ai-visibility-geo-monitor/run-sync": { "post": { "operationId": "run-sync-westerly_breaker-ai-visibility-geo-monitor", "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": [ "brands", "queries" ], "properties": { "brands": { "title": "Brands to check", "type": "array", "description": "Brand names to look for in each generated answer, e.g. [\"Acme\", \"Globex\"]. Required, non-empty, max 20. Every brand is checked against the SAME generated answer for a given query/run (cheap: one classification call per brand), so adding brands does not multiply the expensive web-search+generation cost.", "items": { "type": "string" } }, "queries": { "title": "Queries to ask", "type": "array", "description": "Search-style questions to ask the AI model, e.g. \"best project management software for small teams\". Required, non-empty, max 20. Each query costs one live web-search-grounded generation call, shared across every brand in 'brands'.", "items": { "type": "string" } }, "engines": { "title": "Engines", "type": "array", "description": "Which AI engine(s) to query. LAUNCH SUPPORTS ONLY \"anthropic\" (one Claude model with web search) -- this does NOT query ChatGPT, Gemini, or Perplexity, despite accepting a list for forward-compatibility with future engines. Any other value fails the run with a clear error.", "items": { "type": "string", "enum": [ "anthropic" ], "enumTitles": [ "Anthropic (Claude)" ] }, "default": [ "anthropic" ] }, "model": { "title": "Claude model", "enum": [ "claude-sonnet-5", "claude-opus-4-8", "claude-haiku-4-5" ], "type": "string", "description": "Which Claude model generates the answer. \"claude-sonnet-5\" (default) is the cost/quality balance this actor is priced around. \"claude-opus-4-8\" is higher quality and more expensive. \"claude-haiku-4-5\" is cheapest but does NOT support the dynamic-filtering web search tool this actor uses -- only usable with 'search': false (no live grounding).", "default": "claude-sonnet-5" }, "runs_per_query": { "title": "Runs per query", "minimum": 1, "maximum": 5, "type": "integer", "description": "How many times to independently re-ask each query (for variance measurement -- AI answers vary run to run, especially with live web search). Each run bills one shared 'answer-generation' event plus one 'brand-check' row event per brand. Must be between 1 and 5.", "default": 1 }, "search": { "title": "Enable live web search", "type": "boolean", "description": "Whether the model may search the web for its answer (recommended: true -- this is the whole point of a GEO/AI-visibility check, since it measures what the model says RIGHT NOW, not just from its training data). Set false only to test cheaper/ungrounded answers or when using 'claude-haiku-4-5' (which doesn't support this actor's web search tool version).", "default": true } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for AI Visibility / GEO Monitor from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: