GOTV Organizing Technology: Getting Everybody onto Your Email and Text Lists

Jason Katz-Brown
6 min readSep 12, 2020

(also in this series: empowering organizers with Mobile Commons and automating daily invite emails, texting voters their nearest early vote location)

Building lists is the bedrock of organizing and getting out the vote!

Campaigns can collect contact email addresses and/or phone numbers of supporters in heaps of ways: Online web forms, merch store purchases, event RSVPs, community sign-ups, relational organizing tool, phone banking, canvassing, texting.

How can we make sure that none of these email addresses and phone numbers slip through the cracks? How can we make it as easy as possible for organizers to reach out to the relevant sub-lists?

Let’s empower our digital teams to have maximal leverage by automatically populating their tools with all supporters possible, without having to do any daily manual imports or uploads!

Getting all your email addresses on your email list

Let’s say an organizer in Tampa talks with a new voter who wants to subscribe to updates from the campaign, collects their email address, and enters it into VAN. Another voter sees the organizer’s cool shirt and buys one for themselves. This organizer is bringing in so many new email addresses! How do we make sure they all get on to our email list in BSD?

One way to ensure we’re collecting every email we can onto BSD is to set up a nightly job in our data warehouse which simply:

  1. Computes who should be on our email list
  2. Subtracts people who are already on our email list
  3. Uses BSD API to upload people who should be on our email list but aren’t already

Step one can query all the tables in the data warehouse with logic appropriate to each source of email addresses. For example, from VAN tables, it can select out only email addresses uploaded one-by-one by organizers (and ignore emails bulk-imported by data directors).

Here is an example query which pulls in emails from across many sources and computes who needs to be uploaded

If we time this nightly job to run every midnight, and we have a welcome series set up as a BSD recurring mailing, then we’ll onboard new people to our list the day after we collect their email address, which should be a good experience! If we further add new constituents to constituent groups based on the source of their email address, we can customize the welcome series based on where the sign-up came from — for example, we can tailor outreach for friends invited through the relational organizing app.

Here’s code for an example program which can run every night to upload constituents and set up such constituent groups

We can set up a daily report of how many email addresses came in from each source of new email addresses

Getting all your SMS-opt-in phone numbers on your Mobile Commons list

Uploading phone numbers to Mobile Commons can follow the same pattern of nightly computing numbers that should be on our short-code list, subtracting numbers that are already on the list, and uploading the difference—but with two additional nuances!

First, you need to be super careful about who you add to your list! They must have put in put their number in a sign-up form with TCPA language and explicitly indicated that they opt in to communication. So when writing your query, make your list and check it twice. In particular, don’t rely on any inclusions that require somebody to maintain a blacklist or logic that may become out of date. For example, when adding in numbers from VAN, explicitly check in your query that the number was added along with an action indicating the supporter explicitly opted in with TCPA language; or when adding a number from a relational organizing app, make sure the ask itself includes TCPA language, and make sure the friend answered affirmatively.

Here’s an example query computing who should be uploaded to a short-code list

Second, you need to run your upload program timely. One way is to write a daily program that runs, say, at 6pm ET, and uses the Mobile Commons profile_update API endpoint. While confusingly named, this endpoint will create a new Mobile Commons profile with the given phone number, and if you include an opt-in path ID, will also immediately trigger the first message of that opt-in path! You can also get fancy and specify different opt-in paths for different users or sources of phone numbers. For example, if a phone number came from South Carolina VAN, we can put the number into an opt-in path dedicated to onboarding new supporters from South Carolina.

Here is an example program that uploads new phone numbers to Mobile Commons and triggers specific opt-in paths for onboarding

With this pipeline in place, digital organizers managing Mobile Commons shouldn’t need to do anything day-to-day to make sure they can target every possible TCPA-opted-in phone number the campaign collects!

Note that this daily pipeline can be used in addition to a strategy of adding e.g. new donors to Mobile Commons immediately, as described previously. To ensure you don’t double-send to anybody, make sure you check the box in the opt-in path settings that disables double sending the opt-in path.

Helping email organizers quickly target by prepopulating groups in BSD and Mobile Commons

The common use case for organizing email and blast SMS involves creating a constituent group, then preparing and sending an email to that group. This one-off process often requires rote manual labor and a lot of waiting on BSD Tools or Mobile Commons. Moreover, the parameters of the groups are usually the same: everybody signed up for a certain event, everybody in a certain demographic, etc.

What if we pre-populated constituent groups for all these useful scenarios? Then organizers can simply target those groups and quickly send! And avoid waiting on exports (e.g. from event sign-up tools or from VAN) and uploads to BSD cons groups, which can sometimes take a while.

With nightly jobs running in your data warehouse, you can set up groups that are ready for organizers to use whenever they need them. For example, creating these groups automatically can be really helpful:

  • People who have taken certain actions in the past; e.g. a group for all previous phone bankers, a group for all previous party attendees, etc
  • One group for each event in the upcoming week, populated with that event’s RSVPs (i.e. if there are 200 events in the upcoming week, we’d create 200 cons groups, each populated with that event’s RSVPs)
  • Past event hosts, one group for each type of event
  • Groups for different constituencies based on info from VAN or online sign-ups — e.g. a group of all supporters who have told us that climate is an especially important issue for them

Here is example queries and code for preparing and uploading such groups

Automatically populating custom fields on new profiles

In a previous post, we discussed how to automatically populate custom fields on each Mobile Commons profile with useful information for fundraising and organizing. We can follow the same strategy to automatically populate custom fields on each BSD constituent profile. These custom fields can enable all sorts of custom asks in email fundraising and organizing: templates can tailor towards donors, past volunteers, cross-platform donation history, anything you wish based on custom fields and clever TWIG. (These custom fields are important to ensure accurate fundraising asks based on past contributions because on a national campaign, NGP is the only real source of truth, and BSD profiles don’t by default know about NGP.)

Here’s example code which can be run hourly to update custom fields to all BSD constituents

Be careful to not make a mistake when tying together donation histories : ). This edge case happened when I had multiple NGP and BSD records and we made an ask of $2800-(2*2106.53) instead of $2800–2106.53.

With appropriate timing, we can ensure that all these pieces work together in an overnight pipeline where first step is to upload new people to BSD and Mobile Commons, the second step is to prepopulate the groups in both platforms as described above, and the third step is to populate custom fields for all new or updated constituents/profiles.

With this setup, we’ve empowered email organizers and fundraisers can target quickly all the right supporters and voters with the right asks over email and text!

I’m happy to help (free) if you have any question about how to make any of these things happen!

Many thanks to Areya Behrouzian, Rachel Funk, Nick Andricola, Will Tomasko, Ben Page-Gil, Keira Thompson, Amanda Robinson, Olivia Robinson, Josh Matfess, Joe Njoroge, Connie Gao, and many others for helping explore these ideas.

(also in this series: empowering organizers with Mobile Commons and automating daily invite emails, texting voters their nearest early vote location)

--

--