Connecting in a pandemic: Using tech to keep tax assistance accessible across California

Written by Jared Laser

Golden State Opportunity (GSO) is a California-based nonprofit dedicated to ending poverty by providing all Californians with the tools to build financial security and thrive. One of their main programs is the CalEITC4Me campaign, which helps people receive up to an $8,000 tax refund through a combination of the California and federal Earned Income Tax Credits (EITCs), and the Young Child Tax Credit. This is in addition to the up to $1,200 in federal stimulus money people are eligible to receive by filing a tax return for 2018 or 2019.

Each year, around tax time, GSO recruits trained volunteers throughout the state to provide free, in-person tax assistance, helping people ensure that tax time is as pain-free as possible. About a month and a half before the April 15th filing deadline this year, GSO realized that due to the pandemic, in-person meetings were out of the question. Despite the extended federal and state filing deadlines, people needed money in their pockets without delay, so GSO came to us to see how we could transform the appointments into a seamless, digital experience.

We worked with the GSO team to explore how we could enable their volunteers to offer the same level of support virtually and settled on the idea of using digital booking solutions alongside programmatic SMS and a customized video conferencing solution that would be both easy-to-use and within their budget.

Most of the meetings we have at Patronage are internal, and on our small team, scheduling is usually as simple as reaching out to another team member in Slack, so the idea of booking resources and handling availability is something pretty foreign to us. That said, our hope was that we could create a scheduling workflow that would work just as easily on a large scale as the kind of simple connections we make with each other every day. What we were after was something that could be super customized, had a good API, and something that would allow volunteer resources to set their individual availability.

GSO’s needs didn’t quite fit the mold for most of the scheduling solutions we found. They needed to have a largely hands-off approach since volunteers were just that, volunteers, and not necessarily available during a standardized set of working hours. We needed to be able to segment volunteers into multiple booking groups depending on whether they could provide full-service tax prep, financial coaching, bilingual assistance in English and Spanish, or all of the above. Being mindful of their existing time commitments, we wanted to make sure that whatever tool we selected would allow GSO’s volunteers to set and block availability while not overwhelming them with the all too common “yet another tool” pitfall.

Luckily, our search led us to Timekit, and we found that it checked all our boxes. Additionally, it seemed that Timekit was built with an API-first philosophy, so everything we saw in the admin panel was equally or more accessible via simple API endpoints. For our development team, this was a huge selling point.

We decided to move forward with Timekit and set up webhooks to sync all events to our open source, Firestore-based CRM, Fired Up. Using serverless cloud functions, we built a listener that syncs events and data onto BigQuery where we can build dashboards and reports for GSO using Google Data Studio. Additionally, having data in Firestore allows us to build custom reporting views in the Fired Up admin. We set up the workflow like this:

  1. Millions of robocalls are made to Californians to see if they’re interested in using GSO’s tax help service.
  2. From that list, those who express interest receive a personal phone call to collect information and set them up with an appointment.
  3. We embedded our scheduling widget into the GSO calling tool so that during calls, GSO staff are able to capture essential information such as when the taxpayer is available to meet.
  4. After someone signs up for a meeting and is booked in Timekit, a webhook fires to a Firebase Cloud Function that stores booking data, generates a conference line, and sends confirmation emails to both the volunteer tax preparer and the user who will be receiving assistance.
The gist of our customized workflow

Firebase functions really shine when used as API endpoints. We never have to worry about their reliability or response time and we know that any operations they perform against our Firestore database are going to be lightning fast and secure.

In setting up these virtual tax prep sessions, we pretty quickly found ourselves scratching our heads a bit. We tried a number of existing conference solutions but found that they were largely tailored for traditional use cases where an organization has staff who set up meetings or a user sets up meetings on their behalf. We needed meetings that could be set up programmatically, and no per-seat licensing model. Enter Twilio.

Twilio is basically the be-all and end-all when it comes to meshing programming with comms. Need to make a call from your app? Twilio can do it. Need to send texts? Easy. Want to set up a full-on call center using an intuitive and powerful UI? Done.

An added bonus of using Twilio was that we were able to use their pre-built React app as a starting point for building a customized video solution. Since the app was built fully in JavaScript, we were able to start customizing it to our needs within minutes of cloning it from GitHub. The first thing we developed was support for query strings that autofilled our users’ names and their room ID. Since we send invites to connect two people, we use uniquely generated room names as a privacy feature. We were able to quickly modify the included Express-based token server to verify room details. This provided security not just for the taxpayers and volunteers, but also for the app as a whole since a room can now only be accessed with a token generated by our server.

Once conference day arrives, Timekit sends us a confirmation webhook. Using data we previously stored about the volunteer and the user, we are able to send customized text messages using Twilio’s Programmable SMS that can allow a user to log in to video chat from their phone and immediately begin their meeting.

Keeping in mind that not everyone might feel comfortable with video chat, we also connected Twilio’s Programmable Voice product to our meeting rooms to provide a secure dial-in capability. With only a few hours of programming and research, we connected Twilio Studio with our Firebase Cloud Functions. With Studio, we were quickly able to connect a call-in workflow to our Firebase function, look up the room that corresponds to a given PIN, and in about 4 lines of code, we were able to connect users by phone to a chat room. Our hope is that this flexibility opens the door to a substantially greater number of users since there is no longer a requirement to be using a high-speed internet connection or video.

Our Twilio Studio layout. On an incoming call, we ask for PIN, look that PIN up in Firestore, then return a room ID. Twilio handles the work of connecting a user to an already-existing room.

With the extended deadlines for state and local tax filing, we were lucky to have a bit of time to launch this app and get the pieces right so we can help GSO continue to serve Californians throughout this unprecedented time.

At Patronage, we’re excited about having added tools like Twilio Conference and Timekit to our utility belt. We try to approach each new project as both a learning opportunity and an opportunity to carry out our mission — using tech as a multiplier for positive change — while simultaneously helping clients like Golden State Opportunity fulfill theirs.

Think we could work well together? Have feedback? Bored at home and want to chat? We’d love to hear your thoughts. Hit us up at