Back to Blog

NECO question database JSON

A NECO question database JSON gives developers a structured way to use NECO past questions inside CBT apps, school portals, revision websites and educational software.

Instead of keeping questions in PDFs or Word documents, JSON separates each question into fields your application can understand:

{
  "id": 8931,
  "question": "Question text...",
  "option": {
    "a": "Option A",
    "b": "Option B",
    "c": "Option C",
    "d": "Option D"
  },
  "answer": "b",
  "solution": "Explanation or solution...",
  "image": null,
  "examtype": "NECO",
  "examyear": "2024"
}

This makes the data immediately useful for automatic marking, question navigation, revision history, analytics and other CBT features.

SdashAPI currently provides NECO question data through the same REST API infrastructure it uses for UTME, WASSCE and Post-UTME. Its current coverage page lists 25 NECO subjects, with an overall year range of 1988–2026. SdashAPI

Why JSON matters for a NECO app

Suppose you have this:

NECO Biology 2023.pdf

A student can read it, but your software doesn't automatically know which text is a question, where its options are, which answer is correct or which year and subject belong to it.

A JSON database solves that.

Your application can simply read:

question.question
question.option
question.answer
question.solution
question.examyear

Then your interface can turn those fields into a proper CBT screen.

That is the main difference between having NECO past questions and having a NECO question database.

Fetch NECO questions as JSON

SdashAPI's current core endpoint is:

GET https://sdashapi.com/api/v1/q

Authentication uses an AccessToken header. The API documentation lists neco as one of the valid values for the type parameter. SdashAPI

For example, the current SdashAPI PHP documentation uses this exact NECO Chemistry request:

GET https://sdashapi.com/api/v1/q?type=neco&subject=chemistry
AccessToken: YOUR_ACCESS_TOKEN
``` :chatgpt-content-reference{index="2"}


So you don't need a separate API architecture just because you're adding NECO.

Your application could use:

```text
type=utme
type=wassce
type=neco
type=post-utme

depending on what the student selects. SdashAPI

Add year and number of questions

A useful CBT app will usually need more than a random question.

For example, a student might select:

NECO
Chemistry
2024
40 Questions

SdashAPI's documented filtering system allows subject, type, year and limit to be combined in one request. SdashAPI

Following that documented structure, your NECO request becomes:

GET https://sdashapi.com/api/v1/q?subject=chemistry&type=neco&year=2024&limit=40
AccessToken: YOUR_ACCESS_TOKEN

The API supports a maximum of 50 questions in one request. If you need 100 questions, the documentation recommends splitting them across requests rather than requesting all 100 at once. SdashAPI

Build one CBT engine instead of a separate NECO app

This is where structured JSON becomes particularly useful.

You don't necessarily need:

JAMB CBT Engine
WAEC CBT Engine
NECO CBT Engine

You can build one reusable engine:

Choose Exam
     ↓
Choose Subject
     ↓
Choose Year
     ↓
Fetch JSON
     ↓
Load CBT Engine

Then the examination type simply changes the data being requested.

Your React or Flutter question component doesn't particularly care whether the record came from NECO or UTME.

It needs predictable fields such as:

question
options
id
image

This makes expanding an existing exam-preparation app much easier.

Use IDs, not question positions

Every SdashAPI question has a unique integer id. The API also supports retrieving an individual question by its ID:

GET https://sdashapi.com/api/v1/q?id=8931
``` :chatgpt-content-reference{index="6"}


That becomes useful when storing student activity.

Instead of:

```javascript
answers[5] = "c";

you can use:

answers[8931] = "c";

Now question order can change without destroying the relationship between the student's answer and the actual question.

The ID can also support:

Bookmarks
Questions I Got Wrong
Attempt History
Revision Lists
Reported Questions

That small database decision becomes very important once your application has thousands of users.

Don't send answers carelessly during a mock exam

Your stored question object may contain:

{
  "answer": "b",
  "solution": "..."
}

That's useful for marking and revision.

But during a serious NECO mock exam, you probably don't want the correct answer sitting openly inside the active frontend state where it can easily be inspected.

A better architecture is:

SdashAPI
   ↓
Your Backend
   ↓
Remove answer + solution
   ↓
Student's Mock Exam
   ↓
Submit Answers
   ↓
Backend Marks Attempt
   ↓
Return Score + Review

For a simple practice app, keeping everything client-side may be acceptable. For a controlled school examination or competitive mock platform, server-side marking is a better design.

NECO JSON can contain more than questions and answers

SdashAPI has four question API versions.

The current documentation describes them broadly as:

V1 → Core question data
V2 → Metadata and taxonomy
V3 → Detailed explanations
V4 → Intelligence / similar-question features
``` :chatgpt-content-reference{index="7"}


V2 can add metadata such as:

```json
{
  "metadata": {
    "topic": "Organic Chemistry",
    "subtopic": "Alkanes",
    "difficulty": "medium",
    "type": "MCQ",
    "skill": "Recall",
    "tags": [
      "hydrocarbons",
      "covalent"
    ]
  }
}
``` :chatgpt-content-reference{index="8"}


That can turn a basic NECO question database into something more useful.

Instead of only offering:

> NECO Chemistry 2024

your application can eventually build features around topics, difficulty and student weaknesses.

## Explanations can also be structured

For revision apps, an answer such as:

> Correct answer: B

isn't always enough.

SdashAPI V3 adds a structured explanation object containing fields such as:

```json
{
  "explanation": {
    "summary": "Quick explanation...",
    "detailed": "Detailed reasoning...",
    "steps": [
      "Step 1...",
      "Step 2..."
    ],
    "why_correct": "Why the answer is correct...",
    "why_others_wrong": {
      "a": "Why A is wrong...",
      "c": "Why C is wrong..."
    }
  }
}
``` :chatgpt-content-reference{index="9"}


That allows a NECO revision app to go beyond scoring.

A student can answer incorrectly and immediately learn what went wrong.

## How much NECO data is available?

According to the current [SdashAPI Coverage](https://sdashapi.com/coverage) page, NECO currently has:

```text
25 subjects
1988–2026 overall year range
67% explanations
Images available
V1, V2, V3 and V4 support
``` :chatgpt-content-reference{index="10"}


The same page currently reports **368,868+ questions across the entire SdashAPI database**, covering all supported examination types. :chatgpt-content-reference{index="11"}

The 1988–2026 figure is an overall NECO coverage range. Developers shouldn't interpret it as meaning that every subject necessarily has questions available for every year.

Your interface should handle an unavailable combination gracefully.

## API JSON vs owning the complete NECO JSON dataset

There are two different things developers often mean when searching for a "NECO question database JSON."

### Using an API

Your architecture looks like:

```text
App
 ↓
Your Backend
 ↓
SdashAPI
 ↓
JSON Response

You request the data you need when you need it.

This is convenient because you don't have to maintain the entire question bank yourself.

Owning an offline dataset

Your architecture becomes:

NECO Dataset
    ↓
JSON / SQL
    ↓
Your Database
    ↓
Your Application

This may make more sense for completely offline CBT software, large institutional systems or products that need their own local copy.

SdashAPI currently advertises bulk dataset licensing in JSON, CSV, SQL and other formats for teams that need the full dataset offline. SdashAPI

So decide which requirement you actually have before building.

Can you test NECO for free?

There is an important limitation here.

SdashAPI currently provides 2,000 free Sandbox credits, but the current Sandbox plan lists only UTME and WASSCE with V1 access. NECO isn't currently listed as part of the free Sandbox. SdashAPI

The current Developer plan includes:

UTME
WASSCE
NECO
Post-UTME

along with 350,000 monthly API credits. SdashAPI

That's worth knowing before designing your development budget rather than assuming that every examination type is included in the free tier.

A good NECO database should be designed for software, not just storage

Having 50,000 questions isn't very useful if your application can't reliably determine:

Which exam is this?
Which subject?
Which year?
What are the options?
What's the correct answer?
Is there a solution?
Does it require an image?
What's its unique ID?

That structure is what turns a collection of past questions into usable educational infrastructure.

For developers who want API access, the current SdashAPI documentation shows the actual endpoints, filters and JSON responses, while SdashAPI Coverage shows the current NECO coverage.

A NECO question database JSON ultimately gives your software something a PDF cannot: past questions that can be searched, filtered, marked, analysed and reused programmatically.

Avatar

How can we help?

We reply immediately

Hello! 👋 How can we help you today?