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}")