Automatizar reporte de ventas semanal con Python pandas en 2026 sigue un patrón claro: cron o Airflow ejecuta script Python cada lunes 7 AM, el script extrae datos del ERP, CRM o data warehouse vía API o SQL, transforma con pandas (agregaciones, comparativas con semana previa y mes previo, segmentación por sucursal y vendedor), genera PDF con Jinja2 más weasyprint o HTML con dashboard, y entrega vía email SMTP, Slack o WhatsApp. Stack típico open source con costo cero por usuario. Pyme mediana típica entrega su primer reporte automatizado en 3 a 5 días con un desarrollador Python intermedio. Reporte ejecutivo completo con 20 más KPIs, narrativa IA y dashboard interactivo: 2 a 4 semanas. Sin licencias atadas cuando el código es tuyo.
Si tu pyme LATAM aún arma reporte de ventas semanal a mano y un analista pierde 4 a 8 horas cada lunes, esta guía te da el patrón técnico para automatizarlo bien.
Stack canónico
| Capa | Herramienta | Costo mensual |
|---|---|---|
| Extracción | pandas más SQLAlchemy o requests | Gratis |
| Transformación | pandas más numpy | Gratis |
| Visualización | matplotlib o plotly o seaborn | Gratis |
| Template PDF | Jinja2 más weasyprint o reportlab | Gratis |
| Scheduler | cron, Airflow o Prefect | Gratis a 100 USD |
| Hosting | Hetzner o DigitalOcean | 20 a 50 USD |
| Notificación | SMTP o SendGrid o Twilio | 0 a 30 USD |
| Total típico | 50 a 200 USD |
Paso 1: Conectar a tu fuente de datos
Las fuentes más comunes en pyme LATAM:
- ERP SAP B1 con Service Layer (REST OData)
- ERP Tango, Bejerman, Calipso con su API
- ERP Siigo Nube vía REST
- HubSpot CRM con su REST API
- Google Sheets con gspread
- Base de datos directo (Postgres, MySQL, SQL Server) con SQLAlchemy
Ejemplo: extraer ventas semanales desde Postgres:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:pass@host:5432/db')
query = '''
select
date_trunc('week', order_date) as week,
sucursal,
vendedor,
count(*) as orders,
sum(total_usd) as revenue_usd
from sales.orders
where order_date >= current_date - interval '8 weeks'
group by 1, 2, 3
order by 1 desc
'''
df = pd.read_sql(query, engine)
Paso 2: Transformar y calcular KPIs
# KPI 1: revenue semana actual
week_current = df[df['week'] == df['week'].max()]
revenue_this_week = week_current['revenue_usd'].sum()
# KPI 2: comparativa vs semana anterior
week_prev = df[df['week'] == df['week'].unique()[1]]
revenue_last_week = week_prev['revenue_usd'].sum()
delta_pct = (revenue_this_week - revenue_last_week) / revenue_last_week * 100
# KPI 3: top 5 vendedores
top_vendedores = (week_current
.groupby('vendedor')['revenue_usd']
.sum()
.sort_values(ascending=False)
.head(5))
# KPI 4: sucursal con caída más grande
delta_por_sucursal = (df
.groupby(['week', 'sucursal'])['revenue_usd']
.sum()
.unstack()
.pct_change()
.iloc[-1]
.sort_values())
Paso 3: Generar PDF con Jinja2 más weasyprint
from jinja2 import Template
from weasyprint import HTML
template_str = '''
<html>
<head><style> body { font family: Geist; } h1 { color: hashrgb 8b5cf6; } </style></head>
<body>
<h1>Reporte de ventas semana plus week_label</h1>
<p>Revenue total: USD plus revenue_this_week</p>
<p>Delta vs semana anterior: plus delta_pct por ciento</p>
<h2>Top 5 vendedores</h2>
<ul>
plus top_vendedores_html
</ul>
</body>
</html>
'''
# Render
html_str = template_str.replace('plus week_label', str(df['week'].max()))
# (resto del render con datos)
HTML(string=html_str).write_pdf('reporte_semanal.pdf')
Paso 4: Schedule con cron
# /etc/crontab
0 7 * * 1 cd /opt/reportes && /usr/bin/python3 generar_reporte.py 2>&1 | logger
Lunes 7 AM ejecuta el script. Para producción más seria, Airflow o Prefect con observability y retries.
Paso 5: Enviar por email
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg['Subject'] = 'Reporte de ventas semana ' + str(week_label)
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
msg.set_content('Adjunto el reporte de ventas semanal.')
with open('reporte_semanal.pdf', 'rb') as f:
msg.add_attachment(f.read(), maintype='application', subtype='pdf', filename='reporte_semanal.pdf')
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
smtp.login('[email protected]', 'app_password')
smtp.send_message(msg)
El caso real: 28 KPIs con IA narrativa y zero hallucinations
Una distribuidora multi país con 100 franquicias necesitaba reportería avanzada en 5 secciones (Financials, Sales, Services, Complaints, System Usage). Catalizadora entregó:
- 28 KPIs hardcoded en JavaScript con cálculo en browser side (cero server CPU)
- AI narrativa solo para texto, no para KPI calc
- Two level pattern: KPI headline más AI paragraph
- Audit trail immutable SHA-256 hash chain
- Verificable con función audit.verify_chain_integrity
- Inversión incluida en COT-0003 de 26,000 USD
Esto es lo que llamamos guardrails. KPIs en código, no hallucinations. Narrativa generada sobre datos verificados. Auditable y defendible.
Lo mismo aplica a tu reporte de ventas semanal: los números los calcula Python, la narrativa la genera Claude o GPT, pero los números nunca vienen del LLM. El LLM solo describe lo que el código ya calculó.
Lo que NO debes hacer
- Que el LLM calcule KPIs: termina con cifras inventadas que se ven plausibles
- Sin tests: cuando un KPI cambia, no te enteras hasta que el CEO te llama enojado
- Sin Git: no puedes hacer rollback cuando una métrica se rompe en producción
- Reporte sin enlace a fuente: si CEO no puede hacer drill down, eventualmente lo descarta
- Reporte muy largo: 1 página A4 o 2 max. Si requiere más, hay dashboard interactivo aparte.
Próximos pasos
Si tu pyme LATAM aún arma reportes a mano cada lunes, un script Python pandas resuelve el caso en 3 a 5 días con desarrollador intermedio. Cuando creces a reportería ejecutiva con 20 más KPIs, narrativa IA y dashboards interactivos, conviene un stack más serio.
Catalizadora arma ese diagnóstico en una llamada de 30 minutos, sin pitch deck, conversación real sobre tu operación.
- MAGIA Core construye sistemas a medida con dashboards por rol, reportería ejecutiva, KPIs en código y narrativa IA con guardrails en 12 semanas por 15,000 USD. Código a tu nombre.
- Para casos enterprise con motor de IA de primer día, observabilidad y CI o CD, MAGIA Forge entrega en 12 semanas por 20,000 USD.