Construí el Tracker
Ahora la parte divertida: no escribís el tracker, lo describís. Un prompt, y Claude Code construye un solo archivo Python con base de datos SQLite, la matemática de la mediana, y una tabla rankeada. Este es todo el punto de construir dentro de Claude Code — vos traés una descripción clara del output, él trae el código.
No es un salto de fe. Jithin Raaj, un no-dev, armó un dashboard que monitorea 37 cuentas de Instagram exactamente así: "I didn't write the code from scratch. What I brought was a clear description of the problem and a clear picture of what the output should look like." Esa es la única skill que necesitás.
El prompt de build
Pegá esto en Claude Code, tal cual está escrito:
Build a Python CLI `track.py` that maintains a competitor content tracker in SQLite.
Input: a `competitors.txt` file of handles/channel URLs (TikTok, YouTube, IG).
For each account:
1. Use yt-dlp `--dump-json` for YouTube/TikTok and the ScrapeCreators API
(key in $SCRAPECREATORS_KEY) for Instagram reels to fetch the last 30 posts
with: id, url, caption, views, likes, comments, shares, saves, posted_at.
2. Store rows in a `posts` table (upsert on id).
3. Compute per-account baseline = MEDIAN of views across that account's last 30 posts.
4. Compute for every post:
outlier_multiplier = views / account_median
velocity = views / hours_since_posted
weighted_engagement = (0.5*likes + 2*comments + 3*saves + 4*shares) / NULLIF(reach, views)
5. Print a ranked table (highest outlier_multiplier first) of every post with
multiplier >= 2.0, showing account, caption, views, multiplier, velocity.
Tag: >=2 "outlier", >=5 "strong", >=10 "MONSTER".
Add a `--since 7d` flag to only rank posts from the last N days ("this week's outliers").
Keep it a single file, no framework. Use requests + sqlite3 + statistics.median.
Qué hace cada paso
Leelo de arriba a abajo — es un spec, no magia:
- Input y fetch.
competitors.txtes tu universo trackeado: los handles específicos de tu nicho, uno por línea. Para YouTube/TikTok,yt-dlp --dump-jsontrae metadata sin API key. Para reels de Instagram, la API de ScrapeCreators (más sobre el stack en la próxima lección). Últimos 30 posts de cada uno. - Store. Las filas van a una tabla
posts, upsert on id — re-correr nunca duplica, actualiza. Tu data vive en un archivo, no en un chat, así compounde con el tiempo. - Baseline. La mediana de las últimas 30 vistas de esa cuenta. Este es el denominador de la lección anterior — mediana, así un breakout no la envenena.
- Los tres números.
outlier_multiplier(¿rompió?),velocity(¿está rompiendo ahora?), y un score deweighted_engagementque valora saves y shares por encima de likes — las señales que de verdad mueven el algoritmo. - Output rankeado. Todo ≥2x, ordenado por multiplier, etiquetado outlier / strong / MONSTER. La flag
--since 7dte da "los outliers de esta semana" — la vista semanal en la que vas a vivir de verdad.
Mantené el prompt pidiendo un solo archivo, sin framework. Un único track.py con sqlite3 y statistics.median es fácil de leer, fácil de arreglar, y fácil de volver a pasarle a Claude Code cuando querés cambiar algo. Acá la simplicidad es un feature.
Cómo conecté el mío a datos reales de Instagram
El prompt de arriba te deja un tracker que funciona. Acá está cómo hice que el mío traiga números reales, como funciona el del reel.
- Meta
business_discovery— una llamada a la API por creador devuelve su conteo de followers más sus posts recientes. Una llamada, un creador, la vista de perfil público. Este es el esqueleto: así conseguís los posts de un competidor sin scrapear HTML. - El endpoint
media-info— el endpoint de Instagram devuelve plays y el handle, que SÍ son públicos. Ese es tu conteo de vistas para el score, directo de la fuente. viral_ratiovs la mediana propia de cada creador — la misma matemática de la lección 1, calculada por creador así el 10x de una cuenta chica no queda enterrado bajo los números crudos de una cuenta grande.- Layout de storage — cada post guardado como
data/refs/<creator-handle>/<shortcode>.json. Organizado por creador, un archivo por post. Esto espeja la carpetadata/refs/de tu setup, y es lo que le permite a la App 2 (el vault) leer después a través de todos los competidores de una.
La idea clave: reach, saves y shares son owner-only — nadie ve eso de los posts de otro. Pero plays y handles son públicos, así que business_discovery + media-info te da exactamente lo suficiente para scorear todo el nicho gratis.
¿Por qué el tracker guarda cada post con 'upsert on id' en SQLite?
Lo que te llevás
No escribís el tracker — pegás un prompt y Claude Code construye track.py: scrape → SQLite → baseline con mediana → multiplier + velocidad → tabla rankeada. Para hacerlo real como el mío, alimentalo con business_discovery de Meta (una llamada por creador) y el endpoint media-info (plays + handle públicos), calculá viral_ratio por creador, y guardá cada post en data/refs/<handle>/<shortcode>.json.
