GA4 analytics access and reporting assistant workflow #16
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Labels: area:infra, improvement
Summary
Set up a practical workflow so Codex can help inspect Google Analytics 4 data, extract useful report slices, and explain trends or anomalies in plain language.
The goal is not just raw access to GA4, but a repeatable way to answer questions like:
Desired outcome
Have at least one reliable path for working with GA4 data from this environment:
Recommended implementation path
Phase 1: manual analysis from exports
Support a low-friction workflow where GA4 reports can be exported as CSV/XLSX and analyzed locally.
Deliverables:
Phase 2: GA4 Data API integration
Add a local script or small tool that queries the GA4 Data API directly.
Suggested capabilities:
Suggested auth options:
Likely primary endpoint:
runReportOptional Phase 3: BigQuery export
If the site needs deeper analytics, evaluate GA4 -> BigQuery export.
Use cases:
Technical notes
GA4 official references:
runReport: https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReportProposed local deliverables
scripts/ga4_report.pyor equivalentdocs/analytics/ga4-setup.mddocs/analytics/ga4-report-recipes.md.envconfiguration ofGA4_PROPERTY_IDQuestions to resolve
Acceptance criteria
Incidente 2026-08-08: cron
feadulta-ga4-dailyconinvalid_granttras renovación recienteSíntoma: el cron diario llevaba 3 días fallando (06-ago a 08-ago) con
invalid_grant: Token has been expired or revoked, a pesar de que el tokense había renovado el 05-ago (y ese mismo día funcionó bien).
Diagnóstico:
(
~/.hermes/scripts/feadulta_ga4_daily.py→feadulta_ga4_digest.py)apunta correctamente a
/mnt/c/Users/Chia/feadulta-git/.secrets/ga4-token.json.Reproducido el fallo a mano con
--token-pathexplícito sobre ese mismofichero: mismo error. El token recién renovado murió en <24h.
"Testing" en Google Cloud Console.
analytics.readonlyes un scope"sensible", y Google limita/expira agresivamente los refresh tokens de apps
no verificadas para esos scopes. Si esto se repite en pocos días más,
hay que publicar/verificar la app OAuth para dejar de depender de
renovaciones manuales frecuentes.
Renovado: 08-ago 09:33, verificado con un informe real (
report --preset summary --days 1).Gotcha nuevo durante la renovación — reenvío de puertos WSL2 roto:
El flujo
--no-browserdega4_report.pylevanta un servidor local en127.0.0.1:<puerto>dentro de WSL y espera el callback de Google. Esta vezel reenvío automático
localhostde Windows→WSL2 (localhostForwarding=trueen
.wslconfig) no funcionó para ese puerto efímero — confirmado conTest-NetConnectiondesde Windows (el puerto 3000 de Docker/Gitea sírespondía, el puerto del callback no). Probar la IP de la VM directamente
tampoco sirvió porque el servidor solo escucha en
127.0.0.1, no en lainterfaz externa.
Workaround que sí funcionó: cuando el navegador de Windows mostró
"localhost refused to connect", la URL de redirect con el
codede Google yaestaba en la barra de direcciones. En vez de reintentar por red, se hizo
curlde esa misma URL desde dentro de WSL contra127.0.0.1:<puerto>(loopback puro, sin cruzar la frontera Windows↔VM) — entregó el
codealservidor local a tiempo y completó el intercambio antes de que caducara.
Recomendación para
ga4-oauth-renewal.md(skillfeadulta-analytics): siWindows no puede alcanzar el
localhost:<puerto>de los pasos 4-6, noreintentar sin más — copiar la URL de callback que ya llegó al navegador y
hacer
curlde ella desde dentro de WSL contra127.0.0.1:<puerto>antes deque el
codecaduque.