Documentation

Multi Select Grid Question

When and Why to Use

Use this to let users select multiple items from each row of a grid. Best for:

  • Capturing multiple associations across brands or features
  • Structured multi-select input
  • Attribute-based tagging questions

Supports recoding, exclusive options, and visual media rows.

Chat Style
  • Rows displayed one at a time vertically, each with a set of checkboxes or buttons
  • Input is grouped per row with selectable option tiles
  • Specify inputs appear inline below their respective rows
Traditional Style
  • Grid layout with rows and columns visible at once
  • Checkbox-style inputs allow multiple selections per row
  • Optimized for keyboard and remote navigation
Chat styleTraditional with ImagesTraditional - Mobile optimized
Multi Select Grid Question Figure 01Multi Select Grid Question Figure 02Multi Select Grid Question Figure 03
Configuration Options
OptionTypeRequiredDefaultDescription
questionstringyes-The prompt shown to the user
rowsList[str | MediaItem]yes-Rows to show in the grid
row_namestringyes-Label used in reporting and data schema
optionsList[str | MediaItem]yes-Options available for each row
stylestringnocheckbox"checkbox" or "button" style inputs
randomizeboolnoFalseRandomize row order
randomize_optionsboolnoFalseRandomize option order per row
other_optionsList[str]no-Additional options to present to the user
fixed_optionsList[str]no-Options not affected by randomization
exclusive_optionsList[str]no-Options that deselect others in same row
specify_optionstrno-Adds an "Other" input to each row
specify_textstrno"Please specify"Prompt shown when specifying input
imageMediaItemno-Top-level image shown above the question
recodesDict[str, str]no-Map of option values to alternate codes
defaultDict[str, List[str]]norandomDefault selections for test data
skip_emptyboolnoFalseSkip question if no rows provided
image_label_fieldstrno-Field to label image-based rows
show_image_labelboolnoTrueShow/hide image captions in rows
image_sizeTuple[int, int]no-Size for rendering images
custom_validatorCallable[[Dict[str, List[str]]], str | None]no-Function that returns a custom error message
number_secondsintno0Seconds to wait before allowing the respondent to continue
tagss.tag()no-Used in text substitution and reporting groupings
idstrno-Optional stable identifier for this question
Example Code
s.grid_multi_select_question( "What do you associate with these brands? Select all that apply", row_name="Brand", rows=["Coke", "Pepsi", "Dasani", "Fanta"], options=["Tasty", "Refreshing", "Cool", "Value", "Convenient"] )

With recodes:

s.grid_multi_select_question( "What do you associate with these brands?", row_name="Brand", rows=["Coke", "Pepsi", "Fanta"], options=["Tasty", "Cool", "Value"], recodes={ "Tasty": "Product", "Cool": "Brand", "Value": "Pricing" } )

With exclusive and specify:

s.grid_multi_select_question( "Select all that apply to each option below", row_name="Item", rows=["Feature A", "Feature B"], options=["Useful", "Overused", "Unknown"], exclusive_options=["Unknown"], specify_option="Other" )
Notes
  • exclusive_options allow per-row mutual exclusivity
  • recodes simplify grouping similar concepts in analysis
  • custom_validator lets you apply rules across the full grid
  • Use randomize_options to avoid order bias