Google Analytics
STDIOGoogle Analytics 4 MCP server for querying website traffic and analytics data in natural language
Google Analytics 4 MCP server for querying website traffic and analytics data in natural language
  
mcp-name: io.github.surendranb/google-analytics-mcp
Connect Google Analytics 4 data to Claude, Cursor and other MCP clients. Query your website traffic, user behavior, and analytics data in natural language with access to 200+ GA4 dimensions and metrics.
Compatible with: Claude, Cursor and other MCP clients.
I also built a Google Search Console MCP that enables you to mix & match the data from both the sources
---Check your Python setup:
# Check Python version (need 3.10+) python --version python3 --version # Check pip pip --version pip3 --version
Required:
client_email field[email protected])123456789)
Verify your credentials:
pip install google-analytics-data
Create a test script (test_ga4.py):
import os from google.analytics.data_v1beta import BetaAnalyticsDataClient # Set credentials path os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/path/to/your/service-account-key.json" # Test connection client = BetaAnalyticsDataClient() print("✅ GA4 credentials working!")
Run the test:
python test_ga4.py
If you see "✅ GA4 credentials working!" you're ready to proceed.
Choose one method:
pip install google-analytics-mcp
MCP Configuration:
First, check your Python command:
python3 --version python --version
Then use the appropriate configuration:
If python3 --version worked:
{ "mcpServers": { "ga4-analytics": { "command": "python3", "args": ["-m", "ga4_mcp_server"], "env": { "GOOGLE_APPLICATION_CREDENTIALS": "/path/to/your/service-account-key.json", "GA4_PROPERTY_ID": "123456789" } } } }
If python --version worked:
{ "mcpServers": { "ga4-analytics": { "command": "python", "args": ["-m", "ga4_mcp_server"], "env": { "GOOGLE_APPLICATION_CREDENTIALS": "/path/to/your/service-account-key.json", "GA4_PROPERTY_ID": "123456789" } } } }
git clone https://github.com/surendranb/google-analytics-mcp.git cd google-analytics-mcp python3 -m venv venv source venv/bin/activate pip install -r requirements.txt
MCP Configuration:
{ "mcpServers": { "ga4-analytics": { "command": "/full/path/to/ga4-mcp-server/venv/bin/python", "args": ["/full/path/to/ga4-mcp-server/ga4_mcp_server.py"], "env": { "GOOGLE_APPLICATION_CREDENTIALS": "/path/to/your/service-account-key.json", "GA4_PROPERTY_ID": "123456789" } } } }
Replace these placeholders in your MCP configuration:
/path/to/your/service-account-key.json with your JSON file path123456789 with your GA4 Property ID/full/path/to/ga4-mcp-server/ with your download path (Method B only)Once configured, ask your MCP client questions like:
Try these example queries to see the MCP's analytical capabilities:
Show me a map of visitors by city for the last 30 days, with a breakdown of new vs returning users
This demonstrates:
Compare average session duration and pages per session by device category and browser over the last 90 days
This demonstrates:
Show me conversion rates and revenue by traffic source and campaign, comparing last 30 days vs previous 30 days
This demonstrates:
What are my top 10 pages by engagement rate, and how has their performance changed over the last 3 months?
This demonstrates:
This MCP server includes built-in optimizations to prevent context window crashes and ensure smooth operation:
limit - Set maximum number of rows to returnproceed_with_large_dataset=True - Override warnings for large datasetsenable_aggregation=False - Disable automatic aggregationestimate_only=True - Get row count estimates without fetching data# This query would normally return 2,605 rows and crash context window get_ga4_data( dimensions=["date", "pagePath", "country"], date_range_start="90daysAgo" ) # Returns: {"warning": True, "estimated_rows": 2605, "suggestions": [...]} # Use monthly aggregation instead get_ga4_data( dimensions=["month", "pagePath", "country"], date_range_start="90daysAgo" ) # Returns: Clean monthly data with manageable row count
The server provides 5 main tools with built-in optimization to prevent context window crashes:
get_ga4_data - Retrieve GA4 data with custom dimensions and metrics
limit, proceed_with_large_dataset, enable_aggregationlist_dimension_categories - Browse available dimension categorieslist_metric_categories - Browse available metric categoriesget_dimensions_by_category - Get dimensions for a specific categoryget_metrics_by_category - Get metrics for a specific categoryAccess to 200+ GA4 dimensions and metrics organized by category:
If you get "No module named ga4_mcp_server" (Method A):
pip3 install --user google-analytics-mcp
If you get "executable file not found":
python vs python3)pip3 instead of pip if neededPermission errors:
# Try user install instead of system-wide pip install --user google-analytics-mcp
Credentials not working:
123456789) ✅G-XXXXXXXXXX) ❌API quota/rate limit errors:
google-analytics-mcp/
├── ga4_mcp_server.py       # Main MCP server
├── ga4_dimensions.json     # All available GA4 dimensions
├── ga4_metrics.json        # All available GA4 metrics
├── requirements.txt        # Python dependencies
├── pyproject.toml          # Package configuration
├── README.md               # This file
└── claude-config-template.json  # MCP configuration template
MIT License