https://pypi.org/project/google-analytics-data/
import os
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import RunReportRequest, DateRange, Dimension, Metric
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
# SCOPES define what your script is allowed to do
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
CLIENT_SECRET_FILE = '.google_client_secret.json'
PROPERTY_ID = "PROPERTY_ID"
def get_credentials():
creds = None
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
CLIENT_SECRET_FILE, SCOPES)
creds = flow.run_local_server(port=0)
with open('token.json', 'w') as token:
token.write(creds.to_json())
return creds
def run_report():
credentials = get_credentials()
client = BetaAnalyticsDataClient(credentials=credentials)
request = RunReportRequest(
property=f"properties/{PROPERTY_ID}",
dimensions=[Dimension(name="date")],
metrics=[
Metric(name="activeUsers"),
Metric(name="eventCount"),
Metric(name="newUsers")
],
date_ranges=[DateRange(start_date="7daysAgo", end_date="yesterday")],
)
response = client.run_report(request)
print(f"{'Date':<15} {'Active Users':<15} {'Event Count':<15} {'New Users':<15}")
print("-" * 60)
for row in response.rows:
print(f"{row.dimension_values[0].value:<15} {row.metric_values[0].value:<15} {row.metric_values[1].value:<15} {row.metric_values[2].value:<15}")
if __name__ == "__main__":
try:
run_report()
except Exception as e:
print(f"Error: {e}")
credentials = service_account.Credentials.from_service_account_info(
json.loads(os.environ.get('GCP_SERVICE_ACCOUNT')),
scopes=['https://www.googleapis.com/auth/analytics.readonly'],
)
client = BetaAnalyticsDataClient(credentials=credentials)
request = RunReportRequest(
property=f"properties/{os.environ.get('GA_PROPERTY_ID')}",
dimensions=[Dimension(name="pageLocation")],
metrics=[Metric(name="screenPageViews")],
date_ranges=[DateRange(start_date="28daysAgo", end_date="today")],
dimension_filter=FilterExpression(
filter=Filter(
field_name="hostName",
string_filter=Filter.StringFilter(
match_type=Filter.StringFilter.MatchType.CONTAINS,
value="ai.maryland.gov"
)
)
),
order_bys=[
OrderBy(
metric=OrderBy.MetricOrderBy(metric_name="screenPageViews"),
desc=True
)
]
)
response = client.run_report(request)
data_to_export = []
for row in response.rows:
page_url = row.dimension_values[0].value
views = row.metric_values[0].value
data_to_export.append({'page': page_url, 'views': views})
df = pd.DataFrame(data_to_export)
df
https://github.com/googleanalytics/google-analytics-mcp
cd ~/.gemini/extensions
git clone https://github.com/googleanalytics/google-analytics-mcp.git
mv google-analytics-mcp analytics-mcp
vi gemini-extension.json
{
"name": "analytics-mcp",
"description": "Manage Google Apps Script projects with command-line tools.",
"mcpServers": {
"analytics-mcp": {
"command": "pipx",
"args": [
"run",
"analytics-mcp"
],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "PATH_TO_CREDENTIALS_JSON",
"GOOGLE_PROJECT_ID": "YOUR_PROJECT_ID"
}
}
}
}