Coming from Qualtrics: Importing a .qsf Survey into Potato
Import a Qualtrics .qsf into Potato survey pages, and map blocks, display logic, randomizers, embedded data and End of Survey elements to Potato keys.
potato import reads a Qualtrics survey file (.qsf) and turns it into Potato survey pages, with its display logic, branches, randomizers and End of Survey elements translated into page and question rules. From Potato 2.12.0, a study that uses Qualtrics for consent, demographics and a screener and another tool for the labeling can run in one place, with the survey, the annotation, Prolific or SONA, and one export.
A .qsf file holds a survey's questions, blocks, survey flow and logic, not its responses. Potato is an annotation and survey server configured in YAML, so each Qualtrics block becomes a survey page in phases.order, and the annotation task sits between the pages that come before it and the pages that come after.
Export the survey from Qualtrics
Survey → Tools → Import/Export → Export Survey downloads the .qsf.
Import it into Potato
potato import -i screener.qsf -o my-study/
python potato/flask_server.py start my-study/config.yaml -p 8000Each block becomes a page (a page break inside a block starts a new one), each question becomes a Potato question, and the display logic, branches and end-of-survey elements become page and question rules. The new study runs the survey and then a placeholder annotation task, which you replace with the real one. To add the survey to a project you already have:
potato import -i screener.qsf --into my-study/config.yaml --prefix scr_IMPORT_REPORT.md lists everything that did not carry over. Survey Import covers the flags and the other six formats.
Qualtrics features and their Potato equivalents
| Qualtrics | Potato |
|---|---|
| Block | A survey page in phases.order |
| Page break | A new page |
| Multiple choice (single, multiple, dropdown) | radio, multiselect, select |
| Matrix table (Likert) | multirate |
| Text entry, form | text, one text per form field |
| Text entry with number validation | number with min and max |
| Slider | slider, one per statement |
| Rank order, constant sum | ranking, constant_sum |
| Descriptive text | pure_display |
| Force response | label_requirement: {required: true} |
| Display logic | display_logic with nested all, any and not |
| Branch in the survey flow | show_when on the pages under it |
| Randomizer showing all blocks | phases.counterbalance |
| Randomizer assigning one embedded-data value | conditions, a between-subjects factor |
| End of Survey in a branch, skip to end of survey | exit_when, which screens the participant out |
| Choice randomization | randomize_order |
| Embedded data from a URL, such as the Prolific ID | Potato's login and crowdsourcing settings capture it |
A randomizer that assigns embedded data maps onto Potato's conditions block, which assigns each participant to a cell when they arrive and keeps the cells balanced as people arrive and drop out. Logic that tested the embedded-data field tests condition.<field> after the import. Experiment Flow covers assignment, page rules and counterbalancing.
What the import leaves out
Loop & Merge (the block is imported once), piped text, logic on single matrix cells, "is displayed" conditions, choice-level display logic, quotas, web service and authenticator elements, scoring, custom validation, soft "request response", question JavaScript, and question types with no Potato equivalent (heat map, hot spot, file upload, signature, side-by-side, timing) are not imported. Each one is listed in the report.
Qualtrics' Timing question records page timing, not reaction time. For speeded responses, Potato has timed trials on annotation items and jsPsych pages.
Further Reading
- Survey Import - Every survey format
potato importreads - Experiment Flow - Conditions,
show_when,exit_whenand counterbalancing - Multi-Phase Workflows - Survey pages around an annotation task
- Behavioral Experiment Tools Compared - Qualtrics beside jsPsych, PsychoPy, Gorilla, lab.js and Potato
- Sensitive Questions - List experiments and randomized response
For implementation details, see the source documentation.