Integrations

Ready-made ways to call the API: code snippets in seven languages, the Postman collection, and the MCP server for AI clients.

Client snippets

Examples in multiple languages are shown in the code panel on the right.

Postman: Download & Environment

Use this curated Postman collection to explore the API quickly and securely. It mirrors the examples and metric semantics described above (period totals with sticky carry, ratio-of-period-sums for visibility, and propagation for avg_position), so you can validate responses and prototype integrations in minutes.

Download the collection

Download LLMPulse API v1 Postman Collection

Import the file in Postman (File → Import), then select or create the environment shown below. The collection uses variables, so you won’t need to edit each request manually.

Environment (placeholders, keep your IDs private)

Create a new Environment in Postman with the following variables. Use placeholders instead of real IDs or keys in any public context (docs, screenshots, etc.):

How it’s used:

  • The collection reads {{base_url}} and injects Authorization: Bearer {{api_key}} automatically.
  • Set {{project_id}} to a project you own; {{competitors}} is CSV (e.g. 1,2,3).
  • You can override per request (e.g. send from/to instead of range) and add filters like model, collection_id, country_code, language_code.
  • Keep your API key in your private environment only; do not paste it into shared documents.

MCP (AI Integration)

MCP (Model Context Protocol) allows AI assistants like ChatGPT, Claude and Gemini to access your LLM Pulse data directly. Available on every plan via OAuth, no API key required. Ask questions in natural language and let the AI fetch and analyze your visibility data.

What is MCP?

MCP is an open protocol that lets AI assistants connect to external data sources. Instead of copying data or making API calls manually, you can simply ask your AI assistant questions like "What's my visibility trend this month?" and it will fetch the data automatically.

Endpoint

Server card

A public server card describes this MCP server to clients before they hold any credential: the endpoint, its Streamable HTTP transport, the protocol versions it accepts and the Authorization header to send. Fetch it with GET /api/v1/mcp/server-card (no authentication required, and it contains no credential). It is also advertised in the discovery catalog at /.well-known/ai-catalog.json.

Configuration

Recommended for every plan: paste the MCP URL into your AI client. The client handles OAuth automatically, no token to copy. API-key auth (Bearer header) is available on the Scale plan and above for headless integrations.

Struggling to connect?

MCP and OAuth support is still uneven across AI clients, so connections sometimes fail to establish. On the Scale plan and above, the easiest fallback is to give your AI assistant a Bearer API key plus a link to these API docs. It can then query every endpoint directly over plain HTTP, with no MCP client setup at all.

Available Tools

These tools are available to your AI assistant.

This table lists every tool the server registers. Each connection only sees the tools its plan includes.

Tool Description Plan
list_projects List all projects accessible to the authenticated user. Returns project id and name. All plans
list_competitors List all competitors for a specific project. Returns competitor id, name, website domain or host, citation matching rule, and matching_names (the aliases used for mention matching). With include_project_brand=true, a synthetic first row represents the tracked brand. That row uses the project id rather than a competitor id and carries actor_type=project / is_own=true. All plans
list_collections List all collections (tags) for a specific project. Returns collection id and name. Collections and tags are two names for the same underlying object and share identical data. All plans
list_tags List all tags for a specific project. Tags and collections are two names for the same underlying object here. Tag creation and prompt assignment update this shared set. All plans
list_models List all AI models that have data for a specific project. Returns model identifiers such as chatgpt, perplexity, gemini, ai_mode, and ai_overview. All plans
list_locales List locales: the countries and languages that have data for a specific project. Returns lists of country codes (e.g., US, ES) and language codes (e.g., en, es). All plans
list_sentiments List all sentiment categories with their metric keys, labels, and colors. Used for understanding sentiment data structure. Available on Growth and above plans. Growth
list_prompts List the tracked prompts of a project, with optional filtering by collection, locale, prompt_type, brand_kind, text query, and date range. Returns paginated results with prompt id, prompt_text, authoritative tag/collection memberships as {id, name} pairs, collection_ids, country_code, language_code, prompt_type, brand_kind, and last_executed_at. fields=prompt_text (or any subset) returns only those keys plus id. The legacy collection_id field can be null even when the prompt has tags. All plans
list_prompt_executions List prompt executions with model, success, execution timing, fan-out queries, and mention/citation presence. duration_ms measures internal processing time of the answer pipeline, NOT the AI model latency, and can be near zero. fan_out_queries is only populated for models/providers that expose query fan-out (mainly chatgpt and claude), null elsewhere. All plans
list_query_fan_outs List the query fan-out behind your tracked prompts: the sub-queries a model actually issued when answering. view=query (default) returns one row per distinct sub-query with its occurrence count and share of all occurrences; view=prompt returns one row per prompt with how many distinct sub-queries it produced. The result shows the phrasing models searched for, which often differs from the original prompt. Fan-out is reported mainly by ChatGPT and Claude, so an empty result usually means the models in scope do not expose it rather than that nothing was searched. All plans
list_shopping_products List shopping products: the shopping results (product cards) AI answers returned for your tracked prompts, merged across executions. view=products (default) returns one row per distinct product with its appearance count, price range, rating, whether it is yours, the currency its highest price is in and currency_count (above 1 means the row reports its most expensive listing and min_price may be another currency); view=merchants returns one row per selling merchant with its product count, price range and the currency that range is expressed in (providers price each market in its own money, so a merchant selling in more than one reports the currency most of its prices use). Every response also carries a totals block (products, merchants, average price with the avg_price_currency it is computed inside, average rating, your products) matching the KPI cards in the app. Shopping results are reported by a subset of models, so an empty result usually means the models in scope do not return product cards for these prompts. Available on Scale and above plans. Scale
list_ads List ads: the paid placements AI answers returned for your tracked prompts. view=advertisers (default) returns one row per advertising domain with its placement count, how many prompts it appeared on, and its average and best position; view=ads returns the individual placements with title, snippet, position and the prompt that triggered them. Every response also carries a totals block (placements, advertisers, your placements and share, average position) matching the KPI cards in the app. Position 1 is the best slot, so a LOWER average position is better. Available on Scale and above plans. Scale
list_local_businesses List local businesses: the shops, restaurants and services AI answers listed for your tracked prompts, merged across executions into one row per business (its name at its address, so two locations of a chain are two rows). Each row carries its appearance count, the number of prompts that listed it, its average rating and position in the list, its review count, and whether it is yours or a tracked competitor. Every response also carries a totals block (businesses, your businesses, appearances, average rating, answers with local businesses) matching the KPI cards in the app. Local business lists are reported by a subset of models and only for prompts with local intent, so an empty result usually means the prompts in scope do not ask for places. Available on every plan. All plans
list_reddit_citations List Reddit citations: the Reddit content AI answers cite for your tracked prompts. view=subreddits (default) returns one row per subreddit with its citation count, unique authors and positive/negative sentiment split; view=authors returns one row per Reddit author; view=threads returns the individual cited threads with upvotes, comments, average position and dominant sentiment. Reddit is one of the most cited domains in AI answers, so this is the fastest way to see which communities and conversations shape what models say about a brand. Available on Growth and above plans. Growth
list_owned_media List the owned-media content AI answers cite: YouTube videos and channels, social posts and profiles (Instagram, Facebook, TikTok, LinkedIn), and app-store listings. A provider is required. Each row carries a `yours` flag telling you whether the content belongs to the account own connected profile, so you can compare your presence against everyone else cited on the same platform. view=own_citations returns the raw citations of the connected profile only, and stays empty until a profile is connected. Reddit content is excluded from this result. Available on Growth and above plans. Growth
list_reputation_reports List the reputation reports generated for a project, newest first. Each row carries the report id, its status, and which analyst models produced data for it. Pending and failed reports are included on purpose: whether this month ran at all is often the question being asked. Requires reputation monitoring to be enabled on the account. Reputation Access
get_reputation_report Get the scores of one reputation report as flat rows: one row per (analyst model, brand, dimension, attribute) with its 0-100 score and the reasoning the model gave. The report id comes from the project reputation-report history. Scores remain separate for each analyst model, and the model filter selects a single analyst view. Requires reputation monitoring to be enabled on the account. Reputation Access
list_studies List the custom AI studies defined on the account, newest first. A study is an account-defined analyst report over any set of subjects (brands, sectors, topics) and any set of dimensions. Studies belong to the ACCOUNT, not to a project, so project_id is an optional filter rather than a required argument. Each study id identifies its subjects, dimensions, and report history. Requires reputation monitoring to be enabled on the account. Reputation Access
get_study Get one custom AI study: its brief, the subjects it compares, the dimensions it scores them on, and its report history. The `reports` array contains the ids and status metadata for the study score reports. Requires reputation monitoring to be enabled on the account. Reputation Access
get_study_report Get the scores of one custom-study report as flat rows: one row per (analyst model, subject, dimension, attribute) with its 0-100 score and the reasoning the model gave. The report id belongs to the selected study report history. Scores remain separate for each analyst model. Requires reputation monitoring to be enabled on the account. Reputation Access
list_mentions List mentions of the project brand only, without competitor rows. Returns paginated results with mention id, name, prompt_id, prompt_execution_id, and created_at. All plans
list_citations List URL citations of the project brand only, without competitor rows and effectively one citation per answering response. position 0 means unranked/background; ranked positions are 1-indexed. Returns paginated results with citation id, name, domain, prompt_id, prompt_execution_id, url, position, and created_at. All plans
list_competitor_mentions List competitor mentions for a project with optional competitor and prompt filters. All plans
list_competitor_citations List competitor citations for a project with optional competitor and prompt filters. All plans
list_all_mentions List all mentions (brand + competitor) for a project with actor_type field. Returns paginated results combining project and competitor mentions. The competitors filter narrows which competitor rows are included, but project rows are ALWAYS included. All plans
list_all_citations List all citations (brand + competitor) for a project with actor_type field. Returns paginated results combining project and competitor citations. The competitors filter narrows which competitor rows are included, but project rows are ALWAYS included. position 0 means unranked/background (real positions are 1-indexed). All plans
list_sources List sources (URLs cited by AI models) for a project with optional filtering. Returns paginated results with source id, prompt_execution_id, domain, url, position, source_type (owned, competitor or third_party), and app-store link flags. All plans
list_citation_groups List citation groups: citation intelligence data grouped by URL, domain, or host, including citation rates, model breakdowns, and page-cache awareness. Rows are compact by default; pass include_page_details=true to embed crawled page content details (url view only), and keep per_page moderate when you do. All plans
get_cited_url_details Get cited URL details: URL-level citation intelligence for one cited URL, including page-cache metadata and mention evidence. All plans
list_cited_url_occurrences List cited URL occurrences: every prompt execution where a specific cited URL appeared, with prompt text, answer preview, model, and citation position. All plans
get_cited_url_content Get sanitized cached page content plus page-cache metadata and mention snippets for one cited URL. Text longer than 15,000 characters is truncated (content.text_truncated=true, full length in content.text_total_chars); use max_chars to shrink the slice and offset to page through the rest. All plans
get_mentions_by_citing_domain Get mentions by citing domain: for responses where a given source domain is cited, the share of those responses that mention the brand vs each competitor (brand + competitors sum to 100% per domain). Accepts a list of domains so the whole matrix is one call. Answers questions like "when gmac.com is cited, which brands get mentioned?". All plans
get_timeseries Get time series metrics data for a project. Supports mentions, citations, mention_rate (also accepted as visibility), citation_rate, responses, ai_visibility_score (position-weighted visibility and unbounded), avg_position (average visible citation position; background references are excluded), net_sentiment, and sentiment breakdowns. avg_position is not avg_mention_position, which ranks the brand among brands named in an answer. Competitor series accept competitor record ids. Week and month granularity clip the first bucket to the requested window. brand_kind=non_brand excludes brand-focused prompts for a fair competitor comparison. All plans
get_summary Get summary statistics for metrics over a time period. Returns one row per metric and actor with total, min, max, and last values. Count totals are summed; percentages and rates are averaged across periods. group_by returns one summary per AI model or collection. brand_kind=non_brand excludes brand-focused prompts for a fair competitor comparison. All plans
get_prompt_summary Get a prompt summary: per-prompt aggregated metrics (responses, mentions, citations, mention_rate, citation_rate, avg_mention_position, avg_position, brand sentiment) with pagination and sorting. mention_rate (also accepted as visibility) is the percentage of responses mentioning the brand. Returns brand-only metrics broken down by individual prompt. Supports breakdown=model to get per-prompt per-model metrics. Field notes: visibility and mention_rate are the same value (historical alias, both kept for compatibility); avg_mention_position is the average rank of the brand among the brands named WITHIN the answers that mention it, and it is the position behind ai_visibility_score; avg_position is a different thing, the average rank of the brand cited URL among the URLs an answer cited (background citations excluded). Each row also carries the prompt classification (country_code, language_code, prompt_type, brand_kind, tags). sentiment_responses counts the responses with a brand sentiment verdict; the five sentiment_* fields are percentages of that count and net_sentiment is positive minus negative (-100 to 100), all null when the count is 0. All plans
get_sov Get Share of Voice (SoV): the relative share of mentions between the project and its competitors over time. Returns current shares by actor plus periods with the mention sample size (n), a partial flag, a confidence level (none, low under 30 mentions, medium under 100, high) and margin_of_error in percentage points; sample is the period the current shares were computed on. view=compact drops the over_time, breakdown and others representations; view=over_time, current or breakdown returns only that one. group_by=model returns the comparison per AI model. brand_kind=non_brand excludes brand-focused prompts for a fair competitor comparison. All plans
get_top_sources Get top performing source domains for a project. Returns domains ranked by citing responses. avg_visibility (alias avg_mention_rate) is the percentage of all responses in the window that cite the domain at least once, bounded from 0 to 100. This metric describes the domain, not the brand, and does not include brand share conditioned on that domain. All plans
get_ai_model_summary Get an AI model summary: a per-AI-model breakdown of mentions, citations, sentiment, and weighted visibility for the brand and competitors. All models are returned in one response. brand_kind=non_brand matches the in-app AI Model Insights default and excludes brand-focused prompts. mentions_market_share is the independent mention rate of each actor within a model, so values can overlap and do not form a 100% share partition. All plans
get_ai_model_position_distribution Get the AI Model Insights position distribution for the project brand and an optional competitor. brand_kind=non_brand matches the in-app default and excludes brand-focused prompts. When brand2 is omitted (or equals brand1) it defaults to the largest other competitor by mentions. Weekly and monthly buckets cover full calendar periods, including the complete first period containing the range start. All plans
get_ai_overview_results Get aggregate Google AI Overview result availability over time plus per-prompt breakdowns. All plans
list_answers List AI answers with their content, prompt text, model, and basic metrics. Results are paginated and response text is truncated to 1,500 characters per row by default. full_text=true raises the per-row limit to 10,000 characters. query performs full-text search, makes total the exact number of matching responses, and returns a short snippet around each match. All plans
get_answer Get detailed information about a single AI answer/response including full response text, mentions, citations, sentiments, and sources. Sentiments need the Growth plan or above and shopping products the Scale plan or above; below those plans the fields are left out and plan_required_fields names the plan that unlocks each. All plans
list_detailed_sentiments List detailed sentiment analysis records with comments, topics, scores, and competitor information. This returns analysis evidence rather than only the sentiment-category catalog. Available on Growth and above plans. Growth
list_recommendations List read-only recommendation runs for a project, including type, status, summary, and counts. All plans
get_recommendation Get full details for one recommendation run, including items, source references, and report data. Each item carries source_refs codes (e.g. P1, C2); resolve them against the report_data indices (prompts_index, citations_index, own_content_index), which are always included once per response. All plans
get_project_details Get project details: matching names, industry, business model, primary products, target audience, prompt counts per brand focus (brand / brand_other / non_brand), data_coverage for the AI models, countries, and languages that have data, and search_console: whether a Google Search Console property is connected (connected, reconnect_required or not_connected) and which one. All plans
get_competitor_details Get competitor details: matching names, mobile app IDs, and icon URLs. All plans
create_prompts Create prompts: add them to a project in bulk. Validates against available prompt limits and skips duplicates. New prompts run once within minutes of creation and then join the weekly schedule. brand_kind and prompt_type are classified asynchronously and become available after creation. In the response, prompts_available=null means unlimited. All plans
delete_prompt Delete a prompt from a project. This irreversible action removes the prompt immediately, frees a prompt slot, and purges its executions, mentions, citations, sentiment, and related GEO Writer tasks in a background job. Requires the exact prompt id. The in-app chat requests confirmation before execution. All plans
create_intelligence_task Create a GEO Writer (formerly Content Intelligence) task. task_type selects a content brief, full draft, existing-content update, PR/media analysis, or custom output. update requires existing_content or existing_content_url. A task can reference an existing prompt_id or use custom_topic or user_instructions. Returns the task id and initial status. All plans
create_competitor Create a competitor in a project. Validates against the max competitor limit of the plan. Triggers async association recalculation: the competitor row returns processing=true immediately, and mentions/SOV/dashboards include it once the recalculation finishes (typically minutes, longer on large projects). competitors_remaining=null in the response means unlimited. All plans
update_competitor Update a competitor: brand_name, website domain or host, matching_names, chart color, and citation URL matching. matching_names replaces the whole list. Website and citation matching share a seven-day change cooldown. Changes to names, website, or citation matching rerun historical matching in the background and temporarily set processing=true. All plans
delete_competitor Delete a competitor from a project. This irreversible action removes the competitor immediately, frees a competitor slot, and purges its mentions, citations, sentiment, and share-of-voice history in a background job. Requires the exact competitor id. The in-app chat requests confirmation before execution. All plans
create_collection Create a tag (Collection) in a project. Optionally attach existing prompts in the same call. Tag name is unique per project (case-insensitive). All plans
update_collection Update a collection (tag): rename it or change its description. Tags and collections are the same object. This action does not change prompt membership. All plans
delete_collection Delete a tag/collection from a project. The tag is removed irreversibly, but its prompts remain and only the grouping disappears. Requires the exact collection id. The in-app chat requests confirmation before execution. All plans
assign_prompt_tags Assign prompt tags: attach tags (collections) to existing prompts in bulk. Accepts up to 500 prompt_ids and 50 tags per request. Tags can be supplied as ids or case-insensitive names, and create_missing=true creates names that do not exist. The operation is idempotent and does not duplicate assignments. All plans
remove_prompt_tags Remove prompt tags: detach tags (collections) from existing prompts in bulk. Accepts up to 500 prompt_ids and 50 tags per request. This removes only prompt-tag links and never deletes tags or prompts. The operation is idempotent and reports missing links as skipped. All plans
list_annotations List the timeline annotations of a project, newest first. Includes manual annotations, project automations, GEO test markers, and platform-wide events. origin identifies the source and editable indicates whether the authenticated user can modify the row. Supports date-window and category filters. Available on every plan. All plans
create_annotation Create an annotation: mark a date in the project timeseries with a title + description. Useful when the agent detects a notable change (campaign launch, product update, news event) and wants to flag it. Annotations are scoped to the project and visible to all members. All plans
update_annotation Update the title, description, date, color, or category of a user-created timeline annotation. Non-admin users can update only their own annotations; admins can update any user-created annotation. System annotations are read-only. Available on every plan. All plans
delete_annotation Delete a user-created timeline annotation from a project. Non-admin users can delete only their own annotations; admins can delete any user-created annotation. System annotations are protected. Requires the exact annotation id. The in-app chat requests confirmation before execution. Available on every plan. All plans
launch_recommendations Launch AI-powered recommendation generation for a project. This action spends the shared weekly recommendation-item budget unless the account has unlimited recommendations or the caller is an admin. It starts a background job that typically runs for 1-3 minutes. The in-app chat requests confirmation before execution. Recommendation status moves from pending to processing to completed. All plans
create_technical_geo_report Create a technical GEO report for a URL and country, run as a bundle of analyses: crawlability, schema, content readiness, discoverability, site structure, robots.txt, llms.txt, agent readiness, and AI visibility. This quota-consuming action starts multiple scraping and AI analysis jobs and typically takes 3-10 minutes. Each successfully created report consumes one daily report unit, so this 9-report bundle needs 9 units available before launch. The in-app chat requests confirmation before execution. Returns the batch id, created report ids, and any launch failures. All plans
update_technical_geo_report_content Update the content of a technical GEO report: replace the llms.txt and llms-full.txt files of a completed llms_txt report without regenerating it. edits maps llms_txt and/or llms_full_txt to the full replacement text; a file sent unchanged is ignored. content_version must equal result_data.content_version of the report as last read, otherwise the edit is rejected as stale. The first edit keeps the generated files for later restoration. Only llms_txt reports have editable content. All plans
revert_technical_geo_report_content Revert the content of a technical GEO report: discard every manual edit of an llms_txt report and restore the generated llms.txt and llms-full.txt files kept on the first edit. Manual edits are lost. The in-app chat requests confirmation before execution. The operation fails when the report has no manual edits. All plans
list_technical_geo_reports List technical GEO reports for a project and report type, newest first. agent_readiness identifies the AI/Agent Readiness report. Results include report id, status, batch id, target, score when available, and timestamps. All plans
get_technical_geo_report Get one technical GEO report by type and id, including its current status and full result_data when completed. agent_readiness identifies the AI/Agent Readiness report. A response containing poll_after_seconds indicates that the existing report is still running. All plans
list_geo_audits List the GEO audits of a project: each audit re-runs one type of technical GEO check (robots.txt, agent readiness, crawlability, schema...) on a domain or URL, once or weekly/monthly. Returns the latest run score, open issues and next run. Archived audits are left out unless status=archived. All plans
get_geo_audit Get one GEO audit: its type, target, cadence and schedule, status, latest run (score and new, fixed and regressed issues) and open issue counts. All plans
create_geo_audit Create GEO audits for a domain or URL: one audit per audit type, each starting its first run at once. cadence weekly or monthly makes it recurring (only for types whose checks are tracked run to run; others run once) and counts against the plan limit of recurring audits. All plans
update_geo_audit Update a GEO audit: its cadence, schedule day and hour, email alerts, or status (pause, resume or archive). Making an audit recurring or resuming it counts against the plan limit of recurring audits. All plans
delete_geo_audit Delete (archive) a GEO audit: it stops running and leaves the list. Creating the same audit again restores it with its history. All plans
run_geo_audit Run a GEO audit now. Returns the new run with status queued; it finishes as completed, failed or unreachable. Limited to 6 manual runs per audit per hour and 200 per account per day; scheduled runs do not count. All plans
list_geo_audit_runs List the runs of a GEO audit, newest first, with each run score, status, trigger and how many issues it found new, fixed or regressed. All plans
get_geo_audit_run Get one run of a GEO audit with its score, metrics and full result_data (the same report the app shows for that run). All plans
list_geo_audit_findings List the findings of one GEO audit run: each check (and the bot or item it is about) with its status pass, warn, fail, info or unknown, its severity and evidence. Most severe first. All plans
compare_geo_audit_runs Compare two runs of a GEO audit check by check: what is new, fixed, changed, appeared or disappeared, plus the score and metric deltas. Defaults to the latest completed run against the one before it. All plans
list_geo_audit_issues List the issues of a GEO audit: each failing check across runs with its severity, state (open, fixed, gone), its latest change (new, persisting, regressed, fixed, gone) and evidence. Accepted issues stay listed with accepted true. All plans
update_geo_audit_issue Update a GEO audit issue: accepted true keeps it visible but out of the open count (it counts again when its evidence changes); false makes it count as open again. All plans
list_geo_alerts List the alerts GEO audits raised for a project, newest first: a critical check newly failing, a check failing again, a recovery, a score drop or a site that stopped answering, each with a readable message. All plans
list_intelligence_tasks List GEO Writer (formerly Content Intelligence) tasks for a project with optional filtering by type and status. All plans
get_intelligence_task Get a GEO Writer (formerly Content Intelligence) task by ID, including status and result data when completed. All plans
update_intelligence_task_content Update the content of a GEO Writer (formerly Content Intelligence) task: edit existing text blocks of a completed task without regenerating it. edits is an object of dotted result_data paths to replacement text, such as "title", "introduction", "sections.0.content", or "key_takeaways.2". Only existing text values are editable; new keys, sections, list items, numbers, labels, and priority fields are rejected. Unchanged values are ignored. The first edit snapshots the original AI version for later restoration. With result_version (the result_version of the task as last read), an edit composed before a regeneration is refused instead of overwriting the new output. All plans
revert_intelligence_task_content Revert the content of a GEO Writer (formerly Content Intelligence) task: discard every manual edit and restore the AI version snapshotted on the first edit. Manual edits are lost. The in-app chat requests confirmation before execution. The operation fails when the task has no manual edits. All plans
get_agent_traffic Get agent traffic: aggregated AI bot traffic for a project from Cloudflare or uploaded server logs. Returns per-day request counts grouped by bot or by company. Available on Scale and above plans. Scale
list_agent_bots List agent bots: the catalog of known AI bots, including crawlers, assistants, and search fetchers, with their parent companies. Returns each bot's slug, display name, company, category, and description. The slugs and company names are valid bot-traffic filter values. Scale
get_ai_traffic Get AI traffic for a project: the human visits arriving from AI assistants (ChatGPT, Perplexity, Gemini, Claude, Copilot, Grok, Mistral, Meta AI, DeepSeek), measured from the connected web analytics provider (Google Analytics 4, Adobe Analytics, PostHog, Plausible, Matomo or Piano). Returns per-day users, sessions and conversions grouped by AI source, plus totals and conversion rate. Requires a connected web analytics provider. Available on Growth and above plans. Growth
get_web_analytics_schema Get the web analytics schema of this project: how to query the web analytics provider connected to it, so a live query can be written correctly on the first try. Returns which provider it is (Google Analytics 4, Adobe Analytics or Customer Journey Analytics, Matomo, PostHog, Plausible or Piano) and which property, site, report suite or project; the native query language that provider accepts (GA4 runReport body, Adobe report request, Matomo Reporting API parameters, PostHog HogQL, Plausible Stats API v2 query or Piano getData body); the top-level fields allowed; the rules the bridge enforces (the connected property is always used, only reads run, row limits and paging); a worked example to adapt; and, where the provider offers it, the live field list: every GA4 dimension and metric including the property's custom definitions, Adobe dimension and metric ids, Matomo report methods, recent PostHog event names, or the Plausible metric and dimension catalog. When fields_unavailable is present the provider did not return its list right now, and the format and example still apply. Cached for an hour per project. This reads the provider's own setup live; the stored AI-assistant referral numbers are a separate read that costs no provider quota. Read-only. Requires a web analytics provider connected on the AI Traffic page. Available on Growth and above. Growth
query_web_analytics Query web analytics live: runs one read-only query against the web analytics provider connected to this project and returns the answer as columns and rows. The query is written in that provider's own format, as the web analytics schema for the project describes: a GA4 Data API runReport body, an Adobe Analytics or Customer Journey Analytics report request, Matomo Reporting API parameters (a get method such as Referrers.getReferrerType), PostHog HogQL (SQL, sent as {"query": "SELECT ..."}), a Plausible Stats API v2 query, or a Piano getData body. It answers any traffic or behavior question the provider can: sessions and users by channel, source or campaign; landing pages; conversions and revenue; countries, devices and browsers; trends by day, week or month; and, on PostHog, any event-level SQL. The connected property, site, report suite or PostHog project is always used and any property field in the query is ignored; only read requests run; rows default to 100 and are capped at 5,000, paged with the provider's own offset or page field; identical queries are answered from a 10-minute cache (cached: true). The response repeats the query as sent (query), the provider's notes (sampling, thresholds, more rows available) and its totals when requested. A query the provider rejects returns ERR_WEB_ANALYTICS_INVALID_QUERY with the provider's own validation message, which says what to change. Each uncached query spends the customer's provider API quota, which the AI Traffic sync shares, and a project allows 20 uncached queries a minute, two at a time, so one query with several metrics and the right dimensions costs less than many narrow ones. Unlike the stored AI-assistant referral numbers, which cost no provider quota, this reads all of the property's data live. Available on Growth and above. Growth
get_ai_orders Get AI orders for a project: the store orders whose first visit came from an AI assistant (ChatGPT, Perplexity, Gemini, Claude, Copilot and others), as reported by a connected store app such as Shopify. Returns order and revenue totals, one row per AI assistant and a daily series for a window (default: the last 90 days, at most 400). Revenue values are decimal strings in the store currency, which is null when the window holds no order. Empty until a store app has pushed orders. Not available to accounts with a white-label portal or an embed. Available on Growth and above plans. Growth
get_search_console_summary Get a Search Console summary: Google Search Console headline totals (impressions, clicks, CTR, average position) for a project over a date range. Pass dimension to also get a breakdown aggregated over the range: country, device, page, query or searchAppearance (country values are lowercase ISO alpha-3 as returned by Google, e.g. usa, gbr, plus the zzz unknown-country sentinel; page and query keep the casing Google returns). Pass search_type to measure a surface other than web, filters to narrow the query, and data_state=all to include the most recent still incomplete days. With filters and no dimension, the totals are the complete figure Google reports for that filter (for example every page whose URL contains /blog/), matching Search Console. Breakdown rows are capped by limit, query rows exclude anonymized queries, and page and searchAppearance rows are counted per page rather than per property, so the rows can differ from the totals. The response data_through field reports the latest synced date in stored mode or the latest finalized date detected from Google in live mode. Recent days without rows should not be treated as zero. Requires the project to have a Search Console connection. Growth
get_search_console_timeseries Get a Search Console time series: property-wide Google Search Console impressions, clicks, CTR and average position, bucketed by day, week or month. Pass search_type to measure a surface other than web, filters to narrow the series, and data_state=all to include the most recent still incomplete days. The response data_through field reports the latest synced date in stored mode or the latest finalized date detected from Google in live mode. Recent days without rows should not be treated as zero. Requires the project to have a Search Console connection. Growth
get_search_console_queries Get top Google Search Console search queries for a project over a date range, ranked by impressions, clicks, CTR, or average position, with pagination. Supports filters, non-web search types, and data_state=all for recent incomplete days. Lists at most 25,000 queries per request (truncated: true when reached; start_row reads the next block) and excludes anonymized queries, so the rows are not a complete set and add up to less than the property or filter totals. Requires a Search Console connection. Growth
get_search_console_pages Get top Google Search Console landing pages for a project over a date range, ranked by impressions, clicks, CTR, or average position, with pagination. Supports filters, non-web search types, and data_state=all for recent incomplete days. Lists at most 25,000 pages per request (truncated: true when reached; start_row reads the next block) and counts each page separately rather than per property, so the rows are not a complete set and can differ from the property or filter totals. Requires a Search Console connection. Growth
get_search_console_rows Get Google Search Console rows for a combination of up to 3 dimensions over a date range (for example page and query, or date and page), each row carrying impressions, clicks, CTR and average position, ranked by impressions, clicks, CTR or position, with pagination. Each dimension is its own field in the row. Supports filters, non-web search types, aggregation_type and data_state=all for recent incomplete days. Lists at most 25,000 rows per request (truncated: true when reached; start_row reads the next block), and query rows exclude anonymized queries, so the rows add up to less than the property or filter totals. Requires a Search Console connection. Growth
create_webhook_subscription Create a webhook subscription: subscribe a public HTTPS URL to a project event. We will POST a signed JSON payload to the URL every time the event occurs (new mention, new citation, execution completed, negative sentiment detected, recommendation or intelligence task completed). Available on Scale and above plans. Deliveries are signed: the X-LLMPulse-Signature header carries sha256=<HMAC-SHA256 hex of the raw body> using the whsec_ secret this call returns (store it; rotating requires delete + recreate). Idempotent for the same project + event + URL: calling again returns the existing subscription and its secret, unless the API key or OAuth connection that created it was revoked; then it is replaced by a new subscription with a new secret. X-LLMPulse-Event and X-LLMPulse-Delivery headers identify the event and delivery. Scale
create_project Create a new project (a brand or website to track) in one call, with its prompts, competitors, collections (prompt tags) and weekly email subscription; no wizard draft is needed. Prompts are queued for execution, so a first baseline arrives within minutes. Enforces the same plan gates and quotas as the in-app wizard. The response lists same_domain_projects, the projects already tracking the same domain; a second project for a domain is never blocked. external_identifier makes creation idempotent for embed accounts. All plans
update_project Update a project name or profile: name, brand_name, description, industry, business_model, business_model_other, target_audience, primary_products, brand_voice, goals, and matching_names. matching_names replaces the whole list. Changing matching_names reruns historical mention and citation matching and can change past metrics; brand_name affects future runs only; name is a label. Website URL, locale, app-store profiles, and social profiles are not editable here. All plans
start_project_draft Start the step-by-step project wizard, which proposes AI suggestions before anything is created (a one-call project creation needs no draft). Returns a draft_id plus AI suggestions for the URL, including name, description, industry, and aliases. A new URL can take up to two minutes; suggest=false skips AI suggestions. Drafts expire after 24 hours and cannot be listed, so later steps require the returned draft_id. All plans
get_project_draft Get a project wizard draft: state, current step, accumulated data. include_suggestions returns cached suggestions for the current step (never triggers AI). All plans
update_project_draft Update a project draft: submit one step (details, prompts, competitors, owned_media) of the step-by-step project wizard. Strict forward gating: a step is only accepted when every previous step is complete; completed steps can be resubmitted. Returns the updated draft plus AI suggestions for the next step (suggest=false to skip). Per-step required fields beyond draft_id+step: details requires name (industry optional but validated); prompts requires a non-empty prompts array of strings within your plan slots; competitors requires an array of {domain, brand_name?, matching_names?} with valid domains within plan limits; owned_media accepts its documented keys. All plans
finalize_project_draft Finalize a project draft: create the project from a completed wizard draft. The operation revalidates every plan gate and quota. It is idempotent, and an already-finalized draft returns its existing project. All plans
list_webhook_subscriptions List active webhook subscriptions for the account, optionally filtered by project. Available on Scale and above plans. Scale
delete_webhook_subscription Delete a webhook subscription by ID. The target URL stops receiving events immediately. Available on Scale and above plans. Scale
get_webhook_sample Get sample webhook payloads for an event type, built from the project's most recent real data or a static sample when no data exists. The response shows the exact signed-delivery payload shape. Available on Scale and above plans. Scale
list_team_members List team members: the account owner first, then every member who joined, with their access level (permission_role, account role and the resulting permissions), co-owner and billing flags, project access, status (active or blocked) and last sign-in. Pending invitations are not included. Not available to an API key limited to some projects. All plans
list_team_invitations List pending team invitations: who was invited, the access and projects they will get, when the invitation was sent and when it expires. An accepted invitation keeps its id and becomes a team member. Not available to an API key limited to some projects. All plans
invite_team_member Invite someone to the account team by email, with the same rules as the Team Members settings page. They receive the invitation email and stay a pending invitation until they accept. Choose their projects (project_ids, or all_projects: true) and, as the account owner or a co-owner, their access: permission_role full_access (default), view_only, custom (with permissions) or account_role (with account_role_id). A team member allowed to invite cannot choose access: their invitations copy their own permissions. Only the owner can grant account_admin (co-owner) or billing_access. An address with a pending invitation is refused; revoke it first. Invitations through the API and MCP have a daily limit per account, revoked ones included. Requires a writable credential; not available to an API key limited to some projects. All plans
revoke_team_invitation Revoke a pending team invitation: its link stops working at once. Account owner or co-owner only (a co-owner cannot revoke an invitation that makes someone a co-owner). Only pending invitations can be revoked; a member who already joined answers not found. Requires a writable credential. All plans
remove_team_member Remove a member from the account team: their sessions and API keys stop working at once and the account is deleted shortly after. Account owner or co-owner only; a co-owner cannot remove the owner, another co-owner or themselves. Only members who joined can be removed; a pending invitation answers not found. Requires a writable credential. All plans
get_account_usage Get the account plan, usage, remaining quotas (prompts, projects, competitors, tasks) and API rate limits for the authenticated account. plan is the internal key and plan_name its display name (e.g. Scale++). The response includes the remaining capacity for quota-consuming creation and analysis actions. An unlimited quota returns limit and remaining as null with unlimited=true. The subscription block is only present for callers who may access Billing & Plans. For an API key limited to some projects, plan, plan_name, subscription and team_members are absent, and prompts and intelligence_tasks show only the capacity left (prompts.used counts those projects' prompts). All plans
send_feedback Send a bug report, feature request, or general feedback about LLM Pulse to the product team. The message, user email, plan, and optional project or tool context are stored by LLM Pulse and sent to its product team. This is a one-way feedback channel. All plans
ask_support Ask the LLM Pulse support assistant a product question. The question and account plan are processed by AI providers against the official LLM Pulse knowledge base. The full question and answer, user identity, and plan are stored for support review and improvement, and a shortened copy is sent to the support team. Limited to 20 questions per user per day and excludes account-specific billing or invoice support. All plans

Protocol

MCP uses JSON-RPC 2.0 over Streamable HTTP. Requests return a JSON-RPC response. Accepted notifications return HTTP 202 with an empty body.

For a simpler guide, see the MCP Setup page.