Linking participant ID from qualtrics


I have a survey in Qualtrics and I would also like participants to complete the Stroop test using PsychoPy online (I cannot use it in the lab due to COVID). Qualtrics has a function to redirect participants at the end of a survey to a URL. I have heard that you can add code into this URL to copy the participant’s ID from Qualtrics across to PsychoPy, so that I can link a participant’s data across the two platforms. Does anybody know how to do this? As the participants will be completing the studies in their own time and in their own homes, I need it to be set up so they don’t have to enter their own participant ID (as they won’t know it). I appreciate any guidance on this as I am new to PsychoPy and also new to coding.

Thank you so much,

Hi Olivia,

In Qualtrics you can set the ResponseID in the Survey Flow as embedded data. You could then pass this to Pavlovia using ?participant=${e://Field/ResponseID}

ResponseID is unique, just not very pretty.

Best wishes,


I’m having some issues passing ResponseID to Pavlovia. I’m able to pass a constant to Pavlovia as the participant number (e.g. ?participant=123) but whenever I try to pass an embedded data variable (e.g. ?participant=${e://Field/ResponseID}), I get an error message at the very end about the results not being saved:

Hello! I’m not sure if you’re also using SONA to give participants credit, but I made a SONA → Qualtrics → Pavlovia → back step-by-step to transfer participant IDs. If you’re not using SONA, you can just skip that section and set up a random ID variable in Qualtrics and bring it to Pavlovia using the rest of the instructions.


That’s interesting.

I have been able to save log files with ResponseID as the participant, but I’m saving to Database rather than CSV. It might be that it’s better to pass ResponseID as session and have a random number or quota as the participant number itself.

I solved my problem. I had somehow forgotten to include the ever-important dollar sign. Oops.

I have a brief and related question. Some of my participants will be receiving course credit, as they are part of an undergraduate subject panel and others will not if they are recruited externally. Is there a way to use your steps to not automatically provide credit, as some people will need money instead of credits? Hope this makes sense!

So long as there’s a parameter in the URL that starts the experiment then you can edit the Completed URL during the experiment.

The syntax for changing is in my crib sheet

How are the participants getting to your experiment when they don’t use SONA? They just go straight to the Qualtrics survey? If so, there’s a way to generate a random ID number through Qualtrics that could still go through to Pavlovia the same way. At the end of the Pavlovia experiment, you wouldn’t have to change anything with the ‘Completed URL’–they’ll still just be redirected to the SONA website when it’s done. They obviously won’t get SONA credit or anything, but it won’t affect the data in any way. You can maybe just let them know in the instructions that this will happen and just to close that tab (that’s also what the SONA participants have to do anyway).

The only problem is that you’ll have to keep track of who needs to be paid because the names won’t be attached to the data in any way. Before I knew that you can automatically grant credit through SONA, I was considering the same issue with my advisor. We thought that we could maybe give the participant a random code at the end of the Pavlovia experiment that they can email to us when they finish to receive their credit. We were thinking the code could either be one from a .csv file list so we can make sure their code matches one from our list or generating a code that has their timestamp incorporated so we can compare it to the times on the data files. If you know/trust the participants who sign up for pay, then you can just pay them without going through that process.

This was probably way more information than you wanted, but I hope it helped a bit!

I am sorry I think I might not have explained myself clearly enough. Yes we are going to be using Sona. For now I think all of my participants will be students meaning we will pay them with credits. I am asking what we should do if we have some participants who are signing up for credits and others who are signing up for money? In there is no point in the system automatically awarding credits to people who aren’t in the University. Make sense?

Apologies, my request has an obvious solution. We simply ask people if they are part of the undergrad subject pool. If they say yes we asked him to provide an email address, and then we credit the owner of this address. If not, we pay them the cash. Super simple! Sorry again.

1 Like

Thank you for this Guide! It is amazing!

1 Like

Hi everyone, sorry to revive this thread, but I am wondering about the “participant” variable-- is this the one that shows in the splash page of each experiment? In that case, is it editable by participants?

Context: my colleagues and I have some participants who have their first name under “participant” although we specifically requested them to keep the ID passed from prolific. I would love for this variable to be frozen and not editable (or for it to be recorded in the experiment as another variable that doesn’t appear on the splash page).

You might find my YouTube video useful

All you need to do is send the Prolific ID to Pavlovia as participant

I have a study that is in the Piloting stage. Before I transfer it to the running stage, I’ve connected Qualtrics to the Piloting link which lasts for one hour. It worked and qualtrics takes me to it. However, even though I send the participant value, the participant field still shows on Pavlovia and waits for me to press OK as can be seen in this snapshot.
The URL shows that the participant value has been sent but the form that starts the Pavlovia experiment still shows an empty participant field. How can I get the experiment start right away and not show this form?

Your issue is that your piloting URL already contains a ? so the ? before participant should be an & instead.

1 Like