Import Multiple Choice Questions Into Google Forms — Answers and Marks Intact
"Multiple choice questions to Google Forms" is a more specific problem than a general import: each question carries a stem, a fixed set of choices, one (or several) correct answers, and usually a marks value. Losing any of those turns a self-grading quiz into a survey. This guide shows the text patterns that parse reliably, runnable code that turns MCQs into fixed columns, how quiz mode and the answer key fit together, and the eight failures that scramble option order or drop the marks.
Why copying MCQs by hand breaks the answer key
Google Forms lets you add a multiple-choice item and tick the correct answer, but one at a time. With 40 MCQs that means 40 chances to mis-tick the key, swap two options, or forget the points. And "how to make multiple choice questions in google forms" tutorials describe manual creation — not importing a bank you already have.
The other trap is that a correct answer in Forms is a property of a choice, not a separate text field. A spreadsheet with an "Answer: B" column is not a form; something must map that letter onto the corresponding choice when creating the item.
MCQ text patterns: what parses cleanly and what does not
| Pattern | Example | Reliable? |
|---|---|---|
| Numbered stem + lettered options | 1. Which planet is closest to the Sun?A) Mercury B) Venus ... | Yes |
| Answer on its own line | Answer: A or Key: A [1 pt] | Yes |
| Options on one line separated by spaces | A Mercury B Venus C Earth | Risky — split points are ambiguous |
| Correct option marked inline with an asterisk | *A) Mercury | Yes, if the marker is consistent |
| Answer key in a separate block at the end | 1:A 2:C 3:B ... | Workable, but must be joined back by number |
| Two-column layout / tables / images | PDF exam paper | Needs OCR + a structured parse, not a plain text read |
Runnable parser: MCQ text → fixed columns
This Python script reads a plain-text MCQ bank and writes the fixed-column CSV that an importer (or the Apps Script in the bulk guide) expects. It handles both inline Answer: X and a trailing key block.
import re, csv
src = open("mcq.txt", encoding="utf-8-sig").read()
lines = [l.rstrip() for l in src.splitlines()]
# trailing key block, e.g. "1:A 2:C 3:B"
key_block = {}
for l in lines:
if re.fullmatch(r"[\d\s:\-,.A-E]+", l) and ":" in l:
for num, ans in re.findall(r"(\d+)\s*:\s*([A-E])", l):
key_block[int(num)] = ans
questions, cur = [], None
opt_re = re.compile(r"^\s*[\(\[]?([A-E])[\)\].:]\s+(.+)$")
q_re = re.compile(r"^\s*(\d+)[\).:\-]\s+(.+)$")
for l in lines:
m = q_re.match(l)
if m and not opt_re.match(l):
if cur: questions.append(cur)
cur = {"Number": int(m.group(1)), "Stem": m.group(2).strip(),
"options": {}, "Answer": "", "Marks": 1}
continue
if cur is None: continue
o = opt_re.match(l)
if o:
cur["options"][o.group(1)] = o.group(2).strip()
continue
a = re.match(r"^\s*(?:Answer|Key|Ans)\s*[:\-]\s*([A-E])\b", l, re.I)
if a:
cur["Answer"] = a.group(1).upper()
p = re.search(r"(\d+)\s*pt", l, re.I)
if p: cur["Marks"] = int(p.group(1))
if cur: questions.append(cur)
for q in questions:
if not q["Answer"]:
q["Answer"] = key_block.get(q["Number"], "")
with open("mcq_rows.csv", "w", encoding="utf-8", newline="") as f:
w = csv.writer(f)
w.writerow(["Number","Type","Stem","A","B","C","D","E",
"Answer","Marks"])
for q in questions:
if not q["Stem"] or not q["Answer"]: continue
opts = [q["options"].get(k, "") for k in "ABCDE"]
w.writerow([q["Number"], "mcq", q["Stem"], *opts,
q["Answer"], q["Marks"]])
print("wrote", len(questions), "questions")Use utf-8-sig so a BOM does not corrupt the first line. The script skips a question with no answer rather than silently importing an ungraded item — better to review 3 skipped rows than discover them after students submit. For multiple-answer questions, store the key as A,C and map it to a checkbox item.
Enabling quiz mode and the answer key
Creating the items is only half the job. In the destination form: Settings → Quizzes → Make this a quiz, then choose when grades are released. The correct answer must be attached to the choice itself (in the Forms API, form.newChoice(value, isCorrect)). If you only write "Answer: A" into the question text, Forms has no idea it is a key and auto-grading will not happen.
This is also why the one-click importer matters: it writes number, stem, options, answer and marks into the same structured row and carries the key onto the choice, so a 40-MCQ quiz arrives already gradable. See Multiple Choice Test Generator for the broader MCQ-to-platform view, and Quiz to Google Form for moving an existing quiz.
Import multiple choice questions into Google Forms in 5 steps
Troubleshooting
- No auto-grading. Quiz mode is off, or the correct flag was not attached to a choice.
- Options swapped or merged. Options were on one line ("A Mercury B Venus"); split them onto separate lines before parsing.
- "Answer: A" appears in the question text. The parser treated the key line as part of the stem. Make sure the answer line matches the expected prefix.
- All marks are 1. The points were not in a numeric column; store them separately.
- Trailing key block not applied. Numbers in the text and in the key block do not match; check for duplicated or skipped numbering.
- Multi-answer questions graded as single. Use a checkbox item type and a comma-separated key, not a multiple-choice item.
- Non-Latin text garbled. Export UTF-8 and verify the font in Forms.
- Images missing. Keep one public image URL per question and attach after import; Forms does not bulk-attach images from a text file.
Collect the MCQs
Numbered stem, A–E options, answer and marks — in a file you already have.
Normalise the pattern
One option per line; answer on its own line or a trailing key block.
Parse into fixed columns
Run the Python script, or upload to a converter that does it for you.
Import and enable quiz mode
Create items, attach the correct flag to the choice, set points.
Verify before sharing
Check a sample question's order, key and marks in the live form.
Frequently asked questions
Can I import multiple choice questions into Google Forms?
Not directly — Forms has no MCQ import button. You either script the Forms API to create items and attach the correct-answer flags, or use a converter that parses your MCQ file (Word, PDF, spreadsheet, plain text) into fixed columns and writes the whole quiz as a Google Form you own.
How do I keep the answer key when importing multiple choice questions?
Store the correct option as its own column (Answer = A/B/C/D/E) and map it onto the choice object when the item is created. Then enable Settings > Quizzes > Make this a quiz. If the key is only text inside the question, Forms cannot auto-grade.
What MCQ text format imports most reliably?
A numbered stem followed by one option per line (A) ... B) ...), with 'Answer: A' on its own line and an optional '[2 pt]' mark. A trailing key block like '1:A 2:C' also works if numbering matches. Options crammed onto one line are the main source of parsing errors.
Can multiple-answer questions be imported?
Yes — map them to a checkbox item with a comma-separated key (e.g. 'A,C'). Do not use a multiple-choice item, which allows only one correct option.
Why are my marks all 1 after import?
Points must be a numeric column in the source, and the importer/script must call setPoints(). Text values such as '2 points' silently fall back to 1 in most scripts.
Question importers
ExamParser has a dedicated importer for each source format. Pick the one your questions currently live in — PDF, Word, Excel, Google Sheets or a quiz file — and the questions, options and answer key are carried into a Google Form you own.
Related guides
- How to Import Questions into Google Forms (every method)
- Bulk Upload Questions to Google Forms
- Multiple Choice Test Generator
- Quiz to Google Form
- Text to Google Form
- TXT to Google Form (.txt files)
Import MCQs with the key already attached
Stop ticking correct answers one question at a time. Import the whole MCQ bank with options, answer key and points carried over exactly as written, then switch on quiz mode and share. Deterministic, no AI rewriting.
Import my questions into Google Forms →