Build1 distinct publisher3 min readUpdated
The project's own argument is that one free-tier server cannot serve everyone, so you clone it. The more interesting part is the tag sitting on every generated degree row.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The hosting decision is the least glamorous thing here and the easiest to defend. The author's stated reasoning is that a single free-tier server cannot reliably serve production traffic for everyone, while a project that is trivial to self-host scales to however many people need it [3]. Reference data suits that trade. A list of polytechnics does not change between requests, and the install path is a clone, an npm install and an npm start, with no database server, no config file and no key required by default [4]. The whole dataset is three CSV files compiled into a local SQLite database by a prestart script at boot [5], which is why the README can offer Render, Railway, Fly.io, Docker or a plain VPS as one-command deploys: there is nothing to provision [14].
Now the arithmetic. The project reports 1,700-plus parsed departments [9] across 752 institutions [1], which averages about 2.3 departments per institution [12]. A single federal university carries more than that inside one faculty. So the structure layer is thin in places, and the project says so in the record itself, marking a structure as not clearly itemized in public sources rather than inventing one [7].
The course layer is where the honesty is load-bearing. Those rows are not looked up, they are produced: polytechnic departments get the ND to HND ladder, colleges of education get NCE, and university departments get a qualification chosen by matching subject keywords against a documented table, defaulting to B.Sc. Every generated row carries source: "inferred" in the API response, not only in the README [8]. Since the verified tier does not exist yet [9], every course row in the dataset today is an inference [13]. That is a fair deal only if consumers read the field.
The parser bug is the argument for shipping the repo, stated better than any marketing line would. A sanity check on the generator's output turned up strings like "ND Aba" and "HND est. 1992" [10], because some source cells tuck an establishment year, a renaming or an ownership note inside the last school's own parentheses instead of using the separator the parser expected [11]. The generator inherits whatever text the parser leaves in the department field, so a punctuation convention in a spreadsheet becomes a fake qualification. Against a hosted endpoint, an outsider seeing that would file an issue and wait. With three CSVs in the clone [5], they can walk from the bad response back to the offending cell and send a diff.
That is the practical split for anyone building on this. Filter on the inferred tag and you get a smaller dataset you can stand behind. Ignore it and you ship a plausible catalogue of degrees, generated from keywords, that no institution has confirmed [8].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Setup is git clone, cd into the directory, npm install, npm start; there is no database server to install, no config file to write and no API key required by default.
The whole dataset lives in three CSV files, and a build step compiles them into a local SQLite file at startup via a prestart script that runs automatically every time.
The author says confirming a verified list of conferred qualifications for every one of the 1,700-plus parsed departments is not practical because most institutions do not publish it anywhere indexable, and describes a source: "verified" tier as waiting to be built.
A sanity check on the department names being turned into qualifications produced output including "ND Aba" and "HND est. 1992".
The cause was that some source cells append a closing note about an institution, such as an establishment year, a renaming history or an ownership note, inside the last school's own parentheses instead of using the separator the parser expected.
nigeria-tertiary-institutions-api is a free, open-source REST API and dataset covering every Nigerian university, polytechnic and college of education, 752 institutions in total.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Single first-party build log, internally specific but externally unverified
Every factual element comes from one dev.to post written by the project's author. The post is unusually specific and self-incriminating — it names the generation convention, the keyword table, the inferred tag, the parser defect and the approximate 500 fabricated rows it produced — which raises internal credibility. But nothing in the cluster independently checks the 752-institution count, the 1,700-plus parsed departments, the claim that the institution layer was compiled against official published faculty structures, or that the shipped API actually emits the source tags described. Structural claims (install steps, endpoints, deploy targets) are the most checkable; data-quality claims are the least.
Launch announcement only, no usage signals disclosed
The cluster contains the release event and nothing else: no stars, forks, clones, downloads, deployed instances, dependent projects or named users appear in the supplied material. Because the project is distributed as a self-hosted repository rather than a hosted endpoint, the author would also have no server-side usage telemetry to report. Adoption therefore cannot be scored without inferring facts the sources do not provide.
Mildly overstated framing, largely offset by the author's own disclosures
The framing 'I built an open API for Nigeria's 752 universities, polytechnics, and colleges of education' promises more than the artifact delivers: it is a repository you run yourself, not an API you can call, and its deepest layer — the named degree per department — is entirely machine-generated from a keyword convention with no verified rows at all. Roughly 2.3 departments per institution also implies the structural layer is far from complete. The gap stays small because the author states all of this plainly in the same post, tags generated rows source:"inferred" in the response body, and discloses that a parser bug had already produced about 500 fabricated department rows. The residual positive score reflects the headline and the absence of any coverage metric, not promotional exaggeration in the body.
Self-promotional launch post, but permissive licensing and volunteered defects blunt the distortion
The single source is the author publishing his own project on a developer platform, which is a clear promotional incentive over the scope, quality and novelty claims. Countervailing signals are documented in the same post: MIT code and CC0 data, no hosted tier, no pricing, no sponsor or employer named, an explicit refusal to run a shared server, and voluntary disclosure of a data-fabrication bug and of the fact that the verified provenance tier does not exist. Nothing in the cluster shows a commercial dependency on adoption, so the incentive is reputational rather than financial.
Confident about design, weak about data quality and uptake
Confidence is moderate and unevenly distributed. The mechanics — install path, CSV-to-SQLite build, endpoint shapes, deploy targets, optional shared-secret API key, licensing — are described concretely enough to be trusted at face value and easily falsified by anyone who clones the repo. The data-quality core (institution counts, provenance of the manual layer, completeness of the department structure) rests entirely on one interested narrator with no audit, and adoption is unmeasurable from the supplied material, so the overall assessment cannot be held with high confidence.
build
Before you spend quota on an agent skill, make it pass an eval harness1 distinct publisher
build
The streaming edit is a software layer: proxies, stubs and an ffmpeg hook on storage you own1 distinct publisher
build
The merge gate that turns "works on bad networks" into something CI can fail1 distinct publisher
build
The third answer: a dead-code tool allowed to say "not traced yet"1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 22, 2026