Import questions into the Question Bank (CSV)
Goal: Bulk-load questions into the Question Bank from a CSV file.
Who can do this: Platform administrators and Directory administrators only. The Import button is not visible to any other role.
Before you start
- Your CSV must be 2 MB or smaller.
- The
job_familycolumn must match a job family name that already exists in the Skills taxonomy. The import will reject rows with an unrecognised job family — check the taxonomy first if you're not sure. - Each question needs a unique
question_id. If a question ID already exists in the bank, that row is silently skipped (no error, just not inserted). This makes re-imports safe to run. - New primary roles that don't yet exist in the taxonomy are created automatically during a real import. This does not happen during a preview/dry run.
CSV column reference
Required columns (every row)
| Column | What to put in it |
|---|---|
question_id | A unique identifier for this question — used to prevent duplicates. Any consistent string works (e.g. a UUID, an internal code). |
job_family | Name of an existing job family in the Skills taxonomy (e.g. "Engineering", "Design") |
skill_type | One of: Role Capability (Hard Skill), Hard Skill, Foundational/Cognitive, Judgment (Soft Skill), Hard + Soft Skill, Values |
level | Difficulty tier: L1–L6, L0.1, L0.2, L0.3, or NA |
format | One of: mcq, scenario, short_answer, open |
source | One of: Internal, JD Corpus, Employer Engagement |
question_text | The full question text shown to candidates |
Required only for MCQ format
When format is mcq, all of these must be filled in:
| Column | What to put in it |
|---|---|
option_a | Text for answer option A |
option_b | Text for answer option B |
option_c | Text for answer option C |
option_d | Text for answer option D |
correct_answer | The correct letter: A, B, C, or D |
rationale_a | Explanation of why option A is correct or incorrect |
rationale_b | Explanation of why option B is correct or incorrect |
rationale_c | Explanation of why option C is correct or incorrect |
rationale_d | Explanation of why option D is correct or incorrect |
Optional columns
| Column | What it does |
|---|---|
primary_role | The specific role this question targets within the job family (auto-created if it doesn't exist) |
variant_group | A group label for questions that are variants of each other — questions sharing the same label are linked |
parent_skill_label | The parent skill in the taxonomy this question assesses |
primary_subskill_label | The specific subskill within the parent skill |
parent_code | Internal code for the skill, if used in your content process |
also_applies_to | Other roles or families this question is relevant to — separate multiple values with semicolons |
industry_context | Industry or sector context (e.g. "Financial services") |
tools | Tools or technologies the question covers — separate multiple values with semicolons |
notes | Internal notes for content reviewers — not shown to candidates |
Steps
Step 1 — Open the import dialog
- Sidebar → Question Bank.
- Click Import at the top of the Question List tab. This opens the Import CSV dialog.
Step 2 — Upload your file
Drag your .csv file onto the upload area, or click it to browse and select the file. The file name and size appear once it's loaded. You can click again to swap the file.
Step 3 — Preview before committing (recommended)
The Preview only checkbox is on by default. Leave it checked and click Preview to validate your file without inserting anything.
The preview result shows:
- Total rows — how many question rows were found in the file
- Valid — rows that passed all validation checks
- Skipped (dupe) — rows whose
question_idalready exists in the bank - Would insert — the net new rows that would be added
Any errors appear in a table below, showing the row number, column name, and what's wrong. Fix these in your source file before proceeding.
:::tip Always preview first
A preview run is free — it doesn't touch the bank. Use it to catch job family mismatches, missing MCQ options, or unknown skill types before you commit.
:::
Step 4 — Run the real import
Once the preview looks clean:
- Uncheck Preview only.
- Click Import.
- Wait for the result — the dialog shows how many questions were inserted and lists any remaining errors.
Step 5 — Check the Question List
Close the dialog. The newly imported questions appear in the Question List tab with Draft status. From there, submit them for review, promote them through the lifecycle, or bulk-update their status as needed. See Question bank — operator guide for the review and status workflow.
What happens to imported questions
- Every imported question lands as Draft — none go live automatically.
- Questions are owned by the platform (not by a specific company).
- The
question_idfrom your CSV is stored as the external reference — this is what's checked on future imports to skip duplicates.
Common issues
| Error message | What it means | How to fix |
|---|---|---|
Job family not found: "[name]" | The job family in your CSV doesn't match anything in the taxonomy | Check the exact spelling against the Skills taxonomy and correct the CSV |
[field] is required for MCQ format | An MCQ row is missing an option, correct answer, or rationale | Fill in all eight MCQ columns for that row |
Unknown level value: "[value]" | The level column has an unrecognised value | Use one of: L1–L6, L0.1, L0.2, L0.3, NA |
Unknown skill_type value: "[value]" | The skill_type column has an unrecognised value | Match one of the accepted values exactly (see column reference above) |
| Row appears in "Skipped (dupe)" | A question with that question_id already exists | If you want to update an existing question, edit it directly — imports only add new rows |
| File too large | CSV exceeds 2 MB | Split the file into smaller batches and import in multiple passes |
See also
- Question bank — operator guide — review queue, status lifecycle, bulk actions
- Question bank — Item Analysis — psychometric quality after real candidate responses