· via dev.to (home feed)
Open API turns Nigeria's 752 tertiary institutions into queryable structured data
A developer has published a free, self-hostable API and CC0 dataset covering all 752 Nigerian universities, polytechnics and colleges of education, with per-row tags separating verified data from inferred records.

An API where there were only PDFs
A developer has released a free, open-source API that packages data on all 752 of Nigeria's universities, polytechnics and colleges of education into structured, queryable form. Writing on dev.to, the author — who publishes as devfarouqk — says the project grew out of personal frustration: anyone hunting for a clean list of Nigerian tertiary institutions runs into static blog posts and years-old PDFs that frequently contradict each other, leaving information that must be re-typed by hand rather than consumed as data. No open API for the material existed, so he built one.
What the data covers
According to the dev.to post, the dataset spans 312 universities (77 federal, 67 state, 168 private), 200 polytechnics (41 federal, 61 state, 98 private) and 240 colleges of education (30 federal, 43 state, 167 private). Each record carries the institution's ownership category, its state, its year of establishment where known, and — where the information is publicly available — the school or faculty and department structure beneath it.
The data model runs four levels deep: institution, then school, faculty or college, then department, then course of study. A course of study means the specific named programme a student enrols in — a B.Sc., an HND or an NCE — rather than an individual class or module.
Self-hosted rather than hosted
The project, nigeria-tertiary-institutions-api, is not a service the author runs for everyone. It is deliberately self-hosted: users clone the repository, run npm install and npm start, and get their own instance locally or deployed wherever they like. The reasoning given in the post is that a single free-tier server cannot reliably serve production traffic for the whole world, whereas a project that is trivial to self-host scales to however many people need it.
The entire dataset lives in three CSV files, and a prestart script compiles them into a local SQLite database at startup. There is no separate database server to install and no configuration file to write. The README walks through deployment on Render, Railway, Fly.io, Docker or a plain VPS, all effectively one-command operations because nothing needs provisioning. API-key protection is optional and enabled with a single environment variable; the developer describes it as a shared-secret check for deterring anonymous scraping of a public instance, not a replacement for real per-user authentication.
Inferred versus verified
The project's most distinctive choice is how it handles uncertainty. The institution-to-school-to-department layer was compiled through live research, checking published faculty structures against official sources institution by institution; where a structure could not be confirmed, the record says so openly instead of guessing.
Course-of-study data is treated differently. Verifying the actual conferred qualifications for each of the more than 1,700 parsed departments was not practical, since most institutions do not publish that information anywhere indexable. Those rows are instead generated from a documented naming convention: polytechnic departments receive the standard ND-to-HND ladder, college of education departments receive NCE, and university departments receive a qualification chosen by matching subject keywords against a documented table, defaulting to B.Sc. Crucially, every generated row is tagged as inferred in the API response itself — not merely in a README — leaving room for a verified tier if contributors confirm specific institutions' programme lists.
A bug the generator exposed
While sanity-checking department names before generating qualifications, the developer found entries such as "ND Aba" and "HND est. 1992". The cause: some source cells append closing notes — establishment years, renaming history, ownership remarks — inside the last school's parentheses, and the parser split that text exactly as if it were a department list. The pattern had silently produced roughly 500 fabricated department rows before anyone noticed. A filter now recognises note-like content, such as years or renaming language, and treats it as a note while leaving the original raw text untouched.
Licensing and maintenance
The code is MIT-licensed and the data is released under CC0. Because Nigerian institutions are renamed, merged or upgraded a few times a year, the dataset is expected to drift, and the author invites corrections and pull requests through the project's contributing guide.
Why it matters
Useful tools built on public education data — admissions platforms, EdTech products, research projects — are often blocked not by a lack of information but by information trapped in prose and PDFs. This project converts a scattered public record into structured data anyone can query, and its provenance tagging offers a transferable pattern for other datasets: distinguishing verified from inferred rows at the API level rather than burying caveats in documentation. The bug story carries its own lesson — rules against fabricating structure have to be enforced in the data itself, not just written down as policy.
- #open-source
- #api
- #open-data
- #nigeria
- #education