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 4 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.

Voltear 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 del día revisando cada publicación.

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

La herramienta.

Cada 5 minutos escanea las publicaciones nuevas en Mercari, eBay y Vinted. La foto de cada publicación pasa por la API de PokeGrade, que identifica la tarjeta exacta y obtiene su valor de mercado en vivo — comparativas en bruto Y graduadas. La API de PokeGrade es lo que impulsa nuestro sitio web detrás de escena. Ofrecemos acceso gratuito para desarrolladores. PokeGrade.ai/developers

Si un slab está listado con un 25% o más por debajo del mercado, las publicaciones de Mercari se marcan con 'me gusta' automáticamente y todo lo demás me notifica al teléfono. Dos estrategias funcionan en paralelo: slabs por debajo del precio, y la más extraña: slabs con precio inferior al de la tarjeta 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 operaciones oscura, ticker desplazándose, LED de estado — mostrando cada evaluación, totales de ganancias potenciales con cálculos de tarifas incluidos, gráficos de precios vendidos para productos que estoy monitoreando (muestreados cada 60 segundos de ventas de eBay), y un libro de contabilidad: pega cualquier URL de publicación de cinco mercados y un scraper registra la compra o venta y rastrea mi P/L en curso. Teóricamente, podría conectar mi script a mis cuentas y hacer que las raspe cada hora; simplemente aún no lo he hecho. Yen y euros se convierten automáticamente. Un botón mueve un hallazgo 'sniped' directamente al libro de contabilidad. Funciona desde mi teléfono.

La parte que nadie te cuenta. Las funciones me tomaron una tarde. El otro día y medio fue la pelea 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 estás conectado o no, tarjetas japonesas escondidas detrás de títulos en inglés, macOS matando silenciosamente trabajos en segundo plano que están en la carpeta equivocada. Cada una de esas costó horas de diagnóstico y una línea para arreglar.

Por eso comparto el prompt en lugar del código. El prompt lleva todo — cada selector verificado, cada trampa, cada protección — para que tu construcción se salte la pelea 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 publicaciones turbias o la IA comparando la tarjeta incorrecta. 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 tarjetas (nivel gratuito: 100 evaluaciones/mes para probarlo; niveles pagos si escaneas en serio), cuenta gratuita de desarrollador de eBay y una computadora que se quede 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 útil de forma independiente).

Quiero un kit de herramientas personal para voltear tarjetas en mi computadora, construido como un conjunto de servicios en segundo plano gestionados por launchd (o el 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 del proyecto. Todo debe sobrevivir reinicios. Te enviaré 5 fases. Después de cada fase completa, por favor avísame que estás listo para la siguiente fase. Algunas claves de 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 tarjeta a partir de una foto y devuelve precios de mercado en bruto 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: 'me gusta'/alerta a valor de mercado al menos 1.25x el precio solicitado; banda de lista de ofertas 1.15-1.25x (aproximadamente 26% de margen neto después de una oferta aceptada del 80% y ~12% de tarifas de venta)

FASE 1 — Francotirador de Mercari (auto-me gusta)

Un servicio que escanea búsquedas de Mercari cada ~10 minutos, evalúa la PRIMERA FOTO de cada nueva publicación a través de PokeGrade /value y marca con 'me gusta' las publicaciones 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 EN BRUTO (sin graduar) — encuentra slabs que vale la pena romper (bruto > 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 tajantemente 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), corazón del tile ItemLike (dentro del ancla del tile — corazón desde la página de búsqueda, no es necesario abrir publicaciones), corazón de 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 de la publicación no necesita visitar la página:

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

"Nuevo" = id de artículo no evaluado previamente (archivo de estado), ordenar más reciente primero, omitir 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 con 'me gusta' por separado de los ids vistos (un bloqueo entre la graduación y el 'me gusta' nunca debe causar un doble clic, que QUITARÍA el 'me gusta'). 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 — Fuentes de eBay + Vinted (solo notificación) **

Mismas estrategias/umbrales, pero ninguna 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 'me gusta'/favorito.

eBay: usa la API oficial Browse (OAuth de credenciales de cliente, item_summary/search, sort=newlyListed, filter buyingOptions FIXED_PRICE + itemLocationCountry US — ten en cuenta que priceCurrency solo es válido junto con un rango de precios). Actualiza las URLs de imágenes de s-l225 a s-l1600 para OCR. Unas 5k llamadas a la API al 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 con volumen de eBay — limita las evaluaciones por búsqueda, ej. 15).

Vinted: raspa el catálogo (sin API, pero tampoco tiene muro antibots). Tiles: a[data-testid="product-item-id-ID--overlay-link"] cuyo atributo title contiene "nombre, marca: X, condición: Y,

$price "; imágenes en [data-testid="...--image"] img (aumenta el segmento /f###/ de la URL a /f800/). Las páginas de Vinted COLAPSAN Chromium sin cabeza aproximadamente 1 de cada 3 cargas Y pueden colgarse sin lanzar una excepción — envuelve cada raspado en un watchdog de 90s Promise.race 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: omite títulos que sean lotes/paquetes o mencionen japonés/chino/coreano/alemán/francés/etc.

Post-identificación: rechaza si el conjunto identificado por PokeGrade es 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 destacadas (las proporciones extremas casi siempre son desajustes de comparativas, no premios mayores).

FASE 3 — Panel (aplicación web localhost)

Un servidor HTTP Node sin dependencias (bind 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, LED de estado por servicio (mtime del archivo de registro = salud), ticker desplazándose de evaluaciones recientes, animaciones de conteo. Tres pestañas:

1. Francotirador — banda de estadísticas (ganancia potencial después de tarifas excluyendo sospechosos, ofertas, ofertas, necesita revisión, evaluado), gráfico de actividad de escaneo por hora, gráfico de ganancias acumuladas, desglose de veredictos, marcador de estrategias y una tabla de hallazgos ordenable con miniaturas de publicaciones, 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 los CDN 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 de venta

Los datos de ventas de eBay NO están en la API pública. Raspa la búsqueda de vendidos (LH_Sold=1, LH_Complete=1, ordenar más reciente) con Chromium sin cabeza (channel:'chromium'), suplantación de UA de navegador y una visita de calentamiento a la página de inicio primero (el enlace profundo en frío es bloqueado por bots). Tarjetas: elementos [data-listingid]; los vendidos reales tienen una línea "Fecha de VENTA" (los anuncios patrocinados no). Cada minuto, para cada consulta configurada: toma los 10 precios vendidos más recientes, agrega promedio/mediana/mín/máx a un CSV. El panel gráfica la línea promedio + banda de mín/máx 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 una entrada de COMPRA y una entrada de VENTA: pega cualquier URL de publicación 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 extracción determinista (sin IA) extrae título/precio/moneda/imagen:

Principal:

schema.org Producto 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 — obtén 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 mediante

frankfurter.app (BCE, gratis, caché de 12h). Almacena entradas en ledger.json; total acumulado = vendido menos comprado, más una cifra después de tarifas del 12%; las filas muestran miniatura, chip de mercado, precio nativo + USD y un borrado con confirmación. Precio registrado = precio 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 una publicación real de principio a fin a través de PokeGrade antes de conectar el bucle; después de cualquier cambio en la interfaz, toma una captura de pantalla del panel en modo claro y oscuro; nunca dejes entradas de prueba en mi libro de contabilidad ni 'me gusta' 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 tarjetas por IA se equivoca con la suficiente frecuencia como para que las compras automáticas serían quemar dinero. Y tu realidad de tarifas 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