
Elegir colegio en el Perú es un problema de información. Los datos están, pero repartidos en seis sistemas distintos del MINEDU, en formatos que no se hablan entre sí: un DBF que se publica cada semana, fichas HTML por institución, planillas de matrícula y padrones de alimentación escolar.
colegios.pe junta todo eso en un catálogo y lo pone en una búsqueda que un padre puede usar desde el celular.
El problema concreto
Una familia en Lima quiere saber qué colegios hay en su distrito, cuánto cuesta la pensión, si es mixto, si recibe alimentación escolar y qué dicen otras familias. Esa información hoy se consigue llamando por teléfono o preguntando en un grupo de WhatsApp.
Del otro lado, hay colegios que no tienen ni página web y no aparecen en ninguna búsqueda. El catálogo también les sirve: un colegio sin web existe en el padrón oficial, y por tanto existe en el comparador.
De dónde salen los datos
Antes de escribir una línea de código hice un documento por fuente con qué trae, con qué cobertura y qué no se puede creer. Esa parte es la que decide el producto.
- ESCALE (padrón de servicios educativos): la base oficial de todas las instituciones, publicada semanalmente en DBF. Es el esqueleto del catálogo.
- Identicole: la ficha ampliada por colegio —pensiones, infraestructura, equipamiento—, pero publicada como páginas HTML, una por institución.
- Matrícula oficial: la única fuente que cubre a los privados. Ahí aparecen 23.281 colegios que no están en ningún otro sitio.
- Padrón PAE / Qali Warma: qué colegios reciben alimentación escolar y a cuántos alumnos atienden.
- Deserción por distrito: el contexto del distrito, no del colegio, que cambia mucho la lectura de una ficha.
- Sedes COAR: dirección y correo de los colegios de alto rendimiento.
El catálogo
| Pieza | Cifra |
|---|---|
| Colegios | 180.890 |
| Con matrícula oficial | 110.093 |
| Con alimentación escolar (PAE) | 65.288 |
| Con contexto de distrito | 117.209 |
| Fichas de Identicole | 8.242 |
| Sedes COAR | 28 |
Dos detalles que parecen menores y no lo son:
- Un colegio no es un local. La clave real es
COD_MOD+ANEXO, porque un mismo local puede albergar varios servicios educativos con niveles distintos. Si usas solo el código modular, duplicas o mezclas colegios. - Un dato faltante no es un cero. Si una fuente no trae la pensión, la ficha dice "sin dato", no "S/ 0". Rellenar huecos con ceros es la forma más rápida de mentirle al usuario.
Cómo está construido
Scrapers
Seis fuentes en un monorepo con uv, cada una con su parser y sus fixtures. Los tests no tocan la red: se ejecutan contra muestras guardadas, así que un cambio en el HTML de origen se ve como un test rojo y no como un catálogo corrupto. Son 138 tests.
API
FastAPI con SQLAlchemy y Alembic sobre PostgreSQL. Búsqueda por nombre y por código con relevancia ponderada, filtros, conteos por distrito, radio por cercanía, reseñas, leads y un panel para que un colegio reclame su ficha. 222 tests.
Frontend
SvelteKit. Buscador con filtros y mapa, ficha del colegio, comparador, landings por distrito, avisos de matrícula y panel del colegio. 91 tests unitarios y 58 de extremo a extremo con Playwright contra un navegador real.
Despliegue
VPS de OVH con nginx delante: el frontend compilado en un servicio y la API en otro, los dos con systemd. Las migraciones van antes de reiniciar y el despliegue tiene un comando de estado para saber qué versión está corriendo sin entrar a mirar logs.
Lo que fue difícil
- Reconciliar fuentes que no comparten clave. La matrícula usa una codificación y el padrón otra; el trabajo es unir sin inventar colegios nuevos.
- El volumen de Identicole. Son fichas individuales, no un archivo: hay que ir colegio por colegio, con pausas y reintentos, y asumir que una parte va a fallar y se reintenta después.
- Los datos oficiales tienen huecos. El código tiene que funcionar con datos incompletos y decirlo en la interfaz, no esconderlo.
Qué sigue
Faltan el scrape de las secundarias de Identicole (para la jornada escolar completa) y el de las privadas (para las pensiones), y la pasada de UX en pantallas medianas. El resto —comparador, panel del colegio, avisos de matrícula— ya está en producción.
Pruébalo
Está abierto en colegios.pe. Si encuentras una ficha con datos raros, escríbeme: la corrección de datos es parte del producto, no un ticket de soporte.
También puedes ver el resto de mis proyectos.
Comentarios !
comments powered by Disqus