Generador de reportes de Google Analytics 4 (Data API v1beta) que exporta métricas diarias a CSV. Usa el patrón de diseño Factory Method para construir distintos tipos de reporte, y una arquitectura por capas (domain · usecase · view · infrastructure) que aísla la lógica de la API de Google.
Cada tipo de reporte es un "producto" que sabe construir su propia query; la factory resuelve la clase concreta a partir de un identificador:
report = GA4ReportFactory.create_report("activeUserspPerDay", "2023-07-01", "2023-07-01")Tipos registrados:
report_type |
Dimensiones | Métricas |
|---|---|---|
activeUserspPerDay |
date |
activeUsers |
users |
date |
totalUsers, newUsers |
page_views |
date, pagePath |
screenPageViews |
Agregar un reporte nuevo = crear una clase GA4Report y registrarla en la factory.
src/
├── domain/
│ ├── ga4_report_domain.py # Factory Method + productos (GA4Report)
│ └── ga4_report_exceptions.py # GA4Exception (error de dominio)
├── usecase/
│ └── ga4_report_generate_usecase.py # Arma la query y transforma la respuesta
├── view/
│ ├── ga4_report_controller.py # Coordina el caso de uso
│ └── ga4_report_dto.py # GA4ReportDTO (especificación del reporte)
└── infraestructure/
└── ga4_report_conection.py # Cliente de la GA4 Data API (service account)
main.py # Recorre fechas y exporta los reportes a CSV
python -m venv venv && source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txtcp .env.example .env
# edita .env:
# SERVICE_ACCOUNT_FILE = ruta al JSON del service account (con acceso a GA4)
# GA4_PROPERTY_ID = id de tu propiedad GA4El service account necesita el scope analytics.readonly y estar añadido como
usuario de la propiedad de GA4.
python main.pyAjusta START_DATE, END_DATE y REPORT_TYPES en main.py. Los CSV se guardan
en backup/report_<fecha>/<tipo>/.
pip install pytest
pytestCubren la factory (cada tipo construye la query correcta y los tipos inválidos fallan) y el caso de uso (transformación de la respuesta de GA4 con una conexión simulada), sin necesidad de credenciales ni de red. Corren en GitHub Actions.
.env y el JSON del service account están en .gitignore (sólo se versiona
.env.example). El entorno virtual y la salida backup/ tampoco se versionan.
Python 3.11 · google-analytics-data · pandas · python-dotenv
MIT