Quickly implement professional Covid-19 screening for cheap

Integrating Cognito Forms, Microsoft Flow, Placid, and Twilio to screen for Covid-19 symptoms using QR codes and SMS messages

The Process

  1. Parents and employees fill out a form on their phone asking about symptoms, exposure, and other data as required by Public Health
  2. Individuals cleared to come to campus receive a QR code on their phone. (For students, parents generally get the QR code).
  3. Individuals arrive on campus, present their QR codes, and are granted entry to the campus.
  4. The scanned data is saved in a spreadsheet.

Our setup

First, I’ll walk you through our set up. Then, you can read on for more information on how to customize it below.

Step 1: Create the form (~30 minutes)

We now use Cognito Forms, an awesome web form provider with cool features like hidden fields and calculated values. The form contains a few basic questions like the name of the person, and some yes/no questions about symptoms and exposure.

Screening form. Note how fields appear after the previous question is answered. You can’t see the approval status field, but it’s there, working in the background.

Step 2: Set up a Twilio Account (~10 minutes)

We use Twilio for sending SMS and MMS text messages. Twilio is easy to use, integrates with our other software, and you pay per message (and a pretty reasonable amount, too).

Step 3 (optional): Set up a Placid Account (~10 minutes)

A fancy QR code created with Placid, featuring my name, the date, and our logo. You can make this screen look however you want.
Our Placid template.

Step 4: Putting it all together in Microsoft Flow (~20 minutes + time to test and troubleshoot)

Microsoft Flow is a service which integrates various web services without the need for coding. It’s similar to Zapier, but much cheaper (or free!) and a bit more flexible. If your workplace or school provides you with a Microsoft account, Flow is free for most cases. If not, it’s a modest $15/month. This is the most valuable piece of software for this project, and it’s well worth the investment. Check if you have flow for free before purchasing a subscription — you probably do!

  1. Generate the QR code.
    There are a ton of free QR code generators. I use Google’s QR code generator because it is free, has no limits, and I expect it to be around for a while.
    Choose the “Set variable” action
    Select “QR URL”
    For the value, start with the base URL of https://chart.googleapis.com/chart?cht=qr&chl. You’ll then want to add data from your form by piping in dynamic content. My QR code looks like https://chart.googleapis.com/chart?cht=qr&chl=name:{name}*positive:{answer1}*feelsick:{answer2}*symptoms:{answer3}*temp:{answer4}&t=&chs=500x500&choe=UTF-8 with each thing in {brackets} representing a dynamic field I inserted. Important: For name, be sure to use the name from the set variable step, not the name from the form. This way it will remove the space!
  2. Optional: generate the Placid image
    If you used Placid above, then you’ll need this step. Otherwise, you can skip it.
    Add the “HTTP” action
    Method: Post
    URI: You’ll need to get your template ID from Placid (this is an alphanumeric combo written next to your template). The URI should be https://placid.app/api/rest/TEMPLATE_UUID
    Body: Now, format a JSON. The way you format this will be dependent on how you set up your template. Here’s my example, using the QR code, a field called day and a field called name.
    “create_now”: true,
    “fields”: {
    qr”: {
    “image”: {
    “imageSrc”: “link”,
    “imageUrl”: “{URL variable}
    day”: {
    “text”: “{Date from form}
    name”: {
    “text”: “{Name from form}
    The text in bold needs to be changed. These are the names of the fields on my Placid template. Yours may differ. The {bold text in brackets} represents variables from my form which I inserted as Dynamic content. Note that the URL is the variable I defined a few steps ago.
  3. Optional: get the link for the Placid image
    If you completed Step 3, you’ll need to complete this step. Otherwise, skip it.
    Add action “Parse JSON”
    Content: Select Body from the previous step
    Scheme: Enter the following JSON:
    “type”: “object”,
    “properties”: {
    “id”: {
    “type”: “integer”
    “status”: {
    “type”: “string”
    “image_url”: {
    “type”: “string”
    “transfer_url”: {},
    “polling_url”: {
    “type”: “string”
  4. Send the text message
    Finally! We get to send the text message. This is pretty straightforward.
    Add Action: Twilio — Send Text Message
    From Phone Number: Select your Twilio number. If you didn’t claim a number yet, head over to Twilio and do that now.
    To Phone Number: Add dynamic content as the cell phone number entered on the form
    Text: Put whatever text you want in the message. We put Screening approved for {Name} on {Date}.
    Click “Show advanced options”
    If using Placid — Media URL 1: Select image_url from the Parse JSON step
    If not using Placid — Media URL 1: Select the QR URL variable you created earlier.
Receiving the QR code via text message. Handsome branding is thanks to Placid

Step 5: Scanning your QR codes

There are lots of choices for scanning QR codes. You might want to use an app like Scan2GoogleSheets which allows you to scan the codes and instantly upload them to a spreadsheet.

Customizing The Components


The form itself can exist on virtually any web location. There are lots of providers for forms, ranging dramatically in cost and features. I recommend using Cognito Forms. Cognito Forms lets you create hidden fields, conditionally appearing fields, and integrates nicely with other services. It’s also cheap — like $9 month for 5,000 responses cheap.

Our current screening form in action, using Cognito Forms.
An earlier version of the form created using Typeform.

QR Code

I’ve been searching for something like Placid for a long time — a service which lets you take data from a source and dynamically generate images based on the content. It’s reasonably priced and does the job quite nicely. The customer service is also amazing. You can definitely consider other providers, though you’ll need to read up on their API documentation.

Text Messages

Twilio has served us well in the sixth months we’ve been using it. Running if almost continuously five days a week for sixth months, I can only think of one or two days where there were any kinds of issues and, one of those days was a major carrier outage out of Twilio’s control.


I use Microsoft Flow. You should, too. I once used Zapier to integrate services and then I learned. Flow is way cheaper, more customizable, and is a better tool to know. If you’re really sold on using Zapier, check out my previous article.

Frequently asked questions

This is hard. Can you do it for me?
Absolutely. I put out these instructions with the hope that they are helpful and clear enough that people can implement the system on their own. If you don’t have the know-how or the time, I am available to help with custom development. If you essentially want the system I described, I can implement it for your organization for $150. If you have more basic needs, we can reach an agreement for something cheaper. If you have more complicated needs, let’s talk about the time it will take and I’ll see what I can offer you. In most cases, I can roll out this system in 1–3 days. Please email me for more information.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Jared Hasen-Klein

Jared Hasen-Klein


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