José Manuel Gómez a5ce85ed32 Add GACampaignMes sync and use it as optimization source
- New GACampaignMes table tracks monthly state of campaigns with activity
  (ENABLED status or cost > 0 this month)
- sync_gacampaignmes(): creates/updates records with PPL, CPAMax, CosteMes,
  ConvMes, CapTotalMes, Status for current month (numeric Mes: 1-12)
- get_active_gacampaignmes(): reads GACampaignMes as source for optimization loop
- get_leads_this_month_gads(): filters leads by GoogleCampaignID + utm_source
  (pmx/google) + utm_medium (paid_search) instead of attr_cursoid
- update_gacampaignmes_leads_lake(): links leads to GACampaignMes Leads Lake field
- batch_update_gacampaignmes_consejos(): saves agent advice to Consejo field
- Google Ads Campaigns table simplified to catalog only (name, status, PPL)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 13:00:34 +02:00
2026-04-17 12:53:25 +02:00
2026-04-17 12:53:25 +02:00
2026-04-17 12:53:25 +02:00
2026-04-17 12:53:25 +02:00
2026-04-17 12:53:25 +02:00
2026-04-17 12:53:25 +02:00

Leads Optimizer — Formación

Agente de optimización automática de campañas Google Ads para generación de leads de formación. Cruza datos de Airtable (leads reales) con métricas de Google Ads y decide ajustes de presupuesto.


Campos requeridos en Airtable

Tabla: "Google Ads Campaigns"

Campo Tipo Descripción
Curso Text Nombre del curso
GoogleCampaignID Number ID de campaña en Google Ads
PPL Number Precio por lead (€)
CapTotalMes Number Capping mensual de leads
CPAMaximo Number CPA máximo tolerable (€)
Activa Boolean TRUE para incluir en el análisis

Tabla: "Leads Lake"

Campo Tipo Descripción
GoogleCampaignID Text ID de campaña de origen
FechaEntrada Date Fecha del lead (formato YYYY-MM-DD)

Variables de entorno

export AIRTABLE_TOKEN=pat_xxxxxxxxxxxx
export AIRTABLE_BASE_ID=appXXXXXXXXXXXXXX

export GOOGLE_ADS_DEVELOPER_TOKEN=xxxx
export GOOGLE_ADS_CLIENT_ID=xxxx.apps.googleusercontent.com
export GOOGLE_ADS_CLIENT_SECRET=xxxx
export GOOGLE_ADS_REFRESH_TOKEN=xxxx
export GOOGLE_ADS_LOGIN_CUSTOMER_ID=1234567890  # sin guiones

export ANTHROPIC_API_KEY=sk-ant-xxxx

Instalación y ejecución

# Instalar dependencias
pip install -r requirements.txt

# Ejecutar en modo DRY RUN (recomendado para empezar)
# DRY_RUN = True en config.py → solo muestra decisiones, no aplica cambios
python run.py

# Cuando estés seguro, cambiar DRY_RUN = False en config.py
python run.py

Lógica de urgencia

Urgencia Condición Acción típica
PAUSAR leads >= capping Pausa campaña
SPRINT ritmo muy atrasado + quedan ≤ 5 días +30-50% presupuesto
ACELERAR ritmo atrasado > 15 puntos vs ratio del mes +10-25% presupuesto
FRENAR ritmo adelantado > 15 puntos vs ratio del mes -10-25% presupuesto
EN_RITMO dentro del margen esperado Mantener

Automatización con cron

# Ejecutar cada día a las 8:00
0 8 * * * cd /ruta/leads-optimizer && python run.py >> logs/optimizer.log 2>&1
Description
No description provided
Readme 345 KiB
Languages
Python 99.5%
Shell 0.5%