IWillVote.com polling place data is now available in PAD for Community Tech Alliance’s partners through a partnership with the Democratic National Committee (DNC).
IWillVote.com is the Democratic Party’s one-stop shop for voter education and information. Voters can check if they are registered to vote, learn how to register, register online if their state allows it, find their polling location, check voting requirements, and learn how to cast a mail-in or early ballot. Read more about IWillVote.com and the data behind it in this Medium Article by the DNC.
This data is available to any CTA partner at no extra charge and does not count against your CTA sync allotment. To access this data, send a request to help@techallies.org.
Getting Started
Once you have submitted a request and CTA has permissioned your organization, the DNC’s IWillVote.com polling place data can be accessed in your PAD project in a dataset called dnc_voting_locations.
CTA refreshes this dataset four times a day at 6AM, 10AM, 2PM, and 6PM EST, pulling in the most recent data provided by the DNC. The DNC refresh on their polling data occurs on a per-state basis, updating once or several times during the day.
As of this writing, the dnc_voting_locations dataset contains the following 9 tables:
Voting locations
dropbox_locations
early_vote_locations
polling_locations
Mappings
precinct_to_dropbox_location
precinct_to_ev_location
precinct_to_polling_location
zip9_to_precinct
Schedules
dropbox_structured_schedules
early_vote_structured_schedules
The schema details of each table can be found in CTA’s data dictionary for dnc_voting_locations.
Have questions or can’t access the data? Send a message to help@techallies.org for assistance.
Sample Queries
To get you started with this data, use the following sample queries created by CTA in PAD. Please replace the dataset and table paths with the correct names in your project.
Important notes on query size and cost:
IWillVote data is a robust nationwide dataset, and querying large datasets can be expensive.
Here are some steps you can take to ensure that you are not generating unnecessary expensive queries that could lead to overage charges:
Be sure to check the upper right corner of the BigQuery console for a query processing estimate before executing a query.
Limit your queries to just the states you are interested in
Use the data dictionary to explore the data, column names and types, etc (rather than running a SELECT *)
Reach out to help@techallies.org if you have specific questions on IWillVote queries
Joining the schedules of dropbox and early vote locations
These sample queries each result in a table containing the dropbox or early vote location information and its respective schedules.
For Dropbox Locations
SELECT * FROM `dnc_voting_locations.dropbox_locations`
LEFT JOIN `dnc_voting_locations.dropbox_structured_schedules`
USING (schedule_key, state_code)
For Early Vote Locations
SELECT * FROM `dnc_voting_locations.early_vote_locations`
LEFT JOIN `dnc_voting_locations.early_vote_structured_schedules`
USING (schedule_key, state_code)
Joining zip codes and precincts of a polling location
This sample query results in a table containing the DNC polling location and VAN precinct ID of zip9s across the United States.
SELECT zipcodes.zip9
, LEFT(zipcodes.zip9, 5) AS zip5
, zipcodes.confidence_score AS zip9_confidence_score
, precincts.van_precinct_id
, locations.*
FROM `dnc_voting_locations.polling_locations` AS locations
LEFT JOIN `dnc_voting_locations.precinct_to_polling_location` precincts
USING (polling_location_id, state_code)
LEFT JOIN `dnc_voting_locations.zip9_to_precinct` AS zipcodes
ON zipcodes.van_precinct_id = precincts.van_precinct_id
AND zipcodes.state_code = precincts.state_code
WHERE zipcodes.state_code = 'AK'
Using the columns van_precinct_id, zip9, or zip5, this sample table can be used to JOIN on tables outside the dnc_voting_location dataset, such as tables in VAN, Mobilize, Blocks, and the voter files datasets.
Example JOIN on VAN ContactsAddresses table
WITH iwillvote AS (
SELECT zipcodes.zip9
, LEFT(zipcodes.zip9, 5) AS zip5
, zipcodes.confidence_score AS zip9_confidence_score
, precincts.van_precinct_id
, locations.*
FROM `dnc_voting_locations.polling_locations` AS locations
LEFT JOIN `dnc_voting_locations.precinct_to_polling_location` precincts
USING (polling_location_id, state_code)
LEFT JOIN `dnc_voting_locations.zip9_to_precinct` AS zipcodes
ON zipcodes.van_precinct_id = precincts.van_precinct_id
AND zipcodes.state_code = precincts.state_code
)
SELECT *
FROM ngpvan.contactsaddresses van
LEFT JOIN iwillvote dnc
ON van.statecode = dnc.state_code
AND van.zip5||van.zip4 = dnc.zip9
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article