How we brought a Covid-19 symptom screening process to scale in hours

Jared Hasen-Klein
11 min readJul 21, 2020

UPDATE: I made the system faster and more efficient! Click here for an updated guide.

Integrating Typeform, Zapier, Twilio, and more to screen for Covid-19 symptoms using QR codes and SMS text messages before kids arrive on campus.

When we received the green light from our state and local government to open our summer camp for the 2020 season, we knew there would be changes, challenges, and opportunities ahead. We anticipated many of these challenges for months — reducing the number of children in a cohort, increasing time outdoors, and increased sanitization procedures.

We expected to screen campers and staff for Covid-19 symptoms and exposure, but we didn’t know how. When under pressure, though, we do our best work — and quickly. Between the time I was approached by my boss with an idea for a screening system until we had a final product was a matter of mere hours thanks to a host of online tools.

This post will serve as a tutorial for anyone hoping to launch a similar symptom screening form in just an hour or two with limited technical experience.

The Process

  1. Parents fill out a form for their camper, asking about symptoms and exposure
  2. Parents of campers who are cleared to come to camp receive a text message with a QR code
  3. Parents and campers arrive on campus, and staff scans the QR codes, granting the campers entry to campus
  4. The scanned data is saved in a Google Spreadsheet
Screening Form
Receiving the QR code

Under the hood — how it all works

From the perspective of the parent, the screening process is seamless. They fill out a form online, get a text, and arrive on campus. This all happens in under a minute, thanks to the integration of some great services.

The process

Screening Form (Typeform)

For our screening form, we used Typeform. You can use any type of web form that posts data to an internet database or API of virtually any kind. To make your life easier, you should pick a service which integrates with Zapier (more on that later). Some popular alternatives which also work with Zapier are Google Forms, JotForm, Gravity Forms, and Formstack.

Here is a list of essential features your form provider must be able to handle:

  • Allow for as many responses as you anticipate (e.g. if you have 300 participants every weekday for a month, you’ll need a service that allows for at least 9,000 responses per month)
  • Supports conditional logic (in Typeform, this is called Logic Jumps). For example, if a user answers “Yes” to one question, skip to different section.
  • Allows for as many questions as you need to ask (should be obvious, but some do have limits)

Once you’ve selected your form provider, you are ready to build your form. Our first iteration of the form was pretty simple. It asks for the name of the camper, a cell phone number, and three yes or no questions about symptoms and exposure. The name question should be obvious, so I’ll move on to the next ones.

Asking for a cell phone number is important if you want to text a QR code. Otherwise, you’ll have to find another service to look up the cell phone number from a database each time. Another advantage of asking for the cell phone number is for carpools, grandparents, etc. A parent can fill out the screener for their camper, but then text the QR code to their friend who is driving them to camp that day.

The yes or no questions should be based on the Public Health guidance in your area. For us, we asked about a fever, symptoms, and known exposure for our first draft. With each of the yes or no questions, you’ll want to jump to the end after any disqualifying answer. For example, if the first question asks if the camper has had a fever in the past 24 hours, and they answer yes, the form will immediately jump to our “Don’t come to camp” end screen and won’t even allow the form to be submitted. If they answer no, the form will move on to the next question, and proceed with the same logic.

If the users answer proper, qualifying answers to each question, they are taken to a confirmation screen telling them they can come to camp and that they’ll get a text soon. There’s also a link to submit another response for another child.

Typeform can be accessed at typeform.com. Typeform offers discounts for students, educators, and non-profits.

Set up an SMS account (Twilio)

If you want to send QR codes via text message, you’ll need to have a service capable of sending text messages which is integrated with Zapier. I tested a few and compared pricing options and decided to go with Twilio. Don’t get confused — Zapier has its own service with “SMS” in the name but it has some flaws that don’t work well with this type of system. Feel free to explore if you want to save costs, but Twilio works quite well.

The first thing you’ll want to do is head to twilio.com and make an account. You should then load some money onto your account, and set up a payment method for “top offs.” The service is a pay-as-you-go model in which it can add money in whatever increments you specify.

Next, you should claim a phone number. We chose to get a phone number with our local area code, but you can pick anything. They also have short numbers available for an additional fee. If you do not get a phone number (and let Twilio pick a number at random each time), it might be inconvenient for the users and some carriers may block your sending…so best to stick to a number.

You’re done with Twilio for now — just remember your login information for the next step.

Compiling the data and preparing to send (Zapier)

For those who haven’t used it before, Zapier is essentially an integrator of other software platforms and APIs. More simply, it gets your apps talking to each other. In this case, we want Typeform to talk to Twilio (or whatever form provider you picked to talk with whatever SMS provider you picked).

First, make a Zapier account and create your first Zap. Each set of instructions is called a “Zap” and each component of a Zap is called a “step.” I’ll explain each step of the Zap below.

Step 1: New Entry In Typeform

This step calls the data from Typeform and prepares it to use in future steps. You can use other form services for this step, and follow similar instructions.

  • Choose App & Event — App: Typeform; Event: New Entry
  • Choose Account — Link your Typeform account
  • Customize Entry — Identify the form you previously created and select it.
  • Find Data — If you filled out the form as a test or sample, the data should appear here as a test. If you didn’t already fill it out, go ahead and do that and then test again to see if the results appear.

Step 2: Formatter by Zapier
This step replaces spaces in entries (between the first name and last name) with %20 so that the QR code can handle it.

  • Choose App & Event — App: Formatter by Zapier; Event: Text
  • Customize Text
    Values:
    Select the “Full name” question from Step 1. In a normal entry, the name would have a space (e.g. “Jared Hasen-Klein”)
    Find: [:space:]
    Replace: %20
  • Send Data — Ensure that the space was replaced in your example (e.g. “Jared Hasen-Klein” → “Jared%20Hasen-Klein”)

Step 3: Send SMS in Twilio
This step composes and sends the message using all of the data from the previous steps.

  • Choose App & Event — App: Twilio; Event: Send SMS
  • Choose Account — Link your Twilio account and select it
  • Customize SMS — This step writes the actual text message. This is the most important step to get right, so pay careful attention to each part.
    From Number: Select your Twilio number. If you haven’t already picked a number on Twilio, do that first.
    Alphanumeric Sender ID: Leave this blank
    To Number: Select the number from Step 1 where you ask for the cell phone number on the form
    Message: This is the text in your message (not the QR code itself). You can send whatever you want. We choose to send (Sierra Canyon Day Camp) Screening approved for <name> (<Date>). For example, it’ll send (Sierra Canyon Day Camp) Screening approved for Jared Hasen-Klein (6/1/2020). You can pick whatever variables from Step 1 you would like.
    Media URL: You are now generating the QR code. We selected qrickit.com to generate the code because it lets you generate a QR code from the URL without any limits or fees. You will need to add each parameter from the form to the URL.
    We used the following URL:
https://qrickit.com/api/qr.php?d=Name:{{name from step 2}}*contact:{{question1}}*symptoms:{{question2}}*fever:{{question3}}&addtext={{name}}+{{date}}&txtcolor=000000&fgdcolor=34345C&bgdcolor=FFFFFF&qrsize=300&t=p&e=m 

Let’s break that down a bit further. With this QR code, anything after d= is the data. We listed each question followed by a colon (:) and the answer from either step one or step two. We then separated each question with an asterisk (*).

Everything after addtext= is text displayed below the QR code. We chose to list the camper name and date so that we can do a visual verification that the QR code is for the correct camper and date.

The parameters starting at txtcolor= and going through the end impact the appearance in different ways. We tweaked the appearance until they scanned most easily in our environment.

Send Large Message: No

  • Send Data — Test that the information you entered on your sample form sends a QR code to you successfully.

Finally, turn on your Zap and submit the form one more time to test it for good measure. Be sure to test it at least once with a number other than your own.

Scanning and saving the data (Scan to Google Sheets/Google Sheets)

There are numerous ways to scan and store data in some kind of database. The easiest solution we could find was with an app called Scan to Google Sheets. The app works on Android or Apple and can take the data directly into a Google spreadsheet. More info can be found on the app’s website. There is a limit of 100 scans per month per device, or you can upgrade to unlimited scans for $4.99 month.

To configure the app and spreadsheet, follow these steps:

  1. Make a new Google Sheet (sheets.google.com). You’ll need a free Google Account.
  2. Copy the URL to the spreadsheet
  3. Paste the URL into the settings page of the app and select the tab you want the data to go to
  4. Scan one code to test
  5. Optionally, configure your spreadsheet to split at the astrisks (for example, if your data is in cells A1:D100, on Sheet1, you should place a formula like =ARRAYFORMULA(SPLIT(A1:D100,"*")) and modify more as needed. Feel free to get as fancy as you’d like once the data is in the spreadsheet.

Having a backup plan

No matter how much we love technology, there is always the potential that something goes wrong. We made a simple paper version of our screening form, with identical questions, in case parents have issues with the QR codes. We also made business cards with the URL for parents who might not know about it. Overall, about 80–90% of our families consistently use the digital screener, and the remainder uses the paper form. It’s generally from forgetfulness and not technological issues.

Drawbacks to this plan and alternative methods

If you follow these instructions, you’ll be to execute nearly seamless screening processes. That being said, each of these services has a cost. While Zapier and Typeform each offer discounted educational and non-profit plans, they are still costly. There are some clear ways to save money, although they do come with some trade-offs:

  • Use a free form creator instead of Typeform. Google Forms is great, although its apperance is not as professional and its options are not as customizable. It will save you between $30–75/month, though, depending on what Typeform plan you would have picked.
  • Instead of Zapier, code it yourself. This requires you to have much more technical knowledge. You can definitely do it, though, if you’re ambitious. This would eliminate Zapier, which is by far the greatest expense — but clearly also adds the most value.
  • Eliminate the entire QR code process. If you wanted to only collect form responses on something like a Google Forms or Typeform, you could ask campers (or students) for their names and check them against the list of responses as they enter. This is definitely easier and cheaper, but it’s not as scalable and could potentially slow down your line of cars or people waiting to enter. With 300 campers arriving on campus each day, the QR codes definitely simplified it.

Conclusions

Should we implement a QR code system?
Maybe…It depends on your needs and on your budget. If you want to rapidly screen a large group of people in short time window, this is quite helpful.

Who is this system for?
We are a day camp, but schools, places of business, and anywhere else that has a group of people entering could benefit from such a system.

Is there a cheaper or better way to do this?
Probably. You should explore alternative solutions as outlined in the previous section and share your success!

Does this system comply with Public Health guidance?
It can! Check with your Public Health department for specific guidelines or orders for conducting screening. It’s important to note that the specific questions on your form should line up with the criteria that your local Public Health officer has requested be included. Most areas do not require a specific format for the screening, meaning this should be in compliance in most cases.

You don’t need to be technical to set up this system, and you can pick and choose the parts that work best for your application and modify wherever needed. This is far from a perfect system, so please feel free to build off of it and share your results!

--

--

Jared Hasen-Klein

Senior Political Science major at Cal Poly Pomona and Programs Director at Sierra Canyon Day Camp.