Empleos Públicos
¿Qué revela la demanda laboral del Estado, y se puede buscar por carrera en vez de por palabra suelta?
FastAPI · Scraper async · SQLite · 45 carreras · :8002
- Estado
- En vivo · 236 ofertas (jun 2026)
- Fuente de datos
- empleospublicos.cl · scraping
- Stack
- FastAPI · Scraper async · SQLite · Listmonk
- Cadencia
- Re-scrape cada ~2 h · alertas semanales
- Cobertura
- 45 carreras · 100% con detalle
- Infraestructura
- Raspberry Pi · $0 cloud
El problema
empleospublicos.cl publica miles de convocatorias del Estado, pero buscar ahí es difícil: no puedes filtrar por tu carrera profesional, y no hay forma de que te avisen cuando aparece algo que te calza. Quise ver si, scrapeando la fuente oficial y clasificando cada aviso, podía convertir ese listado en algo realmente buscable — y de paso usar esos datos para leer la demanda laboral del Estado.
Qué construí
Prototipé un portal que mantiene un espejo al día de las ofertas, las clasifica por carrera y deja suscribirse a alertas semanales por correo.
- check_circle Un scraper asíncrono recorre las convocatorias abiertas y en evaluación cada par de horas, y baja también el detalle de cada aviso respetando un delay entre peticiones para no golpear la fuente.
- check_circle Cada oferta se vincula a una o más carreras profesionales, de modo que puedes filtrar el listado por tu carrera en lugar de adivinar palabras clave.
- check_circle La API expone las carreras y las ofertas con paginación — y es la misma API que alimenta la extensión de Chrome "Filtro por Carrera".
- check_circle Las alertas por correo salen por infraestructura de email propia (Listmonk sobre la misma Pi), sin depender de un proveedor externo.
- check_circle En paralelo armé un histórico por año (2018–2026) y cruces con la dotación del Estado, para mirar cómo cambia lo que el sector público sale a buscar.
Cómo funciona
El backend es FastAPI + SQLite. El scraper hace upsert de cada oferta y su detalle, y mantiene una tabla de relación oferta↔carrera. El frontend consulta la API por carrera; las alertas se disparan contra una lista de Listmonk. Toda la "inteligencia" de clasificación vive en la Pi, lo que permite mejorar los filtros sin tocar a quienes ya consumen los datos.
Decisiones técnicas
Espejo enriquecido, no un iframe del portal
Mantengo una copia propia al día en vez de consultar el portal en vivo. Es lo que permite clasificar por carrera, paginar rápido y servir la misma API a la extensión de Chrome — todo imposible sobre el sitio oficial.
Clasificación en el backend, no en el cliente
La relación aviso↔carrera vive en la Pi. Así afino la heurística sin tocar a quienes ya consumen los datos —web y extensión— manteniendo un único lugar de verdad.
Delay deliberado entre peticiones
El scraper baja el detalle con una pausa entre requests. Es más lento, pero no golpea la fuente: un prototipo de fiscalización no debería degradar el servicio que observa.
Qué es real y qué es parcial
Este portal es un espejo enriquecido, no la fuente oficial — conviene decir qué es exacto y qué es heurístico.
- verified Real: las 236 ofertas y sus detalles vienen directo de empleospublicos.cl, con el 100% del detalle descargado. Las cifras del dashboard se calculan sobre el espejo al día, no son ilustrativas.
- schedule Parcial: la clasificación por carrera es heurística y se va afinando. Si un aviso queda mal etiquetado, se corrige en el backend; la fuente oficial sigue siendo empleospublicos.cl.
- build En desarrollo: leer la demanda laboral del Estado a partir del histórico 2018–2026 y los cruces con la dotación.
¿Quieres usar el buscador?
El portal corre ahora mismo sobre la Pi.