Taskopus

Bitcoin Cash-powered crowdsourcing marketplace

Table-based projects and manual approvals

("Detect cities")

Table-based projects in Taskopus are different from regular projects in that you need to have some data to work on.

Let's say we have a big list of photo names and we want to know which ones name a city and which ones are not.

Manually sorting this list would be exhausting.

I'll prepare a simple Excel table. The only requirement would be that columns have names (you'll see why in a second).

Save this, select to save as CSV (Comma separated values) format. After that we are ready to give the task to workers.

To be sure that workers do a good job we will ask each city to be labeled by 3 workers. Maybe one of them is lazy and just clicks "yes" to everything. (There are ways to deal with this, we will show it in one of the later videos)

So, we open Taskopus, head to Projects, Create a new project. Title would be "Is this a city?" description would be:

Please only answer "yes" to something that contains only a city name. Things like "singapore 17" or "milan - milan" are not city names, because they have something extra, so answer "no" to them. However, "singapore" and "milan" are city names - so that's a "yes".

I won't put "Automatically accept and pay" this time and I would have to approve each answer. This is probably unreasonable, because it would require me to click "Accept" something like a few hundred times, but just to demonstrate how manual approval works - I'll leave that unchecked.

Usually, projects like this with big amounts of data should be "Automatically Accept and pay".

The first field would be a multiple choice questions with the name: Is "{{ city }}" a city? (That thing in brackets is called substitution).

Remember our column names? That's why we need them. Ok, so the answers would be "Yes" and "No". And it is required.

So, the first question that a first worker gets would be: Is "the tour" a city?, the second one: Is "the london eye" a city?. Each time the substitution would take a next row from our table.

Click "Add table-based input". Upload our CSV file. Click "Add".

The total limit would be 165 since we have 55 rows and we want each of those done by 3 workers. If you are unsure or don't want to calculate, just enter something like 100000.

Limit per each user - we don't have to put anything here this time, since one user would be able to do only one row anyway. And we put 3 into "Times each row".

Let's start.

So, the first result is in. We need to check and approve it.

It looks good, so I click "Accept and pay".

You can also refuse to pay, but you'd have to specify the reason.

Be warned though that refusal to pay shows in tasks list. If you refuse more than 20% people might be skeptical about taking your task and you might never finish it. If you have to refuse a lot of answers - you might need multi-stage projects (see next video) or you need a more detailed instructions.

Ok, it's exhausting. Manual approval should be only for high-pay tasks. I'll go to "Edit project" and change it to automatically accept and pay.

That's why it's better to pay automatically. As a new user with zero debt quota you have to pay for each task (each $0.01).

You might stumble into "Too long mempool chain". That is the limitation of Bitcoin Cash network. You can only pay about 20 invoices every 10 minutes (in one block). As you pay more and more invoices - your debt quota will grow and the amount in each invoice would be bigger, which would lead to less invoices and less stops and zero "Too long mempool chain" problems.

You can actually see my debt quota growing from 1 cent to 2 cents and now my task is running much faster.

We're done.

Let's download the answers.

And we can see the answers.

With the magic of Pivot tables in Excel we can get the results in a more structured way.

The cost for 165 answers is approximately $1.65 at approximately $9/hr, but you can lower it probably a few times with batching.

And you can also add new rows to this task later using API method add_rows_to_table_based_input