Skip to content →

Efficient Volunteer Matching Applet

This tool utilizes RShiny and the Top-Trading Cycle algorithm developed by Gale, Scarf and Shapley. To learn how to use the tool, please read our how-to guide, which is located below the applet.



How-To Guide

  1. Decide if this applet is the right tool for your problem. The main purpose is to match an existing list of volunteers to an existing list of jobs or tasks based on volunteer preferences. You provide a spread sheet of volunteers, jobs and preferences (and maybe priority orderings, more on this later) and this app produces a matched list of people to jobs.
  2. Collect volunteer sign-ups and information. Here is a Google Form Example that collects all the necessary information. You can collect the volunteer sign-ups using any system, however we recommend using Google Forms, since it has a built in grid option that makes it easy for volunteers to rank jobs.
  3. Whatever method you use, this applet needs the following information:
    1. Unique Volunteer Identifier: This can be a name (if no two people have the same name!) or a number. All that is important is that it is unique and not blank for any person.
    2. Preferences: This means a column for each unique job (if you have more than one spot for a single job, like 4 registration table workers or 3 setup coordinators, you ONLY need to have one column for each type of job). Every volunteer must have a rank for each job – that is they must have a 1 in the column for the job they want most, 2 in the column of the job they want second most, etc. NO COLUMN CAN BE LEFT BLANK.
    3. Jobs/Tasks: The jobs to be filled need to be listed in a column next to the names. If you want to give a person priority over choosing a specific job, you can list that job in the row of that person’s name. For example, if this is a recurring event or volunteer position, and you want a returning volunteer to have priority over getting back a position they did before, you can have them select from a drop down the job they did last year. If a job is new or no one did it last year, just list it in the rows below the volunteers. This will look weird, because these rows will have nothing but a job name in them, but it is the right format. When you have multiple of the same job, list it AS MANY TIMES AS THEIR ARE OPENINGS. For example, if you need 10 parking coordinators, list ten parking coordinators. Make sure that when you count the number of cells with positions, this is the correct number of volunteers you need.
    4. Priority Order (Optional): If you want to give priority in choosing jobs to more experienced or tenured volunteers, create a column called “priority”
  4. Format the Spreadsheet Correctly: The information can be collected any way you want, but the end result needs to be a table in .CSV format with one row for each person, plus a row for each currently unassigned job (with jobs that someone did last year listed next to the volunteer that did them). For an example of a table that works perfectly with this applet, see here: Data Example. Some more tips:
    1. Make sure each column has a title, preferably without any spaces or weird characters. If you used Google Forms, just go back through and re-label the columns to things like “job” and “name.”
    2. name the preference columns with a common prefix, like “pref”, followed by the number of the preference (1 for first choice, 2 for second, etc). This is crucial, and you will need to enter the prefix int he applet after you upload the form.
    3. Delete extra rows.
    4. Make sure you have exactly the number of columns as the number of different job names.
    5. It is OK for their to be more volunteers than jobs or more jobs than volunteers. Just be aware that some jobs or people will not be matched.
  5. Upload the spreadsheet: Select the .csv file using the “browse” button. This should load the spreadsheet into the app, and you should then see information filled into the table to the right.
  6. Select variables: Fill out the “Volunteer Identifier”, “Task or Job Name”, and “Priority Order” fields. Priority is optional. These fields should have drop downs that have the full list of column names from the spread sheet you uploaded. If a name is not available, check your spread sheet column headings and upload after fixing them.
  7. Type Your Prefix for Preferences: This is the only field with no drop down menu. Make sure to spell the prefix correctly. if you titled your preferences variables “pref1”, “pref2”, “pref3”, etc you would write “pref”.
  8. Check the warning box if prompted: if priority order was not specified or is not unique (which is often the case) the applet will issue a warnign and ask you to confirm that it is okay to break ties using a random number. This just means that priority will be assigned randomly.
  9. to be continued…