MobilizeAmerica ActionKit Integration

Configuration options for the MobilizeAmerica-to-ActionKit integration, how to set up the integration, and ActionKit field mappings

Updated over a week ago

MobilizeAmerica provides two configuration options for the ActionKit integration:

  1. The first is the “CRM”-style integration, which syncs your owned events and signups, as well as the signups you have recruited to events that you promote

  2. The second is the “distributed send”-style integration, which syncs all owned and promoted events from Mobilize to ActionKit, but no signup data. Use this if you primarily use ActionKit for event recruitment and marketing campaigns.

Each configuration makes use of a single ActionKit event campaign, and uses one or more ActionKit pages within the event campaign to create the relevant data. You can set up your ActionKit integration with one or both configurations, but each configuration must use its own separate event campaign.

----

To set up the integration, we will need:

Additionally, for a CRM-style event campaign, we'll need:

  • The event create page short name. (You can find this by going to the campaign page in ActionKit -> click edit under event creation -> short name; see screenshot below)

  • The signup create page short name. (You can find this by going to the campaign page in ActionKit -> click edit under event signup -> short name; see screenshot below.)

Additionally, for a "Distributed Send"-style event campaign, we'll need:

  • The event create page short name. (You can find this by going to the campaign page in ActionKit -> click edit under event creation -> short name; see screenshot below)

The short names can be found in the Event Campaign Dashboard in ActionKit, shown below:



=============

"CRM"-style Integration details

The "CRM"-style integration option syncs all event and signup data for all your events, as well as any signups that you recruit to events that your organization promotes.

Data synced

  1. Mobilize signup → ActionKit EventSignup. For promoted events, you will only see the signups that you have recruited to the event.

  2. Mobilize person/volunteer → ActionKit User

  3. Volunteer phone numbers: The phone number associated with the Mobilize person/volunteer will sync with a "source" name of mobilizeamerica_sync and a "type" of "Home". If there are no phones with our source name, we will try to match an existing phone on the ActionKit User with the same number, otherwise we will create a new phone record or update an existing mobilizeamerica_sync  phone record.

  4. Mobilize dashboard user → ActionKit User. This includes organizers, hosts, and trusted hosts.

  5. Mobilize event timeslots → ActionKit Event, for owned events and promoted events to which you’ve driven at least one signup. If a Mobilize event has 2+ timeslots (a.k.a. shifts), we create a new ActionKit event per shift time. 


Masking

Some event and shift-level data can be hidden because of the Independent Expenditure/Coordinated firewall. 

Masking is applied when you promote an organization across the firewall in Mobilize, and it works in the following way:

  • For signups that you recruit to a promoted event, we will create a masked representation of that promoted event in your ActionKit and sync masked representations of the signups to that event. Details that remain preserved on the event model are date/time and event type. Details that remain preserved on the signup model are first name, last name, phone number, email, and zip code. 

Masking is also applied when an organization across the firewall promotes your events, and it works in the following way:

  • Signups that are recruited to your event by a promoting organization will include all details, except we will mask which organization recruited the signup (by masking the mobilize_signup_source field)

=============

"Distributed send"-style Integration details

Syncs event details for events that you own and events that you promote, but no signup details. Intended for digital teams recruiting to owned and promoted events to supporters.

Data synced

  1. Mobilize event timeslots → ActionKit Event

  2. All owned and promoted events

  3. If a Mobilize event has 2+ timeslots (a.k.a. shifts), we create a new ActionKit event per shift time

Masking

We don’t apply any IE/Coordinated firewall masking in this case, since no signup-level data is synced.

=============

Mobilize-specific features in ActionKit

To account for behavior around syncing certain Mobilize data that don’t have first-class representations in ActionKit, we will be syncing them with the following behavior:

Mobilize Virtual Events:

  • Since ActionKit doesn't support virtual events first-class and requires a location, we will use Puerto Natales, Chile when syncing the location of any virtual events that do not have a location in Mobilize. This location was selected because it is far away from any locations where events can be created in Mobilize.

  • Virtual events with locations will be synced to ActionKit with the same location fields as an in-person event, and the custom event field "is_virtual_event" will be set to 'Yes'

Masked events and signups:

  • For firewall-ed data, certain fields will be given the value ‘Masked’, to prevent coordination

  • Location fields will be set to Puerto Natales, Chile (same as virtual events)

Accessibility information:

  • This is currently only recorded for in-person events. If the accessibility_status is set on the Event, we will sync it in human-readable format to the note_to_attendees field along with the accessibility_notes if present.

Private events & addresses:

  • If an event's address is marked as private by an organizer or volunteer host, Address Line 1 will read 'Address provided upon RSVP'

=============

Mobilize-to-ActionKit Field Mapping

The data synced in each integration is largely similar to what we provide in our API, except mapped to the relevant ActionKit fields. Where data exists in Mobilize but doesn't have a clear equivalent in ActionKit, we use Custom Fields.

Since ActionKit requires that the type of these custom field values be string, where a field holds boolean data, a true boolean value will be written as "Yes" and a false boolean value will be written as "No".

--------------------

ActionKit Events

--------------------

ActionKit Events: Native Fields
--------------------

actionkit_email: For signups, the email the user provided at signup. For events, a placeholder of [email protected].

page: The value stored in  the ActionkitConfig for event_create_page_name  

address1: For in-person events, line 1 of the Mobilize event location address. If the address is marked as private, this will be 'Address provided upon RSVP'

address2: For in-person events, line 2 of the Mobilize event location address

is_private: True if the Mobilize event is private

city: For in-person events and virtual events with a location, the city of the Mobilize event location. For virtual events without locations, 'Puerto Natales'

state: For in-person events, the state of the Mobilize event location.

zip: For in-person events, the zip code of the Mobilize event location.

country: For in-person events and virtual events with a location, the country of the Mobilize event location. For U.S. territories, this will be display name of the territory (e.g., “Puerto Rico”). For virtual events without a location, this will be 'Chile'.

public_description: The Mobilize public event description

starts_at_ampm: am/pm portion of the start time of the event or timeslot

starts_at_date: formatted start date of the event or timeslot

starts_at_time: formatted start time of the event or timeslot

status: 'active' or 'deleted' if the timeslot was deleted

title: The title of the Mobilize event

venue: The name of the venue if specified for the Mobilize event location

max_attendees: The maximum capacity for the Mobilize event or timeslot.

note_to_attendees:  Private details for the Mobilize event, if present. For in-person events, if the accessibility status is set on the Event, we append it to this field in human-readable format along with any accessibility notes.

Additional fields we set for ActionKit validation purposes:

            'host_ground_rules': 1,
            'host_requirements': 1,
            'host_is_confirmed': 1,

--------------------
ActionKit Events: Custom fields
--------------------

link_to_event_information (string): link to mobilize signup page

event_type (string): One of the following values:

  • Canvass

  • Phone Bank

  • Text Bank

  • Meeting

  • Community Event

  • Fundraiser

  • Meet-and-Greet

  • House Party

  • Voter Registration

  • Training

  • Friend-to-Friend Outreach

  • Contact Your Representative

  • Debate Watch Party

  • Other

shift_times (string): newline-separated list of times, for example:

 [start, end]
 [start, end]
 
 e.g. [2018-07-29T22:00:00-04:00, 2018-07-29T23:00:00-04:00]

 [2018-07-29T22:00:00-04:00, 2018-07-29T23:00:00-04:00]

Note: this is only available for the "distributed send" style integration

is_virtual_event (string): 'Yes' if the event is virtual, otherwise, 'No'

mobilize_timeslot (string): shift time in the format [start, end]  e.g.[2018-07-29T22:00:00-04:00, 2018-07-29T23:00:00-04:00] 

mobilize_id (string): The Mobilize Event ID, applied across ActionKit events in the same recurring series

[deprecated] host_name (string): Name of the organization hosting the event (note: use the event_owning_organization field moving forward)

event_owning_organization (string): Name of the organization hosting the event

host_first_name (string): First name of the event host

host_last_name (string): Last name of the event host

event_contact_email (string): Email of the event host

event_contact_number (string): Phone number of the event host

shift_is_full (string): ‘Yes’ if the number of signups have reached full capacity, ‘No’ if not

created_by_volunteer_host (string):  ‘Yes’ if the event was created by a volunteer host or trusted host; 'No’ if the event was created by an admin or an organizer

accessibility_notes (string): The event creator’s additional details about the event venue’s accommodations for participants who may require them under Americans with Disabilities Act (ADA).

accessibility_status (string): The event creator’s reporting of whether or not the event’s venue meets the standards of compliance for the Americans With Disabilities Act (ADA). This is currently only recorded for in-person events: 'Yes’, ‘No’, ‘Unknown’, or null

mobilize_event_campaign_id: The id of the Mobilize event campaign the event was created from, if it was created as part of a Mobilize event campaign. If the event was not created as part of a Mobilize event campaign, the field is null.

mobilize_event_campaign_slug: The slug of the Mobilize event campaign the event was created from, if it was created as part of a Mobilize event campaign. If the event was not created as part of a Mobilize event campaign, the field is null.

--------------------

ActionKit Event Signups

--------------------

ActionKit Signups: Native fields
--------------------

page: The value stored in  the ActionkitConfig for event_signup_page_name  

email: The email used at signup on Mobilize

event_id: The ActionKit event ID associated with the event/timeslot the user signed up for

attended: True if the participation has been marked as completed in Mobilize. False if the volunteer was marked as having missed the shift or if their attendance is unknown. If the signup is masked for firewall reasons, attended  will always be false, even if the volunteer attended the shift.

source: If a ?source=  parameter was included in the Mobilize event page URL at the time of signup, this will be set to the source value provided.

akid:  If an ?akid= parameter (the unique ID appended to links in ActionKit mailings) is available in the Mobilize event page URL at the time of signup, we will send this back to ActionKit with the signup, so you can associate the signup with a specific ActionKit mailing.

Additional fields we set for ActionKit validation purposes:

            'event_signup_ground_rules': '1'

--------------------
ActionKit signups: Custom fields
--------------------

mobilize_attendance_status (string): One of: “REGISTERED”, “CONFIRMED”, “CANCELLED”, “NO_SHOW”, or “ATTENDED” based on what an organizer in Mobilize or VAN marked the attendance status as or the self reported attendance from a volunteer who responded to the post-shift email/sms. Status remains “REGISTERED”, “CONFIRMED” if attendance is unknown. 

[deprecated] van_attendance_status (string): One of: 'None', ‘True’, or ‘False’ based on only what an organizer in VAN marked the attendance status as. (Note: Use the mobilize_attendance_status field or attended field moving forward)

mobilize_participation_status (string): One of: 'REGISTERED', ‘CANCELLED’, or ‘CONFIRMED’ Based on the status for the volunteer before the event started

mobilize_signup_source (string): Name of the organization that recruited the signup. Will be masked for signups recruited by promoters across the firewall.

created_by_volunteer_host (string): ‘Yes’ if the event was created by a volunteer host or trusted host; ‘No’ if the event was created by an admin or an organizer

utm_[content|term|campaign|medium|source] (string): The value of each utm parameter available at the time of signup on Mobilize. Signups that result from users being linked to a feed or a signup page with utm params in the url will reflect these params in the corresponding actionkit custom fields. Limited to 100 chars each.

referrer (string): If the user follows a link to a feed or a signup page (and the link allows referrers - not all do), and then proceeds to sign up for a shift, this will contain the URL of the page they were previously on. Limited to 1000 chars.

mobilize_rating (string): One of: 'Positive' or 'Negative', the overall rating that the volunteer provided for the shift.

mobilize_feedback (string): Feedback that the volunteer wrote about the shift.

mobilize_timeslot (string): shift time in the format [start, end]  e.g.[2018-07-29T22:00:00-04:00, 2018-07-29T23:00:00-04:00] 

mobilize_timeslot_start (string): shift start time in the format 2018-07-29T22:00:00-04:00

mobilize_timeslot_end (string): shift end time in the format: 2018-07-29T23:00:00-04:00  

mobilize_override_start (string): For virtual events where the volunteer can specify a time to take the action, the start time in the format: 2018-07-29T22:00:00-04:00  

mobilize_override_end (string): For virtual events where the volunteer can specify a time to take the action, the end time in the format: 2018-07-29T23:00:00-04:00  

[deprecated] event host type


Did this answer your question?