Qualtrics API - Certain columns change from string to number | XM Community
Skip to main content
I am downloading data from a survey that we did in Qualtrics. I found Python 3 sample code (https://api.qualtrics.com/docs/response-exports) and base my code around it. After successful download I noticed that questions that had provided a list of option for the user to select from were downloaded as numbers (I suspect the index of the answer selected). I've attached two images - I would like the data to look like the image with words, not like the image without the words. I believe the answer is simple as putting in some parameters to download the data differently but I can't seem to find it in Qualtric's API documentation. Here is my code with my api credentials changed. My notes are marked by // instead of # because Qualtrics renders those as headers. import shutil import os import requests import zipfile import json import io //Setting user Parameters apiToken = "myKey" surveyId = "mySurveyID" fileFormat = "csv" dataCenter = "az1" // Setting static parameters requestCheckProgress = 0 progressStatus = "in progress" baseUrl = "https://{0}.qualtrics.com/API/v3/responseexports/".format(dataCenter) headers = { "content-type": "application/json", "x-api-token": apiToken, } // Step 1: Creating Data Export downloadRequestUrl = baseUrl downloadRequestPayload = '{"format":"' + fileFormat + '","surveyId":"' + surveyId + '"}' downloadRequestResponse = requests.request("POST", downloadRequestUrl, data=downloadRequestPayload, headers=headers) progressId = downloadRequestResponse.json()["result"]["id"] print(downloadRequestResponse.text) // Step 2: Checking on Data Export Progress and waiting until export is ready while requestCheckProgress < 100 and progressStatus is not "complete": requestCheckUrl = baseUrl + progressId requestCheckResponse = requests.request("GET", requestCheckUrl, headers=headers) requestCheckProgress = requestCheckResponse.json()["result"]["percentComplete"] print("Download is " + str(requestCheckProgress) + " complete") // Step 3: Downloading file requestDownloadUrl = baseUrl + progressId + '/file' requestDownload = requests.request("GET", requestDownloadUrl, headers=headers, stream=True) // Step 4: Unzipping the file zipfile.ZipFile(io.BytesIO(requestDownload.content)).extractall("MyQualtricsDownload") // Step 5: Move the file out of the folder and place it in the working directory --> change the paths to the appropiate paths for the server shutil.move( "/Users/Abram/Documents/PCC/MyQualtricsDownload/Mindshare English v21.csv", "/Users/Abram/Documents/PCC/Mindshare English v21.csv") os.rmdir("/Users/Abram/Documents/PCC/MyQualtricsDownload/") print('Complete') Thanks :)
Set the useLabels parameter to true: https://api.qualtrics.com/docs/create-response-export
am I right to add it to my downloadRequestPayload? like so: useLabels = "true" downloadRequestPayload = '{"format":"' + fileFormat + '","surveyId":"' + surveyId + '","useLabels":"' + useLabels + '"}' When I do it get the following error: File "qualtrics.py", line 28, in <module> progressId = downloadRequestResponse.json()["result"]["id"] KeyError: 'result'
Try useLabels without the single quotes. It is a boolean, not a string.
When run as a string the requests module returns this error: File "qualtrics.py", line 26, in <module> downloadRequestPayload = '{"format":"' + fileFormat + '","surveyId":"' + surveyId + '","useLabels":"' + useLabels + '"}' TypeError: must be str, not bool I believe it is because python is putting together a JSON file to be sent to the qualtrics api using exclusively strings. When Qualtrics receives it as a JSON it then recognizes it as a bool datatype.
Hi @abrhim! It looks like the answer to your question can be found here! :)