Last updated: 2026-10-15
To export Google Form questions, use a manual inventory for a short form or Apps Script for a larger one. Record the title, type, required setting, choices, and help text. Downloading responses gives you submitted values, not this question inventory.
Choose your next task before choosing a tool: review the questions, make another Google Form, or build a draft on another service. A form copy can be enough for the second task. An inventory is useful for the first and third because you can compare the original and destination before changing a live form. The steps below keep extraction, verification, and rebuilding separate.

The short answer: Google Forms has no question-list CSV button
Google Forms lets you view responses in Forms, send them to Google Sheets, and download response data. It does not provide a standard editor button that exports the full question structure as a CSV inventory.
Choose the method based on the job:
| Method | Best for | What you get | Main limitation |
|---|---|---|---|
| Manual inventory | One short form | Exactly the details you choose to record | Easy to miss a setting |
| Copy the form | Reusing the same form in Google Forms | A working Google Forms copy | Not a portable inventory |
| Apps Script | Many questions or multiple forms | Item titles, types, help text, and type-specific settings | Requires code and manual verification |
| Forms API | A maintained migration tool | Structured form resources and item IDs | More authentication and implementation work |
If your only goal is to make another Google Form, use the form-copy function. If you need a review sheet, a migration map, or a comparison across several forms, create an explicit inventory.
Do not confuse question structure with response data
There are four different things you may be trying to move.
| Data | Examples | Appropriate method |
|---|---|---|
| Submitted responses | Timestamp, name, email, selected answer | Responses tab, Google Sheets, or CSV |
| Question structure | Title, type, required status, choices, help text | Manual inventory, Apps Script, or Forms API |
| Presentation | Theme, images, spacing, section appearance | Separate visual review |
| Behavior | Branching, validation, quiz scoring, notifications | Separate behavior map and test plan |
The first row of a response CSV can look like a question list. It is not one. It only exposes labels used for collected columns. It cannot reliably tell you every allowed option, whether a blank value was permitted, or what would have happened after a particular choice.
For response export instructions, use Export Google Forms Responses to CSV. This page stays on the question side of the boundary.
Method 1: inventory a short form manually
For a form with ten or twenty questions, manual review is often faster than writing and validating a script.
Create a spreadsheet with these columns:
| Order | Question | Type | Required | Choices | Help text | Behavior to verify |
|---|---|---|---|---|---|---|
| 1 | Full name | Short answer | Yes | - | Enter your legal name | Personal data |
| 2 | Inquiry type | Multiple choice | Yes | Pricing, Setup, Other | Choose one | Branches to sections |
| 3 | Details | Paragraph | No | - | Up to 500 characters | Length validation |
Then work from top to bottom:
- Open the Google Form editor.
- Record every item in order, including section headings.
- Record whether each question is required.
- Copy every choice, including an “Other” option.
- Record help text, response validation, and file restrictions.
- Mark branching, quiz behavior, images, and videos for separate review.
- Open the responder preview and compare the inventory against what a respondent can actually see.
The final preview step catches a common mistake: editor items and respondent-visible behavior are related, but they are not interchangeable.
Method 2: read the question structure with Apps Script
Google's Apps Script Forms Service can open a form by ID or URL. Each Item exposes methods such as getTitle(), getType(), and getHelpText(). Type-specific interfaces expose settings such as isRequired() and getChoices().
The following example exports a useful starting inventory to the execution log:
function exportQuestionStructure() {
const formId = 'PASTE_FORM_ID_HERE';
const form = FormApp.openById(formId);
const rows = form.getItems().map((item, index) => {
const type = item.getType();
let required = '';
let choices = [];
if (type === FormApp.ItemType.MULTIPLE_CHOICE) {
const question = item.asMultipleChoiceItem();
required = question.isRequired();
choices = question.getChoices().map((choice) => choice.getValue());
} else if (type === FormApp.ItemType.CHECKBOX) {
const question = item.asCheckboxItem();
required = question.isRequired();
choices = question.getChoices().map((choice) => choice.getValue());
} else if (type === FormApp.ItemType.LIST) {
const question = item.asListItem();
required = question.isRequired();
choices = question.getChoices().map((choice) => choice.getValue());
} else if (type === FormApp.ItemType.TEXT) {
required = item.asTextItem().isRequired();
} else if (type === FormApp.ItemType.PARAGRAPH_TEXT) {
required = item.asParagraphTextItem().isRequired();
}
return {
order: index + 1,
title: item.getTitle(),
type: String(type),
required,
choices: choices.join(' | '),
helpText: item.getHelpText(),
};
});
console.log(JSON.stringify(rows, null, 2));
}
This is deliberately a small script. If your form uses dates, times, scales, grids, ratings, file uploads, or quiz questions, add an explicit branch for each type you need. A generic cast can throw an error when an item is not the expected type.
Google's Apps Script Forms Service lists the available item interfaces. The Forms API form resource is the better primary reference when you are building a maintained integration rather than a one-off inventory.
How to run the script safely
- Confirm that you have permission to edit the form.
- Create a project at
script.google.com. - Paste the example into the editor.
- Copy the form ID from the URL between
/d/and/edit. - Replace
PASTE_FORM_ID_HERE. - Run
exportQuestionStructure. - Review the authorization request. Do not bypass an organization policy.
- Copy the JSON from the execution log.
- Test the result on a small form before adding direct spreadsheet output.
Some Google Workspace organizations restrict Apps Script or its authorization scopes. If the authorization flow is blocked, ask the Workspace administrator. A migration inventory is not a reason to work around an access policy.
What the sample does not preserve
An item list is useful, but it is not a restorable backup.
Review these details separately:
[ ] Section order and section descriptions
[ ] Branch destinations for each applicable choice
[ ] Response validation rules and custom error text
[ ] Quiz answers, points, and feedback
[ ] File type, count, and size restrictions
[ ] Images and videos attached to items
[ ] Email collection and response-copy settings
[ ] Add-ons, notifications, triggers, and linked spreadsheets
[ ] Theme, header image, and presentation
Branching deserves particular care. A choice value and its destination are two pieces of information. Even if an API exposes the source behavior, the destination platform may model sections and conditions differently. Verify each path with test submissions after migration.
A practical migration workflow
Use the inventory as a contract between the old form and the new one.
- Freeze edits to the source form or record the extraction time.
- Export the question structure.
- Create a separate behavior map for branching and validation.
- Build an unpublished destination form.
- Compare labels, types, required settings, and choices.
- Test every branch with representative submissions.
- Only then move response operations, links, and traffic.
Do not mix this with historical response import. Building the destination questions and importing past submissions are separate changes with different failure modes.
Turn the inventory into a draft you can inspect in FORMLOVA
If a question review sheet is your only deliverable, you can stop after the inventory is verified. If you also want to build a new intake form and revise it through chat, FORMLOVA can use the readable fields of a public form URL as the starting point for an unpublished draft.
For example, imagine rebuilding an inquiry form with an inquiry-type question and a details field. These are suggested prompts to try, not an account of a completed extraction. Use a public responder URL that you are authorized to share with the connected AI service.
Inspect this public form URL and list the visible question titles, field types, required settings, and choices. Show any warnings or details you cannot read. Do not create a form yet. URL: paste the public responder URL here.
Compare the returned list against your inventory first. Correct missing or unclear items, then ask:
Use the reviewed fields to create an unpublished “Inquiry intake” draft. The inquiry-type choices are Pricing, Setup, and Other. Match the required settings in the reviewed inventory and flag unknown settings instead of guessing. Give me a preview before publication.
Use the preview to make the comparison concrete:
| Check | What to inspect in the draft |
|---|---|
| Labels and order | Every intended question appears in the right sequence |
| Required settings | Optional questions have not become mandatory |
| Choices | Pricing, Setup, and Other are present and use a single-choice field |
| Mobile and desktop display | Instructions, fields, and validation messages are readable |
| Original behavior | Branching and validation absent from the inventory still have a separate test case |
An unpublished preview does not save submitted responses. Use it to review the draft; verify actual response storage separately when preparing a published form for use. Draft creation, design changes, publishing, response collection, and CSV / Excel export are available on FORMLOVA's free plan. Importing historical responses is a separate Standard-or-higher feature. Your AI client's access requirements and charges follow that provider's terms.
Check your question inventory in an inquiry-form draft
Use readable fields from a public form to compare labels, required settings, and choices in an unpublished preview. Draft creation and review are available on the free plan.
Sign up free to build a draft from your question list
Create an account, verify your email, and connect FORMLOVA to a supported AI chat. Then use the prompts above to review the fields and create the draft. Signing up alone does not create a form.
This is not complete Google Forms migration. A public page may not expose sign-in-gated content, later questions, hidden branching, validation, quiz settings, add-ons, notifications, or the original theme. Supplement unreadable details from the inventory, configure behavior separately, and test before publishing. Keep the existing Google Form and its distribution links in service until the replacement is verified.
For field design decisions, read Form Field Examples and Selection Guide. For the wider Google Forms, Sheets, and Apps Script operating boundary, return to Google Forms + Sheets + Apps Script Operations.
Use the inventory to improve the form, not just copy it
Migration is a good time to remove accidental complexity.
| Review question | Warning sign | Better decision |
|---|---|---|
| Are labels consistent? | “Details,” “Message,” and “Request” mean the same thing | Use one clear label |
| Is every required field necessary? | Phone, address, and company are all mandatory before first contact | Require only what the next step needs |
| Are choices current? | Old products or departments remain | Align choices with current routing |
| Does free text have a purpose? | Several open-ended fields ask similar questions | Explain what belongs in one field |
| Can every branch be tested? | Nobody owns the path map | Assign test cases before launch |
Once the destination form is verified, How to Start Form Automation with FORMLOVA explains how notifications, ownership, and post-submission work fit around it.
FAQ
Can I download only the questions from Google Forms as CSV?
There is no standard Google Forms editor button for a complete question-structure CSV. Use a manual spreadsheet for a short form, Apps Script for a larger inventory, or the Forms API for a maintained migration tool.
Can a response CSV rebuild the form?
No. Column headings may preserve question titles, but the file does not reliably preserve the question type, required setting, all possible choices, branching, validation, quiz settings, or presentation.
Can Apps Script export branching?
Apps Script can expose some navigation behavior through type-specific methods, but a reusable migration requires additional logic and destination-specific mapping. Treat branching as a separate behavior map and test every path.
Is copying the Google Form enough?
It is enough when you only need another Google Form. It does not create a portable inventory for review, standardization, or migration to a different system.
Can FORMLOVA reproduce a Google Form completely?
No complete reproduction is promised. FORMLOVA can extract visible fields from an accessible public form and create an unpublished draft, but hidden branches, validation, quizzes, add-ons, notifications, and visual details require separate review.
Read next
- Google Forms + Sheets + Apps Script Operations
- Export Google Forms Responses to CSV
- How to Use Google Forms
- How to Start Form Automation with FORMLOVA
Start with one form: verify titles, types, required settings, and choices against its responder preview. Save the inventory if that completes the job. If you want to test a replacement, use the prompts above to build an unpublished draft and compare it before moving traffic. The FORMLOVA setup guide explains the connection steps.
Disclosure and Verification
The author develops FORMLOVA. On 2026-10-15, the Google Apps Script Item reference and FORMLOVA's public-form extraction, unpublished preview, and plan definitions were rechecked for this revision. Product and API behavior can change; verify the current Google documentation and test with a non-production form before migration.
Primary sources:


