Documentation

Multi Select Question

Article

Multi Select Question

When and Why to Use

Use this when the respondent can select more than one option. Ideal for:

  • Attitudes, experiences, or features that apply in parallel

  • “Select all that apply” questions

  • Showing both fixed and exclusive choices (e.g. “None of the above”)

Supports image-based choices, randomization, “Other (specify)”, and recodes.

Chat Experience
  • Options shown as checkboxes or tap-to-select tiles.

  • If max_options is set, selection becomes disabled once the limit is reached.

  • Exclusive options deselect others when tapped.

  • Specify input appears inline below the selected “Other” option.

Without imagesWith imagesList style
Plain TextText ImagesSelect Question chat Markdown Many Options
Traditional Experience
  • Same logic as portrait, but more layout flexibility.

  • Wider layout for media items, and better keyboard/remote navigation support.

With imagesWithout ImagesMobile optimizedList style
Markdown ImagesMarkdown Many Options483897544 a99f047a 9814 4457 b218 a70b7ad8d268Multiselect Question web Markdown Many Options
Configuration Options
OptionTypeRequiredDefaultDescription
questionstringyes-The prompt shown to the user
optionsList[str|MediaItem]yes-
max_optionsintnoallLimit how many items can be selected
styleLiteral['button', 'list']nobutton for short lists/questions and list for longer ones.The style to use, either a list or a button.
imageMediaItemno-Image shown above the question
randomizeboolnoFalseShuffle options (except fixed ones)
fixed_optionsList[str]no-Options that remain static during randomization
exclusive_optionsList[str]no-Options that deselect all others when chosen
disabled_optionsList[str]no-Options to gray out/disable
specify_optionstrno-Adds an “Other” option requiring input
specify_textstrno“Please specify”Prompt shown with specify_option
defaultList[str]norandom choicesTest data default selections
recodesDict[str, str]no-Maps response(s) to grouped value(s)
custom_validator`Callable[[List[str]], strNone]`no-
skip_emptyboolnoFalseIf True, skips question if no valid options
image_label_fieldstrno-Field used to label media options
show_image_labelboolnoTrueWhether to show image captions
image_sizeTuple[int, int]no-Display size for images in options
tagss.tag()no-Replaces tokens in text and supports grouped reporting
Example Code
s.multi_select_question( "What did you enjoy about the experience?", options=["The food", "The service", "The atmosphere", "The price"], fixed_options=["Other"], exclusive_options=["Other"], specify_option="Other", recodes={ "The food": "food", "The service": "service", "The atmosphere": "atmosphere", "The price": "price", "Other": "other" } )

With max options and validation:

s.multi_select_question( "Select up to two brands you most associate with luxury", options=["Lexus", "BMW", "Audi", "Mercedes"], max_options=2, custom_validator=lambda x: "You must choose at least one brand" if not x else None )
Notes
  • exclusive_options override other selections and enforce mutual exclusivity

  • Use max_options to encourage prioritization

  • recodes let you bucket answers for analysis

  • specify_option is helpful for capturing outliers or edge cases