>
arrow_back Prototipos
Datos abiertos
En vivo

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.

Abrir el prototipo arrow_forward