This page explains how question text becomes something Blackboard will actually accept, and why. It is deliberately didactic: every term is defined before it is used, because the failure modes here are almost always a mismatch between what you think the importer reads and what it actually reads.
Blackboard does not have a single "import questions" button. It has two unrelated pipelines, and a file built for one will be rejected by the other. Knowing which one you are using is the whole game.
This tool produces both. The Download .txt button is for the first pipeline. The Download Pool (.zip) button is for the second.
The simplest format. Each line is one question: a type code, then the question text, then the answers, all separated by TAB characters (not spaces). Example of a single multiple-choice line (arrows mark tabs):
MC → What does SOC stand for? → Security Operations Center → correct → System Operations Console → incorrect
How to use it: open a Test or Pool, go to the question canvas, choose Upload Questions, and select the .txt. Blackboard will ask you to assign point values. This path never involves a ZIP. If you feed the ZIP here, or the TXT to the pool importer, you get an error, because each pipeline only understands its own format.
A Blackboard package is a ZIP whose contents follow the IMS Content Packaging convention. "IMS Content Packaging" simply means: there is a manifest file at the root named imsmanifest.xml that acts as a table of contents, and the manifest points at the real payload files. Blackboard layers its own conventions on top of that base standard.
How to use it:
.zip..zip.The ZIP this tool builds contains exactly three files at the root. No folders.
| File | Role |
|---|---|
.bb-package-info | A fixed metadata descriptor. Blackboard expects it at the root of any package it produced or will accept. It is a static file (a captured export descriptor); Blackboard does not check its contents against your questions, so the same file is reused for every package. |
imsmanifest.xml | The table of contents. It declares one resource: the pool, its type, and the filename that holds it. |
res00001.dat | The actual questions, as a QTI XML document. "QTI" (Question and Test Interoperability) is the education-standard XML vocabulary for questions; Blackboard uses a dialect of it called questestinterop. |
The manifest is short, but one detail decides whether the import succeeds or silently finds nothing. Here is the working version:
<?xml version="1.0" encoding="UTF-8"?>
<manifest identifier="man00001" xmlns:bb="http://www.blackboard.com/content-packaging/">
<organization default="toc00001"><tableofcontents identifier="toc00001"/></organization>
<resources>
<resource bb:file="res00001.dat" bb:title="My Pool"
identifier="res00001" type="assessment/x-bb-qti-pool"
xml:base="res00001"/>
</resources>
</manifest>
The type tells Blackboard how to read the payload. There are two pool types in the wild:
assessment/x-bb-pool: an older, proprietary serialization. The importer reads its payload from the plain file= attribute.assessment/x-bb-qti-pool: the QTI dialect this tool emits. The importer reads its payload from the namespaced bb:file= attribute, NOT plain file=.type="assessment/x-bb-qti-pool" but write the payload pointer as plain file="res00001.dat", Blackboard accepts the package, walks the manifest, looks for bb:file, finds nothing, loads zero questions, and reports the import as "completed" with no pool. The fix is the single attribute prefix: bb:file plus the xmlns:bb declaration on the manifest. This is verifiable in the open-source Moodle reader for the same format, which branches on type and pulls QTI content specifically from getAttribute('bb:file').
For contrast, the earlier error you may have seen first, "Unable to convert the given package," means something cruder: there was no recognizable manifest at all (for example, a ZIP that just wrapped a .txt). Convert-stage failure means the package was never understood; "no pool found" means it was understood but the pointer was wrong.
The payload is a questestinterop document. Its shape is a nesting doll: a pool wraps a section, and the section holds one item per question.
<questestinterop>
<assessment title="My Pool">
<assessmentmetadata> ... pool-level bb metadata ... </assessmentmetadata>
<section>
<sectionmetadata> ... </sectionmetadata>
<item title="Question 1" maxattempts="0">
<itemmetadata> ... bbmd_questiontype=Multiple Choice ... </itemmetadata>
<presentation> ... the stem and the answer choices ... </presentation>
<resprocessing> ... which choice is correct, and the score ... </resprocessing>
<itemfeedback> ... </itemfeedback>
</item>
... more items ...
</section>
</assessment>
</questestinterop>
Three parts of each item do the real work:
bbmd_questiontype (for example Multiple Choice, Multiple Answer, True/False, Essay). This is how Blackboard decides which editor to render.respcondition titled "correct" names the winning choice id and sets the score; multiple-answer questions use an and of the required ids with not around the ones that must be left unselected, plus per-choice partial-credit weights.Grading hinges on one declaration. The score variable is set up once per item:
<outcomes>
<decvar varname="SCORE" vartype="Decimal" defaultval="0" minvalue="0" maxvalue="10.000000"/>
</outcomes>
The correct-answer rule then does setvar ... >SCORE.max. That SCORE.max resolves to the maxvalue above. If maxvalue is missing, SCORE.max is undefined and every question silently grades as zero even though the import "worked." So a clean import with all-zero points is almost always a missing maxvalue, not a wrong answer key.
This is the text you paste into the generator. Separate questions with a blank line. A leading 1. or 20) on the question line is optional and is stripped automatically.
1. What does the SOC acronym stand for?
a. System Operations Console
*b. Security Operations Center
c. Service Oriented Cluster
Prefix the correct option with *. Option letters like a. or b) are optional and are stripped.
2. Which of the following are symmetric ciphers?
*a. AES
b. RSA
*c. ChaCha20
d. ECDSA
Mark every correct option with *. Two or more correct options is automatically detected as multiple-answer, with balanced partial credit (each correct choice adds, each wrong choice subtracts).
3. TCP is a connectionless protocol.
*False
True
Provide both True and False lines; star the correct one.
4. Explain defense in depth in your own words.
Type: E
5. The CIA triad is confidentiality, integrity, and ____.
Type: F
Add a Type: E (essay) or Type: F (fill-in-the-blank) line directly under the question. Because the input format carries no answer key for these, they import as manually graded essay items. Grade them in the Blackboard grade center, or add answers later in Blackboard.
| Pasted input | Code | Blackboard type | Auto-graded? |
|---|---|---|---|
One * option | MC | Multiple Choice | Yes |
Two or more * options | MA | Multiple Answer | Yes (partial credit) |
True / False lines | TF | True/False | Yes |
Type: E | ESS | Essay | No (manual) |
Type: F | FIB | Essay placeholder | No (manual) |
| What Blackboard says | What it means | Fix |
|---|---|---|
Unable to convert the given package | No usable manifest was found. Usually a ZIP that just wraps a .txt, or a corrupt archive. | Use the Download Pool (.zip) output, which contains a real imsmanifest.xml. Do not zip the .txt yourself. |
No Question Pool found to import (import "completed") | The manifest parsed, but the pool pointer was not read. Almost always the bb:file attribute is missing for a QTI pool. | Manifest resource must use bb:file with the xmlns:bb namespace, not plain file=. |
| Import works but every question is worth 0 | SCORE.max has nothing to resolve to. | The score decvar needs a maxvalue. |
You fed the .txt to Import Pool, or the .zip to Upload Questions | Wrong pipeline. | .txt goes to Upload Questions; .zip goes to Import Pool / Question Bank. |
The package format here is not officially documented by Blackboard, so it was reconstructed from working open-source generators and from the open-source importer that reads the same format:
imsmanifest.xml + res*.dat shape and the assessment/x-bb-pool type.questestinterop item layout, the .bb-package-info file, and the QTI pool type.qformat_blackboard_six importer, being open source, was the ground truth for the decisive detail: QTI pools are read from bb:file, proprietary pools from plain file.