Question Bank & Papers
Import questions, organise into exam papers, and manage your question bank.
Question TypeTopicMarksPapersActions
Upload a CSV file. Questions are previewed before importing so you can verify they're correct. After import you'll be asked to assign them to an exam paper. Need the format? See the πŸ“‹ CSV Format tab.
πŸ“„
Click or drag to upload a CSV file
Upload a saved eExam page (.html or .mhtml). Questions are extracted automatically β€” add correct answers manually in the Question Bank tab afterwards.
🌐
Click or drag to upload an HTML / MHTML file
Upload a JSON file previously exported from this app.
πŸ“¦
Click or drag to upload a JSON file
Column Reference
Exact header row: id,text,type,topic,subtopic,marks,options,correctAnswer,explanation,tags
FieldRequired?TypeDescription & Allowed Values
idOptionalstringLeave empty β€” auto-generated on import. If provided, re-importing updates the existing question.
textRequiredstringFull question text. Rows with no text are skipped.
typeRequiredstring Must be one of: mcq Β· multi Β· truefalse Β· short Β· essay
Also accepted: "Multiple Choice", "True/False", "Short Answer", "Essay" (normalised automatically)
topicOptionalstringSubject area for filtering and analytics. e.g. Anatomy, Pharmacology
subtopicOptionalstringMore specific area. e.g. Cardiac Cycle
marksOptionalnumberPoints for this question. Default: 1
optionsMCQ/Multi onlyJSON array [{"key":"A","text":"Option text"},{"key":"B","text":"..."}]
Required for mcq and multi. Leave empty for truefalse, short, essay.
Inside CSV quotes, inner double-quotes must be doubled: [{""key"":""A"",""text"":""...""}]
correctAnswerOptionalstring or JSON array mcq: key string β€” "B"
multi: JSON array of keys β€” ["A","C"] (escaped: [""A"",""C""])
truefalse: "True" or "False"
short: model answer string
essay: leave empty (manually graded)
explanationOptionalstringShown to students after answering. Highly recommended for MCQ/multi.
tagsOptionalJSON array ["tag1","tag2"] β€” for filtering and grouping. Leave empty or [].
Paper Metadata Row (optional β€” add BEFORE the header row)

Add this as the very first line of your CSV to automatically pre-fill the paper assignment fields on import. Values detected from this row take priority over filename detection.

#paper:subject=MED1200,year=Year 1,semester=Semester 1,paper=Paper 1,version=Version 001,duration=120

Supported keys: subject, year, semester, paper, version, duration (minutes)

AI Agent Prompt β€” Copy & Paste into Claude, ChatGPT, etc.

Copy this entire block and paste it into your AI chat to get perfectly formatted CSV output:

You are generating a question bank CSV file for the eExam Simulation app. OUTPUT: A valid CSV file with this EXACT header row (first non-comment line): id,text,type,topic,subtopic,marks,options,correctAnswer,explanation,tags OPTIONAL PAPER METADATA (add as the very FIRST line, before the header): #paper:subject=UNIT1234,year=Year 1,semester=Semester 1,paper=Paper 1,version=Version 001,duration=120 COLUMN RULES: β€’ id β€” Leave EMPTY (auto-generated on import) β€’ text β€” Full question text (REQUIRED) β€’ type β€” MUST be exactly one of: mcq | multi | truefalse | short | essay β€’ topic β€” Subject area, e.g. "Anatomy", "Pharmacology", "Physiology" β€’ subtopic β€” Specific area, e.g. "Beta Blockers", "Cardiac Cycle" β€’ marks β€” Integer (default 1) β€’ options β€” JSON array for mcq/multi ONLY: [{"key":"A","text":"Option text"},{"key":"B","text":"..."}] Leave EMPTY for truefalse, short, essay β€’ correctAnswer β€” mcq: key string e.g. "C" multi: JSON array of keys e.g. ["A","C"] truefalse: "True" or "False" short: model answer string essay: leave EMPTY (manually graded) β€’ explanation β€” Explanation shown after answering (optional but recommended) β€’ tags β€” JSON array: ["tag1","tag2"] or leave EMPTY CSV FORMATTING RULES: β€’ Wrap ALL field values in double quotes: "value" β€’ Escape double quotes inside values by doubling them: "" β€’ JSON fields use double quotes inside, which must be escaped: options: "[{""key"":""A"",""text"":""Option text""}]" multi correctAnswer: "[""A"",""C""]" EXAMPLE ROWS (one of each type): MCQ: "","What is the primary function of insulin?","mcq","Physiology","Endocrine","1","[{""key"":""A"",""text"":""Increase blood glucose""},{""key"":""B"",""text"":""Decrease blood glucose""},{""key"":""C"",""text"":""Stimulate glucagon release""},{""key"":""D"",""text"":""Break down glycogen""}]","B","Insulin decreases blood glucose by facilitating uptake into cells. Produced by beta cells.","[""physiology"",""endocrine""]" MULTI-SELECT: "","Which of the following are risk factors for type 2 diabetes? (select all that apply)","multi","Medicine","Endocrine","2","[{""key"":""A"",""text"":""Obesity""},{""key"":""B"",""text"":""Regular aerobic exercise""},{""key"":""C"",""text"":""Family history of diabetes""},{""key"":""D"",""text"":""High-fibre diet""}]","[""A"",""C""]","Obesity and family history are established risk factors. Exercise and high-fibre diet are protective.","[]" TRUE/FALSE: "","Insulin is produced by alpha cells in the islets of Langerhans.","truefalse","Physiology","Endocrine","1","","False","Insulin is produced by BETA cells. Alpha cells produce glucagon.","[]" SHORT ANSWER: "","What is the normal fasting blood glucose range (mmol/L)?","short","Physiology","Endocrine","2","","3.9 to 5.5 mmol/L","Fasting blood glucose 3.9–5.5 mmol/L is normal. β‰₯7.0 mmol/L on two occasions = diabetes.","[]" ESSAY: "","Describe the pathophysiology of type 2 diabetes mellitus, including the roles of insulin resistance and beta cell failure.","essay","Medicine","Endocrine","10","","","Mark for: insulin resistance mechanism (2 marks), compensatory hyperinsulinaemia (2 marks), progressive beta cell failure (3 marks), clinical consequences (3 marks).","[""essay"",""diabetes""]"
Download Blank Template

Download a pre-formatted CSV with one example of each question type β€” open in Excel or Google Sheets and replace with your own content.