# Tu agente revisa a tu competencia cada semana > Guía de Jaime Herrera (VisiumAI) · versión 2026-10-20 · https://visiumai.com/guias/competencia.md ## Para ti Cada lunes, mi agente de IA revisa a 35 canales de YouTube y a más de 20 cuentas de Instagram de mi competencia, y me dice qué les está funcionando esa semana. Con esta guía, tu agente arma lo mismo para tu negocio: un **radar de competencia** que corre cada semana y te entrega un reporte corto. - **No busca lo que tiene más vistas, sino lo que rindió más de lo normal** para cada competidor. Un video con 30 mil vistas en un canal que suele tener 3 mil dice mucho más que uno con 300 mil en un canal que siempre tiene 300 mil: te dice qué tema está pegando, no quién tiene más seguidores. - **La herramienta depende de dónde está tu competencia.** No es lo mismo revisar YouTube que anuncios de Facebook, Google Maps o Mercado Libre. Tu agente elige la fuente correcta para cada competidor (tabla del paso 2). - **Lo que cuesta:** YouTube y las páginas web, gratis. Instagram, Google Maps y algunos anuncios van con Apify, que cobra por resultado: a mí un barrido de Instagram me cuesta menos de 2 dólares, y su plan gratis trae 5 dólares de uso cada mes. Tu agente te dice el costo máximo antes de cada corrida. **Qué necesitas:** un agente que use la terminal de tu computadora (Claude Code, Codex, Gemini CLI u otro parecido), Python 3.10 o más nuevo y, según dónde esté tu competencia, una cuenta de Google Cloud (gratis) o de Apify. **Cómo usarla:** abre tu agente y pégale esto: > Lee completa https://visiumai.com/guias/competencia.md y sigue la guía paso a paso. Te preguntará a qué te dedicas, quiénes son tus competidores y dónde está cada uno. Te mostrará un plan con el costo y esperará tu OK antes de instalar nada. La primera vez toma de 30 a 60 minutos; después, cada reporte, unos minutos. --- ## Para el agente Vas a armar un radar de competencia para la persona con la que trabajas: un proyecto que, una vez por semana, junta lo que publicaron sus competidores donde estén, encuentra lo que les rindió más de lo normal y le entrega un reporte en Markdown. Sigue los pasos en orden. ### Reglas de ejecución 1. **Lee la guía completa antes de empezar.** Si tu herramienta para leer páginas web resume el contenido, descarga el archivo tal cual (por ejemplo, `curl -sL https://visiumai.com/guias/competencia.md`). 2. **Primero el plan.** Después de la entrevista (paso 1), muestra un plan corto: qué fuente usarás para cada competidor, qué vas a instalar, qué cuentas hacen falta y cuánto costará al mes. Espera el OK. 3. **El costo antes de cada corrida.** Toda corrida que cueste dinero (Apify) muestra antes su costo máximo, y la cuenta lleva un límite de gasto. Nunca pases el presupuesto que dio la persona. 4. **Credenciales fuera del chat.** Las llaves y tokens van en un archivo `.env` (en `.gitignore`) o en el gestor de secretos del sistema, y los pone la persona. Nunca los escribas en el chat, en el código ni en un repo. 5. **Solo lo que cualquiera ve sin cuenta, y solo datos de negocio.** Guarda métricas y textos de las publicaciones, anuncios y páginas de los competidores; nada de datos personales (nombres de quien comenta, correos, teléfonos). Las API oficiales se usan con la llave o el token de la persona; fuera de eso, no entres con su cuenta a ninguna plataforma para extraer datos y no te saltes inicios de sesión ni muros de pago. Si los términos de un sitio prohíben la extracción automática, díselo a la persona y que ella decida. 6. **Sin prisa con los sitios.** Una petición a la vez por sitio, con pausas de unos segundos, y guarda en caché lo que ya bajaste para no pedirlo dos veces. 7. **Usa el idioma de la persona** para hablarle y para el reporte. ### Paso 1. Entrevista Haz estas preguntas en un solo mensaje: 1. **¿A qué te dedicas y a quién le vendes?** Una o dos líneas. 2. **¿Quiénes son tus competidores?** De 5 a 15, con su nombre y, si los tienes, sus links. Incluye a los que admiras aunque no compitan directo. 3. **¿Dónde está cada uno?** YouTube, Instagram, TikTok, sitio web, anuncios de Facebook o Instagram, Google Maps, Mercado Libre, Amazon u otro. Si no sabes, búscalo tú (sitio web → enlaces a sus redes) y confírmalo con la persona. 4. **¿Qué quieres saber cada semana?** Por ejemplo: qué temas les pegan, qué anuncios nuevos lanzan, cómo cambian sus precios, qué dicen sus reseñas. 5. **¿Cuánto puedes gastar al mes?** Puede ser 0: entonces solo se usan las fuentes gratis. 6. **¿Dónde quieres los reportes y qué día?** Una carpeta, tu vault de Obsidian, Notion… El lunes es buen día. ### Paso 2. Una herramienta según dónde está la competencia | Dónde está | Herramienta | Costo | Qué se mide | |---|---|---|---| | YouTube | YouTube Data API v3 (oficial) | Gratis | Vistas de cada video contra la mediana de su canal | | Instagram o TikTok | Apify (actores oficiales) | ~2.60 USD por 1,000 Reels | Reproducciones de cada Reel contra la mediana de la cuenta | | Sitio web, landings y precios | Scrapling (open source, BSD-3) | Gratis | Precios, ofertas y páginas nuevas, contra la semana pasada | | Anuncios de Facebook e Instagram | Biblioteca de anuncios de Meta, con Scrapling o el actor oficial de Apify | Gratis, o ~5.80 USD por 1,000 anuncios | Anuncios activos y desde cuándo corren | | Google Maps | Apify (Google Maps Scraper) | ~4 USD por 1,000 lugares | Calificación, reseñas nuevas y de qué se quejan | | Mercado Libre | API oficial de Mercado Libre (con app y token) | Gratis | Precio y publicaciones nuevas de cada vendedor | | Amazon, LinkedIn | Apify | Por resultado | Según el giro | Los precios de Apify son los del plan gratis (octubre de 2026); en los planes de pago bajan. Por qué así: - **Si hay API oficial, va primero** (YouTube, Mercado Libre): es gratis, estable y no rompe términos. - **Instagram, TikTok, LinkedIn y Amazon no se raspan con código propio.** Piden sesión, bloquean por IP y cambian sin aviso; el mantenimiento sería tuyo y arriesgas la cuenta de la persona. Ahí va Apify, que se encarga de eso. - **Las páginas web y la Biblioteca de anuncios de Meta van con Scrapling.** La API oficial de anuncios de Meta, fuera de la Unión Europea, solo devuelve anuncios de temas sociales, electorales o políticos; para anuncios comerciales hay que leer la biblioteca pública (no pide cuenta) como lo haría una persona, o usar el actor oficial de Apify. ### Paso 3. El proyecto Crea una carpeta `radar-competencia/` (o donde diga la persona) con esta forma: ``` radar-competencia/ competidores.json quién es cada competidor y dónde está (lo editas con la persona) .env llaves y tokens (en .gitignore) fuentes/ un script por fuente: youtube.py, apify.py, web.py, mercadolibre.py datos/AAAA-MM-DD/ lo que bajó cada corrida, tal cual (JSON) reportes/ un reporte por semana (AAAA-MM-DD.md) radar.py corre las fuentes de competidores.json y arma el reporte ``` `competidores.json` lleva una entrada por competidor y una línea por cada lugar donde está: ```json [ { "nombre": "Competidor A", "youtube": "@competidora", "instagram": "competidora", "web": ["https://competidora.com/precios"], "anuncios_meta": "Competidor A" }, { "nombre": "Competidor B", "google_maps": "https://maps.app.goo.gl/...", "mercadolibre": "NOMBRE_DEL_VENDEDOR" } ] ``` Usa un entorno virtual de Python (`python -m venv .venv`) y anota las dependencias en `requirements.txt`. ### Paso 4. Instalación por fuente Instala solo las fuentes que salieron en la entrevista. **4.1 YouTube (gratis).** La persona crea una llave en Google Cloud Console: proyecto nuevo → habilitar "YouTube Data API v3" → Credenciales → Crear credencial → Clave de API → restringirla a esa API. Va en `.env` como `YOUTUBE_API_KEY`. La cuota es de 10,000 unidades al día. Gástala así: - `channels.list` con `forHandle=@canal` (1 unidad) → el id de la lista de "uploads" del canal. - `playlistItems.list` de esa lista (1 unidad por cada 50 videos) → los últimos 50 videos. - `videos.list` con hasta 50 ids a la vez (1 unidad) → vistas, duración y fecha de cada uno. - **No hace falta `search.list` (la búsqueda):** ya sabes qué canales revisar, y la búsqueda tiene su propio límite de 100 llamadas al día. Guárdala para buscar competidores nuevos. Con 15 canales, una corrida gasta menos de 50 unidades. Separa videos largos y shorts (los shorts duran 3 minutos o menos) y mídelos aparte: tienen medianas muy distintas. **4.2 Apify (Instagram, TikTok, Google Maps, Amazon).** 1. La persona crea su cuenta en apify.com. El plan gratis trae 5 dólares de uso al mes; si se acaban, la cuenta se pausa hasta el siguiente ciclo. 2. Su token está en la consola, en Settings → API & Integrations. Va en `.env` como `APIFY_TOKEN`. 3. **Límite de gasto mensual:** en la consola, Billing → Limits → Custom usage limit → Edit limit. Ponlo en el presupuesto que dio la persona. 4. **Usa actores oficiales** (los que empiezan con `apify/`) cuando existan; los de terceros se rompen más seguido: | Fuente | Actor | Costo aproximado (plan gratis) | |---|---|---| | Reels de cuentas de Instagram | `apify/instagram-reel-scraper` | 2.60 USD por 1,000 Reels | | Perfiles y publicaciones de Instagram | `apify/instagram-scraper` | 2.70 USD por 1,000 resultados | | Biblioteca de anuncios de Meta | `apify/facebook-ads-scraper` | 5.80 USD por 1,000 anuncios | | Google Maps | `compass/crawler-google-places` (Google Maps Scraper) | 4 USD por 1,000 lugares; las reseñas se cobran aparte | | TikTok, Amazon u otra | El actor de Apify Store con más usuarios y actualizado hace poco; enséñaselo a la persona antes de usarlo | Según el actor | 5. **Llámalos por la API** con un tope de gasto por corrida (`maxTotalChargeUsd`): ```bash curl -s -X POST "https://api.apify.com/v2/acts/apify~instagram-reel-scraper/run-sync-get-dataset-items?maxTotalChargeUsd=0.50" \ -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \ -d @entrada.json > datos/AAAA-MM-DD/instagram.json ``` Los campos de `entrada.json` cambian por actor: léelos en la pestaña Input de su página antes de armarla. 6. **Pide poco:** 15 publicaciones por cuenta alcanzan para la mediana (paso 5). Con 20 cuentas son 300 Reels, unos 0.80 USD por corrida. Muestra la cuenta antes de correr (regla 3). **4.3 Scrapling (páginas web y Biblioteca de anuncios de Meta).** Requiere Python 3.10 o más nuevo y la versión 0.5 o más nueva. Si conoces ejemplos con `DynamicFetcher` o `capture_xhr`, son de antes de la 0.5: ya no existen. ```bash pip install "scrapling[fetchers]" # el parser y los fetchers scrapling install # baja los navegadores (una sola vez) pip install "scrapling[rag]" # para convertir páginas a Markdown ``` - **Páginas que no necesitan JavaScript** (precios, catálogo, blog): `Fetcher`, que es rápido y no abre navegador. Guarda cada página como Markdown y compárala con la de la semana pasada: ```python from scrapling.fetchers import Fetcher page = Fetcher.get("https://competidor.com/precios") texto = page.markdown(main_content_only=True) ``` - **Páginas con JavaScript o con protección contra bots** (Cloudflare): `StealthyFetcher.fetch(url)`, que abre un navegador real. Es más lento; úsalo solo donde `Fetcher` no alcance. - **Biblioteca de anuncios de Meta, sin cuenta:** abre la búsqueda en un navegador de Scrapling y guarda lo que la página recibe de su propia API (`/api/graphql/`). Ahí vienen los anuncios con su texto, su página y su fecha de inicio: ```python from urllib.parse import quote from scrapling.fetchers import StealthySession url = ("https://www.facebook.com/ads/library/?active_status=active&ad_type=all" f"&country=MX&search_type=keyword_unordered&q={quote('curso de nutrición')}") with StealthySession(headless=True, record_requests=True) as session: page = session.fetch(url, network_idle=True) respuestas = session.network.search(url_pattern=r"/api/graphql/", limit=None) tandas = [r.json() for r in respuestas] ``` La primera tanda de anuncios suele venir dentro del HTML de la página (`page`), y las siguientes llegan al bajar. Busca con frases exactas o con el nombre de la página del competidor, y elige el país. Si necesitas cientos de anuncios o la captura no trae nada, usa `apify/facebook-ads-scraper`. **4.4 Mercado Libre.** La API oficial es gratis, pero desde 2025 pide token: sin él responde 403. 1. La persona crea una aplicación en el DevCenter de Mercado Libre (developers.mercadolibre.com.mx → Crear nueva aplicación; en México pide validar antes los datos del titular de la cuenta). Obtiene un Client Id y una Secret Key y registra una URL de redirección con HTTPS. 2. Con el flujo OAuth (Authorization Code) obtienes el access token y el refresh token. Van en `.env`; el access token vence, así que renuévalo con el refresh token antes de cada corrida. 3. Publicaciones de un vendedor competidor: ```bash curl -s "https://api.mercadolibre.com/sites/MLM/search?nickname=NOMBRE_DEL_VENDEDOR" \ -H "Authorization: Bearer $ML_ACCESS_TOKEN" ``` `MLM` es México; cambia el sitio según el país (`MLA` Argentina, `MCO` Colombia, `MLC` Chile, `MPE` Perú). 4. Si responde 403 aun con token (hay reportes de que pasa), díselo a la persona y lee la página pública de la tienda del vendedor con Scrapling, o busca un actor de Mercado Libre en Apify. ### Paso 5. El método: lo que rindió más de lo normal Para YouTube, Instagram y TikTok, mide cada publicación contra **su propia cuenta**, no contra las demás: 1. **Base de cada cuenta:** la mediana de vistas de sus publicaciones **maduras** entre las últimas 50 en YouTube (gratis) o las últimas 15 en Instagram y TikTok (cada una cuesta). Maduro: 7 días o más en YouTube; 3 días o más en Instagram y TikTok, que juntan casi todo en las primeras 72 horas. Usa la mediana, no el promedio: un solo video viral infla el promedio. 2. **Ratio:** vistas de la publicación ÷ mediana de su cuenta. 3. **Lo reciente se mide por velocidad:** si todavía no madura, compara sus vistas por día contra la mediana de vistas por día de la cuenta. Si no, lo nuevo siempre parecería malo. 4. **Marca como "rindió más de lo normal"** lo que tenga ratio de 2 o más **y** al menos 3,000 vistas (ajusta el piso con la persona si su nicho es chico): un 8× sobre una mediana de 50 vistas es ruido. 5. **Base débil:** si una cuenta tiene menos de 4 publicaciones maduras o su mediana es menor a 200, no marques nada de ella; repórtala aparte. Para lo demás, compara contra la corrida anterior: - **Anuncios:** un anuncio que lleva **30 días o más activo** probablemente vende (nadie paga un mes por un anuncio que no convierte). Los anuncios nuevos de la semana dicen qué está probando. - **Páginas web:** precios, ofertas, productos o páginas que cambiaron desde la semana pasada. - **Google Maps:** reseñas nuevas, cambio de calificación y de qué se queja la gente. - **Mercado Libre:** precio, unidades vendidas y publicaciones nuevas. ### Paso 6. El reporte de cada semana `radar.py` corre las fuentes, guarda lo crudo en `datos/AAAA-MM-DD/` y calcula los ratios. Tú lees esos datos y escribes `reportes/AAAA-MM-DD.md` con esta forma: 1. **En 3 líneas:** lo más importante de la semana. 2. **Lo que rindió más de lo normal:** tabla con competidor, publicación (título y link), ratio, tema y gancho (la primera frase o el título que lo vendió). 3. **Temas que se repiten:** lo que aparece en dos o más competidores a la vez. Es la señal más fuerte. 4. **Movimientos:** anuncios nuevos o que ya llevan 30+ días, cambios de precio, reseñas. 5. **Ideas para ti:** de 3 a 5, cada una con el dato que la respalda. Copia el tema y el ángulo, nunca la pieza. 6. **Costo de la corrida** y lo que falló, si algo falló. La primera corrida hazla con la persona y ajusta el reporte a lo que le sirve. ### Paso 7. Que corra cada semana - **Guarda el proceso como comando o skill de tu agente** (por ejemplo, `/radar`): "corre `radar.py`, lee los datos de hoy y escribe el reporte con la forma del paso 6". Así la persona solo te dice "corre el radar". - **Recordatorio:** propón una tarea programada del sistema (cron en macOS y Linux, Programador de tareas en Windows) que corra solo la parte gratis (`radar.py --solo-gratis`) el día que eligió, o un recordatorio en su calendario. Las corridas con costo (Apify) se lanzan con la persona presente, salvo que ella pida lo contrario. - **Cada mes,** revisa con ella la lista de competidores: quién entra, quién sale y qué fuentes no sirvieron. ### Si algo falla - **YouTube responde `quotaExceeded`:** se gastaron las 10,000 unidades del día o las 100 búsquedas. La cuota se reinicia a medianoche, hora del Pacífico. - **Un handle de YouTube trae otro canal:** pide a la persona el id del canal (empieza con `UC`) y úsalo en lugar del handle. - **Apify falla o devuelve vacío:** revisa el registro de la corrida en la consola de Apify; un perfil privado o un nombre mal escrito devuelven cero resultados y también cobran el arranque. - **Una página bloquea (error 403, captcha o "verifica que eres humano"):** usa `StealthyFetcher` (con `solve_cloudflare=True` si es Cloudflare, y un timeout de 60 s o más). Si ni así pasa (protecciones como Akamai o DataDome), esa fuente va con Apify o se deja fuera; no insistas en bucle. - **`ModuleNotFoundError` al importar `scrapling.fetchers`:** se instaló solo el parser. Corre `pip install "scrapling[fetchers]"` y `scrapling install`. - **La Biblioteca de anuncios trae ruido:** busca con frases exactas ("curso de X", el nombre exacto de la página) y filtra por país. --- ## Para ti: cómo sacarle provecho - **Copia el tema, no el video.** Lo que rindió más de lo normal te dice de qué quiere saber la gente; la forma de contarlo es tuya. - **Fíjate en lo que se repite.** Un tema que le funciona a tres competidores la misma semana es más confiable que el viral de uno solo. - **Lo que no rinde también enseña.** Si un competidor grande publica algo y le va peor que de costumbre, ese ángulo probablemente no le interesa a tu público. - **Empieza chico.** Con 5 competidores y una sola fuente ya tienes reporte. Agrega fuentes cuando veas que lo usas. --- Guía de **Jaime Herrera**, VisiumAI (visiumai.com). Publico sobre automatización con IA en YouTube (youtube.com/@jaime_herrerag) e Instagram (@jaimeherrera.ia).