Take the 2-minute tour ×

I am implementing a website on which the recruited MTurk workers will perform tasks. I plan to recruit workers using MTurk tasks, using which I will redirect them to an external website for actual work. I have the following questions relating to this plan.

  1. Is there any foreseeable problems with this approach of running HITs? If so, how can we mitigate them?

  2. how should I implement the authentication procedure on my external site? For example, how can I make sure the people who come to the website to perform a specific task are indeed the same group of people recruited earlier for this particular task on MTurk?

  3. when the workers finish the task, how should I integrate the payment procedure with MTurk based on their performance? For example, say worker is owed $3 after finishing the task on my external site, is it possible for me to tell MTurk to pay him/her this amount programmatically?

The external site will be built using Python, if such detail matters.

Any suggestions and comments based on your experiences and insights in using MTurk would be much appreciated!

share|improve this question
What have you tried? Were my answers helpful? –  David James Jun 22 '12 at 16:50
@DavidJames, thanks for your answer and it definitely contains some useful points. I also found out about the confirmation code approach from other sources, and will go with that. It is trickier to get the workerId, but I suspect I can do it using some Javascript to pick it up from the Request page... –  MLister Jun 23 '12 at 15:48

2 Answers 2

I am thinking through this for a similar project of mine. I've experimented as a worker myself. Here is my plan, I hope it is of use to you. (I have not implemented it yet. It is based on an academic HIT I participated in as a worker.) Here goes:

A. Create a template that has language something like:

1. Please open this web site in a new browser window:
2. Read and follow the instructions there.
3. After completing the task, you will receive a confirmation code. Paste 
   it here: [________]

B. Create some random tokens for your Mechnical Turk data file:


(Generate these tokens from your app; it needs to cross-reference them.)

C. Your app extracts the token from URL, looks up the task, and does whatever it needs to do. I personally don't worry about people stumbling onto a URL, since it is a one-time use token.

D. After a user completes the task on the external web site, the external app gives a confirmation code. The confirmation code should be random and opaque. Only your application will know if any particular code corresponds to a correct or incorrect answer. In fact, if you want, the correctness may not even be determined in real time -- it could be the result of an aggregation and/or comparison across multiple submissions.

E. Write some code to interact programmatically. Take the token and confirmation code supplied from the MTurk result and make sure they match with your external app. If they don't match, reject the HIT. If they match, check the correctness in your external app and approve or reject. You might consider a bonus pay structure.

So, to answer your particular questions:

  1. I don't anticipate problems with the approach I described. That said, Mechanical Turk is both an art and a science. Perhaps more art. Writing good questions and paying Turkers appropriately is something you have to figure out with a combination of common sense, market research, and experimentation.

  2. See (C) above. A token is designed to only be used once. Use long enough tokens and the probability of collision becomes very low.

  3. See (E) above. The Mechanical Turk Developer Guide is a good place to start.

Please share your results back. Or have the Turkers send StackOverflow hundreds of postcards. :)


  • I'm currently exploring qualification tests. I suspect they can be very useful.

  • I want to get a Turker's Worker ID in my external application, but I haven't figured that part out yet. I'm reading up on it; for example: Getting workerId by assignmentId

  • I am thinking about using the ExternalQuestion feature from the API: "... you can host the questions on your own web site using an "external" question. ... A HIT with an external question displays a web page from your web site in a frame in the Worker's web browser. Your web page displays a form for the Worker to fill out and submit. The Worker submits results using your form, and your form submits the results back to Mechanical Turk. Using your web site to display the form gives your web site control over how the question appears and how answers are collected."

share|improve this answer
Is there a protocol for the random tokens and the confirmation code? Are these different things? –  knk Feb 19 at 0:44
@knk I suggest generating a random confirmation code for each token and keeping both together in a database. (I'm not sure what you mean by protocol.) –  David James Feb 19 at 1:09
Is the template you create for every individual HIT? Is there a place for data file on mturk or is this on my server? –  knk May 2 at 1:14

You might also find PsiTurk to be useful: "PsiTurk is an open platform for conducting custom behvioral experiments on Amazon's Mechanical Turk. ... It is intended to provide most of the backend machinery necessary to run your experiment. It uses AMT's External Question HIT type, meaning that you can collect data using any website. As long as you can turn your experiment into a website, you can run it with PsiTurk!"

share|improve this answer

Your Answer


