We’re making EveryVoter public!
OFA is making public the code for EveryVoter, our automated national voter mobilization email marketing platform
It’s easy to see an election as a singular event.
On the first Tuesday in November, millions of Americans cast their ballots. They were tallied and, in a few short months, we’ll have a new Congress.
But anyone who has ever worked on an election will tell you: Getting people to actually vote is a lot more complicated.
Each state, each district, each county has its own process, rules, and registration deadlines.
In some states, voters must register a certain number of days before the election, whereas in others they can register at the polls on election day. (In North Dakota, voters don’t need to register at all!)
Some states allow voters to cast their ballot early, and some don’t. Others require voters to provide an excuse as to why they are voting early. And the candidates and ballot measures Americans can cast their vote for can differ down to the block the voter lives on.
In short, voting is complicated.
And that makes it exceptionally difficult for multi-state or national organizations like OFA to coordinate, inform, and activate their members with the right information at the right time. It’s a huge problem to tackle, particularly for a large email program, but well worth the effort considering tens of thousands (if not millions) of voters rely on that information.
That’s what OFA set out to solve by building EveryVoter, an automated Get Out The Vote (GOTV) email marketing platform. During the 2018 election cycle, OFA used EveryVoter to send more than 29 million personalized emails to all 50 states and Washington, D.C.
And today, I’m proud to announce that OFA is publicly releasing the code for EveryVoter so that it’s free to use by organizations nationwide.
On its surface, EveryVoter looks a lot like other email platforms on the market. You can personalize an email by having the recipient’s first name appear in the subject line or somewhere in the body of the email. When a recipient opens the email or clicks a link, EveryVoter keeps a record.
And like more advocacy-focused platforms like Action Network and Blue State Digital Tools, when recipients sign up to join an email list, they’re automatically matched to their congressional and state-level districts (EveryVoter has more than 7,000 legislative districts which recipients can match to, down to the state house level).
Targeting districts and dates
What makes EveryVoter different is that the platform can also match recipients to specific dates associated with upcoming elections happening in their districts. Elections that have registration deadlines, start and end dates of early voting, and the date of the election itself are automatically matched to the recipient's address.
When determining when and to whom an email is sent, EveryVoter uses those dates to send them the most accurate information at the right time.
When you add a new email “template” to EveryVoter, rather than targeting individual districts, or individual elections, you can target days before an election deadline, with all the district and election-specific content pre-matched.
Here’s an example:
- We scheduled an email for two days prior to voter registration deadlines for the general election.
- Recipients in Texas, where the 2018 registration deadline was October 9, got that email at 7AM on October 7 whereas recipients in New York, where the registration deadline was October 12, got the same email on October 10.
In both cases, we asked the recipient to check their voter registration status, but the date the email was sent was relevant to their specific location. And because EveryVoter emails are customizable templates, the Texas email appeared to come from “OFA Texas Vote Team” and the email body referred to recipients as “Texans.”
Customization using “blocks”
When helping organizations guide recipients on whom to vote for, EveryVoter takes inspiration from LEGO blocks. An organization provides EveryVoter with “blocks” of messaging, with each block associated with a specific legislative district and a ranking of its importance. When EveryVoter needs to send an email, it treats building the email like building a LEGO tower, finding the blocks that match to the legislative districts the recipients live in and stacking them based on their predetermined importance.
For example, let’s say you create one messaging block that’s targeted to Nevada’s 3rd congressional district, which asks the recipient to vote for Susie Lee, and you create a different messaging block that’s targeted to Minnesota’s 2nd district which asks the recipient to vote for Dean Phillips.
When EveryVoter sends an email a week before the general election, the recipient in Nevada’s 3rd District will see the Susie Lee block and the recipient in Minnesota’s 2nd District will see the Dean Phillips block.
Thanks to this “block” functionality, EveryVoter saved OFA staff from preparing and sending 774 different mailings in 2018.
EveryVoter was built to be an iterative platform — its a work-in-progress, and there is still testing and refinement to be done. During the 2018 cycle, we learned a lot about what worked and what didn’t. There are a handful of crucial features and optimizations to be done that will be key for broader adoption during future elections. Nothing tells you what you’re doing right and what you’re doing wrong with your software product quite like importing millions of people then running a national voter mobilization campaign on top of it.
If you’re interested in checking out the code, visit EveryVoter’s GitHub repository. And if you want more information, or are interesting in contributing to the project, reach out to us at email@example.com!
EveryVoter was a collaborative project. Election data and state election rules were collected from open source repositories and manually verified by OFA staff. Jason Rosenbaum at Action Network provided guidance on how to make an email platform that can send millions of emails per hour. And Jeff Sutton was an exceptionally supportive and patient first client.