I'm just getting started on writing documentation for Advokit 2.0. This "Advokit 2.0 Guide" is envisioned as a comprehensive guide for campaign leaders in how to set up and run a campaign using Advokit. I hope to be adding and editing pages frequently over the next couple months. - Pat
to be written (origin and concept, Advokit1 history, thanks, etc)
Advokit is a web application that helps small to medium-sized grassroots campaigns conduct carefully managed yet completely decentralized voter contact, supporter identification and get-out-the-vote activities. Your volunteer activists and leaders can work from any internet connected computer, whether it be at campaign headquarters, in their home or office or school, or anywhere else. They can get names of voters to contact one at a time, or create contact lists that can be printed out and used away from any computer., After speaking to each voter, they can record information from that conversation (typically by filling out a questionnaire). Leaders can recruit and organize their activists into teams, give them jobs and monitor their efforts in real-time.
Advokit is free, open source software that anyone can download and deploy in support of their political efforts. It is licensed under the Affero General Public License. The requirements to install and run Advokit for a small to medium-sized campaign are reasonable: a web server with Linux, Apache, MySQL and PHP. In addition, a unix shell-account and Perl are required for running the voter data import utility (see the online documentation at advokit.net, or the read me documentation included with the advokit installer for detailed system requirements). Finally, Advokit is not very useful without a database of voters - you will need to obtain voter data for your target population. Countless web hosting companies offer hosting packages adequate to run a modest Advokit campaign of, say, 50,000 voters and 50 users, often costing as little as a few dollars per month.
There are almost as many kinds of campaigns as there are campaigns. Advokit supports a wealth of organizing and voter outreach scenarios, which means that it is extremely important to set up Advokit for the way you want to conduct your campaign. It also means that there will never be a perfect fit to your expectations. If you are expecting Advokit to be a functional equivalent to to some commercial software system that you have used before, you will quickly lose that misaprehension as you start to work with it! Advokit is what it is, and while it is quite powerful and adaptable, and while it's open source code can be freely tinkered with, it will definitely pay to understand how Advokit is designed to work before you sprint out of the starting blocks. In this guide we will not only try to describe in detail how Advokit can be made to work for you, but we will also describe some typical campaign scenarios and detail some best-practices for organizing with Advokit for each of those scenarios. Take the time to read this guide carefully so that you understand how Advokit can best be used to suit your campaign!
How long will it take to get Advokit set up before you can start handing out user accounts and making phone calls? There is not a simple answer to this question since every campaign is different; much depends upon your familiarity with the options that you will need to choose among when configuring your campaign in Advokit; and of course a lot depends upon how well you understand what you need to do politically and organizationally to have a successful campaign. There is no substitute for experience in this regard! But in all cases there are several boiler-plate configuration steps that need to be performed, such as configuring job types, defining tasks and tags, setting up a few top-level teams, creating questionnaires, adding filters to teams, etc. These things can easily be done in well under an hour if you know exactly what you need to do. However, since you're reading this guide we can probably assume that you are still learning! In that case, it's probably a good idea to allot yourself at least several days to work out your configuration, perhaps starting with a small number of core volunteers using the system, before you promise a high number of phone calls being made!
In the first part of this guide, we will introduce you to how Advokit can work in a simple campaign. In the second part we will methodically survey the functionality of Advokit. Finally, we will consider a few campaign scenarios, and suggest some best practices with Advokit that can be used to support them. In appendix A, we provide a checklist of decisions to make and configurations to perform that any campaign leader will need to go through when setting up Advokit to run a campaign.
This guide is intended for prospective campaign organizers who would like to use Advokit, or are actively preparing to do so. However...
to be written
Before any activist jobs can be created on teams and before any users can be plugged into activist jobs, the campaign leader must define one or more activist job types. By defining job types, a campaign leader determines what different kinds of activists will be expected to do and what functions they will have available when they log on to Advokit. (A job type is not the same thing as a job. A job can be thought of as an instance of a job type on a particular team.)
Job types are critical to determining how your campaign uses Advokit, and creating them in such a way as to accurately describe what is expected and to provide the tools for the work you want your activists to be doing is one of the most important steps in setting up a campaign in Advokit. Defining your job types should be part-and-parcel with your overall campaign strategy. If you are unsure how to set up your job types, and even if you think you are sure, you may want to consider an early "testing phase", where you unleash a limited number of activists in order to guage the way you have things set up, prior to a wider rollout. This period would also give you a chance to tune other things like your questionnaires, your voter filters, etc.
Note that what we are discussing here are activist job types. There is also such a thing as a leader job type, which is what applies when you are given a job as a leader of a team, operation or the campaign. Leader job types do not have any configuration options and are not listed among these configurable job types - they are already "built-in".
There are two classes of activist job types: voter-contact and task-handling.
Voter-contact jobs initiate contact with voters and are the campaign's primary way to interact with voters. Voter-contact job type definitions control basically three things:
Advokit supports three scenarios for how activists get the names of voters to contact:
Which scenario(s) or variations on them you choose for your campaign will depend upon a number of considerations, some having to do with campaign strategy, some having to do with how to utilize your campaign's human resources most effectively. Advokit provides three preset activist job types that provide a good starting point, and correlate with the three scenarios just listed. They are shown as "online phone banker", "offline phone banker" and "friends and neighbors" in a drop down menu on the add and edit job type screens.
![]() |
A menu on the add/edit job type page shows three preset voter contact job types - "online phone banker", "offline phone banker" and "friends and neighbors" - in addition to task handler job types corresponding to the task types currently defined. |
Online phone banker:
A phone banker is an activist who calls voters that have been assigned to him/her by the campaign. An online phone banker is one who works at computer that is connected to the internet while making phone calls. An online phone banker has no need to manage contact lists, and is simply presented with one voter or household at a time to call (if you have multiple voters at the same phone number, we strongly recommend that you enable the "Select all voters in household" option, otherwise you can have different activists trying to call different voters at the same number at the same time or in rapid succession). To get a new voter or new household, the activist clicks a "Get next voter" (or "Get next household") link. Since there are no contact lists to manage, the "online phone banker" job type presents the simplest interface to the user.
Offline phone banker:
An offline phone banker is an activist who is given a list of voters to call - a contact list. Though he or she could work through her list of voters while working on a computer, there is no requirement to do so, and could just as readily work from a printed copy of the list. Also, since he or she is not tethered to a computer, there is no real reason he or she should be tethered to the phone either. So notwithstanding the "phone banker" name we gave this preset job type, this activist could take the printed contact list and use it to walk door to door. In either case, anyone who works offline will need to have the results of their voter contact work entered into Advokit in a reasonably timely fashion. There is no requirement that contact results need to be recorded by the activist. You could decide to have the team leader or another activist stand-in for the activist, when creating the list of voters to contact, and/or when entering the results afterwards. In this way, you can effectively utilize volunteers without requiring them to be technologically-abled.
Friends and neighbors:
A friends and neighbors activist is instructed to create a contact list of people he or she knows personally or with whom he or she otherwise has some kind of affinity (e.g. neighbors, co-workers, etc). Since there is no practical way that an automatic system can be devised to create such a list for each activist, Advokit provides search capabilities to enable activists to find individuals by name, address, or other attributes. The activist browses the search results and either manually selects individual names (or households), or chooses a selected number of the voters found by the search, to add to a contact list. Because of the need for friends and neighbors activists to use the search tools in Advokit to find particular voters, this is not a role that is performed performed by persons who are not technology-abled. At the very least, the activist needs to have their contact list creation directly facilitated by someone, e.g. a team leader. The activist could meet with that person who has an internet-connected computer, and together perform the searches to build a contact list and, later, enter the results of their contacts.
Comment: One of the most important questions a campaign leader faces with respect to conducting voter contact is one of quantity vs. quality. Voters contacted by personal friends are at least an order of magnitude more likely to be identified as a supporter than those contacted by someone they don't know. If you could have every voter in your target population contacted by a close personal friend, clearly that would be preferable to each voter receiving a call from a rank stranger. If your activists come from the same community as the voters that are your target population, and if your objective is to identify the maximum number of supporters for your cause as possible, then a strong case can be made for using a "friend to friend" approach, where your activists are instructed to search out their friends and neighbors to contact. Though they probably will not contact nearly as many voters as compared with a phone banking or precinct walking style operation, it is quite likely that each activist will identify at least as many supporters. Obviously this approach depends upon there being a pool of voters who have some kind of social connection with your pool of activists. But it does not to be an either-or proposition. You could start your campaign with a "cherry-picking" phase where your activists are told to build contact lists of people they know, perhaps also instructing them to recruit friends to become activists in the campaign at the same time. Later, you can tell them to use automated methods to create new contact lists in order to achieve more systematic coverage of the voter pool.
The three presets I have just described provide a starting point for defining your job types based on general functional requirements. Once you have selected one of those preset configurations, you will need to carefully adjust all the individual options in light of your own requirements. Some options have to do with how activists get the names of voters to contact and how they manage their contact lists. Other options have to do with what privileges they have with voter information, whether they can recruit a voter to become an activist. Choosing different presets will cause the add/edit job types screen to show different sets of options, as is explained below.
Task-handling jobs respond to requests for some kind of action that are generated through voter-contacts. A typical example would be when a voter-contact activist talks to a voter and determines that the voter should be sent some campaign literature. The voter-contact activist could create a task that instructs someone in the campaign to send the literature to the voter. A task-handling activist would then handle that request. Task handling jobs do not have lists of voters to contact. Rather, all instances of a particular task-handling job type, regardless of where they are in the team structure of the campaign, share responsibility for a list of pending tasks.
There is no configuration available for task-handler job types. You just select the task that this job type will handle from the list in the available presets menu (you need to have first created the task types by clicking Configure > Task Types).
To create a new job type, first, click on Configure > Job Types
This brings up a browse job definitions screen, which displays any job types that you have already created. Click on the "Add a new type of job" link.

Here is what the add job type screen looks like before you have entered anything.

The only required elements in this form are a title for the job type and a selection from one of the available presets. The description that you provide, which will appear on the activist's job details page, should clearly explain the expectations for activists who have this type of job.
If your campaign utilizes Advokit's self-registration feature, you will probably want to enter information into the Ad Title and Ad Body fields. This information will appear when the prospective registrant views the list of available jobs. The Description and the Ad Body are both composed as WYSIWYG HTML, using the TinyMCE Editor forms.
When you select one of the available presets, options that are appropriate for that job type will appear. Here are four examples.
|
A task handler job has no configuration options.
|
|
![]() |
Because the "online phone banker" type of job does not have contact lists, options relating to contact lists do not appear.
Select all voters in household - When the job is of the "online phone banker" type, enabling this setting causes the available cohabitants of the current voter to be listed on the contact sheet for that voter. Enabling this option is highly recommended for online phone banker jobs for a couple reasons. 1) If someone else in the household answers the phone, the activist can quickly switch to the contact sheet for that person by clicking on their name on the contact sheet. 2) It prevents another activist from getting another member of the household to call at the same time.
Default voter recontact interval (days) - When an activist clicks on the link on the contact list to "record unsuccessful or incomplete contact attempt", a "recontact in __ days" form is displayed. This option sets the default value that appears in that form.
Enable basic voter editing - If this option is checked, the activist will be permitted to edit name, address, and a few other fields for the voter. A pencil button appears on the contact sheet.
Enable advanced voter editing - If this option is checked, the activist will be allowed to edit all information about the voter, as well as mark the voter as deceased or moved away. A pencil button appears on the contact sheet.
Enable adding new voters - If checked, Actions > Add Voters is enabled for the activist.
Enable recruiting of voters to be activists - If checked, the activist can give the voter an account on the system by clicking the key button (
Enable phone number editing - If checked, voter phone numbers and email are editable directly on the contact sheet.
Enable creating and viewing followups - Followups are another way of recording comments and information about a voter. They do not work very well and are not very useful, so unless you have a specific need to use followups, it's probably best to leave this option unchecked.
Enable creating and viewing tasks - If your campaign wants activists in this job type to be able to create tasks that are followed up by other activists in a task-handling role, check this option.
Optional Display - You may select up to two optional fields that will be displayed on the contact sheet. For example you could display a voter's occupation and party affiliation.
|
![]() |
Offline phone banker and friends and neighbors jobs have contact lists. There are several options for configuring settings for contact lists in addition to the options described above. Offline phone bankers, by default, have a single contact list, use the one-click method for adding voters to the contact list, and do not use voter searching.
Enable multiple contact lists - If checked, the activist can create and delete contact lists. Otherwise, they have exactly one list and cannot delete it.
Enable one-click adding new voters to contact list (with option to set the number to be added with each click) - This provides a quick way for activists to get a batch of voters to call from the voter pool.
Enable searching voters to add to contact list - When this option is enabled, a search field appears in the activist's sidebar where a voter name or street may be entered. There is also an "advanced search" link that connects to more powerful searching tools.
Auto populate contact list when filling this job (with option to set the number of voters that are automatically populated) - When an activist is added to this job for the first time, if this option is enabled, the selected number of voters will be added to a contact list on that job. This is particularly useful if you wish to have activists getting started making calls with little or no intervention by leaders. When they log on for the first time, they will already find a contact list of voters to call.
Days of inactivity before voters are removed from contact list - This option does not work and may be ignored.
Max number of voters that can be on contact lists for this job - When a voter is on a contact list, they are unavailble to be contacted by activist elsewhere in the operation. It is probably wise to set this at a fairly high number, but not astronomical, in case you have an activist who intentionally or inadvertantly tries to grab your entire voter pool.
|
![]() |
Friends and neighbors jobs are identical to offline phone banker jobs except that they have different options enabled by default. Multiple contact lists and voter searching are enabled by default.
|
Frequently, when a voter has been contacted by an activist in a campaign, there may arise as a result of that contact some followup task that needs to be completed by someone else in the campaign. A common example is when a voter needs to be sent some materials by the campaign: literature or registration forms, perhaps, where it makes sense to keep inventory and expense tracking in one place. Other common examples include: a follow up phone call from someone better equipped to respond to a voter's question; distributing lawn signs; arranging rides to the polls or child care; etc. In Advokit, these cases are best handled through Tasks.
The process of creating and handling tasks goes like this:
To enable this to happen, there are a small number of configuration steps that must be completed first.
Where you put your task handling jobs in your team hierarchy is entirely up to you. Tasks are not sensitive to organizational structure - they will appear on the pending tasks list for any job of that task-handler job type, regardless of where the task handler job is located, or where the voter-contact job was that created the task. One good practice is to create a separate operation just for task-handling jobs. That way, the supervisory relationships for task handlers are consistent and clear, and they do not get lost in the rest of your organizational structure.
To add or edit task types, click on Configure > Task Types.

A list of any already existing task types will be displayed, along with a link that lets you add a new task type.
Advokit comes with a "Undefined" task category predefined. This category cannot be deleted or edited. You can add, edit and delete your own categories. Clicking the "Add a category" link brings up a simple form where you can provide a name and description for a new task category.
Select the Configure > Job Types link.

Consult documentation on creating job types.
Consult documentation on creating teams and jobs on teams.
Voter tags function similarly to questionnaires, custom fields, and even tasks and followup comments. They're each a different way to record information about voters. Tags are appropriate where you wish to be able to record and display simple information for any voter in a fairly ad-hoc way right at the top of the contact sheet.
When one or more voter tags are defined, they will appear as a list of tags on a voter's contact sheet which can be individually checked on or off. In this sample screenshot there are two voter tags that have been defined for this campaign: "Environment" and "Schools". The small tag symbol (
), labeled "A" below, is a button, that when clicked causes a small form to appear with check-list of the possible tags for voters, labeled "B" below. Checking one or more check-boxes and saving changes by clicking the green check-button causes those attributes to be "tagged" to that voter. In this sample, John Q Public is having the "Schools" tag added to the "Environment" tag that he is already tagged with.

Voter tags are treated like voter attributes that can be searched and filtered on. You could, for example, set up a team whose job it is to contact all voters with the "Environment" tag. Or you could create a saved search for all voters with the "Schools" tag in order to extract a mailing list.
Activist tags, also known as "Interests", are similar to voter tags in that they appear as a simple check-list, and they are used to record simple information about an activist. Typically, they would be used to record information about the kinds of work that an activist is interested in helping with.
An individual activist's tags are edited from the activist's profile page and - when enabled - the activist self-registration page.
![]()
Activist tags can be used to filter the activists shown on the Browse > Users page:

In this way you could when looking for activists to fill a job of a particular type, filter by an interest that would be appropriate for that job type. In this example, you might be looking to fill a job that involves making lists of friends and contacting them.
to be written
Advokit's primary mechanism for gathering information from voter contacts is through questionnaires. Questionnaires appear on contact sheets as a series of questions that you define (usually). Voter contact status is a function of questionnaire completion status - when all questionnaires are completed, then the voter contact status is considered completed.

-- a typical questionnaire as it appears on the voter's contact sheet
Some things to know about questionnaires:
Some things to know about questions:
A few tips about questions - keep it simple:

When you are ready to have the questionnaire appear on contact sheets, be sure to activate it by clicking on the ACTIVATE link!
This is what the add question form looks like:

You will need to select the question format, type in the text of your question, and change any options as appropriate.
Question formats:
![]() |
|
Question options:
In this example, we're creating a simple yes/no question: "Do you support our cause?"

After clicking "Add New Question" the Edit question form appears, which looks very much like the screen we just saw, except that now we see our answers in a form at the bottom of the page.
Here we can
We can also add answers by entering a number in the additional answers field near the top of the form
In all cases, click the "Apply Changes" button to save your changes.
After you have added a question or two, your team's Questionnaires tab might look something like this...

There are a number of links and buttons. For questions, you can...
For questionnaires, you can...
If you click 'EDIT', you will see a screen like this
On this screen you can
If you would like a questionnaire to appear on contact sheets for only certain voters, you can create and apply a voter filter to that questionnaire. You can make a voter filter as simple or as sophisticated as you like. For example, you could have a filter that displays questionnaires only for voters registered in a particular party. Or you can have a filter that only allows a questionnaire to appear for voters who have answered a particular way on another questionnaire!
To add a voter filter to a questionnaire, click on the 'ADD' link for voter filters. This will bring up the same "filter builder" interface that is used for creating voter filters for teams and jobs.
For detailed information on building a voter filter, see the help topic on Voter Filters.
Once a questionnaire voter filter has been created, there will be links on the questionnaire properties page to edit (using the filter builder interface), edit sql (where you directly edit the database query), and to delete it.
A questionnaire script is perhaps not clearly named since it is simply a way to make a link appear on a questionnaire that lets the activist view or download a file that you have uploaded to the server. The "script" idea comes from the fact that campaigns typically have a need to provide the activist with a call script which they follow when they call a voter. However, any kind of file may be attached to a questionnaire. If it is a type of file that is viewable in the user's browser, it will be displayed. Otherwise the user will be asked if he or she wishes to download it.
Note: It is usually best to create a script file in a format that any user's browser can display, rather than requiring that they download the file and open it in a particular application. Avoid using MS Word (*.doc) files, for example. The safest choices are plain text (*.txt) and html (*.htm, *.html). PDF (Adobe Portable Document Format) files are also very good, though there are some rare users who do can not read them.

As can be seen above, a "script" link appears on the questionnaire when there are one or more files attached to it. To attach a file to a questionnaire, go to the team where the questionnaire was created; click the Questionnaires tab; click on the EDIT link for the questionnaire; then click "ADD A SCRIPT" on the edit-questionnaire page. You will now see a form that looks like this...

Give the script a name, an (optional) description, and click the "Browse..." button. This brings up a file selection window which you can use to find the file that you want to attach. Finally, click "Add New Script". The script attachment will be created and the file will be uploaded to the server.
Now when the activist opens up the questionnaire for a voter, the "script" link will appear. Clicking on it will bring up a popup window that lists the attachments to the questionnaire, like this...
When the activist clicks on the link for the attachment, if the file is displayable by his or her browser, it will display in a new popup window. Otherwise, a dialog box will appear asking if the user would like to download the file.
Sometimes. the only thing you want to know is whether contact was made with the voter. A common example is the get out the vote call on election day. You're not gathering any information, so there are no questions to ask. A way to approach this in Advokit is to create a questionnaire that has no questions! When you do so, it will appear on contact sheets like this...
Furthermore, if this is the only questionnaire remaining to do for this voter, then a checkbox will appear at the top of the contact sheet next to the voter's name. Clicking it will immediately mark the voter as "done".
Also, again if this is the only remaining incomplete questionnaire for the voter, there will be a checkbox next to the voter's name on the contact list which likewise works to mark the voter as "done" when it is clicked.
With this feature, it is possible to rapidly work through a contact list without needing to pull up contact sheets for each voter that is called.
to be written
to be written
Add activist, Recruit voter, Self registration
to be written
to be written
to be written
to be written
to be written
to be written
A checklist of decisions to make and configurations to perform that any campaign leader will need to go through when setting up Advokit to run a campaign
These were written by Dan Robinson in 2004 and revised by Pat Dunlavey in 2006. They are in PDF format.
The AdvoKit installer is a PHP/MySQL application whose purpose is to install AdvoKit on a server. For most users, the installer will do all the work for you of setting up database tables, copying application files, and creating configuration files. The whole process can take just a few minutes.
The AdvoKit installer can be obtained from a variety of sources. Official AdvoKit releases can be obtained from insert url here. In addition, AdvoKit is distributed under the Affero General Public License, which requires the the source code for the application to be downloadable by a link in the application. So you can get the AdvoKit installer from any running instance of AdvoKit!
The AdvoKit installer can create a new installation, or upgrade an old installation. To run, the installer files must be downloaded, decompressed, and placed on your web server where they can be accessed with a web browser. In other words, the installer folder should be placed somewhere under your web root. Typically, FTP is used to put the installer files on your server. Once there, the compressed archive may be decompressed from the command line on the server, or it can be decompressed using a utility like WinZIP prior to uploading to the server.
Some servers may not be set up in such a way as to allow the AdvoKit installer to run easily. UNIX file permissions settings are the most common source of difficulty. Consult the system requirements for more suggestions.
Once the AdvoKit installer has completed, it should be removed from under the web root. Leaving it in place provides a very large security hole on your system. It can be moved out from under your web root if you wish to keep the installer available.
AdvoKit runs on a web server with PHP and a MySQL database server. Before you can install or upgrade AdvoKit, you must have information for accessing the MySQL database; where the application files will go; and where the web root is found.
There are three steps that must be accomplished, in no particular order, before starting up the AdvoKit installer: Setting up a database; Figuring out where files will go; and installing the installer!
You will need to work with your hosting service or local system administrator to create a MySQL database that you have access to. To set up AdvoKit, you will need to know:
Take a minute or two to understand the directory structure on your host machine. If you are installing on a remote server, use your FTP client to take a look at how the hosting service has organized your directories. Typically, in your top level directory or perhaps one level down, there is a folder called "public_html" or "htdocs" or some such, which is where your publicly accessible web pages are served from. This folder is known as the "web root". The advokit-installer will need to put some files under that directory. You can decide if you want AdvoKit to run directly from the web root, or from a folder somewhere under the web root, e.g. "../public_html/advokit".
Most of the AdvoKit files will be placed in a location that is NOT under the web root, so that prying eyes or mischief-makers cannot get into them. The most typical approach is to create a folder called "advokit" at the top level of your directory structure (above that web root) for the advokit-installer to use to place all the application files and private data files.
The advokit-installer compressed archive will need to be decompressed and uploaded to your web server. Most efficient is to upload the archive to your server and then decompress it from the command line. If you do not have shell access, then decompress the archive on your PC (using e.g. WinZip), and then drag the advokit-installer folder to your web server using your FTP client. Make sure you place it under your web root, where it can be accessed by a web browser.
After you have decompressed and placed the advokit-installer folder under your web root, point your web browser to <your.domain>/advokit-installer.

Assuming this is a new installation, click on the button labeled "Install advokit, deleting any existing installation >"
It doesn't hurt to select "transaction safe tables", though most MySQL servers do not support them.
At this point you can click "continue". If the database connection information was valid, then you will see a screen like this

If the database connection is successful, click "continue". If it was not successful, click "go back one step" and carefully check the information as entered.
Now a long list appears, showing what database tables the AdvoKit installer plans to create. If any of these tables already exist, they will be dropped, and any data in them will be lost permanently. If you are installing over a pre-existing AdvoKit database, that data will be lost.
If you are installing AdvoKit for the first time, you might want to choose to have some sample voter data installed. This loads a small voterfile that you can use while exploring your way around AdvoKit. If you do not have any voterfile data, this is a great way to learn about AdvoKit. Do not choose to install this sample data if you intend to upload real voterfile data and begin to run a real campaign, however you can get rid of the sample data at any time just by re-running the AdvoKit-installer. Note that the option to load sample data is off by default, and appears at the bottom of this long page, requiring scrolling down to see it.
If you now choose to continue, the installer will proceed to install the more than fifty database tables needed to run AdvoKit. This should only take a minute. A lengthy log of results for each SQL insert statement should scroll rapidly past as each table is created. If there are any errors, the installer will usually stop and display an error message. However it is a good idea to to quickly scan the results display for any highlighted text that may indicate a warning or error message. Most warnings can be safely ignored. An error message stops installation, and should be resolved and the import run again.

Once the database installation is successful, the installer turns to setting up the application files and configuring the advokit.ini file that binds everything together. To do so, you must provide the installer with information about where your installation will be found on the world wide web, and where its files will be found on the machine that will be serving your site..
The following five items expect you to provide an absolute path for locations to place AdvoKit application files - folder locations on the host machine. In a remote hosted environment, the complete path may not be apparent to you, since you can usually only see the file structure below your private home directory. However, the advokit-installer does provide some help for you. If you look at the filesystem path above that was filled out by the installer, it shows the complete filesystem path to where the web-accessible portion of AdvoKit is found in your web directory. Since your web directory is normally located below your private home directory, you can pull out the portion of the path that shows where your private home directory is. For example, if
Filesystem path is "/home/.zachheater/janedoe/public_html/advokit", then it's easy to figure out that the private home directory is "/home/.zachheater/janedoe". Now if you created a folder called "advokit" under your private home directory (see "File system setup above), then you would just need to substitute "/home/.zachheater/janedoe" for "\NON-WEB\PATH\TO" in the following paths.
Carefully double-check all the entries in this page before clicking "Continue >". You will next see a scrolling list of the files that are being copied to your application folders. Watch for error messages, usually shown in bold red type. If there are errors, try to resolve them and then reload this page, or go back one step.
Until something better is written, see this FAQ entry.
|
Once the advokit-installer has completed, it will take you to this login page. (Note: If you see an "internal server error at this point, most often this is due to inappropriate permissions for the index.php file found at your Advokit web root. "755" seems to be a widely acceptable setting.) AdvoKit has an administrator account already created. To log in, type "admin" for both username and password and click "Login"
|
|
|
Once you are logged in for the first time, there are a few things you will need to do to get ready to set up a campaign.
|
|
![]() |
If you are logging into AdvoKit for the first time, you will immediately be taken to a page where you can add a campaign. (If you are not taken to this page by that route, you can click on the "Add campaign" link in the sidebar.) A campaign, in AdvoKit, is the top level of your organizational structure. Later you will create one or more campaign operations and teams under those. But first you need to create a campaign and give it a name. All you need to do is provide a name and an optional description for the campaign...
It's probably best for the moment to leave the self-registration check box un-checked. This setting determines whether anonymous visitors to your site will be able to see a list of unstaffed jobs in your campaign and sign up for them. |
![]() |
After creating a campaign, t he next step is to create a campaign leader account. This is the account that will be used to manage the entire campaign - create operations, manage jobs and activists, etc.( If you are following the process from first administrator login, you are taken to this step automatically after creating the campaign. Otherwise, you can click "Browse Campaigns" in the sidebar, then click on the name of the campaign in the list, then click on the link "Browse leaders for this campaign", and finally click on the link "Add leader to campaign <campaign name>".) You will be presented with a screen where you can create the new account for the campaign leader. Note that fields labeled in red are required. As always it is not required but a very good idea to include a valid email address for this person so that they can recover access to their account if they lose their password.
|
![]() |
Before continuing on to log in as campaign leader and set up the campaign, you should secure your admin account against outside intrusion. You will need to change the admin password to one that only you know. Click on "Set Password". You will need to type in the old password ("admin"), and then type a new password - twice. After clicking the "Set new password" button, AdvoKit will log you out and log you back in, using the new authentication.
|
![]() |
At this point it is also highly recommended that you edit the admin's user profile to include a valid email address. The reason for this is that if you ever forget your admin password, you will want the system to be able to email you a new password (though there is a way to reset the admin password to "admin" in an emergency by re-running the installer and clicking on the "Reset admin password" button, this is not the recommended method). Unfortunately, there is no "edit profile" link in the administrator's sidebar, so you will need to click on the "Browse Users" link (the "User Report" link will also work) to view a list of the accounts on the system.
If you click on "admin" account (highlighted in yellow here), that will bring up the edit profile page for the administrator account...
Enter your email address and click "Apply changes". You might want to enter other information on this page, but since you are the only administrator, you're the only one who would ever see it. IMPORTANT: DO NOT CHANGE STATUS TO "Inactive" OR CHANGE THE SECTION FROM "Administrator"! Doing so will make it impossible to perform administrative functions. |

<h4 class="sidebarsectionhead">The Issues</h4>The first line causes a section header to be displayed with the name "The Issues". Below that are the links, separated by breaks (<br>).
<p class="alist">
<a href="index.php?display=CustomHtml&heading=Eight Talking Points&html_name=talkpts">
Eight Talking Points</a>
<br>
<a href="index.php?display=CustomHtml&heading=Spin&html_name=spin">The Spin</a>
</p>
; Enter a url here to use for the logo image (relative url is from
; web root of application, exclude the leading slash). If left blank then
; the default AdvoKit logo will be used. If "none" is entered, no logo will
; appear. Examples:
; logo_url = ""
; logo_url = "images/logo.gif"
; logo_url = "http://www.a_domain.com/advokit/images/logo.gif"
; logo_url = "none"
logo_url = ""
|
|
AdvoKit's voterfile installation process is a multi-step affair. To further complicate matters, there are two possible paths you can take to getting voter data installed. In each case, you must first tell AdvoKit how you want to map your voter data fields into AdvoKit's voter data tables, and then run a perl script from a command line environment to actually insert the voter data into your AdvoKit database. The method that was first developed is decidedly inferior to the second, and so we will only describe the second in detail. The basic steps are:
|
||
|
Your voter data needs to be carefully prepared and have been uploaded to the server. Installing voter data is not an easy process when you are doing it for the first time, and if there are problems with the data, you will have to go into MySQL to purge the bad data before re-running the import. Therefore, it is extremely important to have your voter data prepared well to be used in AdvoKit. The right way to go about this is to use an offline (desktop) application such as Microsoft Access to inspect your voter data for problems, if necessary manipulate the way some of your data is represented, and then export to a comma separated value file. What is a comma separated value file?:
(More details on the CSV file specification can be found here.) AdvoKit has built-in support for a number of typical voter data fields. See the following links for information: AdvoKit does not depend upon having data in most fields. It works best however if you provide at least a fully parsed name, address and date of birth for each voter (by "parsed" we mean separated into parts, e.g. first name, last name, middle initial). Most advocacy operations rely upon other fields for voter filtering, such as "political address" (ward, precinct, etc.), and party affiliation.
Some pitfalls we have seen:
|
|||
|
Upload this file (by e.g. using an ftp client) to your server. It should be placed in the "voterfiles" folder, which is typically located in the folder where all your installed advokit system files are stored. As you will see in the next screen, it is possible to skip the step of manually uploading the voterfile to your server. However it only works for relatively small voter files, and is quite slow. We recommend not using this option.
|
|||
|
When you click on the "Upload Voterfile" link (you must be logged in as the campaign leader), you will first be asked where the voterfile is found:
In this example, we had uploaded a file called "vf.csv" to our voterfiles directory and picked its name from the drop-down list. (Again, we recommend against using the direct upload option.) When you click on the "Choose/Upload File" button, AdvoKit will look at the file, read the field names, and then present you with a screen where you can indicate how your voterfile fields will be related to fields and tables in the AdvoKit voter database.
Each field in your voter file is listed in the left-hand column. For each voterfile field, you should choose the field name in the corresponding AdvoKit data table that you want it mapped to. Note that not all voterfile fields need to be mapped. What to do with voterfile data that you need to use, but for which there is no corresponding AdvoKit field? This is what custom fields are for. The first step is to map the fields that you can, as above, to AdvoKit fields. Then click "Proceed >"
At this point, we can now choose among the unmapped fields from the voterfile to put into custom fields, as can be seen here. Be sure to choose a field type as well as give the new field a name. IMPORTANT: We strongly recommend that you check the box at the top of the screen to have a mapping file generated for use with the command line import utility. Whether or not you use this option, you will still need to execute the voterfile import from the command line. Using a generated mapping file with the import utility is many times faster, and much more reliable, compared with having AdvoKit generate the data import script. Assuming you did check the generate mapping file box at the top of the screen, clicking "Proceed >" will cause a mapping file to be generated and placed into your voterfiles folder on the server. It's useful to write down the name of the mapping file since you will have to type it into the command line in the import step.
|
|||
![]() |
|||
|
To actually import the voter data into your AdvoKit voter database, you will need to be able to execute a Perl script on your server. The script is called "import.pl" and the original can be found in the advokit-installer/utils directory. It probably makes most sense to extract this file on your PC and edit it there before uploading it to the server. You will need to edit import.pl to include information that the script will need to connect to your MySQL database. This is the same information as was provided when you did the first installation step. Starting on line 20 of the import.pl script, you will see:
Edit these values to provide the correct host, database name, database username, password and table prefix. Save the file and upload it to your voterfiles directory on the server. Now log into a command window on the server (consult with your host if you do not know how to do this) and go to your voterfiles directory. The syntax for running the import script (assuming you are in the voterfiles directory) is:
The import.pl script will now execute. Feedback is provided as to how many records have been imported. When complete, it is a good idea to inspect the data using e.g. phpMyAdmin.In particular, check to see if the number of ak_voter records is correct (should be the same as the number of original records in the voterfile). If there have been any problems with the import, you will probably need to delete the records in several tables in the database and re-do the import.
|
|||
Advokit works with many tables and fields of data within those tables. The Advokit system is highly structured. Unfortunately, local voter files come in all shapes, sizes, and qualities. So, you will first use your own computer to put that information into shape before it can be imported into Advokit. The process involves getting your local data and then your conversion of that data into a "comma separated values" (CSV) file that is usable by Advokit. The county data must be cleaned up and often parsed in order for Advokit to be able to convert and import it without error into the Advokit system data file which is a MySQL file. You upload your "cleaned up" CSV file to the proper location on the web server where it can be acted upon. The actual importation of data from the CSV file to the MySQL file is done on the web server using a perl script called "import.pl" which is part of the Advokit utilities.
The basic steps in the process are as follows:
1. Obtain the voter file from your registrar of voters. In our case the county provided the file on a CD in a "tab delimited" format. You may also wish to get from the county a printout or other copy of the file structure. This will contain valuable information when you start playing with the data on your personal computer. Sometimes the county information is kept in more than one data table. For example the voter information may not be in the same table as the precinct and district information. If you can get the district and precinct information table from the county you should do that to as it will be useful when later figuring out which candidates are running in which precincts within that jurisdiction. In our case the county voter file only contains information about which local precinct the voter is located in. The information about which districts contain that precinct is contained in a separate file. Keep a friendly relationship with your local voter registrar, it may pay dividends down the road.
2. Study the structure of the local voter file. You should try to understand what the information in each (of the about 60) fields represents. In our case I was able to speak to the "computer guy" at the county office and he was quite helpful in my understanding the purposes of each field in the file. Make a written description of the structure of the county file and each field that it contains. Explain what each field is used for. Once you look around at the data within the file, you will have a much better idea of how it is designed to work. You may find that some fields have no data inside at all. You may also find that two similar-sounding fields actually are not 100 percent the same data. This a good time to ask questions of your registrar because you may make a mistake if you rely on one field and later learn that the data is not exactly what you thought it was.
3. Study the fields that are requested in the Advokit mapping utility. You will need to know what Advokit is looking for so you can make the best of your local voter file data before trying to import it into Advokit.
The fields that Advokit will ask you about for its use in the "_voter", "_residence", "_mailaddress", and "_respolis" tables are as follows:
As you study the Advokit field information compare it to what your local voter file is offering. It is highly likely that you will discover that you'll have to make some changes to your local voter file data in order to use it with Advokit. For example, our local data has a single field for birthdate. This will need to be turned into 3 fields of data – birthyear, birthmonth, and birthdayofmonth. Advokit turns these three fields into the simple birthdate field itself. Also, it turns out that Advokit only stores party affiliation as a single letter – the first letter shown in the CSV field for party affiliation. Locally we have two affiliations that begin with the letter "D" Democrats (DEM) and "Declined to State" (DTS). So, we better change the DTS data in the local file to some other letter or we'll have an inaccurate picture of the number of Democrats in our county. Anyway, there will very likely be a number of opportunities to optimize the local data to make things work better for Advokit.
When you feel confident about what you need to do to your local data you should be able to list what massaging you will want to do to the local voter data before sending it off to Advokit.
4. Clean the county file. This is not the massaging that was mentioned above. It is the process of finding out-of-place or troublesome characters in the local data file. For example, local data containing double-quote (") could be extremely troublesome during the CSV process since the double-quote character is used extensively in that process. The advokit documentation has a link to the CSV standard which is useful. What I discovered is that if I cleaned out the double-quotes, single-quote (apostrophe)('), percent (%) character, semicolon(;), etc. I did not have a problem later. The CVS standard allows quite a number of things to remain in the file, but why take a chance on the odd stuff since it is easy to clean and rare or non-existent anyway?
Open the county file on your personal computer. In our case I used Microsoft Word to load the file. Our file was about 50 megabytes at that point in time and so the operations were a little slow at first. Since the tab character was only used as a field delimiter I was able to search through all fields of the entire file to look for "dirty" data – characters that might cause problems later in the process. The one thing that will for sure cause problems is the double-quote character " The other things I searched to eliminate were the tilde~, the backward apostrophe `, the semi colon; and the apostrophe '. The Advokit help files point you to a CSV standard which will show that most of these are okay, but I didn't want to take chances on how they might be handled by MySQL after being imported into Advokit, so I removed them from the file, too. Once I finished cleaning the file in MS Word I saved it for use by my local database program. In my case, I prefer to use good old Dbase for data manipulation. You may want to use some other program – Access or a local copy of MySQL, for example. Just make sure you save it in the correct form so that it can be imported by your data base program. In my case I saved it in Word as a "Text-only" file that was comma-delimited (with double-quotes around the data for each field).
[Note on how you clean your county file – Use your choice of programs to accomplish that goal, but beware that your early choices can create issues later, if you aren't careful. For example, I could import a tab-delimited county file directly into MS Access but Access will make certain assumptions about the type of data that is being imported – fields that always have numbers in them will be assumed to be integers and not text, for example. So, if you are importing into Access, you need to specify that all fields are text fields and not other data types (date and time, integer, floating, etc.) before or during the importation into Access. Access will not export the data later to a workable CSV file if the fields are not defined as text going in.]
5. Massage/Parse the clean local data file. Once you have loaded your local data into your personal database manipulation program you can start optimizing it for use by Advokit. This is where you will make the changes you planned for at the end of Step 3, previously. So, go in – split the birthdates into three fields, makes adjustments to the party affiliation codes, etc. This is the step where you will be able to add some real value to the county data by good parsing or concantation, etc. If you plan to add additional fields of data, this is the time to do it. In my Dbase case I saved my successful command lines in a file. I was able to then turn this file into a Dbase program script. So, the next time I need to massage the county file I'll be able to save much time by just running the Dbase program. If you use Access to do the local data work – be sure that you end up with all of the data in text fields – otherwise you will not end up with a usable CSV file.
[Note on the CSV standard – the standard calls for each field of data to be separated from the next field with a comma. If the data within the field is text data it is supposed to be surrounded by double quotes. If it is integer data there are no double quotes around the data. Here's the rub – The Advokit import utility wants to receive all of the data as text, regardless of its final disposition. So, a usable CSV file will be in the form of "field1data","field2data","field3data","field4data" etc. If you create a (perfectly legal) CSV file that looks like this: "field1data","field2data",field3data,"field4data" you will have problems (note that field3data is not surrounded by quotes because it was presumably an integer value). You need to be careful to export the data from your database program as all text with no integer, numeric, etc data types in it.]
6. Do final preparations for loading the CSV file onto the server. Make sure that the first record in the CSV file contains all of the field names in CSV format, i.e. "fieldname1","fieldname2","fieldname3", etc. Also, make sure that there are no extra carriage returns at the end of the last record – it may cause problems at the end of the import process. Load the CSV file onto the server. In my case I used a freeware FTP program to upload it into the appropriate directory (/voterfiles/). My file was 80 MB and this took about 45 minutes to upload to the server on my cable connection. It would have taken considerably longer on a dialup connection.
7. Download and alter the import.pl file Use your text file editor to include the information which may be unique to your situation- near the top of the file you will add appropriate information to the
lines. (Several of these parameters are unlikely to change. I.e. 'localhost', 3306, 'root' are examples of information that is not likely to change).
When you have completed editing the import.pl file – save it (it's a text file) and upload it to the server.
8. Mapping your data to the Advokit standard MySQL data. Log into Advokit as a Team Leader. This should have been set up previously from an administrative level. When you are logged in as a Team Leader you will see an option on the left menu bar to "Upload Voterfile". Take the link and follow your nose. You will first identify the CSV file that you uploaded to the server. When you click the "proceed" button you will be presented with a mapping utility. On the left side will be a list of all of the fieldnames from your CSV file. (Folks who have more fields will have a longer list.) This is when your knowledge about the Advokit fields will come in very handy. Using the selection lists in each column you can show the connection between specific fields in your CSV datafile and the fields that Advokit has arranged. When you are done you will click your way through (You'll have to confirm a check box along the way). This is also where you can add some custom fields if your CSV file has them in it. When you have completed the mapping process Advokit will have created a text file with the extension ".map" in the /voterfile/ directory where you previously had the CSV file and the import.pl file.
[Note on Mapping file: If you take a look at your map file you will see that all Advokit did was to create a CSV list of several columns – one column for each of the four tables and an extra one for the custom fields if you added them. Here's the first row of that file in my case:
"csv_column","respolis_column","residence_column","mailaddress_column","voter_column","custom_column"
what follows is a whole list of every field in the CSV file followed by the various Advokit fieldname(s) that correspond to that field in the order shown above. Thus, if you were a careful text editor of your mapping file, you could bypass the Mapping utility]
9. Time to Rock and Roll. All of the pieces are now in place to do the import itself. This is best done from the command line of the server by the server administrator due to permissions issues and server security policies which might interfere or make impossible your executing the command. It may be possible to arrange a Cron job to do this, if you have the appropriate permissions on the server. In our case we were on a shared hosting server with many other accounts. So, for simplicity, we emailed the system administrator and asked them to run the perl command from the server's command line. We gave them the exact command syntax to make it easier for them to just cut and paste the command onto their command line. The basic syntax is:
perl import.pl <mappingfilename.map> <csvfilename.csv>
(note the three spaces in this commandline)
In practice, the command can be quite long since it needs to have path information in it. Ours (ignore the wrapping, but not the spaces) was:
/usr/bin/perl /home/httpd/vhosts/ourdomain.org/aboverootdirectory/advokit/voterfiles/import.pl /home/httpd/vhosts/ourdomain.org/aboverootdirectory/voterfiles/SLOcsvTestSnippet060205.csv-2006-02-05-17-54-16.map /home/httpd/vhosts/ourdomain.org/aboverootdirectory/voterfiles/SLOvotersAll060206.csv
That's It! The import.pl script will do its thing and report what is/has happened on the system. This may take some time, so be patient. I am told that really long files can take some time to handle (ones in the hundreds of thousands of voter and up category) If all goes well you will be in business with voter data at that point. Our file had 150,000 records in it and it took about 50 minutes. (There were no complaints about how long it took from the system administrator, so we assume it was a background task. We also asked him to run it in the middle of the night)
10. Examine the results. When you have been notified of the outcome of the import.pl script, log on to the server and open phpMyAdmin where you can look at the data and all of the Advokit tables. You should see the same number of voters in the "_voters" table as your CSV file if this is your first upload. Note that the number of records in the "_residence" "_mailaddress" and "_respolis" tables will be a lesser number. This is because Advokit only stores one record in "_residence" for each house. Thus, because there are often several voters at the same address – that address will only appear once in the "_residence" table. Make sure the data is in the right places. Congratulations!
| Mailing Address Table from Advokit. One record per unique mailing address. Voters are linked to records in this table. Note that editing a mailing address record changes information for *all* voters who are linked to that mailing address. |
||||
| Field | Req'd Yes or No? | Size (in characters) | Explanation – what it is intended to be used for or very clear example of data that would go into the field | Default by Advokit? If empty, will import.pl automatically put a value in this field? If so what is it? |
| number | 11 | Numeric portion of a street address, e.g. ‘1552’. | Non-digit portions split out. E.g. "1A2B" becomes "12" (yes, this sucks) | |
| num_suffix | 10 | e.g. ‘ 1/2 ’, ‘A’, ‘-1’, etc. This is any non-numeric portion of a street address | Import.pl will split non-numeric portions of street addresses from the initial numeric portion, and put them into ‘number' and ‘num_suffix'. However you can map these fields directly to input fields, in which case import.pl will not automatically create ‘num-suffix' | |
| precompass | 10 | N, S, E etc | Prepended portion of street name indicating direction | |
| streetname | 30 | Elm | ||
| streettype | 20 | ST, Blvd, Road, etc | If not mapped from an input field, import.pl will attempt to split it out of the input street name field. Must match a street type in street types list in import script | |
| postcompass | 10 | N,S,E,W, SE, etc | Appended portion of street name indicating direction | |
| aptname | 10 | Building B | If an aptname is provided, it is written to this field. Otherwise if aptnum is provided, it is written here. If neither is provided, parsing of "line1" may populate this field. | |
| aptnum | 8 | 15 | If the aptname or aptnum contains non-digits, they are stripped out and the numeric characters are written to aptnum. If neither is provided, parsing of "line1" may populate this field. | |
| line1 | 40 | Concatenated address, line one | If not mapped from an input field, import.pl will assemble from street address fields. If street address fields are not provided, import.pl will attempt to parse line1 to populate those fields. | |
| line2 | 40 | Optional second address line | ||
| city | 30 | New Orleans | ||
| state_id | 2 | CA, NY (use standard two-letter state abbreviations) | Must match item in state list in import script | |
| zip | 5 | Only first 5 zip numbers here | ||
| zipplus4 | no | 4 | Only last 4 zip+4 numbers here | |
| county_id | 11 | You can put longer here Advokit will change to its own code | There is a bug in import.pl that requires a county_id to be included during import. You can put in whatever you want. | |
| Residence Table from Advokit. One record per unique residence address. Voters are linked to records in this table. Note that editing an existing residence record changes residence information for *all* voters who are linked to that address. |
||||
| Field | Req'd Yes or No? | Size (in characters) | Explanation – what it is intended to be used for or very clear example of data that would go into the field | Default by Advokit? If empty, will import.pl automatically put a value in this field? If so what is it? |
| number | yes | 11 | Numeric portion of a street address, e.g. ‘1552’. | Non-digit portions split out. E.g. "1A2B" becomes "12" (yes, this sucks) |
| num_suffix | no | 10 | e.g. ‘ 1/2 ’, ‘A’, ‘-1’, etc. This is any non-numeric portion of a street address | Import.pl will split non-numeric portions of street addresses from the initial numeric portion, and put them into ‘number’ and ‘num_suffix’. However you can map these fields directly to input fields, in which case import.pl will not automatically create ‘num-suffix’ |
| precompass | no | 10 | N, S, E etc | Prepended portion of street name indicating direction |
| streetname | yes | 30 | Elm | |
| streettype | no | 20 | ST, Blvd, Road, etc | If not mapped from an input field, import.pl will attempt to split it out of the input street name field. Must match a street type in street types list in import script |
| postcompass | no | 10 | N,S,E,W, SE, etc | Appended portion of street name indicating direction |
| aptname | no | 10 | Building B | If an aptname is provided, it is written to this field. Otherwise if aptnum is provided, it is written here. If neither is provided, parsing of "line1" may populate this field. |
| aptnum | no | 8 | 15 | If the aptname or aptnum contains non-digits, they are stripped out and the numeric characters are written to aptnum. If neither is provided, parsing of "line1" may populate this field. |
| line1 | no | 40 | Concatenated address, line one | If not mapped from an input field, import.pl will assemble from street address fields. If street address fields are not provided, import.pl will attempt to parse line1 to populate those fields. |
| line2 | no | 40 | Optional second address line | |
| city | yes | 30 | New Orleans | |
| state_id | yes | 2 | CA, NY (use standard two-letter state abbreviations) | Must match item in state list in import script |
| zip | yes | 5 | Only first 5 zip numbers here | |
| zipplus4 | no | 4 | Only last 4 zip+4 numbers here | |
| county_id | yes | 11 | You can put longer here Advokit will change to its own code | There is a bug in import.p that requires a county_id to be included during import. You can put in whatever you want if you do not have county data. |
| latitude | no | FLOAT | ||
| longitude | no | FLOAT | ||
| Respolis Table from Advokit. This table stores “political address” information. Import.pl will create one respolis record per unique “political address”. Voters are linked to records in this table. Note that editing an existing respolis record changes respolis information for *all* voters who are linked to that record. |
||||
| Field | Req'd Yes or No? | Size (in characters) | Explanation – what it is intended to be used for or very clear example of data that would go into the field | Default by Advokit? If empty, will import.pl automatically put a value in this field? If so what is it? |
| ward_number | no | 20 | If you have wards, use it. If not, ignore. If you have supervisorial district data put it here. | |
| precinct_number | no | 20 | If you have precincts, parishes, etc. that are identified numerically, use this field. | Import.pl will create a single record for each precinct number or name |
| precinct_name | no | 50 | If you have precincts, parishes, etc. that are not identified numerically, use this field. | If you have precinct "portions" make sure names reflect them or the portions will be ignored during import, ie. Use "AG001_A" and "AG001_B" instead of just "AG001" |
| us_rep_district | no | 20 | US Congressional district | |
| us_sen_district | no | 20 | Ignore (or use for your own purposes) | |
| st_rep_district | no | 20 | State representative district | |
| st_sen_district | no | 20 | State Senate district | |
| census_tract | no | 20 | Geographic designation from the US Census | |
| census_block | no | 20 | Geographic designation from the US Census | |
| Voter table from advokit. One voter record per voter. Note that residence address, mailing address, and “political address” (respolis) are extracted into other tables by import.pl. |
||||
| Field | Req'd Yes or No? | Size (in characters) | Explanation – what it is intended to be used for or very clear example of data that would go into the field | Default by Advokit? If empty, will Advokit automatically put a value in this field? If so what is it? Comments |
| instance_code | no | 11 | This is meant to support multiple campaigns and voter files – it can be ignored. Designates source of data from which this import comes | |
| instance_area | no | 10 | This is meant to support multiple campaigns and voter files – it can be ignored. | |
| salutation | no | 10 | Mr,Mrs,Ms, etc. | |
| nickname | no | 15 | e.g. Bob | copy of firstname |
| firstname | yes | 15 | e.g. “Robert”(for “Robert L. Smith”) | |
| middle_initial | no | 1 | e.g. “L” (for “Robert L. Smith”) | |
| lastname | yes | 35 | “Smith” (for “Robert L. Smith”) | |
| suffix | no | 10 | Jr., Sr. III, etc. | |
| birth_year | yes* | 4 | Year of birth, e.g. 1946 | |
| birth_month | yes* | 2 | 08 (two digits) | |
| birth_dom | yes* | 2 | Day of the month, e.g. if the birth date is May 31st, then this field would have “31” | *date of birth is used to display age – it is not strictly required |
| birthdate | no | Datetime | There is currently a bug in import.pl – the best approach is to provide birth_year, birth_month, and birth_dom. Leave birthdate unmapped.import.pl will then create birthdate correctly. | Import.pl will calculate this from birth_year, birth_month, and birth_dom |
| confidence_level | no | 1 | This is meant to allow you to indicate your confidence that the information in this voter record is accurate. | |
| gender | no | 1 | ‘M’, ‘F’, or ‘U’. | ‘U’ is the default |
| occupation | no | 20 | E.g. stone mason | |
| citizenship | no | 2 | Use ISO 3166-1two-letter country codes (a list can be found here: http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html) | ‘US’ is the default |
| is_registered | no | 1 | Is the person registered to vote? Y or N ? | ‘N’ |
| registeredon | no | Datetime | Date of voter registration. Format as (e.g.) ‘2006-01-31’ | |
| can_vote | no | 1 | Not clearly defined – intended to indicate whether or not the person will be able to vote. ‘Y’, ‘N’, ‘U’ | |
| will_vote | no | 1 | Not clearly defined – intended to indicate whether or not the person plans to vote. ‘Y’, ‘N’, ‘U’ | |
| absentee | no | 1 | . ‘Y’, ‘N’, ‘U’ – is this person an absentee voter? | ‘N’ |
| party_affiliation | no | 1 | Single character identifying political party affiliation. E.g. ‘D’, ‘R’ | Note:Check your local data before importing and convert to single unique character for each party or you'll end up with both "DEM" and "DTS" (declined to state) as "D" |
| ph_home | no | 12 | Home phone number. No required format, but use consistently (e.g. ###-###-####) to enable e.g. filtering by area code (e.g. ph_home like ‘212-%’) Assumed 7 or 10 digits | Adds dashes at 3-digit intervals |
| ph_office | no | 12 | Office phone number Assumed 7 or 10 digits | Adds dashes at 3-digit intervals |
| ph_mobile | no | 12 | Cell phone number Assumed 7 or 10 digits | Adds dashes at 3-digit intervals |
| no | 30 | Primary email address | ||
| alt_email | no | 30 | Alternate email address | |
| imid | no | 20 | Instant messaging identity/screen name | |
| imtype_id | no | 11 | Associated instant messaging service (e.g. ‘AOL’) type, must match record in imtypes table | |
| alt_imid | no | 20 | Second instant messaging identity/screen name | |
| alt_imtype_id | no | 11 | alternate instant messaging service (e.g. ‘MSN’) type, must match record in imtypes table | |
| uploaded | no | 1 | Originally intended to indicate if the voter record was created by voterfile upload, or entered interactively. Y or N | Set internally to indicate whether data was entered through advokit |
| notes | no | TEXT | Whatever you want can go in here. | |
Documentation needed*:
* Please comment regarding what documentation you feel is needed. If you have developed any documentation, please post a comment here describing what you have and, preferably, a link to it. Thanks!