New web app. VESPR Study Portal

I’ve just written an app to allow researchers to host their PI sheet and debrief on my site (written in markdown), which has the advantage of a download link for the PI sheet before and after the study. Participants are also able to withdraw their consent at the debrief stage which sends the researcher an email but the participant stays anonymous. Hosted studies will be listed at the link above (in random order) or an individual study can be addressed using a variable (e.g.

I’ve created this with free functionality plus additional licenced features of counterbalancing groups taking into account participants who did not complete, the ability to reset the participant number (while maintaining a separate unique session id), plus getting priority on the study list.

Registration is free and I’ll be adding features such as passing through variables untouched and integration with Sona and Prolific for credit granting. Please let me know if you have any requests. I’m also happy to add logos for individual institutions as well as template PI sheets (if you convert them to markdown for me).

New Feature 18 April 2021

On your edit study page you will see the number of participants allocated to each group split into confirmed (they reached the debrief page), in progress (they started less than 12 hours ago), lapsed (they started more than 12 hours ago) and withdrawn (they withdrew consent at the debrief page).

The output looks something like this:


Group Confirmed In Progress Lapsed Withdrawn
1 0 0 0 0
2 0 0 0 0


Group Confirmed In Progress Lapsed Withdrawn
1 0 0 9 0
2 0 1 6 0

New Features 20 April 2021

Licenced users can set a study to inactive which displays a bespoke message instead of the PI sheet.

The number of hours between when a participant starts and when they get marked as lapsed so their group can be reallocated is now configurable.

New Feature 23 April 2021

If you add a consent statement to your experiment then a check box will be displayed to participants which must be ticked to reach the experiment.

New Feature 26 April 2021

You can ask completed participants to send the researcher their email address via a form on the debrief page, for example for entry into a prize draw. The email address is not stored and the researcher is not told the participant’s id or session numbers.

New Features 1 July 2021

You can now use a Qualtrics preview link as your study URL. When you switch your study from piloting to recruiting, your participants will automatically be sent to the anonymous survey link instead of the preview link (by replacing /preview/ with /form/ and removing ?Q_CHL=preview&Q_SurveyVersionID=current from the URL).

If you assign groups during your experiment rather than using the portal (e.g. based on the response to a question), you can now send this information back to the debrief page so you can easily view the number of participants in each group from your study configuration page.

The instructions for anonymous withdrawal at the debrief and the message shown to participants who don’t consent at the start are both now customisable.

New Feature 23 July 2021
The researcher can now see the maximum session number for pilot participants, the minimum session number for live participants and the individual session numbers for withdrawn participants on their experiment admin page.

New Feature 16 August 2021
Ballot stuffing has been disabled for clicking on the credit link and sending your email address to the experimenter. You can test this using a demo participant which you can reset.

New Feature 23 August 2021
If you want to skip VESPR’s PI sheet and launch the experiment with a direct link then start by ensuring that your consent field is blank (so there is no consent statement to agree to) and then use the URL to where x is your experiment number. N.B. This method does not currently permit an id variable to be passed through.

New Feature 22 October 2021
Licenced users can now paste from a CSV file into a field called PreQuest to have participants see a web form before the experiment launches. The rendering is similar to New web app. Form to HTML for Pavlovia - #15 by wakecarter so you can use that tool to test your spreadsheet. The responses are then sent to Pavlovia as URL variables with names specified in the index column.

New Feature 5 November 2021
Record clicks on links. Past two columns into the advanced feature field (URL and short name) and then replace the link in your experiment or questionnaire with something of the form${e://Field/participant}&session=${e://Field/session} An overview of number of clicks is shown on the portal. Details of participant/session/time of clicks can be emailed to the researcher.

New Feature 15 December 2021
Licenced users can now add collaborators to their projects under advanced features using their study portal user number. For example, you can add me by adding [1]. Licenced collaborators have full edit access to the study, so please make use of the new “Refresh Page / Cancel Changes” option before making edits to ensure you don’t overwrite changes made by someone else. Unlicenced collaborators can view the number of participants recruited, etc., but cannot make changes.

New Feature 3 April 2022
If you set the maximum number of participants (in advanced features) to a number greater than zero, then the study should switch to inactive automatically when this number of non-pilot participants have been confirmed (reached the debrief).





thank you very much, great work! I was looking for such a tool and wanted to develop it myself.

  1. Is it possible to delete experiments?
  2. If several subjects run the experiment in parallel (1,2,3) and subject 2 drops out and doesn’t complete the experiment, will ID number two be reassigned to the next subject?
  3. Would it be possible to configure the “lapsed” time, to set it to for example 30 minutes? At Prolific a lot of participants leave the experiment early, which would lead to the participant ID increasing without gathering any real data.
  4. When are you planning to release the feature to pass variables, e.g. from Prolific?

I am more than happy to pay for the premium features!


1 Like

Hi Don,

Thanks for the feedback. In answer to your questions.

  1. No but you could completely edit an experiment to reuse it for the next one. However, perhaps you are wanting a feature which displays a “thank you for your interest” message and no link to the experiment instead of sending the participant to a non-functioning PsychoPy. I was considering a feature which turns off recruitment after a specified minimum number of participants have been confirmed in each group or a specified date has been reached. However, I could easily have a manual switch to inactive and a text component which displays at that point. I’m less keen on actually deleting rows from the database – but I’ll have to check what happens when numbering is restarted.

  2. My new app assigns a consecutive participant number, a unique session number and a random group number. If participant 2 drops out then their group number will be reassigned but not their participant number. Participant numbers can only be reset.

  3. Yes, I can easily add that as an experiment parameter. However, I’ll also make it so that if a lapsed participant reappears then then can be added back in.

  4. The app is already configured to pass id through untouched (as used by Sona). I think this should be enough for Prolific but I’ll need you to help me to fine tune it.



thanks for the quick response!

@2: So I can just use 30 groups and if I have exactly 30 participants it should do the trick of assigning one participant to every group. (If I understood it correctly.)
@3: Sounds great!
@4: Prolific uses 3 URL parameters and their names can be chosen freely. Their values are 24 character long strings. The default names are: “PROLIFIC_PID”, “STUDY_ID”, “SESSION_ID” .

@2 correct
@4 Presumably STUDY_ID doesn’t need to pass through PsychoPy. It could just be added to the credit URL. Are PROLIFIC_PID and SESSION_ID both unique for each participant?

@4 That’s true. PROLIFIC_PID is unique for each participant. Regarding SESSION_ID I am not quite sure, but I think there can be multiple SESSION_ID for one participant/PROLIFIC_PID (e.g. a longitudinal study). You are talking about passing them as URL parameters as well, am I right? Because I am using jsPsych and not PsychoPy on Pavlovia.

Just a small bug report:
The portal is cutting off the Study URL to the size of the input text field.

1 Like

Thanks. I’ve increased the url limit from 50 to 255.

According to Recording participants' Prolific IDs in your study/survey – Prolific ‘STUDY_ID’ is an ID unique to your study, and ‘SESSION_ID’ is an ID unique to submission. However, it looks like none of them are needed (nor PROLIFIC_PID) for the return URL which according to Recording participants as complete on Prolific – Prolific is of the form

Unless you need the Prolific Experiment or Session parameters you may as well just use id (already included) for the Prolific ID, e.g.{{%PROLIFIC_ID%}}

1 Like

Thanks for adding the new features.
I tried to redirect the participant to this link:

However, I only get a 404, also when only directing to the debrief.php.

Not Found
The requested URL was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Am I missing something?

Sorry – typo on my part. It should be

1 Like


I think I found another small bug: I am not sure if the transitions between “in progress” and “lapsed” are currently working. Even after some days, all participants are in status “in progress”. The same thing is true for the transition between “in progress” and “confirmed”.

Please could you try it again now.

Thanks, it seems to work.
There might however be another bug: If I create a new experiment, it displays the same confirmed and archived participants as in the old experiment.

Sorted – I think it was showing the number across all experiments

1 Like

Unfortunately it seems like it is displaying only zeros anymore for each status and group.

Sorted. I’ve checked with “Listen to the Drummer” and it now shows 1-2 lapsed in each group, plus one confirmed (group 12) and one withdrawn (group 46).

1 Like

Works, thanks!

Found another little bug though: If participants press the “Return to Prolific” button, they always get a 405 Not Allowed - nginx/1.20.0.
The link itself works, but redirecting via the button in the debriefing throws this error.

I think that’s now sorted by switching the method of that form from “post” to “get”.

Video presentation made to the Association of Technical Staff in Psychology.

1 Like