Past questions database Nigeria
A past questions database in Nigeria is the structured data behind many CBT apps, exam-practice websites, school portals and revision platforms.
Instead of storing examination material as PDFs or Word documents, a proper database separates every question into fields your software can understand:
Exam
Subject
Year
Question
Options
Correct answer
Solution
Image
Question ID
This makes it possible to search, filter, mark answers automatically and generate complete practice sessions.
For developers who don't want to build this database manually, SdashAPI provides structured Nigerian examination data through a REST API, covering UTME, WASSCE, NECO and Post-UTME. SdashAPI
PDF collection vs a real question database
A folder containing:
JAMB Mathematics 2022.pdf
JAMB Mathematics 2023.pdf
WAEC Biology 2021.pdf
NECO Chemistry 2020.pdf
is a collection of past questions.
It isn't yet a useful software database.
If you want to build a CBT app from those files, you still have to extract every question, identify its options, determine the answer, preserve diagrams and passages, assign the correct year and subject, and store everything consistently.
A database instead lets your software ask:
Give me:
Exam = UTME
Subject = Physics
Year = 2019
Number of questions = 40
and receive structured records.
That difference becomes huge once you're dealing with tens of thousands of questions.
What should the database structure look like?
At a basic level, one record might contain:
{
"id": 4821,
"question": "Which of the following is the chemical formula for table salt?",
"option": {
"a": "NaCl",
"b": "KCl",
"c": "CaCO3",
"d": "NaOH"
},
"answer": "a",
"solution": "NaCl is sodium chloride...",
"image": null,
"examtype": "UTME",
"examyear": "2022"
}
This follows the actual structure documented by SdashAPI V1 rather than a hypothetical schema. SdashAPI
Once questions are structured like this, you can build automatic marking, bookmarks, revision history, random tests and analytics around them.
One database can cover several Nigerian examinations
A useful Nigerian question database shouldn't put everything into one undifferentiated table.
At minimum, distinguish between:
UTME
WASSCE
NECO
Post-UTME
SdashAPI currently supports all four categories. Its filtering documentation uses the API slugs:
utme
wassce
neco
post-utme
``` :chatgpt-content-reference{index="3"}
This allows one application to offer:
```text
Choose Examination
JAMB / UTME
WAEC / WASSCE
NECO
Post-UTME
without maintaining four completely different question engines.
How large can this become?
Quite large.
The current SdashAPI coverage page reports 368,868+ available questions, 26 subjects overall and an overall year range of 1988–2026. SdashAPI
Its current breakdown is:
| Examination | Subjects | Overall years | Explanations |
|---|---|---|---|
| UTME | 22 | 1988–2026 | 82% |
| WASSCE | 23 | 1988–2026 | 74% |
| NECO | 25 | 1988–2026 | 67% |
| Post-UTME | 19 | 2000–2026 | 100% |
These are platform-wide coverage figures. They should not be interpreted as a guarantee that every subject has questions for every year in the stated range. SdashAPI
That distinction matters when you're building filters for real users.
You don't necessarily need to own the database
There are two common architectures.
The first is to maintain everything yourself:
Your App
↓
Your Backend
↓
Your PostgreSQL / MySQL Database
↓
Hundreds of thousands of questions
That gives you direct database control, but you're also responsible for collecting, structuring, correcting and updating the content.
The alternative is:
Your App
↓
Your Backend
↓
Exam Question API
With SdashAPI, for example, the current question endpoint is:
GET https://sdashapi.com/api/v1/q
and requests are authenticated with:
AccessToken: YOUR_ACCESS_TOKEN
``` :chatgpt-content-reference{index="7"}
Your own database can then concentrate on your users:
```text
users
attempts
scores
subscriptions
bookmarks
progress
while the external API handles the question bank.
Fetch questions by exam, subject and year
A real documented SdashAPI request is:
GET https://sdashapi.com/api/v1/q?subject=chemistry&type=utme&year=2022
AccessToken: YOUR_ACCESS_TOKEN
``` :chatgpt-content-reference{index="8"}
For a 40-question Physics session, the documentation gives:
```http
GET https://sdashapi.com/api/v1/q?subject=physics&type=utme&year=2019&limit=40
SdashAPI supports batches of up to 50 questions per request. SdashAPI
That means a developer can create:
UTME Physics 2019 Practice
without manually creating a separate JSON file called physics-2019.json.
Don't hard-code subjects and years
Suppose your frontend contains:
const subjects = [
"Mathematics",
"English",
"Physics",
"Chemistry"
];
It works until your database changes.
SdashAPI provides a subject discovery endpoint:
GET https://sdashapi.com/api/v1/subjects
which returns the human-readable subject name and its API slug. The documentation specifically recommends using the returned slug when making question requests. SdashAPI
There is also:
GET https://sdashapi.com/api/v1/years
and:
GET https://sdashapi.com/api/v1/exams
for discovering available years and examination types. SdashAPI
That gives you a more maintainable flow:
Fetch Exams
↓
Fetch Subjects
↓
Fetch Years
↓
Student Makes Selection
↓
Fetch Questions
API database vs full offline database
This is an important choice.
An API is useful when your application can communicate with a server:
Mobile App
↓
Backend
↓
SdashAPI
But perhaps you're building CBT software for a secondary school with 200 computers and unreliable internet.
Then you may prefer:
Local Server
↓
Local Question Database
↓
200 CBT Computers
SdashAPI currently offers bulk dataset licensing for teams that need the complete dataset offline, including formats such as JSON, CSV and SQL. SdashAPI
So "I need a past questions API" and "I need a complete past questions database" are related requests, but they're not necessarily the same technical requirement.
A hybrid approach can work too
You don't always have to choose 100% API or 100% local database.
Historical exam data is particularly suitable for caching because old questions generally don't need to be downloaded repeatedly.
SdashAPI's current developer guide recommends caching previously retrieved question sets and demonstrates both browser storage and server-side Redis approaches. SdashAPI
You could therefore use:
Student requests UTME Physics 2019
↓
Check your cache
↙ ↘
Found Missing
↓ ↓
Return SdashAPI
↓
Cache
↓
Return
That can improve speed and reduce unnecessary API usage.
The database becomes more valuable when you add student data
The questions themselves are only half of an exam-preparation product.
Imagine storing:
Question ID: 4821
Attempt 1: Wrong
Attempt 2: Wrong
Attempt 3: Correct
Now your app knows something about the student's learning history.
Across hundreds of attempts, you can build:
Your Performance
Mathematics 71%
English 83%
Physics 54%
Chemistry 68%
Needs attention:
Physics
Unique question IDs also make it easier to build bookmarks, avoid unwanted repetition, review previous attempts and report problematic questions. SdashAPI explicitly lists these as uses for its question identifiers. SdashAPI
What about images and explanations?
A serious Nigerian past-questions database needs to account for more than text.
Mathematics and science questions may contain diagrams. English questions can depend on passages. Students may also need solutions after attempting a question.
SdashAPI's current coverage page reports image availability across UTME, WASSCE, NECO and Post-UTME, while its core API schema includes image and solution fields. SdashAPI
That means your frontend should be designed for optional content:
if (question.image) {
// render the question image
}
if (question.solution) {
// make solution available during review
}
Don't design your entire CBT interface around the assumption that every question is four short lines of plain text.
You can test before buying a large database
If you're still prototyping, buying hundreds of thousands of records immediately may be unnecessary.
SdashAPI currently offers a Sandbox with 2,000 credits so developers can test the integration and build features such as subject filtering, year filtering, answer checking, question navigation and scoring before moving to production access. SdashAPI
That makes a sensible development sequence:
Build prototype
↓
Test real questions
↓
Validate your CBT flow
↓
Choose API or bulk dataset
↓
Launch
↓
Scale
What should you look for in a Nigerian past questions database?
The number of questions matters, but it isn't the only thing worth checking.
A useful database should have consistent exam and subject labels, stable question IDs, correct option structures, year information, answers, solutions where available, image support and predictable machine-readable output.
You should also check whether the provider supports the examinations you actually need rather than buying a giant "Nigerian questions database" and discovering that half of your product requirements aren't covered.
For developers who need an API rather than maintaining everything themselves, SdashAPI documentation shows the current REST endpoints and response structure, while SdashAPI Coverage shows the current exam, subject and year coverage. SdashAPI
A good past questions database in Nigeria is ultimately not just a pile of old questions. It is structured educational data that your software can search, filter, mark, analyse and turn into a useful learning experience.