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.
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_here with your real Ceyo API key before connecting.
- Create or reuse a workspace API key from Workspace settings → API keys.
- Open the Claude Desktop MCP config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
- 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"
]
}
}
} X-Api-Key header value.Get your API key — go to Workspace → Settings → API Keys and create or copy an existing key.
Add to your MCP client — use the config for your client above, replacing
your_api_key_herewith your key.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:
| Header | Format | Example |
|---|---|---|
X-Api-Key | Raw key value | X-Api-Key: ceyo_live_abc… |
Authorization | Bearer token | Authorization: Bearer ceyo_live_abc… |
Protocol
The server speaks JSON-RPC 2.0 over HTTP POST. All responses return HTTP 200, even for JSON-RPC-level errors.
Supported methods
| Method | Description |
|---|---|
initialize | Handshake — returns server name, version, and capabilities. |
tools/list | Returns all available tools with their input schemas. |
tools/call | Invokes a tool by name with the given arguments. |
ping | Liveness 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:
| Layer | Shape | When |
|---|---|---|
| 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 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
| Name | Type | Description |
|---|---|---|
q | string | Filter projects by name or website. |
page | integer | Page number (1-based). Defaults to 1. |
per_page | integer | Results 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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID 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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID 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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
start | string | Start date (ISO 8601). Defaults to 7 days before end. Max 3 months. |
end | string | End date (ISO 8601). Defaults to today. |
models | string | Comma-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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
start | string | Start date (ISO 8601). Defaults to 7 days before end. Max 3 months. |
end | string | End date (ISO 8601). Defaults to today. |
group | string | page (default) — individual URLs ranked by frequency. domain — domains ranked by total citations, with pages nested. |
page | integer | Page number. Defaults to 1. |
per_page | integer | Results 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 active prompts tracked by a project, with per-prompt visibility score, average AI position, sentiment, and competitor mention counts.
Parameters
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
page | integer | Page number (1-based). Defaults to 1. |
per_page | integer | Results per page. Max 50. Defaults to 50. |
start | string | Start date for metrics (ISO 8601, e.g. 2026-04-01). Defaults to 7 days before end. |
end | string | End date for metrics (ISO 8601). Defaults to today. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
prompt_id required | integer | ID of the prompt. |
start | string | Start date (ISO 8601). Defaults to 7 days before end. |
end | string | End date (ISO 8601). Defaults to today. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
prompt_id required | integer | ID of the prompt. |
start | string | Start date (ISO 8601). Defaults to 7 days before end. |
end | string | End date (ISO 8601). Defaults to today. |
page | integer | Page number. Defaults to 1. |
per_page | integer | Results 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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
prompt_id required | integer | ID of the prompt. |
start | string | Start date (ISO 8601). Defaults to 7 days before end. |
end | string | End date (ISO 8601). Defaults to today. |
page | integer | Page number. Defaults to 1. |
per_page | integer | Results 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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
prompt_id required | integer | ID of the prompt. |
start | string | Start date (ISO 8601). Defaults to 7 days before end. Max 3 months. |
end | string | End date (ISO 8601). Defaults to today. |
models | string | Comma-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
}
]
} 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
topic_id required | integer | ID of the topic this prompt belongs to. |
content required | string | The 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.
|
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
prompt_id required | integer | ID of the prompt to archive. |
Enqueue AI-powered optimization action generation for one or more prompts. Actions are created asynchronously and appear in list_actions once ready.
total_credit_cost — check this value before proceeding. If the workspace has insufficient credits, the call fails before any credits are consumed.
Parameters
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
prompt_ids required | integer[] | 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 for a project. Returns each topic's ID and name. Use the returned IDs when calling create_prompt.
Parameters
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
page | integer | Page number. Defaults to 1. |
per_page | integer | Results per page. Max 150. Defaults to 50. |
Create a new topic. Topic names must be unique within the project. Returns the new topic ID — use it immediately in create_prompt.
Parameters
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
name required | string | Topic 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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
Action fields
| Field | Type | Description |
|---|---|---|
id | integer | Action ID — use in update_action_status. |
title | string | Short action title. |
detail | string | Full description of what to do and why. |
priority | string | high, medium, or low. |
effort_level | string | Estimated implementation effort. |
estimated_impact | number | Predicted visibility impact (0–1 scale). |
md_implementation_guide | string | null | Step-by-step guide in Markdown, if available. |
Update the status of an optimization action to track progress as work is completed.
Parameters
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
action_id required | integer | ID of the action to update. |
status required | string |
One of: todo, in_progress, completed, dismissed.
|
Competitor tools
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
start | string | Start of date window (ISO 8601). Defaults to 7 days ago. Maximum window is 1 month. |
end | string | End of date window (ISO 8601). Defaults to today. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
website required | string | Competitor website URL (e.g. https://competitor.com). |
name | string | Display name. Auto-derived from the domain if omitted. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
competitor_id required | integer | ID 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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
topic_ids | string | Comma-separated topic IDs to filter by (optional). |
models | string | Comma-separated model keys to filter by (optional). Defaults to all enabled models. |
q | string | Text search across topic names, prompt content, and fan-out query text (optional). |
page | integer | Page number (1-based). Defaults to 1. |
per_page | integer | Prompts 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" }
]
}
]
}
]
} 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.
Parameters
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
prompt_id required | integer | ID of the prompt to generate fan-out queries for. |
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.
Parameters
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
prompt_ids required | integer[] | 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 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 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
| Name | Type | Description |
|---|---|---|
name required | string | Project/brand name. |
website required | string | Brand website URL (e.g. https://example.com). |
description | string | Short brand description. Improves auto-fill quality. |
language | string | 2-letter ISO 639-1 code (e.g. en, fr). Defaults to en. |
auto_fill | boolean | If true (default), Ceyo auto-generates topics and prompts from the website. |
local_mode | boolean | Set to true for geo-targeted businesses. Requires city. |
city | string | City name. Required when local_mode is true. |
country_code | string | ISO 3166-1 alpha-2 country code (e.g. US). |
topics | string[] | Topic names to track. Used when auto_fill is false. |
prompts | object[] | 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. |
competitors | object[] | 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."
} 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
| Name | Type | Description |
|---|---|---|
onboard_id required | string | The onboard_id returned by create_project (starts with ob_). |
Status values
| Status | Meaning |
|---|---|
running | Onboarding is still in progress. |
project_ready | Topics, prompts, and competitors are set up. Initial scan not yet complete. |
completed | Fully ready — topics, prompts, competitors, and initial actions are available. |
failed | Onboarding encountered an error. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
action_id required | integer | ID of the action to retrieve. |
Additional fields (vs list_actions)
| Field | Type | Description |
|---|---|---|
md_implementation_guide | string | null | Full step-by-step implementation guide in Markdown. |
action_type | string | Taxonomy type (e.g. content_update, new_page). |
target_url | string | null | The specific URL this action applies to. |
target_platform | string | null | Target platform (e.g. website, linkedin). |
feasibility | number | Implementation feasibility score (0–1). |
impact_timeline_days | integer | null | Estimated days to see impact. |
linked_prompts | object[] | 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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
suggested_prompt_id required | integer | ID of the suggested prompt to promote. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
page | integer | Page number. Defaults to 1. |
per_page | integer | Results per page. Max 50. Defaults to 20. |
sort | string | visibility (default) or name. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
competitor_id required | integer | ID 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 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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
days | integer | Lookback window in days (7–90). Defaults to 30. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
days | integer | Lookback window in days (7–90). Defaults to 30. |
event_names | string | Comma-separated GA4 key event names to filter by (optional). E.g. purchase,sign_up. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
days | integer | Lookback window in days (7–90). Defaults to 30. |
page | integer | Page number for the pages list. Defaults to 1. |
matrix_page | integer | Page number for the platform matrix. Defaults to 1. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
days | integer | Lookback window in days (7–90). Defaults to 30. |
page | integer | Page number for the sources list. Defaults to 1. |
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
| Name | Type | Description |
|---|---|---|
project_id required | integer | ID of the project. |
days | integer | Lookback window in days (7–180). Defaults to 90. |