Skip to main content
Glama

Quattr

Server Details

Connect your AI assistant to your Quattr account and ask in plain English: who gets cited instead of you in AI answers, why organic clicks changed, how you compare with tracked competitors, and which pages need attention next. Every answer comes from your own Quattr data.

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.6/5.0

Scored across 62 tools

Disambiguation3/5

Descriptions work hard to steer ("use X instead", unit contracts, preflight warnings) and a router tool (find_relevant_analysis) plus resolve_entity exist, so an agent can often find the right tool. But the set contains genuine near-duplicates: market_share_overview / market_share_query / market_share_breakdown / growth_vs_market_share all answer 'share' questions, ai_visibility_drilldown largely restates ai_visibility_competitors, and gsc_breakdown / gsc_dimensional_trend / search_performance / compare_periods form a minefield of mutually-exclusive rules.

Naming Consistency3/5

Everything is snake_case and descriptive, which keeps names readable. However the conventions are mixed: verb-first (find_relevant_analysis, build_chart_spec, render_analysis, list_dashboards, resolve_entity, run_dashboard_tile) alongside noun-first (market_share_overview, web_analytics_overview, site_health_cwv_check, ai_prompt_winners), with no single predictable pattern to guess a tool from a question.

Tool Count2/5

62 tools is far past the comfortable 3-15 range and forces the agent to route before acting; the router tool exists precisely because the surface is too large to scan. The domains (GSC, GA4, paid, market share, AI visibility, CWV, crawl, dashboards, rendering) each justify tools, but the per-domain tool sprawl (5+ AI-visibility verbs, 4 market-share verbs, 4 GSC verbs) is over-decomposed.

Completeness4/5

Coverage across search, web analytics, paid, market share, AI answer visibility, crawl/indexation, Core Web Vitals, statistics, and rendering is broad, with preflight/health/freshness and entity-resolution helpers that avoid dead ends. Minor gaps: no export/share-permission tooling and no content-keyword discovery surface beyond gap analysis, but core read workflows are covered end to end.

Publisher details

Operator
Quattr · Publisher source
Operator website
https://www.quattr.com/
Vendor relationship
First-party
Restrictions
Requires a Quattr account. Quattr AI Visibility is in private beta, and access is arranged by Quattr. Request access at https://www.quattr.com/get-started. · Publisher source

Available Tools

62 tools
ai_citation_attributionA
Read-only
Inspect

AI answer-engine (ChatGPT/Perplexity/Gemini/AI Mode) citations — NOT Google's on-SERP AI Overviews (use competitive_trends for those). Which prompts cite our pages in AI answers, and how much? Ranks prompts (keyword) by how many of your pages are referenced in the AI answer — so you see where you earn AI citations. Use for "which prompts cite us most", "AI citation attribution", "where do we win AI answers". Per-segment.

Inputs: segment (required), date_range (required), brand, top_n, +2 more.

ai_crawler_analysisA
Read-only
Inspect

How are AI answer-engine crawlers (GPTBot, ChatGPT-User, PerplexityBot, ClaudeBot, Google-Extended) hitting this site? Crawl volume, status codes and unique pages per AI bot over time, from server web logs. Use for "are AI crawlers reaching our content", "which AI bots crawl us most", "AI crawler coverage". This is server-log bot activity, NOT answer-engine citations (see ai_visibility_*).

Inputs: date_range (required), bot, granularity.

ai_page_citationsA
Read-only
Inspect

AI answer-engine (ChatGPT/Perplexity/Gemini/AI Mode) citations — NOT Google's on-SERP AI Overviews (use competitive_* for those). Which of your pages get cited in AI answers, and how often? Ranks your cited URLs by AI-answer citation count, each with its citation category (blog / comparison / product / docs) and average citation position. Pass a competitor domain to see THAT domain's cited URLs instead (the domain drawer). Use for "which of our pages do AI answers cite", "cited URL breakdown", "a competitor's cited pages". Per-segment.

Inputs: segment (required), date_range (required), brand, top_n, +3 more.

ai_prompt_coverage_gapA
Read-only
Inspect

AI answer-engine (ChatGPT/Perplexity/Gemini/AI Mode) citations — NOT Google's on-SERP AI Overviews (use competitive_overview/competitive_trends ai_overviews for those). Which AI-answer prompts do we under-appear in? Ranks prompts (the prompt = the tracked keyword) by how few of your pages are cited in the AI answer, so you see coverage gaps at prompt grain. Use for "which AI prompts don't cite us", "AI answer coverage gaps", "prompts where we're missing". Per-segment.

Inputs: segment (required), date_range (required), brand, top_n, +2 more.

ai_prompt_winnersA
Read-only
Inspect

AI answer-engine (ChatGPT/Perplexity/Gemini/AI Mode) citations — NOT Google's on-SERP AI Overviews. WHO leads each AI-answer prompt, and with WHICH pages? For each prompt (pass the gap prompts from ai_prompt_coverage_gap, or omit to take the busiest prompts) returns the most-cited domains for THAT prompt — including your own domain when you lead — each with its cited URLs, citation counts, category and average position. Every relationship is keyed by the prompt: this is the supported way to say "prompt X → domain Y's page Z earns the citations". Use for "who wins the prompts we miss", "which pages beat us per prompt", "prompt-level competitor citations". Per-segment.

Inputs: segment (required), date_range (required), brand, intent, +5 more.

ai_tracker_healthA
Read-only
Inspect

PREFLIGHT for AI-visibility analyses: is this tracker's data complete enough to interpret? Per answer-engine platform: observed collected-prompt count for the period, latest data date, and a structural state (ready / partial / unavailable). Pass comparison_range to also get prompt-basket deltas between periods (a shrinking or grown basket means period-over-period reads need a rebaseline caveat). Run this BEFORE interpreting AI-visibility performance — a tracking gap is not a performance gap. Also reports trackerStatus: a PAUSED tracker stopped collecting on its end date, so anything after it is a tracking gap and its numbers are historical, not current. Counts are OBSERVED collection, not the configured basket.

Inputs: tracker (required), date_range (required), comparison_range.

ai_visibility_citation_auditA
Read-only
Inspect

AI answer-engine (ChatGPT/Perplexity/Gemini/AI Mode) citations — NOT Google's on-SERP AI Overviews (use competitive_trends/competitive_overview for those). CURRENT citation counts and rate (point-in-time) for one AI Visibility tracker: selected-tracker citation rate plus its per-platform citation counts for a date range. Use for "are our citations dropping?" / "how often are we cited on AI platforms?". If tracker is omitted, one tracker is auto-selected; multiple trackers return a picker without querying. country and device filters are applied when a tracker is in scope; they are not silently ignored. For citations OVER TIME as a trend, use ai_visibility_trend instead.

Inputs: date_range (required), brand, device, intent, +4 more.

ai_visibility_competitorsA
Read-only
Inspect

AI answer-engine (ChatGPT/Perplexity/Gemini/AI Mode) citations — NOT Google's on-SERP AI Overviews (use competitive_trends/competitive_overview for those). Use ONLY for per-COMPETITOR breakdowns (who beats us). Share of Voice, citations, mentions, and sentiment for each competitor (and you), ranked, optionally for a single search intent, AI platform, country, or device. Use for "which competitors lead us on AI visibility?" / "our AI share vs rivals by intent". If tracker is omitted, one tracker is auto-selected; multiple trackers return a picker without querying metrics. country and device filters are applied; they are not silently ignored. For your own current citation snapshot use ai_visibility_citation_audit; for trend over time use ai_visibility_trend.

Inputs: date_range (required), mode, unit, brand, +6 more.

ai_visibility_drilldownA
Read-only
Inspect

AI answer-engine (ChatGPT/Perplexity/Gemini/AI Mode) citations — NOT Google's on-SERP AI Overviews (use competitive_trends/competitive_overview for those). QWA-parity AI Visibility DRILLDOWN for one tracker. Use for "AI visibility by competitor", "by prompts", "by cited URL", "by intent", "by geography", or "by brand". Returns QWA-facing metrics only: Share of Voice %, Citation %, Citations, Mentions %, Mentions, Positive Sentiment %, and Positive Mentions.

Inputs: tab (required), date_range (required), brand, limit, +6 more.

ai_visibility_overviewA
Read-only
Inspect

AI answer-engine (ChatGPT/Perplexity/Gemini/AI Mode) citations — NOT Google's on-SERP AI Overviews (use competitive_trends/competitive_overview for those). The CURRENT AI-visibility Home grid for one tracker: citation rate, share of voice, mentions and positive sentiment per configured AI answer platform, plus the selected tracker's cross-platform aggregate. Use for "how visible are we across AI answer engines?" / "our AI answer scorecard". If tracker is omitted, one tracker is auto-selected; multiple trackers return a picker without querying. Supports comparison_range and tracker-scoped country/device filters. For one metric OVER TIME use ai_visibility_trend; for the per-competitor breakdown use ai_visibility_competitors.

Inputs: date_range (required), brand, device, intent, +4 more.

ai_visibility_trendA
Read-only
Inspect

AI answer-engine (ChatGPT/Perplexity/Gemini/AI Mode) citations — NOT Google's on-SERP AI Overviews (use competitive_trends/competitive_overview for those). Use ONLY for OVER-TIME / trend questions (a time series). Citations, share of voice and positive sentiment bucketed by day/week/month/quarter for one tracker, optionally for a single AI platform or search intent. Use for "is our AI visibility going up or down?" / "AI citations over the last 3 months". If tracker is omitted, one tracker is auto-selected; multiple trackers return a picker without querying metrics. For the current snapshot use ai_visibility_citation_audit; for per-competitor breakdown use ai_visibility_competitors.

Inputs: date_range (required), brand, device, intent, +8 more.

bot_verificationA
Read-only
Inspect

Which crawlers claiming to be Googlebot are actually Google? Cross-references the declared bot / user-agent against IP verification to separate verified Googlebot hits from spoofers. Use for "are fake Googlebots hitting us", "verify our crawler traffic".

Inputs: date_range (required).

build_chart_specB
Read-only
Inspect

Build a minimal Vega-Lite chart specification from result rows. Pick the mark and x/y columns, or let them be inferred (first text/date column as x, first numeric column as y).

Inputs: rows (required), x, y, mark.

compare_periodsA
Read-only
Inspect

Compare one summarized search/SEO result with a prior period — week vs previous week, month-over-month, or "vs last year" — and return per-row deltas and percentage changes. For whole-site clicks, impressions, CTR, or average position versus another period, call search_performance with date_range, metrics, and comparison_range instead. Use this tool only when find_relevant_analysis supplies a dataset and fully-qualified fields. NEVER use this tool when the request asks for a day/week/month/quarter series BY page, country, device, category, intent, query, rank bucket, traffic source, language, or geo; that shape must call gsc_dimensional_trend exactly once with both date_range and comparison_range so both bucketed periods use the same stable entity set.

Inputs: fields (required), dataset (required), filters (required), comparison_period (required), +3 more.

competitive_keyword_rankingA
Read-only
Inspect

Where do we rank vs competitors on specific keywords? Per-keyword average rank position (1=top, higher=worse) for your site and tracked competitors within a segment. This is RANKING (position 1-N), NOT share percentage — use market_share_overview for share. Use for 'our rankings vs comp3' / 'how do we stack up in mobile India' / 'keyword ranking 3 days ago'. Defaults to the primary 'default' (Overall Market) segment when omitted — name another tracked segment to scope to it.

Inputs: date_range (required), brand, device, medium, +3 more.

competitive_overviewA
Read-only
Inspect

Snapshot of ONE competitive metric vs your tracked competitors within a segment: AI Overviews on-SERP market share, featured snippets, brand mentions, ranked keywords, or ranked pages. Its ai_overviews metric is Google AI Overviews inclusion (the on-SERP answer box) — NOT ChatGPT/Perplexity/Gemini citations (use ai_visibility_* for those). You vs each competitor for the chosen metric, optionally period-over-period. Segment-level snapshots only (no keyword/page/category drill in v1). Defaults to the primary 'default' (Overall Market) segment when omitted — name another tracked segment to scope to it.

Inputs: metric (required), date_range (required), vs, page, +12 more.

conversions_overviewA
Read-only
Inspect

How many conversions / purchases / sign-ups did we get, and by which goal? Returns the OVERALL conversion count plus a per-goal breakdown — each goal labelled with YOUR OWN goal name (e.g. Purchase, Add to Cart, Registration), not a generic number — from your web-analytics source (GA4 / Adobe), optionally compared to a prior period. Pass goal to select one tenant goal by name or goalN id. A named goal's value is its conversion count (total_goalN); it is NOT the separate sitewide metrics: value metric. Defaults to QWA's All traffic sources scope; pass medium to request organic, paid, or another specific source. Exact google/cpc mirrors QWA PER METRIC: the overall Google Ads conversion count comes from paid stats, while metrics:['conversion_rate'] reads QWA's page_user_conversion rate under google/cpc + web. NEVER calculate conversion rate as paid conversions divided by paid clicks. The paid route has no GA goal breakdown; other requested GA-only extra metrics are omitted with an explicit note. Use for "Google Ads conversion rate", "paid conversion rate", "how many conversions / sign-ups / purchases", "conversions by goal", "goal completions", "transactions and revenue". For a side-by-side paid-versus-organic performance comparison use paid_organic_performance_comparison. NOT GSC clicks/impressions (use search_performance), NOT market share, NOT ad cost / CPC (use paid_search_overview).

Inputs: date_range (required), goal, top_n, medium, +5 more.

correlate_domainsA
Read-only
Inspect

Is metric A related to metric B across two different data areas? Correlate two metrics from DIFFERENT domains over time — for example, do pages with worse Core Web Vitals get fewer Search Console clicks, or does rising market share track rising traffic. Fetches each metric as a time series, lines them up by week (or day/month), and returns Pearson and/or Spearman correlation with a significance value. Use for "does X move with Y?" questions that span search, web analytics, paid, market share or page experience. Correlation is not causation — the result includes a caveat.

Inputs: metric_a (required), metric_b (required), date_range (required), method, +1 more.

crawl_budget_wasteA
Read-only
Inspect

Where is crawl budget being wasted? Surfaces deep (many clicks from the homepage), parameterized, or non-200 URLs the crawler spent budget on. Use for "crawl budget issues", "are bots wasting time on junk URLs", "deep or redirected pages crawlers hit". Requires the site crawl feed.

Inputs: date_range (required), top_n, min_depth.

ctr_curve_modelA
Read-only
Inspect

Model THIS website's own click-through-rate curve by SERP position — "what CTR should we expect at position N?", "which queries over/under-perform their expected CTR?". Fits weighted CTR (clicks÷impressions) per position bucket from your query×page Search Console data with a monotone-decreasing isotonic fit, SEGMENTED by branded vs non-branded, intent and device — because a single blended curve hides the branded/non-branded gap that dominates CTR. Returns the fitted curve(s) plus the biggest over- and under-performers. Use this before striking_distance (which consumes the fitted curve). For raw clicks/impressions use search_performance; for movement use seo_ranking_movement_report.

Inputs: date_range (required), brand, device, intent, +3 more.

cwv_breakdownA
Read-only
Inspect

How do Core Web Vitals break down by rank bucket, device, or content category? Groups ONE vital — LCP seconds by default, or the 0–1 Lighthouse performance score, CLS, or INP via the vital parameter — using the SAME governed grouping and weighted rollup as QWA's Growth Trends drill-down, and joins organic clicks per group. Use for "LCP by rank bucket", "performance score by device", "CWV grouped by category". NOT a per-page table (use page_traffic_cwv), not a time series, not causal.

Inputs: group_by (required), date_range (required), top_n, vital, +1 more.

describe_data_sourcesA
Read-only
Inspect

List the data sources available to this account — search performance (default and BigQuery-backed), web analytics, paid search, market share, AI visibility, page experience — with each source's latest available data date, load cadence, and load health. available is entitlement (is the source connected). health is load freshness: current, delayed, stale (stalled feed — flag as broken), unknown, or unavailable. Call this before choosing a source or when data seems missing.

Inputs: no named parameters.

explain_analysisA
Read-only
Inspect

Explain what a named analysis would compute and roughly what it costs, WITHOUT running it. Use before an expensive call or when the user asks how an analysis works.

Inputs: name (required), params.

find_relevant_analysisA
Read-only
Inspect

Route an analytics question to the authoritative Quattr analysis — returns the best-matching analysis tool(s), why, and how to call them. Call this FIRST for every analytics question unless the user explicitly named the exact tool; use content discovery only when this router reports that no dedicated analysis fits.

Inputs: question (required), limit, present.

find_relevant_contentA
Read-only
Inspect

Find the dashboards and saved reports most relevant to an analytics question, scored by term match, usage and recency.

Inputs: question (required), mode, limit.

funnel_dropoffA
Read-only
Inspect

Where do users drop off in the funnel? Given an ORDERED list of funnel steps (each an existing web-analytics count metric — e.g. sessions → conversions → transactions), returns each step's count, the per-step drop-off rate, and the biggest-leak step (the largest single drop). Use for "where do users fall out of the funnel?", "which step leaks the most?". Each step carries its metric's own QWA default scope (echoed as appliedScope): behavioral steps are web + google/organic, conversion/transaction steps are web + All traffic sources (QWA's own auto-switch) — a mixed funnel discloses that cross-scope legs compare different populations. This is an observational macro-funnel over GA count metrics (GA4 / Adobe), NOT a per-event step sequence (no event-level funnel breakdown exists yet). Whole-domain only in v1.

Inputs: steps (required), date_range (required), segment.

get_data_freshnessA
Read-only
Inspect

Report the latest available data date per data domain (search, analytics, market share, AI visibility, ads, page experience) from live probes, with each domain's typical load cadence and a load-health flag. health is current within the expected cadence, delayed when slightly past it, and stale when the feed appears stalled — treat stale as a broken feed, not normal lag.

Inputs: domains.

get_playbookA
Read-only
Inspect

Fetch the server-delivered execution playbook for a Quattr workflow, by EXACT workflow id (the skill wrapper knows its own id — this is not a search; use find_relevant_analysis to route questions). Returns the bounded execution core with a version + content hash; never refetch a playbook whose version/hash is already in this conversation. If complete is false or the fetch fails, do NOT improvise the workflow — say the playbook is unavailable and stop before consequential recommendations.

Inputs: workflow_id (required), client_contract_version.

get_query_historyB
Read-only
Inspect

List this account's recent analytics calls: tool name, timestamp, duration and success.

Inputs: limit.

growth_vs_market_shareA
Read-only
Inspect

Use this whenever the question pairs one of YOUR metrics — clicks, impressions, CTR or average position — with market share ("clicks and market share", "impressions vs our share", "are we growing faster than our share", traffic vs share side-by-side). Pass vs:"clicks"|"impressions"|"ctr"|"position" (default clicks) to pick the right axis. Pass country and/or device to keep BOTH legs on the same geography and device (e.g. "clicks and market share on mobile in Canada") — do not decompose that into market_share_query + search_performance. Pass page or category for a FILTERED SUMMARY such as "market share and clicks for pages containing /p/"; that path preserves QWA's summary-level market-share denominator and joins a separately filtered GSC aggregate, so adding traffic cannot change the share definition. Country/device cannot be combined with a page/category summary in the same call. For share vs competitors WITHOUT a traffic metric, use market_share_overview instead. For a per-slice top-N breakdown (e.g. top intents or pages by clicks/share), use market_share_breakdown. Defaults to the primary "default" (Overall Market) segment when omitted — name another tracked segment to scope to it. UNIT CONTRACT: market-share values are already percentage units on a 0–100 scale (0.03 means 0.03%, not 3%); share delta is selected-minus-comparison percentage points; leader gap is leader-minus-client percentage points for the same period; only deltaPct is a relative-change ratio.

Inputs: date_range (required), vs, page, brand, +9 more.

gsc_breakdownA
Read-only
Inspect

A SNAPSHOT-ONLY breakdown of Google Search Console metrics (clicks / impressions / CTR / average position) DOWN BY a drill field — category, country, device, intent (a customer keyword group), query, page, rank bucket, traffic source, language or geo — with the full curated filter set and optional snapshot period-over-period. Use only for ONE summarized range such as "top pages by clicks" or "clicks by country". NEVER call this tool when the user asks for a day/week/month/quarter series by a drill field, including a comparison or top-N series; call gsc_dimensional_trend exactly ONCE with all requested metrics and put the second explicit period in comparison_range. For a single whole-site or top-N snapshot WITHOUT a break-by field, use search_performance; for biggest movers use seo_ranking_movement_report; for share vs competitors use the market-share analyses.

Inputs: group_by (required), date_range (required), brand, top_n, +10 more.

gsc_dimensional_trendA
Read-only
Inspect

The ONLY governed tool for Google Search Console metrics OVER TIME BY a drill field — for example weekly clicks by page, country, device, category, intent, query, rank bucket, traffic source, language, or geo. One user request must produce exactly ONE call for the entire date_range. Copy every requested flow metric into that one call; NEVER split a multi-metric request into separate calls. Copy an explicit comparison period into comparison_range; NEVER merge the two ranges or route a dimensional comparison through compare_periods. The tool natively returns multi-metric series and compares the SAME stable entity set across both periods. Average-position dimensional trends return an immediate zero-query capability note. It ranks entities across the full primary range and returns stable day/week/month/quarter series; never emulate this by calling gsc_breakdown once per bucket.

Inputs: group_by (required), date_range (required), granularity (required), date_range_mode (required), +9 more.

indexation_gap_diagnosisA
Read-only
Inspect

Which crawled pages are NOT indexable, and why? Lists URLs the crawler found that are flagged not-indexable plus the reason (noindex, canonical, robots, status) from the site crawl graph. Use for "what pages are blocked from indexing", "why isn't this page indexed", "indexation issues". Requires the site crawl feed.

Inputs: date_range (required), top_n.

list_dashboardsB
Read-only
Inspect

List the dashboards available to this account, most-used first, with title, folder path and 90-day run counts.

Inputs: limit, search.

list_filter_valuesA
Read-only
Inspect

Open the dropdown for a filter: list the valid VALUES (and the operators it accepts) for a filter field, so you filter with real values instead of guessing. Use it BEFORE filtering by country, intent (keyword group), category, traffic source, device, branded, rank bucket, keyword or page. Bounded fields return their known options (cached); keyword/page need a search term and match live; static fields (device/branded/rank bucket) return fixed choices.

Inputs: filter (required), limit, search, segment, +1 more.

market_share_breakdownA
Read-only
Inspect

Use for market share broken down by intent, language, keyword, page, content category, branded/non-branded demand, rank bucket, or country. Returns one governed row per slice with the QWA-compatible share and, where the surface exposes it, clicks. For languages, countries, queries, or pages within one rank bucket, pass the matching breakdown_by plus rank_bucket:"Ranking 1 to 3" (after resolving the exact value). The language/query/page routes apply the bucket directly to the governed market-share drill. Pass country with breakdown_by:"keyword" for QWA's country-to-Queries drill; pass country or device with breakdown_by:"page"/"keyword" for other filtered rows such as “top pages in Canada”. Pass category with breakdown_by:"page" for “pages within Help”; pass page with breakdown_by:"page" or "keyword" for rows within one URL pattern such as "%/products/%". Page/category filters are rejected on language/intent/brand/category/rank_bucket/country because those sources cannot apply the scope faithfully. Pass comparison_range for per-row deltas. For “largest market-share gains/losses” across pages, queries, or countries, use sort_by:"market_share_change" plus change_direction:"gain"|"loss"; that mode ranks the same broad comparison candidate population as QWA (every country row in both periods) instead of the current-period top rows. This is the ONLY market-share verb that groups by a field and returns multiple ranked rows; prefer it over market_share_query for a single-self top-N page/keyword breakdown. UNIT CONTRACT: market-share values are already percentage units on a 0–100 scale (0.03 means 0.03%, not 3%); share delta is selected-minus-comparison percentage points; leader gap is leader-minus-client percentage points for the same period; only deltaPct is a relative-change ratio.

Inputs: date_range (required), page, brand, top_n, +12 more.

market_share_overviewA
Read-only
Inspect

How's our market share in a segment? Your share vs tracked competitors, the segment leader, and the gap — sliceable by keyword, page, search intent, content category, or branded vs non-branded demand. Pass category:'' to scope share-vs-competitors to ONE content category (e.g. "how do we rank vs competitors in our Products content?"), or page:'' for one page/URL. Country and device are NOT supported here: the verb rejects them rather than returning whole-segment share under a geography or device claim. For a country ranking use market_share_breakdown(breakdown_by:"country"); for queries or pages in one country or device use that breakdown plus country/device. Share vs competitors only. If the question also wants clicks or traffic, use growth_vs_market_share instead. To rank ACROSS the values of a grouping (e.g. top intents or top categories by share), use market_share_breakdown. Defaults to the primary 'default' (Overall Market) segment when omitted — name another tracked segment to scope to it. UNIT CONTRACT: market-share values are already percentage units on a 0–100 scale (0.03 means 0.03%, not 3%); share delta is selected-minus-comparison percentage points; leader gap is leader-minus-client percentage points for the same period; only deltaPct is a relative-change ratio.

Inputs: date_range (required), page, brand, grain, +6 more.

market_share_queryA
Read-only
Inspect

Compose a market-share query with competitors, share/click metrics, and an optional breakdown in one call. Use it for multiple specific competitors or when the user explicitly requests the exact market_share_query tool. Honor an explicit exact-tool request even when competitors contains only "self": self-only keyword/page breakdowns execute through QWA's governed drill path (dynamic client comp{N} for Queries, page_market_share for Pages, and clicks_cpc_M for both). For ordinary natural-language self-only requests, prefer market_share_breakdown for ranked keyword/page rows and growth_vs_market_share for one filtered summary. Resolves "self" / "me" / "us" / "mine" / "my" → your share column; accepts competitor names, domains, labels, or comp{N} literals. IMPORTANT: when the user NAMES competitors (e.g. "our market share vs Competitor A and Competitor B"), pass them ALL DIRECTLY in competitors ALONGSIDE "self" (e.g. ["self","competitor-a.example","competitor-b.example"]) — this verb resolves each name/domain/label to its share column ITSELF, so do NOT call resolve_entity for individual competitors. A self-only page/category-filtered aggregate with no breakdown is rejected with a steer to growth_vs_market_share. Per segment — without one it defaults to the primary "default" (Overall Market) segment. UNIT CONTRACT: market-share values are already percentage units on a 0–100 scale (0.03 means 0.03%, not 3%); share delta is selected-minus-comparison percentage points; leader gap is leader-minus-client percentage points for the same period; only deltaPct is a relative-change ratio.

Inputs: date_range (required), brand, grain, top_n, +8 more.

orphan_pagesA
Read-only
Inspect

Which crawled pages have no internal links pointing to them? Lists URLs with zero incoming links from the crawl graph — orphans are hard for crawlers and users to reach. Use for "find orphan pages", "pages with no internal links". Requires the site crawl feed.

Inputs: date_range (required), top_n.

page_traffic_cwvA
Read-only
Inspect

Which high-traffic organic pages have weak Core Web Vitals? Ranks a bounded top-N page set by Search Console clicks, fetches ONE selectable vital only for those exact pages — LCP seconds by default, or the 0–1 Lighthouse performance score, CLS, or INP via the vital parameter — and returns page, clicks, the vital value and grade, plus URL-match and freshness coverage. Use for page-level requests such as "top pages by organic clicks with LCP", "performance score for top 10 pages by clicks" (vital: "performance"), or "which high-traffic pages are slow". This is an observational page join, not causal correlation, and it is not an all-page export.

Inputs: date_range (required), top_n, vital, device, +2 more.

pop_significanceA
Read-only
Inspect

Is this conversion-rate (or sessions / conversions / transactions) change REAL or just noise? A period-over-period significance test for your web analytics (GA4 / Adobe): every metric — conversion rate included — is tested with a Welch t-test over per-bucket series of the EXACT number QWA displays (conversion rate is conversions ÷ users, or GA4's own displayed rate), with delta taken from QWA's period aggregates. Returns delta, deltaPct and a real / noise / can't-tell verdict (derived from the p-value and the statistical power — not eyeballed). Use for "did conversion rate really change vs last month?", "is the sessions drop significant?". Both periods carry the METRIC's own QWA default scope (echoed as appliedScope): behavioral metrics (sessions, users, pageviews, events) are web + google/organic, while conversion-family metrics (conversion_rate, conversions, transactions) are web + All traffic sources — mirroring QWA's own auto-switch — so the tested numbers match an untouched QWA card and web_analytics_overview's defaults. For cross-domain or non-GA metric significance (GSC clicks, market share, CWV) use significance_check instead. Whole-domain only in v1.

Inputs: date_range (required), comparison_range (required), alpha, metric, +2 more.

render_analysisAInspect

Render a prior result — including a SYNTHESIS you composed across several queries — as an inline visual Quattr card. ALWAYS prefer this over generating your own HTML, images, or markdown tables — render_analysis produces native Quattr-styled output with built-in honesty chrome, deep-links, and responsive layout that your ad-hoc HTML cannot match.

component="Report" is the richest: a MetricCards summary strip + a comparison table in one card. component="DataTable" renders ranked/breakdown/comparison rows. component="MetricCards" renders stat cards. component="NoticeBanner" renders a capability-gap / no-data state.

EXPRESSIVENESS — what you can do with columns + sections: • sections — group rows into labeled, tone-colored buckets (e.g. "Keep" green, "Cut" red) with optional criteria descriptions. Use for any bucketed/segmented analysis. • type:"status" + toneMap — color-coded badge pills in cells (e.g. decision labels like "Keep — best CPA" in green, "Cut" in red, "Watch" in amber). • identitySubKey — a muted sub-line under each row's identity cell (e.g. intent category under keyword). • type:"delta" — ±change badges with automatic green/red coloring. • type:"bar" — inline horizontal bars for share/proportion columns. • prevKey — prior-period value as a muted sub-line in metric cells.

Pass the rows/cards you already have — no re-query. The honesty chrome (Observational basis, caveats, freshness) always renders as a footer; pass openInQuattrUrl to deep-link. Do NOT call this after a successful auto-rendered governed verb unless you are adding a valid cross-query synthesis or a materially different presentation the user requested. In a valid synthesis, preserve every measured, non-null source metric for every row; use null/— only when the source returned null or explicitly marked the metric not applicable. Never add decorative KPI cards when the table already answers the question. Market share/rates/ranks are non-additive: do not total them or derive a contribution from their sum.

Inputs: title (required), component (required), asOf, rows, +14 more.

render_chartAInspect

Render an INTERACTIVE chart inline (line/area/bar with a type-switcher, hover tooltips, a footer metadata strip, and an "Open in Quattr" deep-link) from a prior verb's result rows. A sibling of build_chart_spec — pass the rows you already have; no re-query. Optionally pass deep_link to point the "Open in Quattr" link at the right destination + dates (Growth Trends, Competitive Trends, or AI Visibility). For AI-answer coverage-gap or cited-URL charts, use the AI Visibility destination (tab=prompts or tab=citedUrls) — never organic Growth Trends. DO NOT re-chart a verb result that already rendered a chart card — trend results (e.g. search_performance with granularity) auto-render a card that carries its own Open-in-Quattr link, so calling this again just duplicates the visual. Use this for rows that did NOT render (e.g. the advanced analytics query tool) or when the user explicitly asks for a different chart.

Inputs: rows (required), x, y, mark, +3 more.

resolve_entityA
Read-only
Inspect

Resolve a customer's named business objects — segments, AI trackers / AI Visibility segment groups, AI platforms, goals, competitor sets — from natural language (a tracker name, segment group name, "default", a platform like Claude, a goal) to the exact filter field and value to use. Call this BEFORE filtering by any entity the user named, so you bind the right id instead of guessing. For an AI-visibility question where the user did not name a tracker / segment group, call with kinds:["ai_tracker"] and a generic query such as "AI Tracker" or "segment group" to show the full tracker picker.

Inputs: query (required), kinds, limit.

run_dashboardA
Read-only
Inspect

Chat-native dashboard experience. Three modes: • answer (default when a question is provided): score each tile's relevance to the question and recommend which to run. • preview: run up to 4 tiles in parallel and return rendered data + a deep-link to the full dashboard. • describe: return an enriched tile inventory with domain tags and example questions each tile can answer. Mode inference: question provided → answer; no question + no mode → describe.

Inputs: dashboard_id (required), mode, question.

run_dashboard_tileA
Read-only
Inspect

Run one dashboard tile's query, optionally overriding its filters with explicit date ranges, and return its rows.

Inputs: tile_id (required), dashboard_id (required), filters.

search_performanceA
Read-only
Inspect

Your actual Google Search Console metrics for one period — clicks, impressions, CTR, average position, plus whole-site Unique Keywords / Unique Pages counts — at site, keyword or page grain, with top-N ranking. Use for "what were my total clicks last month?", "top 10 keywords by impressions", "how many unique keywords / pages do we rank for?", "non-brand organic clicks". Returns organic acquisition metrics (NOT paid) and does not guarantee organic conversion counts. For a complete paid-versus-organic comparison including conversions on both sides use paid_organic_performance_comparison. Set comparison_range for period-over-period changes; for biggest gainers/losers use seo_ranking_movement_report. When the user names two periods, date_range is the first period they named (the selected period) and comparison_range is the second, even when the first period is the earlier month — do not swap them. Deltas are the change from the earlier period to the later one, whichever was named first. A positive delta means the later period is higher. For average position, a positive delta is a worse rank.

Inputs: date_range (required), brand, grain, top_n, +10 more.

seo_keyword_gap_analysisA
Read-only
Inspect

Where are competitors beating us on keywords? Per-keyword rank comparison against tracked competitors in a segment: losing / winning / not-ranked buckets with gap sizes.

Inputs: segment (required), date_range (required), medium.

seo_ranking_movement_reportA
Read-only
Inspect

Did rankings or clicks move? Compares two date ranges per keyword (or site-wide): biggest gainers and losers in clicks/impressions/average position. Use for "did our rankings move?" / "what changed vs last month?".

Inputs: date_range (required), comparison_range (required), scope, metric, +1 more.

significance_checkA
Read-only
Inspect

Is the −72% period-over-period change real, or just noise? Tests whether a metric's distribution in the selected period is statistically different from the comparison period — fetches per-bucket values for each period, picks Welch's t-test (n≥8) or Mann–Whitney U (small n), and returns delta, deltaPct, pValue, and whether the change is significant at the given alpha. GSC metrics default to google/organic + web; use metric.filters traffic_source/search_type to request paid, all-source, or another search type. Use for "is this drop real?", "is the lift statistically significant?", "did the trend change meaningfully?", and for "is my share significant?" / "is your share significant?" / "is our share significant?". Those share questions are the customer's market share: pass metric { domain: "market_share", metric: "share" } (aliases: my share, your share, our share, own share, market_share). "Your" does not mean the assistant has no share. The verb resolves the alias to the customer's tracked share column and fails closed when that rank is above 40 — do not invent a column or pass a raw metric name. Two governed reads, pure statistics — no compute engine needed.

Inputs: metric (required), date_range (required), comparison_range (required), alpha, +1 more.

site_health_cwv_checkA
Read-only
Inspect

Check Core Web Vitals health: per-vital grades (good / needs-improvement / poor), distributions across pages, and the worst LCP pages for a date range. Uses QWA Growth Trends defaults (Web + google/organic) for UI-parity. Snapshot mode selects QWA's latest fully populated daily Performance, Accessibility, Best Practices, and SEO headline; trend mode uses QWA's authoritative day/week/month/quarter bucket aggregates and, with include_lighthouse_scores, returns those Lighthouse diagnostics in every bucket. Never construct a Lighthouse trend by stitching snapshot calls because snapshot headline aggregation is not the QWA period-bucket calculation. Supports an exact page filter, a page-path contains filter such as /blog/, and an exact QWA content-category filter without first enumerating every page. LCP and INP use the same seconds-based values shown by QWA; CLS is unitless. Lighthouse score fields remain raw 0–1 values in the analytics payload; metricSemantics gives the required QWA presentation rule: multiply by 100, round to a whole score point, and do not append %. Every successful response includes dataCoverage, explicit pagePopulation semantics, and aggregationMetadata that forbids unsupported weighting or representativeness inferences. For QWA page-total comparisons, use pagePopulation.qwaDisplayedPages (the period union when comparison_range is present), not the backward-compatible selected-row pageCount. Use for "any Core Web Vitals regressions?" or page-speed questions. Optionally split mobile vs desktop, surface the broader Lighthouse scores (SEO / accessibility / best-practices), compare to a prior period, or return a per-page scorecard.

Inputs: date_range (required), scope, device, source, +8 more.

striking_distanceA
Read-only
Inspect

Find your "striking distance" keywords — the ones ranking just off page 1 (positions 8–20 by default) where a small rank nudge could win real clicks — and size the upside. Uses THIS site's OWN fitted CTR curve (modeled by ctr_curve_model, not a generic published curve): upside = impressions × (expected CTR at the target position − expected CTR at the current position), then an AI-Overview haircut is applied and AIO-dominated SERPs are down-weighted. Ranked by haircut-adjusted upside. Use for "what's our quickest-win SEO opportunity?" / "which keywords are closest to page 1?". The estimate is modeled, not a promise — AIO can erase the gain.

Inputs: date_range (required), brand, top_n, device, +7 more.

summarize_resultsA
Read-only
Inspect

Compute safe descriptive statistics for numeric result columns. A total is returned ONLY for metrics inferred to be additive (clicks, impressions, cost, revenue, etc.). Market share, rates, ratios, CTR, average position/rank, CPC/CPA, and unique/distinct counts never receive a total. avg is explicitly the unweighted mean of the returned rows, not a whole-population KPI.

Inputs: rows (required).

total_search_shareA
Read-only
Inspect

What's our TOTAL share of the search results page for a segment — organic plus paid combined? Combines your organic market share (your share vs tracked competitors) with your paid presence (Google Ads impression share + paid clicks) into a single total-SERP search-share number. Use for 'total search share', 'organic + paid share of the SERP', 'how much of search do we own'. ⚠️ SERP geometry is approximated — organic and paid occupy different page real estate, so the combined number is a labeled estimate, not a measured share of pixels. Defaults to the primary 'default' (Overall Market) segment when omitted — name another tracked segment to scope to it.

Inputs: date_range (required), medium, segment.

web_analytics_overviewA
Read-only
Inspect

How is my website traffic doing? Sessions, users, conversions, conversion rate, bounce rate, session duration and engagement from your web-analytics source (GA4 or Adobe Analytics) for one segment — optionally restricted to one country or broken down by country / device / landing page / traffic source / keyword / content category / intent — or, for the conversion metrics, by rank bucket ("conversions by rank bucket for pages containing /compare" is metrics:['conversions'], breakdown:'rank_bucket', page:'/compare') — and compared to a prior period. Pass goal (a tenant goal name like "Purchase", or goalN id) to make conversions and conversion_rate goal-specific — "purchase conversion rate for each product category" is goal:'Purchase', metrics including conversion_rate, breakdown:'category', sort_by:'conversion_rate'. The goal rate is governed and USER-based (completions ÷ unique users), the same basis QWA displays; NEVER derive a rate as conversions ÷ sessions. Follow-up drills retain scope by passing the selected category, subcategory, intent, page, or keyword while setting breakdown to the requested row type (for example breakdown:'page', category:'Login and Account'). Full page URLs are exact; path-only page scopes use contains matching because the underlying facts store absolute URLs. For a day/week/month/quarter trend by traffic source, call this tool exactly once with granularity plus breakdown:'source_medium'; it returns a single governed multi-source series instead of requiring one call per source or bucket. DEFAULT SCOPE mirrors QWA-as-built at CARD level, not per metric. With NO conversion metric requested, every metric is read at QWA Growth Trends' default scope — web search type + google/organic — so totals match an untouched QWA card, NOT raw GA4 all-source numbers. Requesting ANY of conversions, conversion_rate, total_value or transactions flips the WHOLE result to All traffic sources, behavioral metrics included, exactly as QWA's own "Switched to All traffic sources" does — so sessions/users are drawn from the same traffic population the rate's DENOMINATOR uses. The displayed conversions count remains QWA's All-Conversions total and is NOT the rate's numerator, so conversions / users does not reproduce the displayed rate; never derive a rate that way, and read metricDatasets for each metric's source. transaction_revenue does NOT flip the card (QWA has that entry commented out). Every result echoes the effective scope in appliedScope. A source_medium breakdown enumerates sources instead of pinning organic. This is the BEHAVIORAL / on-site lens (what visitors did once they arrived), NOT GSC clicks / impressions / rankings (use search_performance) and NOT market share vs competitors. ALWAYS per segment — called without one it lists the available segments.

Inputs: date_range (required), geo, goal, page, +16 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Remote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
      16
      9 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
      MIT
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.

    Resources