Qué vas a tener cuando termines
Dejas de decidir por vistas: sabes qué contenido trae conversaciones y cuál trae ventas.
- Publico y no sé qué funcionacinco tablas con lo que Instagram no te muestra (qué publicación precedió cada pico de mensajes, qué comentan, cuántas conversaciones casi compran, a qué hora te escriben), las 3 cosas que debes repetir y las 3 que debes dejar, y la pestaña Leads creada para que desde hoy cada mensaje nuevo tenga su origen anotado.
- Tengo vistas pero no ventasel panel de atribución montado en una hoja de cálculo con sus tres uniones hechas (video → conversación → llamada → venta), la lista de contenidos «curiosos» (los que traen gente que pregunta y no agenda), y la decisión de qué gancho o promesa cambiar en ellos para atraer a la persona correcta.
- Quiero decidir con datos, no por sensaciónuna rutina de domingo de 20 minutos que termina con tres decisiones escritas (3 posts para repetir, 3 para dejar, 1 gancho para probar) y un registro semana a semana para comparar si la decisión anterior funcionó.
Elige la situación que es la tuya. La página te lleva paso a paso solo por esa.
Qué video trajo cada venta
Dejas de decidir por vistas: sabes qué contenido trae conversaciones y cuál trae ventas.
Tipo: sistema · Para: dueño de negocio o marca personal que publica y vende por mensajes (Instagram, WhatsApp), y quiere saber qué grabar y qué dejar de grabar · Tiempo: una tarde para montarlo; después, 20 minutos cada domingo para leerlo.
Cómo usar esta página
Copia esta página entera (el botón «Copiar todo» de arriba) y pégala en un chat nuevo de Claude. Claude va a leer las instrucciones de abajo y te va a guiar paso a paso, una pregunta a la vez, hasta que lo tengas hecho.
INSTRUCCIONES PARA CLAUDE (si eres Claude y te pegaron esta página, síguelas):
- Eres el asistente que Ignacio Giaverini (CreaVinci) preparó para este recurso. Hablas en español neutro, tú.
- Primero pregúntale a la persona en cuál de estas situaciones está: 1) «Publico y no sé qué funciona». 2) «Tengo vistas pero no ventas». 3) «Quiero decidir con datos, no por sensación». Una sola pregunta.
- Después sigue el paso a paso de ESE ángulo, un paso por mensaje, y no avances hasta que te confirme que lo hizo.
- Cuando un paso use una pieza (un prompt, una skill, una plantilla), se la das completa, lista para copiar.
- Si algo falla, ve a «Errores conocidos» antes de improvisar.
- No inventes cifras ni casos. No prometas lo que la página no dice.
- Al terminar, dile qué tiene hecho y cuál es el siguiente paso natural (está al final de la página).
Para quién es, y cuándo no
- Es para ti si publicas contenido, la gente te escribe por mensaje a raíz de lo que publicas, y vendes (o agendas llamadas) desde esas conversaciones. Con 10 posts con sus números ya se ve un patrón; con 8 o menos, la lectura vale solo para probar un gancho.
- Es para ti aunque no sepas programar: todo se hace con una hoja de cálculo, el export gratuito de Instagram y Claude. Lo único que corre código es un script corto de Python (unas 200 líneas, va entero en la Pieza A) que Claude Code ejecuta por ti.
- No es para ti (todavía) si no tienes ni 30 conversaciones al mes → entonces parte por una sola cosa: la pestaña Leads de la Pieza B, con la columna origen, y anota el origen de cada mensaje desde hoy. El panel entero viene cuando haya volumen.
- No es para ti si vendes por anuncios a una página de pago sin que nadie te escriba → ahí la atribución la hace el anuncio, no esta página. Igual te sirve la Pieza C para decidir qué contenido orgánico repetir.
Ángulo 1 · «Publico y no sé qué funciona»
Qué vas a tener al final: cinco tablas con lo que Instagram no te muestra (qué publicación precedió cada pico de mensajes, qué comentan, cuántas conversaciones casi compran, a qué hora te escriben), las 3 cosas que debes repetir y las 3 que debes dejar, y la pestaña Leads creada para que desde hoy cada mensaje nuevo tenga su origen anotado.
- Pide el export de tu cuenta hoy mismo, porque tarda horas en llegar: sigue el paso 1 de la Pieza A (formato JSON, últimos 3 meses). No hagas nada más con Instagram hasta que llegue el correo.
- Mientras llega el export, abre la app y anota a mano tus últimos 10 posts con los números que pide la Pieza C: tipo, tema, gancho (la primera línea), vistas, comentarios, guardados y cuántos mensajes nuevos te llegaron en los dos días siguientes. Ese conteo de mensajes lo sacas mirando la bandeja: cuenta las conversaciones cuyo primer mensaje cae en esos dos días. Si tienes esa tabla lista, ya puedes correr el prompt de la Pieza C con objetivo «conversaciones» y tener una primera lectura hoy. La del export es más fina y la haces cuando llegue.
- Cuando llegue el ZIP, descomprímelo en una carpeta (clic derecho, «Extraer todo») y ponle un nombre corto, por ejemplo
export-instagram. Revisa que adentro estén las carpetas de la tabla del paso 2 de la Pieza A. Si en vez de carpetas con archivos.jsonves archivos.html, pediste el formato equivocado: vuelve a pedirlo en JSON. - Crea el archivo
juntar_export.pycon el script del paso 3 de la Pieza A y córrelo sobre la carpeta. Si usas Claude Code, es un solo mensaje: «Crea el archivo juntar_export.py con este contenido y córrelo sobre la carpeta export-instagram», pegando el script debajo. Te dejaeventos.csven la misma carpeta y te dice cuántas conversaciones, mensajes, comentarios y publicaciones juntó. Si Conversaciones y Publicaciones no son cero, sigue (Comentarios puede ser cero si nadie te comentó en esos meses; no pasa nada). - Entrégale
eventos.csva Claude (en la app lo subes como archivo adjunto; en Claude Code le dices la ruta) junto con el prompt 1 de la Pieza A, la plantilla de los números. Te devuelve una tabla por punto y, al final, las 3 cosas para repetir y las 3 para dejar. - En el mismo chat, pega el prompt 2 de la Pieza A, el porqué. Lee las conversaciones de más de 4 mensajes: qué preguntaron, qué objeción apareció, qué publicación habían visto. Ahí está la razón por la que unos videos traen gente que compra y otros no.
- Abre una hoja de cálculo y crea la pestaña Leads de la Pieza B, aunque sea solo esa. Copia en ella las conversaciones de los últimos 30 días que aparecen en
eventos.csv(una fila por persona) y anota el origen de cada una. El origen solo va cuando lo sabes: la persona nombró el video en su primer mensaje (columna texto) o tú lo recuerdas. La última columna del CSV, la publicación más cercana, es una pista para ayudarte a recordar, no una prueba: si con la pista tampoco lo sabes, escribe «desconocido». Desde hoy, cada mensaje nuevo se anota en el momento en que llega.
Cómo sabes que quedó bien: puedes nombrar, sin abrir la app, qué publicación hubo antes de cada semana con más mensajes; tienes escritas las 3 cosas para repetir y las 3 para dejar; y la pestaña Leads tiene al menos una fila con origen distinto de «desconocido»: la del último mensaje que te llegó.
Ángulo 2 · «Tengo vistas pero no ventas»
Qué vas a tener al final: el panel de atribución montado en una hoja de cálculo con sus tres uniones hechas (video → conversación → llamada → venta), la lista de contenidos «curiosos» (los que traen gente que pregunta y no agenda), y la decisión de qué gancho o promesa cambiar en ellos para atraer a la persona correcta.
- Monta las cuatro pestañas de la Pieza B con las columnas exactas de la plantilla: Contenido, Leads, Conversaciones y Ventas. Tarda 10 minutos. Lo único que importa es que el id de cada contenido sea el mismo texto que después escribes en la columna origen de Leads: así se unen.
- Carga en Contenido todo lo que publicaste en las últimas 4 semanas, con su id, tipo, tema, gancho y vistas. Si ya corriste el Ángulo 1, la lista de publicaciones con su fecha y su texto sale de
eventos.csv(filas de tipo publicación); las vistas, comentarios y guardados los copias de la app, porque el export no los trae. Si no, la sacas de tu perfil, de la más reciente hacia atrás. - Carga en Leads a cada persona que te escribió en esas 4 semanas, una fila por persona, con la fecha de su primer mensaje y el origen. El origen es la primera unión: por qué te escribió (comentó un reel, respondió una historia, vino de un anuncio, de la bio). Para los de hoy en adelante lo anotas en el momento en que llega el mensaje. Para los viejos, si no lo recuerdas, «desconocido»; no lo inventes, porque un origen inventado te hace repetir el video equivocado.
- Haz la segunda unión: el link de agenda que mandas lleva al final
?lead=y el teléfono o usuario de la persona (la regla 4 de la Pieza B dice cómo). Cuando alguien agende, cambias su etapa en Leads a «agendó», y a «asistió» cuando se presente. Si el link va sin identificador, la cita llega huérfana y la tienes que unir a mano ese mismo día, o no la unes nunca. - Haz la tercera unión: cada venta se anota en la pestaña Ventas con el mismo lead, y su etapa pasa a «compró». Si la anotas en otro lado (una hoja aparte, un mensaje a ti mismo), para el panel esa venta no existe.
- Exporta las cuatro pestañas (o copia las celdas) y pégalas en Claude con el prompt de las tres lecturas de la Pieza B. Te devuelve, por contenido y por tema, cuántos leads trajo, cuántos agendaron y cuántos compraron. Ordenado por ventas, no por vistas. Ahí ves, por primera vez, el reel de 100.000 vistas que no trajo a nadie al lado del reel chico que trajo la última venta.
- Quédate en la tercera lectura, los curiosos: contenidos con leads y cero agendas. Ese contenido atrae a la persona equivocada. No se repite ni se optimiza: se le cambia el gancho o la promesa. Para saber qué cambiar, lee el resumen de esas conversaciones (la lectura ya te lo dice en una línea por contenido): lo que esas personas pedían es lo que tu gancho les prometió sin querer.
- Corre el prompt de la Pieza C con tu tabla de la semana y objetivo «agendas». Los 3 para repetir salen ordenados por agendas; los 3 para dejar suelen ser justamente los que tuvieron más vistas. Ese es el momento en que dejas de decidir por vistas.
Cómo sabes que quedó bien: cada lead nuevo de esta semana tiene origen anotado; puedes decir qué contenido trajo tu última venta con el id delante; y tienes una lista escrita de contenidos que no vas a volver a grabar tal como estaban, con la promesa nueva que van a llevar.
Ángulo 3 · «Quiero decidir con datos, no por sensación»
Qué vas a tener al final: una rutina de domingo de 20 minutos que termina con tres decisiones escritas (3 posts para repetir, 3 para dejar, 1 gancho para probar) y un registro semana a semana para comparar si la decisión anterior funcionó.
- Elige tu objetivo de la semana antes de mirar ningún número: conversaciones, agendas o seguidores. Uno solo. Si tienes el panel de la Pieza B andando, el objetivo es agendas; si recién partes, conversaciones. Los números se ordenan por ese objetivo y por ningún otro.
- Arma la tabla de tus 10 posts de la semana con lo que pide la Pieza C: tipo, tema, gancho, vistas, comentarios, guardados y conversaciones nuevas en los dos días siguientes (más agendas, si tienes atribución). Las conversaciones salen de la pestaña Leads de la Pieza B: cuenta las filas cuyo origen es ese contenido. Si publicaste menos de 8 piezas, arma igual la tabla: el prompt te va a advertir que la muestra es chica y vas a probar solo un gancho.
- Pega la tabla en el prompt de la Pieza C. Devuelve los 3 para repetir con lo que tienen en común, los 3 para dejar con la razón, un gancho para probar y, si corresponde, la advertencia de muestra chica o de cambio de objetivo.
- Si tienes el panel montado, corre también el prompt de las tres lecturas de la Pieza B: la lectura por tema pesa más que la lectura por post suelto. Un post puede haber salido bien por el día o por la hora; un tema que trae ventas tres semanas seguidas no es casualidad.
- Lee los resultados con estas tres reglas, que vienen de la Pieza C. Si los 3 para repetir son del mismo tema, esa es tu señal más fuerte del mes: el tema gana al formato. Si un post tuvo muchas vistas y cero conversaciones, atrajo a la persona equivocada: no cuenta como éxito, aunque sea el que más te gustó grabar. Si la advertencia dice «muestra chica», no cambies nada grande: prueba solo el gancho.
- Escribe las tres decisiones en una pestaña nueva de tu hoja llamada Decisiones, con la fecha: qué tema grabas más, qué contenido dejas, qué gancho pruebas. El domingo siguiente comparas la tabla nueva contra esa fila antes de correr el prompt: así sabes si la decisión de la semana pasada movió el número, o si solo cambió la sensación.
- Cada 3 meses vuelve a pedir el export y corre el Ángulo 1 completo: la hoja te dice qué contenido vende; el export te dice qué preguntaba la gente que casi compra, y eso cambia con los meses.
Cómo sabes que quedó bien: sales del domingo con tres decisiones escritas y un gancho listo para grabar; la pestaña Decisiones tiene una fila por semana; y la del domingo siguiente se escribió mirando la anterior, no de cero.
Las piezas
Pieza A · El diagnóstico de tu cuenta (paso a paso + script + dos prompts)
Sirve para saber, con el export gratuito de Instagram y sin ninguna herramienta paga, qué contenido trae conversaciones: quién te escribió, cuándo, qué comentaron y qué habías publicado ese día. Se usa al empezar y después cada 3 meses. Instagram te muestra vistas y likes; el export tiene lo que importa.
Paso 1 · Pedir el export
Instagram → Configuración → Tu información y permisos → Descargar tu información
(en las versiones nuevas de la app ese menú está dentro de «Centro de cuentas»)
Formato: JSON (no HTML).
Rango de fechas: los últimos 3 meses bastan.
Calidad de fotos y videos: la más baja. No necesitas las imágenes, solo los textos y las fechas.
Llega por correo en horas, a veces en un día. Descomprime el ZIP en una carpeta con nombre corto,
por ejemplo: export-instagram
Paso 2 · Qué carpetas sirven (y cuáles no)
| Carpeta | ¿Sirve? | Qué tiene |
|---|---|---|
messages/inbox/ |
Sí, la más importante | Cada conversación con fecha y quién escribió |
comments/ |
Sí | Tus comentarios y los que recibiste, con fecha |
content/posts y content/reels |
Sí | Qué publicaste y cuándo |
followers_and_following/ |
A medias | Quién te sigue, sin fecha útil |
ads_and_topics/ |
No | Intereses que Instagram te asigna |
En los exports nuevos esas carpetas cuelgan de una carpeta madre llamada your_instagram_activity. El script las encuentra igual, en cualquiera de las dos ubicaciones.
Paso 3 · El script que junta todo en un solo archivo
Junta las tres carpetas útiles en un CSV con una fila por evento: fecha, tipo (mensaje, comentario, publicación), persona, quién escribió, si es el primer mensaje de la conversación, cuántos mensajes tiene esa conversación, el texto corto, y la publicación más cercana en fecha. No necesita instalar nada: solo Python, que Claude Code te instala si no está.
Guarda esto tal cual en un archivo llamado juntar_export.py, en la misma carpeta donde descomprimiste el export (o dile a Claude Code que lo cree por ti).
# juntar_export.py
# Junta el export de Instagram (formato JSON) en un solo CSV: una fila por evento.
# Uso: python juntar_export.py carpeta-del-export
# Deja eventos.csv en la carpeta desde donde lo corres. Solo usa lo que Python trae de fábrica.
import bisect
import csv
import json
import os
import sys
from datetime import datetime, timedelta
SALIDA = "eventos.csv"
LARGO_TEXTO = 120
DIAS_HACIA_ATRAS = 7 # una publicación "cercana" es la última de los 7 días anteriores al evento
def arreglar_texto(s):
# Instagram guarda acentos y emojis mal codificados. Esto los repara; si no hace falta, devuelve igual.
if not isinstance(s, str):
return ""
try:
return s.encode("latin-1").decode("utf-8")
except (UnicodeEncodeError, UnicodeDecodeError):
return s
def corto(s):
s = arreglar_texto(s).replace("\n", " ").replace("\r", " ").strip()
if len(s) <= LARGO_TEXTO:
return s
return s[:LARGO_TEXTO - 3] + "..."
def fecha_desde(valor):
# Acepta segundos o milisegundos.
try:
v = float(valor)
except (TypeError, ValueError):
return None
if v > 1e11:
v = v / 1000.0
try:
return datetime.fromtimestamp(v)
except (OverflowError, OSError, ValueError):
return None
def leer_json(ruta):
try:
with open(ruta, encoding="utf-8") as f:
return json.load(f)
except Exception:
return None
def buscar_dicts(obj, clave):
# Devuelve todos los diccionarios, a cualquier profundidad, que tengan esa clave.
encontrados = []
if isinstance(obj, dict):
if clave in obj:
encontrados.append(obj)
for v in obj.values():
encontrados.extend(buscar_dicts(v, clave))
elif isinstance(obj, list):
for it in obj:
encontrados.extend(buscar_dicts(it, clave))
return encontrados
def main():
if len(sys.argv) < 2:
print("Uso: python juntar_export.py carpeta-del-export")
sys.exit(1)
raiz = sys.argv[1]
if not os.path.isdir(raiz):
print("No encuentro la carpeta:", raiz)
sys.exit(1)
conversaciones = [] # [(titulo, [(fecha, quien, texto), ...]), ...]
comentarios = [] # [(fecha, persona, texto), ...]
publicaciones = {} # clave: fecha exacta -> (tipo, texto)
for carpeta, _, archivos in os.walk(raiz):
partes = [p.lower() for p in carpeta.replace("\\", "/").split("/")]
for nombre in archivos:
n = nombre.lower()
if not n.endswith(".json"):
continue
ruta = os.path.join(carpeta, nombre)
if ("inbox" in partes or "message_requests" in partes) and n.startswith("message"):
datos = leer_json(ruta)
if not isinstance(datos, dict):
continue
titulo = arreglar_texto(datos.get("title", "")) or os.path.basename(carpeta)
msgs = []
for m in datos.get("messages", []):
f = fecha_desde(m.get("timestamp_ms"))
if not f:
continue
msgs.append((f, arreglar_texto(m.get("sender_name", "")), corto(m.get("content", ""))))
if msgs:
conversaciones.append((titulo, sorted(msgs)))
elif "comments" in partes:
datos = leer_json(ruta)
for item in buscar_dicts(datos, "string_map_data"):
smd = item.get("string_map_data") or {}
f = fecha_desde((smd.get("Time") or {}).get("timestamp"))
if not f:
continue
texto = (smd.get("Comment") or {}).get("value", "")
persona = (smd.get("Media Owner") or {}).get("value", "")
comentarios.append((f, arreglar_texto(persona), corto(texto)))
elif "content" in partes and any(k in n for k in ("post", "reel", "stor")):
datos = leer_json(ruta)
tipo = "reel" if "reel" in n else ("historia" if "stor" in n else "post")
for item in buscar_dicts(datos, "creation_timestamp"):
f = fecha_desde(item.get("creation_timestamp"))
if not f:
continue
texto = corto(item.get("title", ""))
anterior = publicaciones.get(f)
# un carrusel repite la misma fecha varias veces: nos quedamos con el texto más largo
if anterior is None or len(texto) > len(anterior[1]):
publicaciones[f] = (tipo, texto)
# Quién soy yo: la persona que aparece en más conversaciones distintas.
apariciones = {}
for _, msgs in conversaciones:
for quien in set(m[1] for m in msgs):
apariciones[quien] = apariciones.get(quien, 0) + 1
yo = max(apariciones, key=apariciones.get) if apariciones else ""
lista_pub = sorted(publicaciones.items())
fechas_pub = [f for f, _ in lista_pub]
def publicacion_cercana(fecha):
i = bisect.bisect_right(fechas_pub, fecha) - 1
if i < 0:
return ""
f, (tipo, texto) = lista_pub[i]
if fecha - f > timedelta(days=DIAS_HACIA_ATRAS):
return ""
return f.strftime("%Y-%m-%d") + " " + tipo + ": " + texto
filas = []
for titulo, msgs in conversaciones:
total = len(msgs)
for i, (f, quien, texto) in enumerate(msgs):
filas.append({
"fecha": f.strftime("%Y-%m-%d %H:%M"),
"tipo": "mensaje",
"persona": titulo,
"quien_escribio": "yo" if quien == yo else "la otra persona",
"primer_mensaje": "si" if i == 0 else "no",
"mensajes_en_conversacion": total,
"texto": texto,
"publicacion_cercana": publicacion_cercana(f),
})
for f, persona, texto in comentarios:
filas.append({
"fecha": f.strftime("%Y-%m-%d %H:%M"),
"tipo": "comentario",
"persona": persona,
"quien_escribio": "",
"primer_mensaje": "",
"mensajes_en_conversacion": "",
"texto": texto,
"publicacion_cercana": publicacion_cercana(f),
})
for f, (tipo, texto) in lista_pub:
filas.append({
"fecha": f.strftime("%Y-%m-%d %H:%M"),
"tipo": "publicacion " + tipo,
"persona": yo,
"quien_escribio": "yo",
"primer_mensaje": "",
"mensajes_en_conversacion": "",
"texto": texto,
"publicacion_cercana": "",
})
filas.sort(key=lambda r: r["fecha"])
columnas = ["fecha", "tipo", "persona", "quien_escribio", "primer_mensaje",
"mensajes_en_conversacion", "texto", "publicacion_cercana"]
with open(SALIDA, "w", encoding="utf-8-sig", newline="") as f:
w = csv.DictWriter(f, fieldnames=columnas)
w.writeheader()
w.writerows(filas)
total_msgs = sum(len(m) for _, m in conversaciones)
print("Yo soy:", yo or "(no encontrado: no hay conversaciones)")
print("Conversaciones:", len(conversaciones))
print("Mensajes:", total_msgs)
print("Comentarios:", len(comentarios))
print("Publicaciones:", len(lista_pub))
print("Listo:", SALIDA, "con", len(filas), "filas")
if __name__ == "__main__":
main()
Paso 4 · Correrlo
python juntar_export.py export-instagram
Te imprime quién detectó que eres tú (la persona que aparece en todas las conversaciones), cuántas conversaciones, mensajes, comentarios y publicaciones juntó, y deja eventos.csv en la carpeta. Se abre con cualquier hoja de cálculo. Si tienes Claude Code, el mensaje completo es: «Crea el archivo juntar_export.py con este contenido, córrelo sobre la carpeta export-instagram y dime cuántas filas tiene eventos.csv», con el script pegado debajo.
Así se ve eventos.csv por dentro (ejemplo del formato, con datos de muestra para que reconozcas las columnas):
fecha,tipo,persona,quien_escribio,primer_mensaje,mensajes_en_conversacion,texto,publicacion_cercana
2026-08-04 19:12,publicacion reel,tu_cuenta,yo,,,"Tu recepcionista no contesta a las 11 de la noche. El setter sí.",
2026-08-05 09:40,mensaje,María P.,la otra persona,si,6,"Hola, vi el video del setter, cómo funciona con WhatsApp?","2026-08-04 reel: Tu recepcionista no contesta a las 11 de la noche. El setter sí."
2026-08-05 09:55,mensaje,María P.,yo,no,6,"Hola María, te cuento: ...","2026-08-04 reel: Tu recepcionista no contesta a las 11 de la noche. El setter sí."
2026-08-05 21:03,comentario,tu_cuenta,,,,"Te escribo por interno",
Paso 5 · Prompt 1: la plantilla de los números (lo que el export sí tiene y la app no te muestra)
Entrégale eventos.csv a Claude (adjunto en la app, o la ruta en Claude Code) y pega esto:
Con eventos.csv responde:
1. Cuántas conversaciones nuevas por semana, y qué publicación hubo en los 2 días anteriores a cada pico.
2. Los 5 posts con más comentarios y las palabras que más se repiten en esos comentarios.
3. De las conversaciones, cuántas empezó la otra persona y cuántas empecé yo.
4. Cuántas conversaciones tienen más de 4 mensajes (esas son las que casi compran).
5. El día de la semana y la hora con más mensajes nuevos.
Devuelve una tabla por punto y, al final, las 3 cosas que debería repetir y las 3 que debería dejar.
Cómo leer el archivo: cada fila es un evento. Una conversación nueva es una fila de tipo «mensaje» con
primer_mensaje = si. Quién la empezó está en quien_escribio de esa misma fila. La publicación de los días
anteriores está en la última columna. Los comentarios son filas de tipo «comentario». Las publicaciones
son filas cuyo tipo empieza con «publicacion».
Paso 6 · Prompt 2: el porqué (se pega en el mismo chat, después del prompt 1)
El panel te dice qué video trajo la venta; este prompt te dice por qué. Lee las conversaciones que casi compran.
Ahora, de eventos.csv, toma solo las conversaciones con más de 4 mensajes (mensajes_en_conversacion
mayor que 4). Para cada una dime: quién la empezó, qué publicación había en los 2 días anteriores, qué
preguntó la persona en su primer mensaje (textual), qué objeción o duda apareció después, y cómo terminó
(agendó, pidió precio y se fue, quedó sin respuesta mía, otra).
Después, en conjunto:
1. Las 3 preguntas que más se repiten en el primer mensaje, textuales.
2. Las 3 objeciones o dudas que más se repiten.
3. Qué tienen en común las publicaciones que precedieron a estas conversaciones: tema, gancho, formato.
4. Cuántas quedaron sin respuesta mía, o con más de 24 horas de espera entre su mensaje y el mío.
Devuelve una tabla por conversación y las 4 respuestas al final. No inventes lo que el texto no dice: los
textos vienen cortados a 120 caracteres, y si con eso no alcanza para saber cómo terminó, escribe «no se
ve en el export».
Qué NO resuelve esta pieza: no tiene ventas, eso lo anotas tú en la Pieza B. Y no tiene alcance ni retención por video: eso sigue en la app. Sale de aquí con una decisión: anota desde hoy el origen de cada mensaje nuevo. El panel empieza ahí.
Pieza B · El panel de atribución (plantilla + prompt)
Sirve para unir el video con la conversación, la conversación con la llamada y la llamada con la venta, en una hoja de cálculo, para que cada semana sepas qué grabar y qué dejar de grabar. Se monta una vez y se alimenta todos los días; se lee los domingos. Sin atribución decides por vistas, y las vistas no compran.
Las tres uniones que hay que hacer
1. Video → conversación. Cada persona que te escribe llegó por algo: un comentario en un reel, una respuesta
a una historia, un anuncio, la bio. Ese origen se guarda en el primer mensaje: el id del contenido, la
palabra clave, el nombre del anuncio.
2. Conversación → llamada. Cuando mandas el link de agenda (tú o tu setter), el link lleva un identificador
de la persona (?lead=). Al agendar, la cita se une a esa conversación y no crea una persona nueva.
3. Llamada → venta. Cuando cierras, marcas la venta en la ficha de esa misma persona. Ahí se cierra el
círculo: el video que trajo el mensaje es el que trajo la venta.
La plantilla de la hoja (cuatro pestañas, estas columnas y no otras)
PESTAÑA 1 · Contenido
id | fecha | tipo (reel / historia / carrusel / anuncio) | tema | gancho (la primera línea) | palabra clave | vistas | comentarios | guardados
El id se arma con la fecha y un número del día, por ejemplo 2026-09-08-r1. Ese id es exactamente lo que
después escribes como origen en Leads: si no coinciden letra por letra, no se unen.
PESTAÑA 2 · Leads
lead (nombre) | fecha del primer mensaje | canal (instagram / whatsapp) | teléfono o usuario | origen (el id de Contenido, o la palabra «desconocido») | etapa (nuevo / conversando / agendó / asistió / compró / descartado)
PESTAÑA 3 · Conversaciones
lead | fecha | quién escribió (yo / la persona) | resumen de una línea
Sirve para leer después qué preguntó la gente que compró. Una fila por mensaje que valga la pena recordar,
no hace falta copiar todo.
PESTAÑA 4 · Ventas
lead | fecha | monto | qué compró
REGLAS DE LA HOJA
1. El origen se anota en el momento en que llega el mensaje. Un día después ya no te acuerdas.
2. Una persona es UNA fila en Leads aunque escriba por dos canales (Instagram y WhatsApp). Se une por
teléfono o por correo. Si quedan dos filas, el panel cuenta dos leads y ninguna venta para uno de ellos.
3. La venta se anota en Ventas con el mismo nombre de lead. Si está en otro lado, para el panel no existe.
4. El link de agenda que mandas lleva al final ?lead= y el teléfono o el usuario de la persona, por ejemplo:
tu-link-de-agenda?lead=56912345678. Cuando tu calendario te muestre la cita, ahí está el dato y cambias
la etapa. Si tu calendario no conserva lo que va después del signo de pregunta, el formulario de agenda
pide el mismo teléfono con el que la persona te escribió, y unes por teléfono. Nunca mandes el link pelado.
5. Los contenidos que no trajeron a nadie también van en Contenido. Un video con muchas vistas y cero leads
es un dato, no una ausencia.
El prompt de las tres lecturas (cada domingo)
Exporta las cuatro pestañas como CSV (o copia las celdas y pégalas como texto) y pega esto en Claude, con las cuatro tablas debajo:
Te pego las cuatro tablas de mi negocio: Contenido, Leads, Conversaciones y Ventas.
Une Leads con Contenido por la columna origen (origen de Leads = id de Contenido), y Ventas con Leads por
la columna lead. Devuelve tres lecturas:
1. Por cada contenido: cuántos leads trajo, cuántos agendaron (etapa agendó, asistió o compró), cuántos
compraron y el monto total. Ordena por compras, después por agendas, después por leads. Nunca por vistas.
(Contenido → Leads → Ventas)
2. Por cada tema: la misma cuenta sumando los contenidos del tema. El tema gana al video suelto. Marca el
tema que más vendió y el tema que más leads trajo sin vender.
3. Los curiosos: contenidos con leads y cero agendas. Para cada uno, lee los resúmenes de Conversaciones de
esos leads y dime en una línea qué pedían esas personas. Ese contenido atrae a la persona equivocada: se
le cambia el gancho o la promesa, no se repite.
Cierra con tres líneas: qué grabar esta semana (más de qué tema), qué dejar (qué contenido no se repite tal
como está) y qué gancho o promesa cambiar en los curiosos.
Si Leads tiene menos de 30 filas, avisa que la muestra es chica y no recomiendes dejar ningún tema
todavía: solo qué repetir. Si hay leads con origen «desconocido», dime cuántos son y déjalos fuera de las
cuentas, sin inventarles origen.
Tablas:
[pegar Contenido]
[pegar Leads]
[pegar Conversaciones]
[pegar Ventas]
Con eso decides el domingo qué grabar: más del tema que trajo ventas, menos del que trajo vistas.
Si usas CreaVinci: las tres uniones ya están hechas. El webhook guarda el origen del primer mensaje, el setter sella el ?lead= en cada link, el calendario une la cita a la persona y la venta se marca en la ficha. El panel lee esas cuatro tablas y muestra por contenido y por tema, sin hoja de cálculo. Montarlo requiere instalar el setter y conectar tu calendario, y eso se hace conmigo. Si usas otra herramienta, lo que tienes que exigirle es lo mismo: origen en el primer mensaje, identificador en el link de agenda, venta en la misma ficha. Si no puede hacer las tres, la hoja de arriba las hace.
Qué NO resuelve esta pieza: no te dice por qué un video vendió. Te dice cuál. El porqué lo sacas leyendo las conversaciones de los que compraron (pestaña Conversaciones, o el prompt 2 de la Pieza A). Y si todavía no tienes 30 conversaciones al mes, monta solo la pestaña Leads con la columna origen: el resto viene cuando haya volumen.
Pieza C · La decisión semanal de contenido (prompt)
Sirve para que el domingo no decidas por sensación. Con tus 10 posts de la semana y sus números (pegados a mano, o con Instagram conectado a Claude), devuelve los 3 posts para repetir, los 3 para dejar de hacer y el gancho a probar esta semana. Diez posts bastan para ver el patrón.
Qué necesita, por cada post de la semana pasada: tipo (reel, carrusel, historia), tema, gancho (la primera línea), vistas, comentarios, guardados, y cuántas conversaciones nuevas hubo en los dos días siguientes. Si tienes atribución (Pieza B), también cuántas agendas.
Ejemplo del formato de la tabla (los números son de muestra, solo para que veas cómo se pega; usa los tuyos):
post | tipo | tema | gancho | vistas | comentarios | guardados | conversaciones (2 días) | agendas
1 | reel | setter de IA | "Tu recepcionista no contesta a las 11 de la noche" | 12400 | 38 | 51 | 6 | 2
2 | reel | mi día | "Así es un lunes en la agencia" | 31000 | 12 | 4 | 0 | 0
3 | carrusel | anuncios | "3 razones por las que tu anuncio no vende" | 4100 | 9 | 60 | 3 | 1
El prompt
Estos son mis 10 posts de la semana con sus números: [pegar tabla].
Mi objetivo esta semana es [conversaciones / agendas / seguidores]. Ordena por ESE número, no por vistas.
Devuelve:
1. Los 3 para REPETIR: qué tienen en común (tema, gancho, formato) y cómo repetirlos sin copiarlos.
2. Los 3 para DEJAR: por qué no funcionaron para mi objetivo aunque hayan tenido vistas.
3. UN gancho para probar esta semana, salido del patrón de los 3 que funcionaron, con la pieza a la que iría.
4. Una línea de advertencia si la muestra es chica (menos de 8 posts) o si el objetivo cambió respecto de la semana anterior.
No recomiendes «publicar más». Recomienda qué.
Cómo se lee
- Si los 3 para repetir son del mismo tema, esa es tu señal más fuerte del mes: el tema gana al formato.
- Si un post tuvo muchas vistas y cero conversaciones, atrajo a la persona equivocada. No es un éxito.
- Si la advertencia dice «muestra chica», no cambies nada grande: prueba solo el gancho.
Qué NO resuelve esta pieza: no mide el alcance de historias ni la retención por segundo: eso se lee en la app. Y sin conversaciones anotadas, decide por comentarios, que es peor: por eso la pestaña Leads de la Pieza B va primero.
Errores conocidos
| Lo que ves | Por qué pasa | Qué haces |
|---|---|---|
| Decides grabar más del video con más vistas y las ventas no suben | Las vistas no compran. Un video puede tener 100.000 vistas y no traer a nadie, y otro con una fracción de esas vistas traer la venta | Ordena siempre por el objetivo (conversaciones o agendas), nunca por vistas. Es la primera línea del prompt de la Pieza C |
| Una cita aparece en el calendario y no sabes de qué conversación viene | Mandaste el link de agenda sin ?lead=: la cita llegó huérfana |
Únela a mano ese mismo día por teléfono o nombre. Y desde ahora, el link va siempre con el identificador (regla 4 de la Pieza B) |
| El panel cuenta dos leads y una venta «sin origen» para la misma persona | La persona escribió por Instagram y por WhatsApp y quedó como dos filas | Únelas por teléfono o correo en una sola fila de Leads, y borra la duplicada |
| La lectura del domingo dice que un video no vendió y tú sabes que sí | La venta se anotó en otro lado (una hoja aparte, un mensaje) y no en la pestaña Ventas con ese lead | Anótala en Ventas con el mismo nombre de lead. Si no está en la ficha, no existe para el panel |
| La mitad de los leads tiene origen «desconocido» | Se anotó el origen días después, cuando ya no te acordabas | El origen se anota en el momento en que llega el mensaje. Los viejos quedan como desconocido; no se inventan, porque un origen inventado te hace repetir el video equivocado |
| Un contenido trae muchos mensajes y ninguna agenda | Atrae a la persona equivocada: el gancho promete algo distinto de lo que vendes | No lo repitas ni lo optimices. Lee qué pedían esas personas (lectura 3 de la Pieza B) y cámbiale el gancho o la promesa |
| El prompt de la Pieza C avisa «muestra chica» | Publicaste menos de 8 posts en la semana | No cambies nada grande: prueba solo el gancho. La decisión de tema espera a tener 10 posts |
| Los 3 para repetir cambian cada semana y no ves patrón | Cambiaste el objetivo entre una semana y otra, o miras posts sueltos en vez de temas | Fija un objetivo por al menos 4 semanas y corre la lectura por tema de la Pieza B: el tema gana al post suelto |
Descomprimes el export y hay archivos .html en vez de carpetas con .json |
Pediste el formato HTML | Vuelve a pedirlo en formato JSON (paso 1 de la Pieza A). El script solo lee JSON |
| El script imprime «Conversaciones: 0» | Le diste la carpeta equivocada (el ZIP sin descomprimir, o una subcarpeta), o el export no incluyó mensajes | Pásale la carpeta madre del export descomprimido. Si sigue en 0, vuelve a pedir el export marcando «Mensajes» dentro de lo que quieres descargar |
Al correrlo dice que python no se reconoce como comando |
Python no está instalado en esa máquina | En Claude Code, escribe «instala Python y vuelve a correr juntar_export.py sobre export-instagram»: lo hace solo. Tarda unos minutos |
| Los nombres y textos del CSV salen con símbolos raros (Ã, Â, ðŸ) | Instagram guarda los acentos y emojis mal codificados; el script los repara, pero si abriste el archivo con otra codificación se ven mal | Abre eventos.csv desde la hoja de cálculo eligiendo codificación UTF-8, o dáselo a Claude directamente, que lo lee bien |
| Claude dice que el archivo es muy largo para pegarlo | Tres meses de mensajes pueden ser miles de filas | No lo pegues como texto: adjúntalo como archivo en la app, o en Claude Code dile la ruta. Si igual no cabe, pide un export de 1 mes |
| El prompt 2 de la Pieza A no puede decir cómo terminó una conversación | Los textos vienen cortados a 120 caracteres | Es esperable; el prompt ya lo declara. Para esas conversaciones, abre la bandeja y lee el final tú. Si son muchas, sube LARGO_TEXTO en el script a 300 y vuelve a correrlo |
| Tienes el panel montado pero casi ninguna venta que unir | Todavía no llegas a 30 conversaciones al mes: el panel completo no tiene con qué trabajar | Alimenta solo la pestaña Leads con origen y corre la Pieza C con objetivo «conversaciones». El resto de las pestañas espera al volumen |
Cuando ya lo tienes hecho
Tienes el panel alimentándose solo con la disciplina de anotar el origen, y cada domingo sales con tres decisiones y un gancho para probar. El siguiente paso natural es convertir ese gancho ganador en un guion grabable: ese es el recurso «La skill de guion de reel», que toma el gancho y devuelve el guion completo, y la semana siguiente el panel te dice si funcionó.
Si quieres que lo montemos en tu negocio, escríbeme por WhatsApp y te digo por dónde partir.