Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Google Analytics 4 MCP

PYPI · SCALABLY-GA4-MCP · 2 COMPONENTS · SCANNED SEP 20

Google Analytics 4 MCP: reports, realtime, funnels, pivots, metadata, admin lists. 17 tools.

+5 this week 58 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 0 of 46 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency45
Schema Quality & AI Usability72
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2383 tokens (~140/item across 17 items; 17 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management37
  • Stability observed for 11 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Google Analytics 4 MCP server?

Google Analytics 4 MCP runs locally as a PyPI package, launched with uvx scalably-ga4-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · scalably-ga4-mcp

# add to Claude Code
claude mcp add io-scalably-ga4-mcp -- uvx scalably-ga4-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "io-scalably-ga4-mcp": {
      "command": "uvx",
      "args": [
        "scalably-ga4-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "io-scalably-ga4-mcp": {
      "command": "uvx",
      "args": [
        "scalably-ga4-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add io-scalably-ga4-mcp -- uvx scalably-ga4-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-scalably-ga4-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "scalably-ga4-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add io-scalably-ga4-mcp --command uvx --arg scalably-ga4-mcp
# ~/.hermes/config.yaml
mcp_servers:
  io-scalably-ga4-mcp:
    command: "uvx"
    args: ["scalably-ga4-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "io-scalably-ga4-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "scalably-ga4-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add io-scalably-ga4-mcp -t stdio -c uvx -a scalably-ga4-mcp
// mcp.json
{
  "mcpServers": {
    "io-scalably-ga4-mcp": {
      "command": "uvx",
      "args": [
        "scalably-ga4-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +3
    • Stability: unverified → 0.27 functional
  • 9 Sept 26 53

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/scalably-ga4-mcp@1.0.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 46 packages
Packages resolved 46
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 17 exposed · ~2,383 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ga4_batch_run_reports ~143

Run up to 5 GA4 reports in a single round-trip. requests: list of run_report-shaped dicts. Same top-level parameters as ga4_run_report (minus property_id, inferred from the batch). Each entry accepts: dimensions, metrics, date_ranges, dimension_filter, metric_filter, order_bys, metric_aggregations, limit, offset, keep_empty_rows, currency_code. Useful when the agent needs paired views (e.g. landing pages + referrers for the same window) and wants them atomically + under one quota call.

NameTypeReqDescription
property_idstringyes
requestsarrayyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_check_compatibility ~129

Validate whether a dim/metric combo can be queried together. Cheap pre-flight. compatibility_filter: 'COMPATIBLE' (default, returns only fields that work with the provided selection) or 'INCOMPATIBLE' (returns only fields that would conflict). Use before run_report when composing exploratory queries, cheaper than catching a GoogleAdsException after a big failed report.

NameTypeReqDescription
compatibility_filterstring
dimension_filter
dimensions
metric_filter
metrics
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_get_metadata ~131

Fetch the full GA4 dimension + metric catalog for a property. If property_id is omitted, returns the universal catalog (excludes property-specific custom fields). Pass a property_id to include custom dimensions and metrics like 'customEvent:foo' and 'customUser:signup_plan'. Response: {"dimensions": [...], "metrics": [...]}. Each entry has api_name, ui_name, description, category, custom_definition. Call this before run_report when the agent is uncertain about field names: GA4's catalog is large and custom fields require the property to resolve.

NameTypeReqDescription
property_id
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_get_property_details ~91

Full metadata for a single GA4 property. Returns display_name, property_type, parent account, time_zone, currency_code, industry_category, service_level, delete_time, expire_time, account reference, create_time, update_time. property_id: numeric (e.g. "123456789") or resource (e.g. "properties/123456789").

NameTypeReqDescription
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_list_account_summaries ~97

List every GA4 account and its child properties accessible to this service account. CALL THIS FIRST to discover which property_id to pass into other tools. The SA only sees accounts/properties where its email has been explicitly added as a user. Response: {"accounts": [{account, display_name, property_summaries: [...], ...}]}. Each property_summary has property, display_name, property_type, parent.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

ga4_list_audiences ~94

List audiences defined on a GA4 property. Each audience has name, display_name, description, membership_duration_days, ads_personalization_enabled, event_trigger, exclusion_duration_mode, filter_clauses. Reference audienceId as a dimension in run_report for audience-based breakdowns. NOTE: Uses Admin v1alpha since audiences are still alpha in April 2026.

NameTypeReqDescription
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_list_custom_dimensions ~87

List custom dimensions configured on a GA4 property. Each entry contains the parameter_name (how you query it, use prefix 'customEvent:' or 'customUser:' when passing to get_metadata / run_report), display_name, scope (EVENT|USER|ITEM), and description. Essential grounding before running reports that reference custom fields.

NameTypeReqDescription
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_list_custom_metrics ~47

List custom metrics configured on a GA4 property. Each entry: parameter_name, display_name, measurement_unit, scope, restricted_metric_type.

NameTypeReqDescription
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_list_data_streams ~69

List all data streams (web, iOS, Android) on a GA4 property. Useful for finding the Measurement ID (web), firebase_app_id (mobile), or the hostname of a web stream. Each stream has its creation/update timestamps.

NameTypeReqDescription
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_list_google_ads_links ~79

List Google Ads links attached to a GA4 property. Returns customer_id (the Ads account), can_manage_clients, ads_personalization_enabled, and creator_email. Useful to confirm Ads ↔ GA4 cross-reporting availability before querying Ads-related dimensions like sessionGoogleAdsCampaignId.

NameTypeReqDescription
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_list_key_events ~59

List key events (formerly conversions) on a GA4 property. These are the events the client has marked as conversion-worthy. Query conversion metrics via `conversions` dimension or direct metric names.

NameTypeReqDescription
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_list_property_annotations ~111

List reporting annotations on a GA4 property. Annotations are markers (user-added or Google-system) flagging important events on a timeline: product launches, outages, marketing pushes, so downstream analysis can correlate metric swings with known events. Each annotation has: name, title, description, annotation_date, annotation_date_range, color, creator_email, system_generated. NOTE: Uses Admin v1alpha since annotations are still alpha in April 2026.

NameTypeReqDescription
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_run_access_report ~121

Audit log of who-read-what on a GA4 property (last 12 months). dimensions (common): userEmail, accessedPropertyName. metrics: accessCount. date_ranges: list of {start_date, end_date} (YYYY-MM-DD or relative). Defaults to last 7d. Use cases: identify usage of GA4 data by staff, confirm SA activity, compliance audits.

NameTypeReqDescription
date_ranges
dimensions
limitinteger
metrics
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_run_funnel_report ~246

Run a GA4 funnel report. v1alpha, API surface may change. funnel: { is_open_funnel: bool, steps: [ { name: str, is_directly_followed_by: bool, filter_expression: FunnelFilterExpression, within_duration_from_prior_step: {seconds: int}, }, ... ] } funnel_breakdown: {dimension_name, limit}, optional per-step breakdown. funnel_next_action: {dimension_name, limit}, optional "what came after". Use for drop-off analysis across a sequence of events. Behind an alpha flag because Google can change the shape, check the Feb 2026 release notes if this fails with a validation error. Ref: https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1alpha/properties/runFunnelReport

NameTypeReqDescription
date_ranges
dimension_filter
funnelobjectyes
funnel_breakdown
funnel_next_action
limitinteger
property_idstringyes
return_property_quotaboolean
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_run_pivot_report ~182

Run a GA4 pivot report. pivots: list of pivot specs, each with: - field_names: list of dimension names to pivot on - limit: max rows per pivot - offset: pagination offset - order_bys: list of OrderBy dicts (same shape as run_report's order_bys) - metric_aggregations: list of TOTAL|MINIMUM|MAXIMUM|COUNT Use when you want a 2D view: e.g. rows=date, columns=device, values=sessions.

NameTypeReqDescription
currency_code
date_ranges
dimension_filter
dimensions
keep_empty_rowsboolean
metric_filter
metrics
pivots
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_run_realtime_report ~216

Run a GA4 real-time report. Covers the last 30 minutes only. IMPORTANT: realtime uses a SEPARATE, smaller dimension/metric catalog. Do NOT pass 'date', 'totalRevenue', etc: they don't exist in realtime. Common dims: 'minutesAgo', 'country', 'deviceCategory', 'unifiedScreenName', 'eventName'. Common metrics: 'activeUsers', 'screenPageViews', 'eventCount'. minute_ranges: list of {start_minutes_ago, end_minutes_ago, name?}. Max 2 ranges. Values are 0-29 (0 = now, 29 = 30 min ago). For historical / batch reports use ga4_run_report instead.

NameTypeReqDescription
dimension_filter
dimensions
limitinteger
metric_aggregations
metric_filter
metrics
minute_ranges
order_bys
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

ga4_run_report ~481

Run a GA4 standard report. The workhorse tool. Args: property_id: numeric or 'properties/NNN'. dimensions: list of dimension api_names (e.g. ["country", "deviceCategory", "date"]). Custom dims require 'customEvent:' or 'customUser:' prefixes. metrics: list of metric api_names (e.g. ["activeUsers", "sessions", "totalRevenue"]). date_ranges: list of {start_date, end_date, name?}. Accepts 'YYYY-MM-DD', 'NdaysAgo', 'today', 'yesterday'. Up to 4 ranges. dimension_filter / metric_filter: filter expression dicts. Shapes: {"filter": {"field_name": "country", "string_filter": {"value": "US"}}} {"and_group": {"expressions": [...]}} {"or_group": {"expressions": [...]}} {"not_expression": {...}} order_bys: list of {metric: {metric_name}, desc} or {dimension: {...}}. metric_aggregations: list of TOTAL|MINIMUM|MAXIMUM|COUNT. limit: max rows (hard cap 250000 per response). offset: pagination offset. keep_empty_rows: include rows where all metrics are zero. currency_code: override property default for revenue metrics. cohort_spec / comparisons: advanced specs (see REST docs). Gotchas surfaced in response.metadata: - samplingMetadatas: present if query was sampled (> 10M events scanned) - dataLossFromOtherRow: true if high-cardinality dims collapsed into "(other)" - schemaRestrictionResponse: active thresholding rules - subjectToThresholding: true if user-privacy thresholding dropped rows propertyQuota always included so the agent can self-throttle.

NameTypeReqDescription
cohort_spec
comparisons
currency_code
date_ranges
dimension_filter
dimensions
keep_empty_rowsboolean
limitinteger
metric_aggregations
metric_filter
metrics
offsetinteger
order_bys
property_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

Common questions

What is the Google Analytics 4 MCP server?

Google Analytics 4 MCP is listed in the public MCP registry as io.scalably/ga4-mcp. Google Analytics 4 MCP: reports, realtime, funnels, pivots, metadata, admin lists. 17 tools. This page covers its PyPI package (scalably-ga4-mcp).

Is the Google Analytics 4 MCP server safe to use?

Google Analytics 4 MCP scores 58 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Google Analytics 4 MCP server expose?

Google Analytics 4 MCP exposes 17 tools: ga4_list_account_summaries, ga4_get_property_details, ga4_list_data_streams, ga4_list_custom_dimensions, ga4_list_custom_metrics, and 12 more. Their descriptions and schemas cost roughly 2,383 tokens of context every time the server is loaded.

Is the Google Analytics 4 MCP server still maintained?

Google Analytics 4 MCP is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Google Analytics 4 MCP server under?

Google Analytics 4 MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.