Segundista — Anuncios más inteligentes para vender en Wallapop

active
Python FastAPI PostgreSQL Redis Celery HTMX Alpine.js Anthropic DeepInfra

Segundista

Segundista es una herramienta de inteligencia de mercado para vendedores de segunda mano en Wallapop, el marketplace más grande de España. Escribe lo que quieres vender — por ejemplo, “Lenovo ThinkPad X270” — y Segundista trae anuncios reales, analiza distribuciones de precio y los títulos que de verdad convierten, y devuelve una recomendación a medida: un título, un tramo de precio (venta rápida / equilibrado / premium) y la ciudad en la que conviene publicarlo.

El claim: “Dime qué vendes. Te decimos el precio justo y el título que convierte — en 10 segundos.”

Por qué existe

Wallapop está lleno de vendedores casuales que ponen precio “a ojo”. Los buenos anuncios — títulos claros, fotos decentes, estado bien indicado, precios que cuadran con el mercado — se venden rápido. Los malos se quedan. Segundista hace la parte aburrida de investigación de mercado para que el vendedor se centre en mover el artículo.

Y es un problema entretenido: scrapear el mercado, modelar distribuciones de precio por estado, y usar un LLM como herramienta de análisis transitoria sin persistir nada del contenido scrapeado (lo cual además resuelve el tema de copyright por diseño).

Cómo funciona

  1. Scrape — un scraper async propio (httpx + tenacity) llama a la API de búsqueda de Wallapop con la palabra clave del usuario y trae los anuncios activos.
  2. Agrupar por estado — los anuncios se agrupan por las cuatro etiquetas estándar de Wallapop (nuevo, como_nuevo, buen_estado, usado). Las recomendaciones de precio salen de estos grupos, no de medias brutas.
  3. Analizar títulos y descripciones — el LLM (Gemma vía DeepInfra para extracción de patrones barata; Claude para los casos difíciles) lee los anuncios en memoria y reporta qué tienen en común los títulos que convierten: palabras clave, longitud, qué detalles destacan los vendedores.
  4. Recomendar — el usuario recibe tres precios sugeridos (uno por tramo), un título que convierte, una descripción tipo ajustada a sus respuestas y una ciudad recomendada según dónde se mueve más rápido lo similar.
  5. Trackear — Celery beat hace snapshots periódicos para mostrar el histórico de precios por palabra clave a lo largo del tiempo.

Stack

Backend — FastAPI 0.115 sobre Python 3.12, completamente async. SQLAlchemy 2.0 + asyncpg contra PostgreSQL 16. Redis 7 para caché + broker de Celery. Celery 5.4 con beat scheduler para las actualizaciones periódicas.

Frontend — Jinja2 renderizado en servidor + HTMX + Alpine.js + Tailwind. Chart.js para las distribuciones de precio. Sin SPA, sin bundler, sin Node — rápido de enviar y fácil de desplegar.

Auth — fastapi-users con Google OAuth.

Capa LLM — SDK de Anthropic para Claude en lo más complejo; DeepInfra (Gemma) para el volumen barato. La frontera entre ambos se ajustó por coste por análisis, no por capacidad.

Observabilidad — Sentry + structlog para logs en JSON.

Infraestructura — Docker Compose, desplegado vía Coolify detrás de Traefik en un VPS de Hetzner. Let’s Encrypt para TLS.

Cosas que me gustan

JS de proveedores vendored. Todo en /static/vendor/ está commiteado. Sin CDN. Content Security Policy más estricta, mejor tiempo de carga, sobrevive a caídas de terceros. Una decisión pequeña con un retorno desproporcionado.

Rate limiter global con Redis. 120 peticiones/min en burst, 30/sec sostenido, por IP. Implementado en la capa de aplicación para que cuente incluso cuando la petición pega contra la caché.

Pricing consciente del estado. Un iPhone 12 “nuevo” no comparte distribución de precio con uno “usado”. El motor de recomendación lo respeta — no promedia entre estados.

LLM como herramienta transitoria. Ninguna descripción scrapeada se persiste. El LLM las ve solo durante un análisis, devuelve su resumen, y los datos se descartan. Resuelve la duda legal por diseño en lugar de esperar a que nadie pregunte.

Estado

Beta abierta en segundista.com. Construido sobre un prototipo anterior llamado Skaut, completamente renombrado en abril de 2026. El código es privado (ignaciold/segundista) pero la infra y los patrones de despliegue son reutilizables.

Roadmap: más marketplaces (Vinted, eBay-ES), mejor comparación cross-platform y gráficas históricas más ricas.