Import Guide

← back to the generator

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.

CONTENTS
  1. Two ways into Blackboard
  2. Path A: the tab-delimited .txt
  3. Path B: the pool .zip package
  4. Anatomy of the package
  5. The manifest, and the one attribute that matters
  6. Inside res00001.dat (the questions)
  7. How points are assigned
  8. Input pool syntax reference
  9. Question type mapping
  10. Troubleshooting by error message
  11. Sources and credits

1. Two ways into Blackboard

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.

2. Path A: the tab-delimited .txt

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.

3. Path B: the pool .zip package

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:

4. Anatomy of the package

The ZIP this tool builds contains exactly three files at the root. No folders.

FileRole
.bb-package-infoA 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.xmlThe table of contents. It declares one resource: the pool, its type, and the filename that holds it.
res00001.datThe 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.

5. The manifest, and the one attribute that matters

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:

The trap that produces "No Question Pool found to import": if you declare 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.

6. Inside res00001.dat (the questions)

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:

7. How points are assigned

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.

8. Input pool syntax reference

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.

Multiple choice (one correct)

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.

Multiple answer (more than one correct)

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).

True / False

3. TCP is a connectionless protocol.
*False
True

Provide both True and False lines; star the correct one.

Essay and Fill-in-the-Blank

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.

9. Question type mapping

Pasted inputCodeBlackboard typeAuto-graded?
One * optionMCMultiple ChoiceYes
Two or more * optionsMAMultiple AnswerYes (partial credit)
True / False linesTFTrue/FalseYes
Type: EESSEssayNo (manual)
Type: FFIBEssay placeholderNo (manual)

10. Troubleshooting by error message

What Blackboard saysWhat it meansFix
Unable to convert the given packageNo 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 0SCORE.max has nothing to resolve to.The score decvar needs a maxvalue.
You fed the .txt to Import Pool, or the .zip to Upload QuestionsWrong pipeline..txt goes to Upload Questions; .zip goes to Import Pool / Question Bank.

11. Sources and credits

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: