Status Back

MCP Server

Connect AI agents (Claude, Cursor, and any MCP-compatible client) directly to your Ceyo GEO data. The Ceyo MCP server exposes tools covering your full project state: visibility metrics, prompt tracking, LLM response intelligence, competitor rankings, and optimization actions.

Give these docs to your AI agent

Copy or download a clean markdown version of the MCP docs so your agent can understand the available tools.

Same API key. The MCP server uses the same credentials as the Ceyo REST API. No separate setup needed.

The server implements Model Context Protocol (protocol version 2024-11-05) over a single HTTP endpoint using JSON-RPC 2.0. One endpoint covers your entire workspace — authenticate once with your API key and pass a project_id argument in each tool call to scope the operation.


Quick start

There is a single MCP endpoint for your entire workspace:

POST https://api.ceyo.ai/api/public/v1/mcp

The endpoint is workspace-scoped (via your API key). Each tool that operates on a project accepts a project_id argument, so a single MCP connection can work across all your projects.

Your API key is never pre-filled. Always replace your_api_key_here with your real Ceyo API key before connecting.
Connect Ceyo to Claude
Choose where you want to use Claude. You will need a Ceyo workspace API key.
Claude.ai
Coming soon
Remote Claude.ai setup requires OAuth support. Coming soon.
Claude Desktop
Live
Manual local config for users who want to connect Claude Desktop today.
  1. Create or reuse a workspace API key from Workspace settings → API keys.
  2. Open the Claude Desktop MCP config file:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  3. Paste this config, replace your_api_key_here, save, then fully quit and reopen Claude Desktop.
{
  "mcpServers": {
    "ceyo": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://api.ceyo.ai/api/public/v1/mcp",
        "--header",
        "X-Api-Key: your_api_key_here"
      ]
    }
  }
}
ChatGPT
ChatGPT setup requires OAuth support. Coming soon.
n8n
Add Ceyo through an MCP Client node.
n8n docs
Node
MCP Client or MCP Client Tool
Authentication
Header Auth / Multiple Headers Auth
Header name
X-Api-Key
MCP URL
https://api.ceyo.ai/api/public/v1/mcp
Paste a workspace API key as the X-Api-Key header value.
Cursor
Install the Ceyo MCP server entry in Cursor.
Add to Cursor
After install, replace the API key placeholder with a workspace API key.
Other MCP client
Copy the values your client asks for.
MCP Endpoint
https://api.ceyo.ai/api/public/v1/mcp
Auth Header
X-Api-Key
Ask your MCP client to list projects to verify the connection.
  1. Get your API key — go to Workspace → Settings → API Keys and create or copy an existing key.

  2. Add to your MCP client — use the config for your client above, replacing your_api_key_here with your key.

  3. Test the connection — ask your agent to list your projects. It should return the Ceyo projects available to your workspace.


Authentication

Every request must include a Ceyo API key. Two header formats are accepted:

HeaderFormatExample
X-Api-Key Raw key value X-Api-Key: ceyo_live_abc…
Authorization Bearer token Authorization: Bearer ceyo_live_abc…
Billing gate: if your workspace billing is inactive or your plan does not include public API access, requests fail with HTTP 402 or 403 before the JSON-RPC layer is reached.

Protocol

The server speaks JSON-RPC 2.0 over HTTP POST. All responses return HTTP 200, even for JSON-RPC-level errors.

Supported methods

MethodDescription
initializeHandshake — returns server name, version, and capabilities.
tools/listReturns all available tools with their input schemas.
tools/callInvokes a tool by name with the given arguments.
pingLiveness check — returns an empty result object.
notifications/*Notification messages (no id) are silently acknowledged with HTTP 200 and no body.

Initialize handshake

Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": { "protocolVersion": "2024-11-05" }
}
Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2024-11-05",
    "serverInfo": { "name": "ceyo", "version": "1.0.0" },
    "capabilities": { "tools": { "listChanged": false } }
  }
}

Calling a tool

Request
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_project",
    "arguments": { "project_id": 123 }
  }
}
Response
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"id\": 123, \"name\": \"Acme Corp\", ...}"
      }
    ]
  }
}

The text field contains a JSON-encoded string with the tool's payload. MCP clients automatically present this to the agent.


Error handling

Three error layers, each with a distinct shape:

LayerShapeWhen
HTTP errors {"error":"…","error_code":"…"} + non-200 status Invalid API key, billing inactive, project not found, malformed body
JSON-RPC errors {"error":{"code":…,"message":"…"}} + HTTP 200 Unknown method, parse error, internal server error
Tool errors {"content":[…],"isError":true} + HTTP 200 Bad arguments, record not found, quota exceeded

Tool errors use isError: true inside the standard MCP content envelope. The text field contains a human-readable message the agent can relay to the user.


Workspace tools

list_projects
read

List all projects in the authenticated workspace. Use this as a first step to discover project IDs — every other tool requires a project_id. Returns each project's ID, name, and website, with optional search and pagination.

Parameters

NameTypeDescription
qstringFilter projects by name or website.
pageintegerPage number (1-based). Defaults to 1.
per_pageintegerResults per page. Max 50. Defaults to 50.

Example response

{
  "projects": [
    { "id": 123, "name": "Acme Corp", "website": "https://acme.com" },
    { "id": 124, "name": "Acme EU", "website": "https://acme.eu" }
  ],
  "pagination": { "page": 1, "per_page": 50, "total": 2, "total_pages": 1 }
}

Project tools

get_project
read

Get details about a project: name, website, description, location, project language, action language, and focus area. Call this first to understand what brand or entity you are working on.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.

Example response

{
  "id": 123,
  "name": "Acme Corp",
  "website": "https://acme.com",
  "description": "B2B SaaS platform for...",
  "country": "United States",
  "language": "en",
  "action_language": null,
  "focus": "product"
}
get_project_metrics
read

Get a project's GEO visibility metrics over the last 3 months. Returns a time-series of visibility score (0–100), average AI ranking position, mention count, and coverage percentage, plus a per-brand competitor ranking breakdown for each data point.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.

Example response

{
  "project_name": "Acme Corp",
  "rows": [
    {
      "date": "2026-04-07",
      "visibility_score": 42.5,
      "avg_position": 2.1,
      "mentions": 38,
      "coverage_pct": 61.3,
      "ranking": [
        { "name": "Acme Corp", "is_main_brand": true, "mentions": 38, "visibility_score": 42.5 },
        { "name": "Competitor X", "is_main_brand": false, "mentions": 55, "visibility_score": 58.2 }
      ]
    }
  ]
}
get_visibility_timeseries
read

Get the visibility score trend broken down per AI model over a date range. Each data point shows the overall score plus individual scores for ChatGPT, Gemini, Perplexity, and other enabled models. Use this to diagnose which AI providers are driving visibility changes.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
startstringStart date (ISO 8601). Defaults to 7 days before end. Max 3 months.
endstringEnd date (ISO 8601). Defaults to today.
modelsstringComma-separated model keys to include (e.g. chatgpt,gemini). Defaults to all enabled models.

Example response

{
  "project_id": 123,
  "start": "2026-04-01", "end": "2026-04-07",
  "models": ["chatgpt", "gemini", "perplexity"],
  "points": [
    {
      "date": "2026-04-01",
      "total": 48.5,
      "totals": { "chatgpt": 55.2, "gemini": 41.0, "perplexity": 49.3 }
    }
  ]
}
get_project_citations
read

Get a ranked list of all domains and URLs cited by AI models across all prompts in a project — a project-wide citation audit. Supports grouping by individual page (default) or by domain with pages nested inside. Use this to understand which external sources AI models trust most when discussing topics relevant to your brand.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
startstringStart date (ISO 8601). Defaults to 7 days before end. Max 3 months.
endstringEnd date (ISO 8601). Defaults to today.
groupstringpage (default) — individual URLs ranked by frequency. domain — domains ranked by total citations, with pages nested.
pageintegerPage number. Defaults to 1.
per_pageintegerResults per page. Max 50. Defaults to 50.

Example response (group: page)

{
  "project_id": 123,
  "rows": [
    {
      "domain": "techcrunch.com",
      "page": "/2026/04/10/best-ai-tools",
      "url": "https://techcrunch.com/2026/04/10/best-ai-tools",
      "frequency": 14,
      "model_keys": ["chatgpt", "perplexity"],
      "model_frequencies": { "chatgpt": 9, "perplexity": 5 }
    }
  ],
  "groups": [],
  "pagination": { "page": 1, "per_page": 50, "total": 84, "total_pages": 2 }
}

Prompt tools

list_prompts
read

List active prompts tracked by a project, with per-prompt visibility score, average AI position, sentiment, and competitor mention counts.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
pageintegerPage number (1-based). Defaults to 1.
per_pageintegerResults per page. Max 50. Defaults to 50.
startstringStart date for metrics (ISO 8601, e.g. 2026-04-01). Defaults to 7 days before end.
endstringEnd date for metrics (ISO 8601). Defaults to today.
get_prompt
read

Get full details and performance metrics for a single prompt by ID. Returns visibility score, average AI position, sentiment, and competitor mention breakdown. Use list_prompts to discover IDs.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
prompt_id requiredintegerID of the prompt.
startstringStart date (ISO 8601). Defaults to 7 days before end.
endstringEnd date (ISO 8601). Defaults to today.
get_prompt_responses
read

Get the actual text responses from ChatGPT, Gemini, Perplexity, and other AI models for a specific prompt. Each row includes the model key, the full response text, whether the brand was mentioned, the brand's ranking position, and a citations preview. This is the core intelligence tool for understanding how AI models talk about a brand.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
prompt_id requiredintegerID of the prompt.
startstringStart date (ISO 8601). Defaults to 7 days before end.
endstringEnd date (ISO 8601). Defaults to today.
pageintegerPage number. Defaults to 1.
per_pageintegerResults per page. Max 50. Defaults to 15.

Example response row

{
  "model_key": "chatgpt",
  "position": 2,
  "brand_present": true,
  "response_text": "Acme Corp is a leading provider of...",
  "citations_count": 4,
  "citations": [ { "domain": "acme.com", "url": "https://acme.com/product" } ]
}
get_prompt_citations
read

Get the domains and URLs that AI models cite when responding to a prompt, ranked by frequency. Each row includes the domain, page path, total citation count, and a per-model frequency breakdown. Use this to understand which sources AI models trust — and whether the brand's own site is being cited.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
prompt_id requiredintegerID of the prompt.
startstringStart date (ISO 8601). Defaults to 7 days before end.
endstringEnd date (ISO 8601). Defaults to today.
pageintegerPage number. Defaults to 1.
per_pageintegerResults per page. Max 50. Defaults to 15.

Example response

{
  "rows": [
    {
      "domain": "acme.com",
      "page": "/blog/overview",
      "url": "https://acme.com/blog/overview",
      "frequency": 7,
      "model_keys": ["chatgpt", "gemini"],
      "model_frequencies": { "chatgpt": 5, "gemini": 2 }
    }
  ],
  "pagination": { "page": 1, "per_page": 15, "total": 23, "total_pages": 2 }
}
get_prompt_competitors
read

Get the competitor ranking table for a specific prompt — how often each brand and direct competitor is mentioned in AI responses to that question, with visibility score and average AI position. Use this for a deep-dive into competitive dynamics for a single query (vs get_competitor_rankings which aggregates across all prompts).

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
prompt_id requiredintegerID of the prompt.
startstringStart date (ISO 8601). Defaults to 7 days before end. Max 3 months.
endstringEnd date (ISO 8601). Defaults to today.
modelsstringComma-separated model keys to filter (e.g. chatgpt,perplexity). Defaults to all.

Example response

{
  "project_id": 123,
  "prompt_id": 456,
  "start": "2026-04-01", "end": "2026-04-07",
  "models": ["chatgpt", "gemini", "perplexity"],
  "denominator": 42,
  "rows": [
    {
      "rank": 1, "name": "Acme Corp", "website": "acme.com",
      "is_main_brand": true, "brand_present": true,
      "visibility": 71.43, "position": 1.8, "mentions": 30
    },
    {
      "rank": 2, "name": "Rival Inc", "website": "rival.com",
      "is_main_brand": false, "brand_present": true,
      "visibility": 52.38, "position": 2.4, "mentions": 22
    }
  ]
}
create_prompt
write

Add a new prompt to be tracked by a project. The prompt is queued for the next scheduled scan across all enabled AI models. Requires a topic_id — use list_topics to find available topics, or create_topic to create a new one.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
topic_id requiredintegerID of the topic this prompt belongs to.
content requiredstringThe prompt text — the question or query to track.
category required string One of: organic_search, brand_sentiment, competitor_comparison.
organic_search: SEO-style discovery queries.
brand_sentiment: brand reputation questions.
competitor_comparison: questions comparing brands.
archive_prompt
write

Stop tracking a prompt. Archived prompts are excluded from future scans and hidden from the active list. This is a soft-delete — historical data is fully preserved and the prompt can be found in the archived list via the REST API.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
prompt_id requiredintegerID of the prompt to archive.
generate_actions
writecosts credits

Enqueue AI-powered optimization action generation for one or more prompts. Actions are created asynchronously and appear in list_actions once ready.

This tool costs credits. The response includes total_credit_cost — check this value before proceeding. If the workspace has insufficient credits, the call fails before any credits are consumed.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
prompt_ids requiredinteger[]Array of prompt IDs to generate actions for. Maximum 50 per call.

Example response

{
  "enqueued_prompts_count": 3,
  "credit_cost_per_prompt": 5,
  "total_credit_cost": 15,
  "request_id": "a1b2c3d4-...",
  "message": "Enqueued action generation. Actions will be created asynchronously."
}

Topic tools

Topics are groupings that organise prompts (e.g. "Product Features", "Brand Awareness"). Every prompt belongs to exactly one topic.

list_topics
read

List topics for a project. Returns each topic's ID and name. Use the returned IDs when calling create_prompt.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
pageintegerPage number. Defaults to 1.
per_pageintegerResults per page. Max 150. Defaults to 50.
create_topic
write

Create a new topic. Topic names must be unique within the project. Returns the new topic ID — use it immediately in create_prompt.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
name requiredstringTopic name (e.g. AI capabilities, Customer support). Must be unique within the project.

Action tools

Actions are AI-generated optimization recommendations — specific changes to content, positioning, or strategy to improve GEO visibility.

list_actions
read

List active (todo or in_progress) AI-generated optimization actions for a project, sorted high → medium → low priority. Each action includes a title, implementation detail, priority, effort level, estimated impact score, and an optional Markdown implementation guide.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.

Action fields

FieldTypeDescription
idintegerAction ID — use in update_action_status.
titlestringShort action title.
detailstringFull description of what to do and why.
prioritystringhigh, medium, or low.
effort_levelstringEstimated implementation effort.
estimated_impactnumberPredicted visibility impact (0–1 scale).
md_implementation_guidestring | nullStep-by-step guide in Markdown, if available.
update_action_status
write

Update the status of an optimization action to track progress as work is completed.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
action_id requiredintegerID of the action to update.
status required string One of: todo, in_progress, completed, dismissed.

Competitor tools

get_competitor_rankings
read

Get the visibility ranking table for all tracked brands and competitors. Returns mention count, average AI position, and visibility score (% of prompts where each brand appears) from the most recent scan data.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
startstringStart of date window (ISO 8601). Defaults to 7 days ago. Maximum window is 1 month.
endstringEnd of date window (ISO 8601). Defaults to today.
list_direct_competitors
read

List the direct competitors currently configured for a project. Returns each competitor's ID, name, and website. Use the competitor ID when calling remove_direct_competitor.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
add_direct_competitor
write

Add a competitor website to track. The competitor is included in future scans. Display name is derived from the domain automatically if not provided.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
website requiredstringCompetitor website URL (e.g. https://competitor.com).
namestringDisplay name. Auto-derived from the domain if omitted.
remove_direct_competitor
write

Remove a competitor from tracking. Future scans will no longer include this competitor. Historical data is preserved. Use list_direct_competitors to find competitor IDs.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
competitor_id requiredintegerID of the competitor to remove.

Fan-out query tools

Fan-out queries are semantically related query variants returned directly by LLM models (ChatGPT, Gemini, Perplexity, etc.) for each tracked prompt — the adjacent questions users are actually asking about the same topic. They expand your GEO coverage by tracking how models respond to queries around the same theme.

list_fanout_queries
read

List fan-out queries for a project. Results are grouped by topic → prompt → query list. Each query includes which LLM model returned it and a timestamp. Supports filtering by topic IDs, model, and full-text search.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
topic_idsstringComma-separated topic IDs to filter by (optional).
modelsstringComma-separated model keys to filter by (optional). Defaults to all enabled models.
qstringText search across topic names, prompt content, and fan-out query text (optional).
pageintegerPage number (1-based). Defaults to 1.
per_pageintegerPrompts per page. Max 200. Defaults to 50.

Example response

{
  "project_id": 1,
  "models": ["chatgpt", "gemini"],
  "pagination": { "page": 1, "per_page": 50, "total": 14, "total_pages": 1 },
  "topics": [
    {
      "id": 1,
      "name": "AI brand monitoring",
      "prompts": [
        {
          "id": 13,
          "content": "which platforms provide ai brand monitoring?",
          "fanout_updated_at": "2026-05-01T10:00:00Z",
          "fanout_queries": [
            { "query": "best ai brand monitoring tools 2026", "model_key": "chatgpt", "fetched_at": "2026-05-01T10:00:00Z" },
            { "query": "ai-powered brand tracking software", "model_key": "gemini", "fetched_at": "2026-05-01T10:00:00Z" }
          ]
        }
      ]
    }
  ]
}
generate_fanout
credits

Fetch fan-out queries from LLM models for a single prompt. Each enabled model returns the semantically related query variants it associates with the prompt. Runs asynchronously — results appear in list_fanout_queries once ready.

This tool costs credits. Each call costs 3 credits. A cooldown applies: 7 days if the prompt already has fan-out results, 24 hours otherwise.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
prompt_id requiredintegerID of the prompt to generate fan-out queries for.
generate_fanout_bulk
credits

Fetch fan-out queries from LLM models for multiple prompts at once. Each enabled model returns the related query variants for each prompt. Prompts on cooldown are automatically skipped and reported in the response. Results appear in list_fanout_queries once ready.

This tool costs credits. 3 credits per eligible prompt. Maximum 50 prompts per call. Prompts on cooldown are skipped at no cost.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
prompt_ids requiredinteger[]Array of prompt IDs to generate fan-out queries for. Maximum 50 per call.

Example response

{
  "project_id": 1,
  "queued_count": 3,
  "skipped_count": 1,
  "skipped_prompt_ids": [17],
  "credits_charged": 9,
  "message": "Fan-out query generation queued for 3 prompt(s). Results will appear in list_fanout_queries once ready."
}

Workspace tools

Workspace-level tools for reading account info, creating projects, and tracking onboarding progress.

get_workspace
read

Get information about the authenticated workspace: name, description, enabled LLM models, and a credits summary. Use this to check available credits before calling credit-consuming tools.

Parameters

No parameters required.

Example response

{
  "id": 1,
  "name": "Acme Corp",
  "workspace_type": "standard",
  "llm_models": ["chatgpt", "gemini", "perplexity"],
  "credits": {
    "balance": 850,
    "used_this_period": 150,
    "monthly_allowance": 1000
  }
}
create_project
write

Create a fully provisioned Ceyo project in one call. The project is created immediately and an async onboarding job populates topics, prompts, and initial scan data. Poll get_onboard_status to track completion.

Parameters

NameTypeDescription
name requiredstringProject/brand name.
website requiredstringBrand website URL (e.g. https://example.com).
descriptionstringShort brand description. Improves auto-fill quality.
languagestring2-letter ISO 639-1 code (e.g. en, fr). Defaults to en.
auto_fillbooleanIf true (default), Ceyo auto-generates topics and prompts from the website.
local_modebooleanSet to true for geo-targeted businesses. Requires city.
citystringCity name. Required when local_mode is true.
country_codestringISO 3166-1 alpha-2 country code (e.g. US).
topicsstring[]Topic names to track. Used when auto_fill is false.
promptsobject[]Specific prompts to track. Each requires text (the question) and topic (topic name). Optional category: organic_search (default), brand_sentiment, or competitor_comparison. Used when auto_fill is false.
competitorsobject[]Competitors to track. Each must have name and website.

Example response

{
  "onboard_id": "ob_a1b2c3d4-...",
  "project_id": 42,
  "status": "running",
  "message": "Project created and onboarding started. Poll get_onboard_status with the onboard_id to track progress."
}
get_onboard_status
read

Poll the onboarding status of a project created via create_project. Returns the current status and counts of topics, prompts, and competitors once the project structure is ready.

Parameters

NameTypeDescription
onboard_id requiredstringThe onboard_id returned by create_project (starts with ob_).

Status values

StatusMeaning
runningOnboarding is still in progress.
project_readyTopics, prompts, and competitors are set up. Initial scan not yet complete.
completedFully ready — topics, prompts, competitors, and initial actions are available.
failedOnboarding encountered an error.
get_action
read

Get full details for a single optimization action. Returns the complete payload including the Markdown implementation guide, action type, effort level, estimated impact, feasibility score, target URL/platform, and linked prompts. Use list_actions to discover action IDs.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
action_id requiredintegerID of the action to retrieve.

Additional fields (vs list_actions)

FieldTypeDescription
md_implementation_guidestring | nullFull step-by-step implementation guide in Markdown.
action_typestringTaxonomy type (e.g. content_update, new_page).
target_urlstring | nullThe specific URL this action applies to.
target_platformstring | nullTarget platform (e.g. website, linkedin).
feasibilitynumberImplementation feasibility score (0–1).
impact_timeline_daysinteger | nullEstimated days to see impact.
linked_promptsobject[]Prompts this action was generated from.

Suggestion tools

Ceyo automatically surfaces suggested prompts and competitors based on scan data. These tools let you review and promote them to active tracking without going through the dashboard.

list_suggested_prompts
read

List prompts that Ceyo has suggested for tracking, grouped by topic. Suggested prompts are pending review — they are not yet tracked or included in scans. Use promote_suggested_prompt to add one to active tracking.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
promote_suggested_prompt
write

Promote a suggested prompt to active tracking. The prompt will be included in future scans across all enabled AI models. Use list_suggested_prompts to discover suggested prompt IDs.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
suggested_prompt_id requiredintegerID of the suggested prompt to promote.
list_suggested_competitors
read

List competitors that Ceyo has identified as relevant based on scan data, but have not yet been added to direct tracking. Each entry includes visibility score and mention count. Use promote_suggested_competitor to add one to direct tracking.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
pageintegerPage number. Defaults to 1.
per_pageintegerResults per page. Max 50. Defaults to 20.
sortstringvisibility (default) or name.
promote_suggested_competitor
write

Promote a suggested competitor to direct competitor tracking. Once promoted, they will appear in future scans and all ranking data. Use list_suggested_competitors to discover competitor IDs.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
competitor_id requiredintegerID of the competitor to promote.

Analytics tools

Google Analytics 4 data surfaced through Ceyo. All analytics tools require GA4 to be connected to the project. Use get_analytics_overview first — it includes the connection status.

get_analytics_overview
read

Get the GA4 overview for a project: total and AI-sourced sessions, AI share of traffic, conversion summary, daily time series, and a per-AI-platform breakdown (ChatGPT, Gemini, Perplexity, etc.). Also includes completed action markers to correlate GEO actions with traffic changes.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
daysintegerLookback window in days (7–90). Defaults to 30.
get_analytics_conversions
read

Get the GA4 conversion breakdown. Returns conversion rates and counts split by AI referrals, organic, and direct traffic — plus per-AI-platform conversion rates. Optionally filter by specific GA4 key event names using get_analytics_conversion_events to discover available events.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
daysintegerLookback window in days (7–90). Defaults to 30.
event_namesstringComma-separated GA4 key event names to filter by (optional). E.g. purchase,sign_up.
get_analytics_landing_pages
read

Get the top landing pages by AI referral traffic. Each page includes AI sessions, total sessions, conversions, trend vs the previous period, and a per-platform breakdown. Also includes a platform matrix showing which AI sources send traffic to each page.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
daysintegerLookback window in days (7–90). Defaults to 30.
pageintegerPage number for the pages list. Defaults to 1.
matrix_pageintegerPage number for the platform matrix. Defaults to 1.
get_analytics_referrals
read

Get earned referral sources — websites driving referral traffic that were targeted by completed optimization actions. Each source shows session counts, earned type (Editorial, UGC, Reference), and a daily trend series. Use this to measure the real-world traffic impact of completed actions.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
daysintegerLookback window in days (7–90). Defaults to 30.
pageintegerPage number for the sources list. Defaults to 1.
get_analytics_conversion_events
read

List GA4 key events (conversion events) recorded for a project, with total counts. Use the returned event names as input to the event_names filter in get_analytics_conversions.

Parameters

NameTypeDescription
project_id requiredintegerID of the project.
daysintegerLookback window in days (7–180). Defaults to 90.