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

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

−5 this week 87 Trust /100

Last scanned (1 hour ago)

Scores higher than 89% of PyPI servers

Category Data and Analytics

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 Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 0 of 45 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to scalably-io/ga4-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 56 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
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 Management67
  • Stability observed for 20 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
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.

  • 5 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 4 Nov 26 −5
    • Stability: pass → 0.63 functional
  • 3 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 2 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 30 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 23 Oct 26 0
    • Stability: 0.97 → pass security
  • 22 Oct 26 0
    • Stability: pass → 0.97 functional
  • 19 Oct 26 0
    • Known CVEs: partial → pass ▲ security
    • Dependency health: partial → 1.00 functional
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 5 Nov 2026 · Analysed pypi/scalably-ga4-mcp@1.0.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo scalably-io/ga4-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/scalably-io/ga4-mcp/.github/workflows/release.yml@refs/tags/v1.0.1
Rekor log index 2765696795
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:da4d21ddc4843f0957ac4285c72fad543a77c457746e8346c25d84566bd2a41e

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 45 packages
Packages resolved 45
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.

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
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 87 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. 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 5 November 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.