Construí una terminal de sniping de cartas PokeGrade en un fin de semana. Aquí tienes el prompt exacto para crear la tuya.

@pokegrade
INGLÉShace 3 días · 20 jul 2026
362K
254
9
8
725

TL;DR

Este artículo proporciona un prompt detallado de varias fases para construir una terminal automatizada de intercambio de cartas Pokémon que utiliza la API de PokeGrade y Claude Code para encontrar oportunidades de arbitraje en el mercado.

Revender slabs de Pokémon es fácil. El problema: las ofertas en Mercari, eBay y Vinted pueden desaparecer en minutos o simplemente ser difíciles de encontrar, y ningún humano puede vigilar tres mercados las 24 horas y revisar cada listado.

Así que le pedí a Claude Code que me construyera un vigilante. Dos días después, esto es lo que funciona 24/7 en el Mac mini de mi oficina:

La herramienta.

Cada 5 minutos escanea listados nuevos en Mercari, eBay y Vinted. La foto de cada nuevo listado pasa por la API de PokeGrade, que identifica la carta exacta y obtiene su valor de mercado actual: comparativas raw y graduadas. La API de PokeGrade es lo que impulsa nuestro sitio web en segundo plano. Ofrecemos acceso gratuito para desarrolladores. PokeGrade.ai/developers

Si un slab está listado un 25% o más por debajo del mercado, los listados de Mercari reciben un auto-favorito y todo lo demás notifica a mi teléfono. Dos estrategias se ejecutan en paralelo: slabs infravalorados, y la más extraña — slabs con precio por debajo de lo que se vende la carta sin graduar (arbitraje de romper el slab; raro, pero existe).

pokegrade.ai - inline image

La terminal.

Un panel en vivo — estética de mesa de trading oscura, ticker desplazándose, LEDs de estado — que muestra cada evaluación, totales de ganancias potenciales con cálculos de comisiones incluidos, gráficos de precios vendidos de productos que estoy monitoreando (muestreados cada 60 segundos de ventas de eBay), y un libro de contabilidad: pega cualquier URL de listado de cinco mercados y un scraper registra la compra o venta y rastrea mi P/L actual. Teóricamente, podría conectar mi script a mis cuentas y hacer que las raspe cada hora; simplemente aún no lo he hecho. Yenes y euros se convierten automáticamente. Un botón mueve un hallazgo robado directamente al libro de contabilidad. Funciona desde mi teléfono.

La parte que nadie te cuenta. Las funciones tomaron una tarde. El otro día y medio fue la lucha a cuchillo con la realidad: detección de bots de los mercados que rechaza navegadores automatizados, páginas que renderizan código diferente según si has iniciado sesión, cartas japonesas escondidas detrás de títulos en inglés, macOS matando silenciosamente trabajos en segundo plano que viven en la carpeta incorrecta. Cada una de esas costó horas de diagnosticar y una línea de arreglar.

Por eso comparto el prompt en lugar del código. El prompt lo lleva todo — cada selector verificado, cada trampa, cada protección — para que tu construcción se salte la lucha a cuchillo.

Las reglas que lo hacen seguro. Nunca compra nada. Nunca envía ofertas. Las "ofertas" extremas (ratios de 5x o más) se marcan como sospechosas en lugar de celebrarse, porque casi siempre son listados turbios o la IA comparando la carta equivocada. Un humano revisa cada oferta antes de que el dinero se mueva. Constrúyelo de la misma manera — la automatización encuentra, tú decides.

Costos: API de PokeGrade para identificación de cartas (nivel gratuito: 100 evaluaciones/mes para probarlo; niveles de pago si escaneas en serio), cuenta gratuita de desarrollador de eBay, y una computadora que se mantenga encendida. Eso es todo.

El prompt.

Copia todo lo siguiente en Claude Code, completa los tres marcadores de posición, y constrúyelo fase por fase (cada fase es independientemente útil).

Quiero un kit de herramientas personal para revender cartas en mi computadora, construido como un conjunto de servicios en segundo plano gestionados por launchd (o equivalente en Windows) más un panel web local. Stack: Node.js + Playwright, sin frameworks, sin base de datos — archivos CSV/JSON en una carpeta de proyecto. Todo debe sobrevivir reinicios. Te enviaré 5 fases. Después de que cada fase esté completa, por favor házmelo saber que estás listo para la siguiente fase. Algunas claves API y la Fase 1 es la primera.

Mis entradas (completar):

Clave de API de PokeGrade: PGAI_KEY_HERE (de

pokegrade.ai/developers — el endpoint /value identifica una carta a partir de una foto y devuelve precios de mercado raw y graduados; documentación en

pokegrade.ai/developers/docs

Conjunto de claves de producción de eBay: EBAY_CLIENT_ID / EBAY_CLIENT_SECRET (gratis en

developer.ebay.com ; solicita la exención de eliminación de cuenta para activar)

Mis umbrales de oferta: favorito/alerta cuando el valor de mercado es al menos 1.25x el precio de venta; banda de trabajo de ofertas 1.15-1.25x (aproximadamente 26% de margen neto después de una oferta aceptada del 80% y ~12% de comisiones de venta)

FASE 1 — Francotirador de Mercari (auto-favorito)

Un servicio que escanea búsquedas de Mercari cada ~10 minutos, valora la PRIMERA FOTO de cada nuevo listado a través de PokeGrade /value, y marca como favoritos los listados que superan el umbral de oferta. Dos estrategias desde un array de configuración, un proceso de navegador:

raw-crack: buscar "pokemon psa 8", comparar el valor RAW (sin graduar) — encuentra slabs que vale la pena romper (raw > precio del slab; raro pero real). graded-under: busca psa 8/9/10, compara la comparativa del propio grado del slab.

**Datos críticos de implementación (todos verificados, te ahorrarán horas): **

La verificación de bots de Mercari (PerimeterX) rechaza de plano el Chromium incluido de Playwright — el desafío de presionar y mantener se repite infinitamente. Inicia el Chrome REAL instalado: channel:'chrome', headful, directorio de perfil persistente, --disable-blink-features=AutomationControlled, ignoreDefaultArgs:['--enable-automation']. Nunca automatices el inicio de sesión: detecta cuando no has iniciado sesión (visitar /mypage/ redirige DEL LADO DEL CLIENTE después de ~15s a /login/?login_callback=... — consulta la URL, no el DOM) y espera hasta 30 minutos para que el humano inicie sesión una vez; la sesión persiste en el perfil.

Las páginas con sesión iniciada y sin sesión usan IDs de prueba DIFERENTES. Búsqueda con sesión: tiles a[data-testid="ProductThumbWrapper"], precio ProductThumbItemPrice (sin sesión: ItemPrice — acepta ambos), tile favorito ItemLike (dentro del ancla del tile — favorito desde la página de búsqueda, no es necesario abrir listados), favorito en página de artículo LikeComp. ProductThumbItemDiscountedPrice es el precio ORIGINAL tachado — nunca lo uses; los tiles con descuento concatenan ambos precios en un solo nodo de texto ("$99.75$105"), así que analiza solo el primer token de dinero.

La primera foto del listado no necesita visitar la página:

https://u-mercari-images.mercdn.net/photos/ITEMID_1.jpg (simple fetch).

"Nuevo" = id de artículo no evaluado previamente (archivo de estado), ordenar más reciente primero, saltar tiles VENDIDOS. Cada llamada a PokeGrade = 1 crédito — almacena en caché los resultados por id de artículo para siempre y comparte el caché entre estrategias. Rastrea los ids marcados como favoritos por separado de los ids vistos (un error entre la gradación y el favorito nunca debe causar un doble clic, que lo QUITARÍA del favorito). Fallos transitorios (API 5xx, precio faltante) permanecen no vistos y reintentan en el siguiente ciclo.

Trampa de launchd: los agentes NO PUEDEN leer ~/Desktop (TCC) — el trabajo muere silenciosamente con código de salida 78. Mantén el proyecto en la carpeta de inicio, no en el Escritorio. RunAtLoad + KeepAlive; ruta absoluta de node en el plist.

**FASE 2 — Feeds de eBay + Vinted (solo notificación) **

Mismas estrategias/umbrales, pero ninguno tiene una API de lista de seguimiento, por lo que las ofertas disparan una notificación de macOS (osascript display notification) + fila CSV en lugar de un favorito.

eBay: usa la API Browse oficial (OAuth de credenciales de cliente, item_summary/search, sort=newlyListed, filter buyingOptions FIXED_PRICE + itemLocationCountry US — nota que priceCurrency solo es válido junto con un rango de precios). Mejora las URLs de imagen s-l225 a s-l1600 para OCR. Aproximadamente 5k llamadas API/día con 3 búsquedas cada 10 minutos está bien; el consumo de PokeGrade es el presupuesto real (aproximadamente 5k créditos/día en volumen de eBay — limita evaluaciones por búsqueda, ej. 15).

Vinted: extrae el catálogo (no tiene API, pero tampoco muro antibots). Tiles: a[data-testid="product-item-id-ID--overlay-link"] cuyo atributo title contiene "name, brand: X, condition: Y,

$price"; imágenes en [data-testid="...--image"] img (aumenta el segmento /f###/ de la URL a /f800/). Las páginas de Vinted FALLAN el Chromium sin cabeza aproximadamente 1 de cada 3 cargas Y pueden colgarse sin lanzar error — envuelve cada extracción en un Promise.race de vigilancia de 90s y reinicia el navegador en caso de fallo. Registra una línea de latido cada ciclo para que un registro silencioso signifique "atascado", no "tranquilo".

Guardias de calidad (todos aprendidos de falsos positivos reales):

Pre-crédito: saltar títulos que son lotes/paquetes o mencionan japonés/chino/coreano/alemán/francés/etc.

Post-identificación: rechazar si el conjunto identificado por PokeGrade es de un mercado extranjero (tokens JP/CS/CN/KR) — los vendedores ocultan el idioma en los títulos.

Trampa de Celebrations: PokeGrade puede identificar erróneamente las reimpresiones de Celebrations "Classic Collection" como los originales vintage (una reimpresión de $30 se compara con $30k). Si el título dice celebrations/classic collection pero el conjunto identificado no, descarta la comparativa. Mismo riesgo de reimpresión: Base Set 2, XY Evolutions.

Cualquier cosa con una proporción de 5x o más se marca como "sospechoso — necesita revisión" y se excluye de las ganancias principales (las proporciones extremas casi siempre son desajustes de comparativas, no premios mayores).

FASE 3 — Panel (aplicación web localhost)

Un único servidor HTTP Node sin dependencias (enlazar 0.0.0.0 para que los teléfonos en la LAN puedan abrirlo) que sirve un archivo HTML que consulta un endpoint /data cada 30s. Estética de "terminal de trading" oscura: números monoespaciados, LEDs de estado por servicio (mtime del archivo de registro = salud), ticker desplazándose de evaluaciones recientes, animaciones de conteo ascendente. Tres pestañas:

1. Francotirador — banda de estadísticas (ganancia potencial después de comisiones excluyendo sospechosos, ofertas, ofertas, necesita revisión, evaluado), gráfico de actividad de escaneo por hora, gráfico de ganancias acumuladas, desglose de veredicto, marcador de estrategias, y una tabla de hallazgos ordenable con miniaturas de listados, alternar estrella/favorito (filtrable), y un botón "comprado" que copia un hallazgo directamente al libro de contabilidad.

2. Vigilancia de mercado — rastreadores de precios vendidos (Fase 4).

3. Libro de contabilidad — Fase 5.

Sirve imágenes externas a través de un proxy /thumb del mismo origen (lista blanca de CDNs de los mercados) — las imágenes de origen cruzado/enlazadas externamente se bloquean en algunos clientes. Hallazgos sospechosos: insignia de advertencia + excluidos de los totales.

FASE 4 — Rastreadores de precios vendidos en el mercado

Los datos de ventas de eBay NO están en la API pública. Extrae la búsqueda de vendidos (LH_Sold=1, LH_Complete=1, sort newest) con Chromium sin cabeza (channel:'chromium'), suplantación de UA de navegador, y una visita de calentamiento a la página de inicio primero (enlace profundo en frío es bloqueado por bots). Cartas: elementos [data-listingid]; los vendidos reales tienen una línea de "fecha VENDIDO" (los anuncios patrocinados no). Cada minuto, para cada consulta configurada: toma los 10 precios vendidos más recientes, agrega avg/median/min/max a un CSV. El panel grafica la línea de promedio + banda de mínimo-máximo por rastreador con botones de zoom de ventana de tiempo +/-. Un script de relleno único recorre hasta 10 páginas de resultados agrupando por la fecha de venta impresa para reconstruir aproximadamente una semana de historial diario (idempotente). Retrocede 10 minutos después de 3 extracciones vacías consecutivas.

FASE 5 — Libro de contabilidad (P/L de compra/venta)

Pestaña de libro de contabilidad con un campo de entrada COMPRA y un campo de entrada VENTA: pega cualquier URL de listado de

mercari.com,

jp.mercari.com,

japan.us.mercari.com (escaparate transfronterizo),

ebay.com (incluyendo

ebay.io enlaces cortos de compartir de la aplicación), o

vinted.com. Un script de obtención determinista (sin IA) extrae título/precio/moneda/imagen:

Principal:

schema.org Product JSON-LD (exacto en jp.mercari, ebay, vinted).

japan.us.mercari NO tiene JSON-LD — el precio es [data-testid="main-price"] (símbolo y número en líneas separadas), ya en USD.

ebay.io los enlaces cortos solo se resuelven en un navegador real y a menudo terminan en un shell de error — toma el id del artículo de la URL resuelta y llama a la API Browse get_item_by_legacy_id en su lugar.

Rechaza páginas de desafío de bots ("Solo un momento...", "Página de error") como errores — nunca las almacenes como entradas.

Convierte monedas no USD a través de

frankfurter.app (BCE, gratis, caché 12h). Almacena entradas en ledger.json; balance actual = vendido menos comprado, más una cifra después de comisiones del 12%; las filas muestran miniatura, chip de mercado, precio nativo + USD, y un botón de eliminar con confirmación. Precio registrado = precio de listado (ignorar ofertas) — esa es una simplificación deliberada.

VERIFICACIONES DE ACEPTACIÓN POR FASE

Ejecuta un ciclo real y muéstrame el registro; verifica un listado real de principio a fin a través de PokeGrade antes de conectar el bucle; después de cualquier cambio en la interfaz, captura la pantalla del panel tanto en modo claro como oscuro; nunca dejes entradas de prueba en mi libro de contabilidad ni corazones de prueba en mi cuenta.

Advertencias justas antes de ejecutarlo: los scrapers están en una zona gris con los Términos de Servicio de los mercados — mantén un ritmo suave y espera el captcha ocasional. La identificación de cartas por IA se equivoca con la suficiente frecuencia como para que comprar automáticamente sería quemar dinero. Y tu realidad de comisiones puede diferir de mi 12% — reajusta los umbrales.

Si construyes uno, muéstrame lo que encuentra.

Guardar con un clic

Lee artículos virales en profundidad con IA en YouMind

Guarda la fuente, haz preguntas concretas, resume el argumento y convierte un artículo viral en notas reutilizables en un único espacio de trabajo con IA.

Explora YouMind
Para creadores

Convierte tu Markdown en un artículo de 𝕏 impecable

Cuando publicas tus propios textos largos, dar formato en 𝕏 a imágenes, tablas y bloques de código es un fastidio. YouMind convierte un borrador completo en Markdown en un artículo de 𝕏 impecable y listo para publicar.

Prueba Markdown a 𝕏

Más patrones por descifrar

Artículos virales recientes

Explorar más artículos virales