Release Email Archive

The night before each release of new features and bug fixes we send an email to our client list. You can request to be added to the release notes list.

Following is an archive of these emails.


Virtual Events

The events system now has support for creating campaigns for events that will be held online, by phone, or in other "virtual" settings. Campaigns will continue to default to hosting only on-site in-person events, but you can change them to support only virtual events or a mix of both.

Virtual events can be organized either for a local area or on a global basis. Local virtual events show up on an event map, but don't list a specific street address, while global events don't appear on maps and only show up in event listings.

For both types of virtual events, hosts are prompted to specify the conference hosting platform instead of an event venue, and to provide attendees with connection or dial-in directions rather than driving directions.

These changes appear in the Original templateset and will be merged into your templates where possible. If your event templates are heavily customized, you will need to incorporate the relevant changes before you can use these new capabilities.

EveryAction Integration

This release includes the first version of our EveryAction integration, which ships users and one-time donations to EveryAction.

Like the SalesForce integration, reports control which users and donations are synced.

You can edit the field mappings to control what data is synced and where it appears in EveryAction.

Spam Check

The Honeypot spam check has been replaced with a more reliable check that uses the Akismet service. Action details including IP address, user agent, referer and more are evaluated by Akismet and the action gets an up/down on whether it's spam or not.

The Honeypot check has been disabled. The Akismet check has been enabled for clients that were using the Honeypot.

Spam checks can be configured from the CONFIG page.


  • For petitions with large numbers of signatures (>500k), attempts to deliver CSV files showed an error about not being able to generate PDFs. While PDFs are still limited, CSV files are not and we have changed the error to reflect this. Thanks to Leonard and Tara at Color of Change and Zoe from Middle Seat working for ActionPac for reporting.
  • We fixed an unexpected error from the REST API for PATCH requests on certain page types. Thank you to Patrick Hensley with NRDC for reporting this to us.
  • REST API searches using custom fields should work more intuitively now. Previously, using field__name=x&field__value=y in API searches could return records where one custom field had the name 'x' and a different custom field had the value 'y'. Now we return only records where custom field 'x' has value 'y'.
  • REST API requests can now filter on action source. Thanks to Third Bear working for FCNL for this request and the one proceeding.


Release Notes

ActBlue by candidate breakdown

When recurring donations were broken out by candidate, ActionKit and ActBlue data could get out of sync if the amount per candidate was updated. To account for this, we've added columns to the core_actbluetransactiondetail table: amount, currency, amount_converted and candidate. Now, updates to recurring donation amount per candidate will be reflected in ActionKit. We'll be backfilling the data over the next few days. Thanks to a detailed explanation from Ethan at Third Bear, reporting on behalf of several clients.


This release includes a couple more QuickDonate improvements:

  • Fixed a bug that let staff log in as donors by following one-click links in mailings.
  • Fixed a bug where the ActionKit form could briefly be visible after landing on a QuickDonate donation page.
  • QuickDonate forms now use the default amount set for their ActionKit page.


  • We added a line to the User Donation History Page noting the mailing that prompted a donation. Thanks to Halley at for the request!
  • If you begin running a report, then navigate away or close the tab without emailing the report, we will stop the report since nobody would see the results.
  • We corrected how recurring first payment date is computed for recurring orders with a start date in the future. This affects the display on the admin recurring start interface and snippets. We also changed the user update recurring_info.html template to use this method for First Payment, instead of the create date of the recurring order.
  • You can now load event search results with a different templateset using {% verbatim %}&template_set={% endverbatim %}.
  • We fixed an issue with event search by state name that was causing past events to display. Thanks to Lee @ Everytown for letting us know about this problem.
  • We also fixed a bug with viewing events by year in the admin UI. Thanks to Jackie at Third Bear working for AOC for the report.
  • Previously, the timed send validation report on the haiku/confirmation screen could sometimes fail if database replication was behind. That's been fixed, thanks to Nathan at Faithful America for flagging.


Release Notes

Fix for incorrect next_payment dates for Braintree recurring donations

We fixed an issue for Braintree recurring donations that were configured to use a plan billing on a fixed day of the month. These recurring donations had an incorrect start date, and would therefore return the wrong date for next_payment_date. Going forward, the recurring start date and computed next_payment_date should be correct.

After this release goes out, we will run a job to correct the recurring start date of any existing profiles affected by this issue over the next few days. Thanks for Chris from 350 for flagging the discrepancy.

Record of templateset changes

When we make changes to the Original templateset, we automatically apply those changes to your templatesets if we can. But if your templatesets are heavily customized or you're using our GitHub integration, we often can't apply those changes; you need to make them manually in order to get the latest bugfixes or features. To help you make these changes on your own, we've added a section to our documentation with every change we've made to the Original templateset since we re-released it in October 2016. Thanks to Suzi at 350 and Mark working for UV, among others, for the request.

Quick Donate

We're continuing work on supporting one-click donations using the combined EveryAction/BSD pool of saved credit cards, including adding an option you can use to customize the text of oneclick donation links. Pass a "text" parameter: {% verbatim %}{% quickdonate_buttons text="Chip in now:" %}{% endverbatim %}


* You can now restrict event email targeting to users who are in the same (US) county as an event. You'll see a new "Same County Only" option on the mailing Targeting screen:

Checking this box will also check 'Same State Only'; unchecking 'Same State Only' will also uncheck 'Same County Only'. Thanks to Bianca from the Bernie campaign for the request.

* We now order tags by name alphabetically when you are selecting a tag for the mailing and selecting recipients by tag. This should help address a problem Dream Corps ran into with finding a "parent" tag when they had many "child" tags starting with the same letters.

* We fixed an issue where the Salesforce sync could fail when mapping to a Salesforce field of type Date. Thanks to Shawn@JStreet for flagging the issue.

* We fixed a bug where updates made to custom action field labels set in Customize Fields sometimes weren't visible on pages. Thanks to Virginia working for the Pressley campaign for reporting.

* We fixed a bug with erasing users where selecting the option to erase confirmation mailings errored if the user also had been sent other types of transactional mailings. Sandra at MoveOn helped us find this obscure one!

* The mailing snippets {% verbatim %}{{ donations.most_recent_all }} {% endverbatim %} and {% verbatim %}{{ donations.most_recent_date_all }}{% endverbatim %} (which show the most recent donation) now show a recurring donation's most recent payment, rather than when the recurring order was originally set up. Thanks for LJ from First Look for raising the issue.

* We've added snippets for a page's advocacy targets to the snippets menu for confirmation mailings. Thanks to Ben at JStreet and Robert at Demand Progress for the requests.


Release Notes

  • We upgraded the version of jQuery used by ActionKit admin pages. Note that your templatesets are not impacted by this change.
  • We optimized the donation-related queries generated by the query builder. Many newly-built donations queries should run even more quickly than previously.
  • Changing a target group did not force rebuilds for mailings that target constituents of the group. We fixed this! Thanks to Michael at First Look for reporting this issue.
  • If you tried to stop an automatic subject line test, but the test mailing had already finished sending, the winning subject would be sent anyway. We have now fixed this so that clicking stop on a test mailing always stops the test. Thanks to Keith at PCCC for the report.
  • We added an option to delete Salesforce mappings when merging users. This prevents merged users from creating duplicate contacts in Salesforce.
  • When building a donations query report, you can now display or filter on the user's federal or state legislative district.

    Thanks to Shawn at JStreet for the requesting both of these changes.


Release Notes

Event permissions change: You may need to adjust staff permissions today

We've separated Events permissions completely from Pages permissions, so if you have staff members that should only have access to Events, you no longer need to give them Pages permissions for them to be able to edit their events.

Similarly, if you have staff who manage pages but you don't want them to be able to manage events, you can give them only Pages permissions and they will no longer be able to edit or manage events.

Staff-users permission removed

To create new staff users and assign permissions, you need to be a superuser.

Custom user fields have a timestamp and action

We've added a field for the last time a custom user field has been updated, as well as the associated action, if there is one.

You can view these new fields in the core_userfield table as shown below (remember, the parent_id is the same as the user_id):

Thanks to Jase at 350 for requesting this feature!

Reporting replica delay notification

When you run a report from the ActionKit admin, it is run against our secondary ("replica") database for performance reasons. Occasionally, the replica falls behind. When this happens, recent actions don't show up in your reports until it catches up to the primary database.

Your data is safe and properly recorded, but it looks like data is missing, because there's no recent activity. That can be confusing and scary!

Now, we'll show you the time your report ran:


  • If you have auto excludes set up, and your mailing's auto exclude date does not match its local time zone timed send date, we'll show a warning.
  • An old Salesforce sync failure was sometimes reported on the User History page, even if there was a more recent successful sync. This has been fixed. Thanks to Shawn at J Street for flagging the outdated message.
  • We already check for duplicates when syncing donations to Salesforce. With this release, we've added a similar check for donations coming from Salesforce. If a transaction/recurring donation is received from SF that already exists in AK, a mapping is added but no new donations created in AK. Thanks to Chris at 350 for the report that prompted this.
  • We fixed a problem where if you tried to edit the details of a past event, you'd get an error on the form even though your changes would be saved. Now you can edit past events as needed.
  • We got rid of the confusing custom target group "US Governors" that we added years ago as an example, since the data was neither complete nor correct. We also eliminated related duplicates. Thanks to Conen at Progress Now for reporting the dupes.
  • We improved the performance of the mailing tab for folks with lots of mailings. If you found these pages slow in previous releases, give them another whirl!
  • We fixed a bug with A/B tests that caused optimization to stop working if it ran into stats that it didn't expect (like if your page had more actions than views). Thanks to Nathan at Faithful America for finding this one!
  • We added a note to the Communicating with Congress section of the user guide clarifying that it may take up to an hour for signatures to be delivered to the CWC system.
  • We've improved the error messages for donors whose donations fail due to AVS errors from Braintree. We've mapped error codes to new messages and added specific message about missing street or postal code.


Release Notes

We're expanding the beta integration with FastAction to include one-time donations on ActionKit donation pages. The FastAction/QuickDonate pool has millions of cookie-based saved profiles, and once a logged-in donor reaches your donation page, they can quickly donate without having to enter their personal or payment information.

On pages that use a FastAction account, the usual user form is replaced with an embedded QuickDonate form which can be styled to match the rest of your page.

We plan to add support for recurring donations in the future.

As part of the release we'll update the Original templateset and attempt to patch your customized templatesets. If we're not able to apply the two patches, you can apply them yourself:

Before the opening of the "content" block:

{% block body_extra_classes }}
{% if page.payment_processor_information.is_quickdonate %}
{% endif %}
{{ block.super }}
{{ endblock }}

After the end of the "content" block:

{% block below_form }}
{% if page.payment_processor_information.is_quickdonate }}
{% load_quickdonate %}
{% endif %}
{% block.super %}
{% endblock %}

If you’re interested in beta testing, please get in touch!

Use custom event fields to target mailings and filter using {% templatetag openblock %} withevents {% templatetag closeblock %}

You can now limit the events included in your mailing (using the “New” snippets) and target your mailings by the value in a custom event field. You can also limit the events returned using "withevents" and a new parameter.

You might use this if you have an event campaign that includes several types of events, differentiated by custom fields, like house party or rally. Until now, mailing users about only one of these types of events has been difficult, requiring a combination of custom targeting queries and mailing template code.

Now the mailing targeting screen includes an option under "event campaigns" that allows you to select custom fields used by your events and specify the values you want to match in those fields.

To match any one of several values, separate them with a comma or semicolon.

Your selection here works with the “New” snippets under “Events” just like other event campaigns targeting criteria. The snippets will only display events that match the selections you make in this section.

This capability is also available for mailings which use the {% withevents %} tag. Specify a custom event field by including a parameter like "rally" as event_field.activity to only match events whose activity custom field is set to rally. For example:

{% withevents with user as nearby_user 'my_cool_event_campaign' as campaign 30 as radius 1 as limit 'rally' as event_field.activity %}

To match any of several values, use the format "rally;march" as event_field.activity.

Thanks to the multiple clients who have articulated the use case for this feature, particularly Kenneth at Middle Seat working for Beto and several other clients.

View all events

A new link on the event campaign page, "All events for all campaigns", can be used to view all events across all campaigns. Again, thanks to Kenneth for suggesting!

Easy access to past and upcoming events for host

User account tools now includes a section with a user's Upcoming Events and Past Events, with links to their host tools page or attendee tools page as appropriate. Thanks to Jon for the Bernie campaign, among others, for the suggestion.

More Events

  • If a report takes an event_id parameter, then full event details will be available via an event object, e.g. {% event.starts_at_utc %}, as seen with user_id and {% user %}
  • Line breaks in the event description, note to attendees, or directions will now be displayed to the end user, instead of being rudely ignored. This applies to the Event Details page, the Event Signup page, the Attendee Tools page, and the Host Tools page. If you do not see these changes, you may need to edit your templateset's wrapper.html to add the following CSS:
    .ak-event-description, .ak-event-note-to-attendees, .ak-event-directions { white-space: pre-line; }
  • The Original templateset better supports event campaigns that don't require host confirmation. For example, the text displayed to hosts after they’ve created an event and in their after action confirmation email has conditionals to account for this setting. We tried to apply these changes to your templatesets as well, but if you've customized yours heavily you may need to make these changes manually. See event_email_created.html and event_created.html in the Original templateset for the code to copy.
  • Also, if your event campaign requires hosts to confirm their email but your Event Create page doesn't have a confirmation email set up, we'll remind you to set it up.


  • Proof mailings now show the expected send count in the subject line, just like final mailing notices. Thanks to Michael at the Bernie campaign for the request.
  • We fixed a grammatical error and clarified some language around when you can pick a winning email or subject line. Thanks to Sue Anne at MomsRising for the report.


  • If one of your users marked an email as spam, they wouldn't be able to receive password reset emails, donation confirmation emails, or event host confirmation emails. Now they can. Thanks to Marie at NRDC for the most recent report of this problem.
  • We fixed an issue where recurring donation updates at Braintree were failing to pass address information for AVS fraud checks. Thanks to Marguerite at First Look for letting us know about the issue.
  • The immediate delivery subject is back where it should be, above the immediate delivery body on the Delivery screen; thanks to Joe at Everytown for the report.
  • Previously, it was difficult to turn off Communicating with Congress delivery even if you’d removed the US House as a target group for your page. Now we turn it off automatically in that case. Please note you'll still need to remove any user fields on the Edit Content screen that were added for CWC delivery (like prefix and street address ) if you don’t want them to be required.Thanks to Jessie at FCNL for reporting the problem
  • When setting up action notifications, you can now use commas, semicolons, or spaces to separate your To email addresses. Thanks to Beca from Everytown for the request.
  • More emojis! We added support for emoji in confirmation mailings, tell-a-friend emails, action notifications, and social sharing titles/descriptions.


Release Notes


Event Date Criteria In Mail Targeting

Clients with event campaigns that last for multiple weeks or months can now use date criteria on the mailing targeting screen to limit the audience to users near events in a certain time period.

For example, if you have events happening every weekend, you can easily target users who live within a few miles of next weekend's events only.

You'll find these options on the mailing targeting screen when you select event campaigns.

Those date options are also passed along internally as default values for the {% templatetag openblock %} withevents {% templatetag closeblock%} tag if you're using that mechanism.

Thanks to several clients for requesting this feature, including Jase for DFA, Chris and Scott at MoveOn, and Michael and Robin at the Bernie campaign.

Custom Dashboard Reports On Event Screens

We've added support for two new special reports you can use to display event-related information in the admin interface.

If you create a dashboard report named campaign_dash the results will be displayed on the Campaign Dashboard screen. This report receives {% templatetag openvariable %} campaign_id {% templatetag closevariable %} as a parameter.

Similarly, you can create a dashboard report named event_dash to be displayed on individual event detail screens, using the current event's {% templatetag openvariable %} campaign_name {% templatetag closevariable %} and {% templatetag openvariable %} event_id {% templatetag closevariable %} as parameters.

These join the pre-existing event_minidash which could already be used for a compact display of at-a-glance stats on event list screens in the admin UI.

All of these reports are standard dashboard reports that can be used to display any event related details. If you haven't taken the time to customize your dashboards, now is a good time and it's easier than you might think! Check out this video on how to create dashboard reports.

Extended Emoji Support For Event Fields

While ActionKit's Unicode support means that it generally supports characters from all languages, there are some fields which don't yet support so-called "four-byte" character codes used to record some extended emojis.

We've recently added support for these characters to several event fields, specifically the public description, "note to attendees," directions, and internal staff notes fields.

Blocking Event Creation

If you want to stop new events from being submitted for your event campaign, you can accomplish this by hiding its Event Creation page with a few small changes to your templateset.

Previously, hiding the Event Creation page would prevent hosts from viewing or changing existing events, but ActionKit can now distinguish between creating new events and editing existing ones. This change also applies to moderators or staff users acting as an event host.

We've attempted to patch existing templatesets, so you might find that hosts and staff users are now able to edit events when the Event Creation page is hidden. But, if you have customized your event templates, it's likely that you will need to edit your templates. If this is the case, make sure that your templateset reflects the Original templateset in its use of host_akid in the event_host_tools.html template and mod_akid in the event_moderate_tools.html template.

Hidden Event Pages

The Event Campaign Dashboard previously showed a blank row if you created an event page but then later hid it; we now show the hidden event pages so you can review them and make them visible again if needed.

Permissions for Event Pages

We've added permissions to the Events - Manage plus Campaigns group so that staff users can edit, hide, copy, and create event pages and campaigns with these permissions alone. You don't need the Pages permissions to do this anymore.

Fast Import for Custom User Fields

If you regularly import information about existing users as custom user fields, you'll love the new fast upload option!

Import pages have a new checkbox labeled "fast custom user-field upload."

As indicated, this option works if your upload only contains a user identifier and one or more custom user fields and only includes existing users. New users are not created; if your file includes new users those rows will fail and you'll be able to download a CSV of the failed rows. If your file includes other columns we will fall back to a standard import, unless you specify that we should skip the extra columns.

While the exact difference in performance will vary from case to case, it is generally five to ten times faster than normal imports.

This increase in speed is a result of bypassing a number of steps which are included in the normal upload procedure: no actions will be recorded, the user's updated_at timestamp is not modified, and no subscription changes are processed.

If you use this feature on a regular basis, there's a new option in the "Configure ActionKit" screen that allows superusers to turn this on by default.

The API also supports Fast Uploads with the user_fields_only parameter. Read more here.

Salesforce Settings History

When you update the Salesforce Global Settings screen, your changes are recorded and can be reviewed by clicking the History link in the top right corner of that screen. That log can be useful for pinning down when changes were made and identifying which member of your team is responsible.

Mailing Volume Warning

Internet service providers tend to view sudden spikes in mailing volume as indications of spam. To help avoid deliverability problems, we'll now display a warning if you target a mailing to send to a much larger audience than is usual for your instance. That warning encourages you to split the mailing up into multiple smaller mailings, spread out over several days, to help prevent damage to your sender reputation.

Assorted Fixes And Improvements

Trailing Slashes in Event URLs

If the Host Tools page's URL didn't end with a slash, the Edit Event Details and Cancel Event links would break. Now all the links work whether or not the URL ends with a slash. (If you still see broken links on your Host Tools page, you will need to update your templateset. See event_host_tools.html in the Original templateset for an example.)

We also fixed this problem for the Cancel Signup link on the Attendee Tools page. (If you still get a broken link when attempting to cancel your signup, you will need to update your templateset. See event_attendee_tools.html in the Original templateset for an example.)

Editing Targeting Reports While Mailings Are Sending

There have occasionally been problems in the past when someone edited and saved a query report just as a mailing that uses that report for targeting was in the middle of rebuilding its audience before sending. We've done some work to make this more robust and hopefully put the issue to rest. Thanks to Mitchell at Mothership for Turnout for reporting the details of a recent occurrence.

Fixed Links For Custom Field Definitions

If you created a custom field definition whose name contained an underscore, some links in the admin interface led to "not found" errors. Thanks to Benjy at Zazim and David at ONE for helping us track down which combination of circumstances triggered the problem.

Transactional Mailings Included In User Action History

When you click on a row in the admin screen for a user's action history, you'll see a summary of the confirmation mailing for that action. That display now also includes any other transactional mailings, such as admin notification emails and "in honor of" mailings. Thanks to Marie at NRDC for asking the question that inspired this feature.

ActBlue Refcodes Consistently Recognized As Action Sources

We fixed an issue with the ActBlue integration where certain specially-formatted refcodes were not recorded in the action source. Thanks to Ethan at Third Bear for PCCC for reporting.

Debugging Confirmation Messages With requires_value And Staff Account

If you use the {% templatetag openblock %} requires_value {% templatetag closeblock%} snippet in an after-action email, then sign the page with a staff user that would fail that check, you'll now get an error telling you that staff user did not have the required value, to help you in debugging your confirmation emails. Thanks to Ethan at Third Bear for for reporting.


One Click Donations

We are excited to announce native one-click donation support, thanks to our beta integration with FastAction. ActionKit clients can now can include instant donate links in ActionKit mailings and take advantage of the millions of saved payment credentials in the combined EveryAction and EA Digital Tools (formerly Blue State Tools) pool. When clicking an instant donate link recipients are charged immediately, helping you raise more money faster.

Snippets in the mailer allow you to insert a stack of suggested asks:

You can edit the appearance of the buttons or provide a single link:

If you're interested in helping to beta test this feature, please get in touch!

With the release of this feature, we're disabling Remember Me and our old Instant Donate system. If you have any pages set up with Remember Me, don't worry -- that option won't show up anymore but your pages will still work. If you'd like to participate in the new hotness, check out Cross-site Prefill which uses EveryAction's pool of millions of cookie-based saved profiles.


Event hosts don't have to confirm their emails

You can now turn off the requirement that event hosts confirm their email address on the Campaign Settings page. (It's still on by default).

If you uncheck this, you need to consider how the rest of the event creation flow will work for volunteer hosts. For example, you may still want to send an after action confirmation email to host so they have a link to their host tools. An example of this has been added to the documentation.

Also, remember, the default thank you page after event creation tells hosts to check their email to confirm their event. You will want to edit the event_created.html template if you aren't sending a confirmation email.

End user event search by state

When your users are searching for an event near them, if they type in a state abbreviation or name instead of city or zip, we'll display all events in the state.

Donations Query Builder Bug Fixes

  • We no longer generate incorrectly high results for payment "totals" display columns for recurring orders when you use them in combination with the "was paid" filter criteria. Thanks to Mais at Syria Campaign for reporting the issue.
  • If you used the "Users > Number of Payments" or "Users > Sum Of Payments" items and then supplied a date range, the date criteria were previously applied incorrectly.Thanks to Marguerite at First Look for letting us know about the problem.
  • Amount of Highest Payment filter and the User Donation History page erroneously included recurring transactions that had been refunded. Thanks to Bianca at the Bernie campaign for reporting.

Salesforce Sync Improvements

  • Salesforce-origin opportunities synced into ActionKit only had a date in the created_at field but the field in ActionKit requires a time. Previously this defaulted to midnight, causing issues with reports and the Donation History page showing the incorrect date after timezone conversion. Now we use noon instead of midnight, so your reports and the Donation History page will display the correct date in almost all cases.
  • When a recurring order that originated in Salesforce is synced to ActionKit, we now create a row in core_transaction with the "recurring_order_create" type. This fixed a problem where some reports, like the Page: Recurring Donations Created (used in the Page Drilldown Dashboard), would not show these recurring donations. We've also retroactively fixed this for all affected orders. Thanks to Michael at Firstlook for flagging this and the one above.
  • We now accommodate a corner case where the sync would fail if a donation didn't have an associated payment. Thanks to J Street for finding this one!


  • Signatures are NOT delivered to federal legislators via immediate delivery, so if your page ONLY targets federal legislators, immediate delivery is no longer displayed as an option. If you aren't targeting the US House, Communicating with Congress is not displayed. Thanks to Emily at the Justice Collaborative for the bug report and inspiration.

  • Previously, if you used the code or plain editor modes to add a <meta> tag to one of your HTML fields, and then toggled into the visual editor mode, your meta tag would be removed. Our WYSIWYG had strong opinions about those tags only appearing in the <head> section of the page, which is technically correct, but in practice most browsers allow these tags to in the body, so we have updated the visual editor to be more flexible. Thanks to Mitchell @ Mothership for Progressive Turnout for pointing this out and clearly articulating the case for changing this.
  • When browsing the admin interface in recent versions of Chrome, many select boxes, aka drop-down fields, had two sets of arrow icons near their right edge, as Chrome recently changed which experimental CSS attributes they supported. We now supply both the Mozilla and WebKit versions of these attributes and these fields have returned to their normal appearance. Thanks to Jase at 350 for reporting!
  • We're still killing those erroneous prompts about losing data when you save your changes. Aaron for Pollinis found this one when editing and then saving the order of custom page fields. Please help us stop this insidious and irritating error! If you see something, say something.


Timed Sends

  • Timed Sends and Test Groups have made up and will now work together. Thanks to Nathan at Faithful America and Annie at Indivisible for letting us know. You'll see a rough count and send time on the haiku screen and the Test Group screen includes a note about the timed send:

  • On the other hand, Rebuild at Send is not available with Timed Sends. The targeting set only rebuilds when the targeting changes or a rebuild is requested by a staff member. This was not clear in the UI so we will now remove the Rebuild checkbox if you've made the mailing a Timed Send (either with a merge query or by checking 'Local Time' on the Proof and Send screen). If you change the mailing back to a standard send, the 'Rebuild' checkbox reappears. Thanks to Vojtek at SumOfUs for reporting.

  • Max emails/secondMax emails/second no longer displays as an option for a Timed Send mailing.

  • We've improved the notifications you'll receive associated with a Timed Send mailing. You'll get an email letting you know that your Timed Send messages are being built and an email notifying you once all message have been sent.

  • And, we've made some clarifications in the admin UI, like adding "Timed Send" under the mailing subject on the Sent mailings list and starting a Timed Send mailing on the Scheduled list with the status changing from Generating to Waiting to Sending before the mailing moves to the Sent list once all messages are out.

New Optional Email Notification When Event Details Change

We've added a new email that will be sent to hosts and attendees of a particular event when certain details change (e.g. new location), if the host checks a box on the Edit Event page:

By default, the email looks like:

The text for this email lives in the event_email_details_changed.html template and can be edited there.

To enable use of this email, a small change needs to be made to your event_create.html template. We've patched this to templatesets that are still very similar to Original but most of your sets are customized so you'll need to apply the change described in the documentation manually.

Thank you to Tibet at Demand Progress and Hannah from Bernie for the request!


  • On the after-action notification creation screen, you'll see a list of pages that have the notification enabled. Thanks to Jase at 350 for the request.
  • We fixed a bug that caused merge queries to fail if they had SQL like:

    SELECT id AS "user_id"
    -- , "foo" AS "foo"
    FROM core_user

    That works as a report and with this release, is also recognized by merge queries. Thanks to Sean, Robin, and Joel at Bernie for helping us find this one!
  • The HTML code generated for embedding an ActionKit page on your website now automatically includes support for source codes. When you create a new embedded page from the Embed AJAX Signup screen then include a source parameter in your URL, the action recorded will include the source. Thanks to Atiya at 350 for the suggestion.
  • Clicking the submit button on the "upload user data" form multiple times could previously cause multiple upload jobs to be fired off in parallel. This change disables the submit button for a few seconds after it is clicked. Thanks to Sam at ActBlue for bringing this problem to our attention.
  • Type-to-search is now available for four pull-down menu fields on the mailing compose screen: from line, email wrapper, merge query, and merge file.
  • If you used the query builder to generate a report that included currency values, and displayed the results using a Google Table view, then clicked the column headers to sort the results, the contents sorted in alphabetical order ($100, $2, $30). We've changed this so they now show up in numeric order ($2, $30, $100), which is almost always what you actually intended. Thanks to Kenneth working for AOC for flagging the issue.
  • We fixed a bug where users in some parts of Arizona were getting the wrong timezone assigned. Thanks to Nicole from National Nurses United for reporting.
  • When using the query builder, timestamps displayed in "Numeric Date" format were showing up in the "Abbreviated" format -- and if you asked for the "Abbreviated" format you actually got the "Written Date" format. This has now been sorted out. Thanks to Andy at Yang 2020 for the report.


Events Improvements

When linking attendees to an event using the campaign name instead of a page name, we now always display a page that matches the language used to create the event. Previously some links defaulted to English.

We also added an option to find events by federal legislative district to the Advanced Search on the Event Campaign Dashboard.

This change makes it easier to assign turf to moderators based on CD using the approach outlined in our blog post on this topic.

ActBlue one time donations that become recurring are recorded as such

We've accounted for a case where ActBlue converts a one-time donation to monthly so we can correctly assign all related donations to a recurring profile in ActionKit. This will happen automagically in future. After this release we will clean up missed donations in this category as well. Thanks to Adam at MoveOn and Lee at Everytown for the examples.

When no result is the best result

If you've got reports that intentionally return an empty string if all is well, you may have noticed that these reports never seem to complete. Now they do! And why would you write such a report? Our master of the admin UI dashboard, Shannon Turner, created such a report to include in UltraViolet's pre-flight checklist mailing dashboard, which you may have seen at ClientCon. The report would return nothing if everything was in order and an error if something was missing. Thanks to Shannon for finding the bug as a client and fixing it as a Walker!

No more creating a second report with the info you need to make sure your mailer targeting report is finding the right users.

Mailer targeting queries can now return additional columns, after the user_id column. The additional columns are ignored by the mailer but they make the report easier to spot-check and reusable for a merge query or regular report.

Error messages about emojis with emojis!

If an end user tried to submit unsupported emojis on one of your forms, they would see:

"Sorry, we're having trouble handling your request at the moment. Please try again in a few minutes."

We've changed this message to accurately describe the problem, which will not be fixed by waiting a few minutes. Now they'll see something like this:

And it's translateable too:

Thanks to Maya at Indivisible for flagging the unclear message.

Better international geocoding

We completed the last step in our improvements to geo-coding for international users. We've re-geocoded all existing international users with an address and turned on Bing as the fallback to Open Cage for new or changed international geocoding.


  • We've improved the error messages you see if you create a dashboard report that fails. Instead of “Report failed”, we’ll display a more informative error if possible.
  • We now check for daily/weekly cached merge queries that are about to expire and rebuild them for recent mailings that use them, so that proofs and targeting builds don't have to wait on these to run. Previously we only did this for cached targeting queries. Thanks to Tim for Bernie for the report.
  • With this release, only superusers or staff with the Users permissions can merge user records.
  • Previously some mailings that were stopped or died did not have the finished_at field set; now they will. Thanks to Brandon at Mercy Corps for the report.
  • We've changed the ActionKit ID assigned to recurring payments in Salesforce that originated outside of ActionKit. Going forward, these Opportunities will have an ActionKit ID of "RecurringPayment-[transaction id]". The value we were using previously would sometimes conflict with other ActionKit IDs, causing the sync to fail for these donations. After this release we'll clean up the conflicting IDs for old donations as well. Thanks to Shawn at J Street for discovering the failures.
  • We fixed a small error that led to all actions in the spam check log having a minutes value of :09. Thanks Jase at 350 for observing and reporting the issue!
  • We added retries to compensate for a rare infrastructure failure that could cause mailings to die. Thanks to Nathan at Faithful America for the report that helped us identify this issue.


"Save as Report" to Add Query Reports

On the Reports tab, we combined the old "Run Query" and "Add Query" menus. Click "New Query" and select a query type, then choose displays/filters or write SQL, and (if you want) run it to test. If you want to save your new creation, click "Save as Report" (at the top of the page or next to the submit button) to assign a name, etc. and save it.

Passwordless Login for Event Hosts

We've updated the templates for emails to event hosts to always include a login string and not require the host to set a password before using their tools.

If you've edited event email templates in your templateset, you may not receive this change automatically. The key change is to add {% verbatim %}&i={{ user|login_string }}&l=1{% endverbatim %} to links to host tools. You can also look at the Original templateset, which has related changes like text warning hosts not to share their personalized links.

Upload Volunteer Moderators for Events

In addition to being able to upload events and attendees, you can now upload a CSV or TSV file of volunteer moderators to review events. You'll see "Upload Volunteers" in the list of event pages on the Campaign Settings screen:

More Events Improvements

  • You can now base your event email templates on those of another templateset with code like {% verbatim %}{% extends "Other templateset/event_email_created.html" %}{% endverbatim %}. Thanks to Joe at Everytown and Matthew at 350 for reporting that this didn't work before.
  • In mailings to recruit event attendees, you can now use the code {% verbatim %}{% for event in events|dictsort:"least_full" %}{% endverbatim %} to sort the events with the most open slots to the top. Thanks to Bianca at the Bernie Sanders campaign for suggesting.
  • The event mini-dashboard report is now available on the Event Details screen as well as in the event list. Mini dashboards let you embed custom reports in certain parts of the admin user interface. You can learn more about mini-dashboards in the docs.
  • We've revised the event merge interface so it's clearer when we will send a message to hosts or attendees. Thanks to Rachel at 350 for bringing the issue to our attention.
  • We now handle event submissions or uploads with long US state names, like "Washington" instead of "WA." Thanks to Kenneth working for the ACLU's PeoplePower campaign for finding this issue.

Salesforce Sync Improvements

We now keep track of whether ActionKit user IDs and emails match between users and mapped Salesforce contacts. The sync relies on these fields matching, and contact updates or donations may not flow when they do not match. The user profile page will warn when there's a mismatched ID or email for a mapped contact. A new report, "Salesforce users with mismatched emails", helps identify users with mappings that match on ID but not email.

We've also normalized how we choose a contact when syncing a user for the first time, when multiple contacts have matching email. Now, the contact with the largest number of donations is selected.

Separately, we've made some fixes to donation sync. We now correctly import recurring payments as failed if marked Closed Lost in Salesforce, thanks to a report from Marguerite at First Look Media. We also better handle donations or recurring payments deleted on the Salesforce side, thanks to a report from Shawn at J Street.

Mailing Targeting Speed Details

You can now see how long each query in your mailing's targeting took to run, to help understand what's causing slow queries. On the Proof and Send screen, you'll now see a "View SQL and Query Times" link next to the Targeting section header:

You'll see the times in italics underneath each query:

Currently, run times for cached query reports aren't available in this view. We hope to add them at some point in the future. However, you can now see how recently a cached query was run in the Targeting section on the Proof and Send screen:

Everything Else

  • When composing a mailing, you can now preview a specific user's message by entering their email address or their ID. Thanks most recently to Jase @ 350 for the request:
  • We've fixed an issue where HTML editors in the admin could end up stuck in plain-text mode. Thanks to Keith at PCCC for reporting.
  • We've fixed an error that could cause petition delivery previews to incorrectly fail if the petition had test signatures more than a week old. Thanks to Lucia Martinez at FreePress and Irma Corado at Indivisible for reporting.
  • The query builder now produces faster SQL for queries involving multilingual campaigns. Thanks to Julia at 350 for reporting the performance issue.
  • The new ActBlue webhook integration will avoid resubscribing users who were unsubscribed since the date of their donation. Thanks to Eric for the Inslee Campaign for reporting the issue.
  • The new ActBlue webhook integration will now correctly back-date refunds when importing old data.
  • We've corrected a rare situation where a user submitting a PayPal-enabled donation form twice could result in a duplicate gift. Thanks to Brandon at MercyCorps and Marie at NRDC for their reports.


Prefilling: get more actions, do more good!

With this release, you can enable prefilling on your ActionKit pages using EveryAction's Action Profiles -- a pool of millions of cookie-based saved profiles from users who have previously submitted an action on EveryAction. Enabling this feature can boost your conversion rates from Facebook, your homepage, or other places users can't be recognized by their AKID. If you enable this feature, your users' data will be saved to the shared profile pool and will be prefilled on other organizations' forms.

Contact information, occupation and employer, and several custom fields that are built-in in EveryAction will be available for prefill (if the user has submitted values for them). No payment information is prefilled. This isn't a one-click donation feature, but that is coming in the future! Read the prefill section of the manual to see what fields are available and to read more about how this works.

Turn on this feature by following the "Prefill settings" link on the Pages Tab.

Improved UI for Sending to Your Users At a Specific Local Time

We've made a bunch of changes to offer you more choices and clarify what's happening when you choose the option to schedule a mailing to send to your targeted users at a certain local time. Specifically:

  • For users whose send time has passed, you can choose: either send the next day at 9 a.m. or send immediately.
  • The haiku screen has a summary of the expected send time.
  • The stopwatch icon indicates timed sends throughout the UI.
  • The mailing dash now says "Generating" during the initial send job, then "Waiting" while no mail has been sent, and then "Sending" once delivery has actually started.
  • The send time calculations are now based on mailing send time, not the current time -- the mailings won't look artificially slow.

Thanks to Courage Campaign, FCNL, Indivisible, PFAW, PCCC, and more who made suggestions!


Merging Events: You can now combine two events into one -- for example, if a host accidentally created a duplicate event or you only want one event in each city. Hosts and attendees from either event are all added to the event you select as final and all links to the old, merged event redirect to the final event. The merge link is available on the event detail page (reached by clicking Manage for a specific event from the list of events in any event campaign) and brings you to a screen in which you can select the second event and choose which pieces of information will be retained from each event.

Thanks to Everytown, the Beto campaign, and MoveOn, among others, for the use cases.

Multilingual events: When managing events, the Act as Host link now respects the language the event was created in rather than always defaulting to English. Thanks to Rachel at 350 for pointing out the issue!


  • Tags starting with special characters are once again findable through auto-complete in the mailer. Thanks to Nabil at Sum Of Us for pointing out the problem. (Also, check out A Tagging System that Works for why tags starting with special characters might be awesome for your organization.)
  • The parent mailing of a recurring series (the one you can't edit or send) no longer shows the count and targeting rebuild date -- we never rebuild the targeting sets for the parent. Thanks to Scott at MoveOn for flagging the issue.
  • Choosing a winning subject line for a mailing that is part of an A/B test group now correctly excludes all mailings from the group when sending the winner. Previously this worked correctly for choosing a winning mailing but not for choosing a winning subject. Thanks to Jay from DFA.
  • If you manually selected a winner for an automatic subject line test, a bug showed the automatic full send still running due to a UI error; it wouldn't have actually sent. You won't see that phantom send anymore, thanks to a report from Tara at Win Without War. Go Wolverines!
  • A new variable is available in the mailer: {%verbatim%}{{ recurring_schedule_id }}{% endverbatim%}. You can append it to links to, for example, keep track of welcome series' performance in your analytics tool. Thanks to Jake Holland for the request.
  • Check out the documentation for an updated list of donation snippets available in the mailer.
  • The mailing preview on the compose screen now shows the preview text below the subject line. Thanks David at ONE for suggesting.

Templatesets and Developer Resources

  • When you go to preview an edited template, we'll save your changes before loading your preview so you don't need to remember to save the draft first.
  • The staff user permission set "Pages plus Templatesets" now includes the ability to set up Github connections and manage custom templateset fields. Previously only superusers or those with All Models permissions could do this. Thanks to Scott at MoveOn for the idea!
  • We added more details on how to use {%verbatim%}{% log_context %}{% endverbatim %} for ActionKit development. Keep in mind {%verbatim%}{% log_context %}{% endverbatim%} is most useful when trying to determine what snippets are available to use on a page or mailing, and is not a key-value store of all of the data. Thanks to Jase at 350 for asking for more info!
  • ActionKit has a safety in place to keep you from deleting built-in templates from your templateset. Previously, if you tried to do this from Github, the attempt silently failed. Now we show a notification on the templateset page and a log entry on the job details screen. Thanks to Sky at MoveOn.



  • The Salesforce mapping validator now checks built-in fields like Transaction ID to make sure the type and allowed length are appropriate.
  • Salesforce mapping now shows a section with the fields that are required and not configurable.
  • Partial refunds made in ActionKit will now sync to Salesforce as written off payments.

Everything Else

  • The witch is dead! In this case, the witch is the core_orderrecurring.occurences field. If you've asked about it previously (and we said, "oops ignore that dumb field because whatever it says is wrong"), you'll be happy to know we just got rid of the dumb field. A few of you had included this in a report -- we've removed it since it was just telling you lies.
  • On the Pages and Reports tabs, accidental double-clicks will no longer cause the page or report to save twice in parallel. This will avoid the same report running twice and avoid duplicate form fields being created during user form customization when you create a page. Reported by Irma at Indivisible -- thanks!
  • You can now filter mailings and users by the year and month they were created, as you can do for Pages. Thanks Nikki at ONE for the request.
  • Report parameters can now skip the quotes! Use the syntax ORDER BY ccu.page_id LIMIT {% verbatim %}{% sql_unquoted limit %}{% endverbatim %} to enter a number that's not in quotes. Be careful with using {% verbatim %}sql_unquoted {% endverbatim %}-- this could be used an attack vector if an attacker can control the parameter values.
  • The schedule field on the proof and send screen doesn't have autocomplete anymore so you can always see the calendar picker. Thanks to Keith at PCCC for the report.


No more whitespace under mailing previews

If your mailing body or wrapper included elements with a relative height, such as a <table height="100%">, the on-screen preview function would often wind up becoming taller than it needed to be, leaving a lot of blank space on the screen that you would have to scroll through. We've taken steps to avoid this happening any longer.

(If you still notice the problem, please contact support and send us an example of a mailing where you're seeing this happen.)

Thanks to Alex at, Jadon-Maurice at Indivisible, and David at ONE for each reporting this problem, and for their patience as we figured out what all of their use cases had in common.


Normally, variables stored by tags are not available outside of the current template block. This means that a variable stored in a block, or inside an included template, cannot be accessed in other blocks or included templates. The {% remember %} tag allows a variable's value to be retrieved outside of the scope of the current template block within the same page render.

For example, the below template will output the last value that met the condition of the if statement:

{% for message in suggested_tweets %}
  {% if message|length > 140 %}
    {% remember message as last_big_tweet %}
  {% endif %}
{% endfor %}
{{ last_big_tweet }}


  • It's now possible to create mappings between ActionKit fields and unrestricted picklists in Salesforce. With these fields, Salesforce will accept a value from AK even if it wasn't an existing picklist option.
  • A tweak to the date format in the Salesforce sync will cut down on unnecessary API calls.
  • We addressed a few additional use cases in the ActionKit/Salesforce mapping validation.

Everything Else

  • We found and fixed another place where the 'changes not saved' error would pop up even though no changes were made.
  • The confirmation message you receive after saving a short link now includes the URL of the new short link so you can easily copy it for future use. Thanks to Jase at 350 for requesting this feature.
  • The "customize user form fields" feature allows you to choose names for custom action fields, and then automatically prefixes them with action_. However, if you entered a field name that already began with action_, we would invisibly add a second copy of that prefix but we don't anymore. Thanks to Julia at 350 for letting us know about this problem.
  • The donations query builder omitted a necessary table join when attempting to display the total number of first-time non-recurring donors. Thanks to Nathan at Moms Rising for bringing this to our attention.
  • When using Download Actions to get users' phone numbers, we previously only included phone numbers with the source user. Thanks to Ryan at UltraViolet, we're now showing phone numbers with any source.
  • The subject line autotest automatically picks a winner after a duration of your choice and sends to the rest of your targets. The winning mailing will now preserve any auto-excludes you set for the initial test mailing. Thanks to Jesse at FCNL for the report.



Check a box to send your mailing to users at a specific time in their local time zone.

The timed sends feature now includes a UI for sending to users at their local time. To schedule a mailing for each user's local time click "Schedule for Later" and then check "Send to each targeted user at the time selected in their local time zone." You can still use merge queries for other implementations. Thanks to ClientCon participants for your feedback!

Limit the number of users a staff member can email with the new Limited Send permission.

We’ve added a setting to the CONFIG screen that you can use to define a ‘limited send’ permission. By default, the limit is set to 5 percent of your list, but you can edit this number.

The setting is used by the new Limited Send permission that you’ll see on the Change User screen. Assign this to any staff member and they can only send to the percentage of your list defined in the Mailer Settings. Staff users with pre-existing send permissions can still send to your full list.

More mailer improvements:

  • The new {{ event.state_name }} snippet returns the full state name, in addition to the pre-existing {{ event.state }} that provides the state's two-letter abbreviation.
  • The "Stop jobs" feature on the Mailings tab, normally used to stop slow mailing rebuilds, would previously also kill scheduled mailings that were preparing to send. Scheduled mailings preparing to send will now be left alone, and we've made it possible to stop individual mailing rebuild jobs.
  • Extended run time for cached merge queries. When you define a merge query report, you may want to set it to refresh hourly, daily, or weekly to avoid running a slow report at send time. Previously, cached merge query reports only had 30 minutes to finish. We've extended that to 2 hours.

Thanks to Michael, Kendall and Robin from the Bernie campaign for flagging the three issues above.

  • We improved mailing targeting based on location radius so it uses lat/lon rather than location code. That matches how we target events and improves accuracy for users with street addresses.
  • An empty "Also Include" section in mailing targeting was inadvertently expanding targeting to all users. That's been resolved. Thanks to Gabriel at Majority Action and Nathan at J Street for the reports!
  • We adjusted the way we handle default list exclusions in mailer targeting to protect against an edge case where the default exclude was skipped. Thanks to Jase at 350 for the report.


Paypal: If you've set your PayPal User Requirements to “No user data required”, ActionKit will create an anonymous user as a placeholder. If the user completes the donation, we associate it with the email address we get back from PayPal, creating a new user if necessary. Previously, the donation action creating the new user didn’t have created_at=1, but it does now -- thanks to Brandon at Mercy Corps for the report.

And, we fixed a rare situation where users pressing Back could erroneously have PayPal recurring donations marked cancelled. Thanks Adam Klaus at MoveOn.

ActBlue: The new ActBlue sync takes some donation data and drops it into special custom user fields if they're set up. In addition to the existing employer and occupation fields, we now support an express_lane custom user field (using the text field type) to indicate whether users are ActBlue Express Lane users. This matches the previous version of the sync. Thanks to Kenneth working for AOC for the report.

Salesforce: When a user updated their recurring donation amount in ActionKit, that new payment amount wasn't reflected in Salesforce. We've fixed that issue, thanks to Alon at J Street who reported it.


  • You can now include past_due recurring donations in the query builder, thanks to a report from Marie at NRDC!
  • On the Compare Mailings Report, we've added a separate column for selecting the winner, which is hopefully clearer than selecting the winning subject. In a future release, we'll also make this change on the the Individual Mailing Report. Thanks to Jessie at FCNL for kicking off this change.


ActBlue Integration

  • Our new ActBlue integration now stores refcode as the action's source (just like the old integration). Thanks Lee at Everytown for the suggestion.
  • For users of the new ActBlue integration, failed one-time donations weren't marked failed in the core_transaction table, which could lead to erroneously high totals and one-time gift counts in some reports. We've fixed that. Thanks to Jack working for the Kamala Harris campaign for reporting the issue.

New Permissions

We've added new permissions for managing model mailings and model pages so only designated users can create and edit models. Staff users who already have Pages - Edit, View, Create and Mailings - Edit (with or without send) permissions currently have access to managing models, so they will be granted these new permissions automatically. You may want to consider and remove the new models permissions for some staff users. Note: The All Models permission is unrelated to this change -- it's used for granting unlimited access.


  • We made event recruitment emails a lot faster. Thanks to Robin working for the Bernie Sanders campaign and many others for the request!
  • Often, users see a login screen before accessing another page (like event tools). If the user's login attempt fails on the first try, we'll keep the post-login redirect information for subsequent login attempts. Thanks Eric at the Bernie Sanders campaign for the report.


One-off queries!

As promised, the life changing magic of temp queries will arrive in your instance tomorrow morning. You'll be able to run a query (using SQL or the Query Builder), see the results on the same screen, and edit and rerun to your heart's content. If you realize this is a useful report that you want to save, you can do so. You can also email or download the results.


Include multiple event campaigns in one mailing

We've made it possible to include multiple event campaigns in one mailing so you can easily do things like recruit attendees to the closest event across campaigns. You can do this using the new snippets that work with the event campaigns selected on the targeting screen. Just select multiple campaigns!

Alternatively, you can use a campaigns parameter with a comma- or space-separated list of campaign names with the {% withevents %} tag, listing the campaign shortnames between single quotes with the parameter campaigns:

{% requires_value %}
{% withevents with user as nearby_user 'party onemoreparty' as campaigns 30 as radius 30 as limit %}{% requires_value events %}
{% for event in events %}
    Event: {{ event.title }}<br />
    {{ event.starts_at_full }} <br />
{% endfor %}
{% endwithevents %}

The event search is conducted across all of the provided campaigns at once so that sorting can be applied to all of the results.

In the next release, we'll be adding support for including multiple campaigns on your event search page and map.

Host tools login

If you include a link to the host tools page in your bulk mailing to hosts, you can apply the login_string filter and hosts will be able to click through to their events without logging in or setting a password.

Silent event changes

In some cases, you may want to cancel or otherwise modify an event without sending a notification to the host. We now allow both staff and moderators to suppress notifications to hosts, although the suppression option may not work if you have heavily-customized moderation templates. Thanks Everytown, FCNL, and J Street for the requests!

Query string with corrected campaign name

If end users visit an event page with both a campaign name and an event ID, we redirect them to the equivalent URL with the correct campaign name filled in -- important if you're reassigning events to different campaigns through the API.

These redirects used to drop the user's initial query string, but we now preserve that information through the redirect. Thanks Ethan at People Power for the suggestion.

Advanced Pages and Mailings search options

Ever wanted to see only sent mailings in the last year that went to over 100K users? Or only mailings with a particular tag? Well now you can do that!

As on the Users Tab, we've added an advanced search feature, which basically exposes the Mailings Query Builder options so you can build your own search criteria. We also added a Saved Search section just like on the Users Tab so you can save and re-use search queries and use SQL to optimize long-running queries. Same things apply on the Pages Tab.

Thanks to so many of you for requesting specific filtering options for both pages and mailings -- you inspired this solution!


  • Salesforce: A new mapping option lets you send ActionKit list subscriptions over to your Salesforce contacts.
  • Petition delivery: We brought back the {{ section.signatures.count|intcomma }} for petition delivery cover letters after a temporary absence.
  • Failed credit card reports: We updated failed credit card reports to ignore ACH and PayPal donations, since users can't update their recurring commitments for those donation types. Thanks Marguerite at First Look Media for the report!
  • User phone numbers: Phone numbers entered from a user's overview in the admin will now have a source of admin instead of user, since the staff member is the one entering the phone number.
  • Clickable call page numbers: Telephone numbers for targets on call pages now appear as tel: links rather than plain text. The main feature of these links is you can click to call on mobile devices, iPhone-connected Macs, or a variety of call-capable desktop apps. This change has been applied to both main contact numbers and "local office" numbers. Thanks to FCNL for flagging!


Event hosts can now email attendees even when their events have hundreds or thousands of attendees without experiencing timeouts. Event-related messages have been moved to a background job if there are more than 20 recipients. Thanks to MoveOn and Courage Campaign for running huge events and requesting this feature!

The Salesforce sync is now officially out of beta. Thanks to the Courage Campaign, First Look Media, J Street, Ultraviolet and Faith in Public Life for helping us shake out the big bugs. The changes you'll see in this release:

  • Take control of which ActionKit donations sync to Salesforce with the new Salesforce Donation Sync report. For users that are synced to Salesforce, only donations and payments selected by a report categorized salesforce_donations_sync will transfer to Salesforce. By default, that'll be all donations. Thanks Alon at J Street for the request!
  • We resolved an issue that caused some recurring donations to skip pledges. The missing installments were being added by a fixer script we've been running, but that used extra API calls. With this change we'll use fewer API calls. Thanks LJ at First Look Media for letting us know!
  • We're using core_transaction.trans_id field for de-duplicating transactions between ActionKit and Salesforce, instead of so we've removed order_ID mapping setting.

Mailing Targeting

  • We fixed an issue where test groups that had already started running could fail if targeting rebuilt at the wrong time. Thanks to Tim working for Bernie Sanders for the note!
  • A/B test groups previously always rebuilt mailing targeting at send, causing some slower send times. We now support the option to rebuild in advance, thanks to Shelby working for Kamala Harris.
  • Swapping out the merge query that's used for targeting your mailing will now force the mailing targeting to rebuild. Thanks Robin working for Bernie Sanders for flagging.


  • We made a few more changes to international geocoding. We'll geocode international users, even without a full address, so they can be targeted for timezone specific sends. And we will not re-geocode international users unless their address has changed.
  • We updated permissions so staff with Pages permissions can create and edit Event Moderation pages. Thanks Scott at MoveOn for the request.
  • Whenever you save changes to a legislative or special target group, ActionKit will redistribute signatures for pages using that target group. Thanks to Manny at MoveOn for the report.
  • The query builder now recognizes that "active" recurring orders include both those with status active and status past_due.
  • In a previous release, we added support for geocoding events to their corresponding state legislative districts. That's now available in the query builder so that you can easily generate reports by the state legislative district where events are taking place.
  • When you set up automatic delivery using the batch option for petition or letter pages you need to manually include a link where your page's targets can download the signatures. This was too easy to forget! We've made the link required and available in the snippet menu for easy insertion. Thanks Conen at Progress Now for flagging the issue most recently.


Upload event signups

You now have the option to bulk upload a CSV of signups for a particular event from the Event Campaign Dashboard screen, next to the event signup page. Event signup uploads work just like user imports or event host uploads.

Each row of your file must include the event ID and the user's AKID or email address and can include other user information. Include an attended column with a value of 1 for users who were present or 0 for users who were not. Blanks leave a user's attendance record as is.

Each user who is uploaded will receive a confirmation email if you have one for the relevant event signup page. Suppress the confirmation message by changing Upload Settings or including a column, skip_confirmation, with a value of 1. If you're marking attendance, remember to suppress the confirmation so you don't remind users about the event they've already attended.

Relatedly, we've moved the "upload events" link next to the event creation page. For clients managing multilingual event campaigns, this means you can now upload events to each of your campaign's language-specific event creation pages, reflecting the language of the event creator.

Improved processing -- template changes required

We added support for's Accept.js. You can find a basic implementation in the Original templateset, and additional documentation on how to incorporate these changes into your existing templates.

If you fundraise using, we encourage you to make the changes as soon as possible. We will eventually require this for all donation pages. If you get stuck, please request help through the support tab and be sure to test the changes with a real donation.

Geocoding events by state legislative districts

In addition to geocoding events by federal congressional district, we now geocode events by state legislative district, making it easier to host events around state politics. You'll find this information in two new columns on the events_event table named us_state_senate and us_state_district which hold values in the format "NY_031". (Query builder support for these columns will be included in an upcoming release.) Thanks to Ben at PFAW for the request.


-Google pushed an upgrade to its charts, affecting the way our reports displayed. We've made the necessary changes for proper display -- thanks to Matt at 350 and Ben at Progress Now for flagging the issue. -Previously, if you changed your page's advocacy targets, we reassigned signatures to the correct target when a PDF or CSV was generated. This led to stale data in reports. Now, we'll reassign signatures if needed when the page is saved. In an upcoming release, we'll reassign them whenever a change is made to the target group. -A rare error involving Unicode output in dashboard reports has been fixed, thanks to Irma at Indivisible who found this sneaky bug. -If you used the query builder's mailing "performance" items as filters, you would not get accurate results, because the query builder did not know how to filter on aggregates. This oversight has been rectified, and the query builder now knows that these items need to use the SQL syntax for HAVING rather than WHERE. -We attempt to determine which time zone each user lives in based on the location data they provide. Now, the user, action, and clicks query builder report types all offer time zone as a field under the "Home Address" item in the display and filter tools.


-We resolved an issue where a failed mailing targeting build could leave a mailing in a bad state. The mailing would appear to be still building and wouldn't send at its scheduled time. Thanks Jordan at CREDO and Robin working for Bernie Sanders for the reports. -When users change their recurring payment amount, their user account view (/me) will show the amount received, not the amount of their new commitment, for past payments. Thanks Suzi at for the report.



We made major improvements to international geocoding: With full street addresses, users and events should return more accurate latitude/longitude. Thanks to 350, SumOfUs, and ONE for flagging issues with international geocoding.


  • Reusable reports are now easier to share and edit. See and edit parameters at the top of the report results screen.
  • Filtering on the user's email domain in donations query builder will no longer attempt to match the full user email address instead of the domain.
  • The Download Actions report can now successfully handle custom action fields with apostrophes. Thanks to Kenton at PCCC and Will at ECU for reporting the issue!
  • In the Users query builder, if you used the "Amount Of [First/Most Recent/Highest] Payment [During Time Period]" item using the modes "First Payment", "Most Recent Payment", or "Most Recent One-Time Payment", and you also specified a date range rather than "On Any Date", you would get a SQL error that prevented the query from running. Thanks to Matt at 350 for finding this error!


  • The user-facing recurring update forms now support ACH orders so your end users can update their bank info themselves.
  • We added caching for computed values for user and donation stats (like highest previous contribution and average donation) to improve mailing send times. Thanks to Maya for End Citizens United for originally flagging the slow builds!
  • Copy custom targets with custom boundaries without causing an error!
  • Custom donation amounts with commas (e.g. 10,000) now pass validation. Thanks Eileen at DSA and Scott at PFAW for reporting (and congratulations on getting donations with commas online)!
  • User field labels won't be overwritten by different-language translations. Thanks to Zazim and Felix for ONE for the report.
  • Staff can now mark a record in the spam log as "spam" (thereby unsubscribing the user) if the default setting in the config didn't suppress all spam records, or click to reverse the action.

Salesforce (Beta)

  • We no longer attempt to sync ActionKit users to Salesforce if they don't have a last name (required by Salesforce), even if you forget to exclude them in your sync report, saving you API calls.
  • We include a built-in limit on percent of Salesforce API calls used to avoid maxing out your Salesforce org's daily calls. You can now configure that limit in the Salesforce integration settings to suit your needs based on how ActionKit fits into your Salesforce implementation.
  • In ActionKit users' donation history, donations from Salesforce now include "From Salesforce" in the one-line record summary.


Re-Send Confirmation Mailings

When a user misses a confirmation mailing, they may get in touch asking for a copy. We added a link under eligible actions in the user's action history tab so you can resend confirmation mailings for actions on event creation, donation, recurring donation update or cancellation pages. This link will only show for actions completed after this release. A copy of the original mailing, including user-specific information about their donation or event, is resent and an additional transactional email is recorded and displayed on the user record. Thanks to NRDC, Represent.Us and Marguerite at First Look Media, among others, for requesting.

Referral Counts

Motivate your users to share your work with new referral counts, showing them how many times they've shared plus the clicks and actions they've generated. Referral counts are available in pages, mailings, and confirmation mailings. Thanks to FCNL for the request that prompted this change.

{% if user.stats.share_actions > 0 %}Thanks to you, {{ user.stats.share_actions }} have supported our work.{% else %}We need your help to spread the word.{% endif %}


  • Query Builder samples: We've added more sample reports, built with the query builder, to highlight information you can get without SQL and to answer some basic questions. Highlights include open rates by domain for a given mailing, unsubscribes per week for the last year, and contact info for event hosts in the next week. See the report reference for details.
  • Timezone in reports: If you selected a query builder filter criteria like "Is Donor [During Time Period]" or "Number Of Actions [During Time Period]," you could choose a timezone, which was applied to the SQL but not properly restored to the QB's point-and-click interface so it would be lost the next time you edited it. This has been corrected. Thanks to Maya at Indivisible for reporting the bug.
  • We've upgraded the integration to use a more modern library; if you use, please let us know if anything isn't working as expected.
  • PDFs: We addressed timeout issues with the new PDF generator. Thanks to Yuri at AllOut for reporting the problem!
  • Documentation: We made significant updates to docs for the API, dashboards, and the Salesforce sync.
  • User Interface: There are pretty new navigation links throughout the admin UI that should more easily guide you through page creation.

ActBlue (Beta)

Our new ActBlue integration is ready for beta testers -- let me know if you'd like to participate in the testing period.

Salesforce (Beta)

  • The Salesforce sync can now map to both checkboxes and picklists. Thanks to LJ at First Look Media and Alec at J Street for the use cases.
  • For data integrity, donations in the ActionKit/Salesforce sync should only be edited in the originating system. We updated the ActionKit admin interface to hide buttons when they don't apply, and made sure that ActionKit-originated orders remain unchanged even when edited in Salesforce.
  • More recurring sync activity is going through the bulk API, reducing Salesforce API calls.

ACH (Beta)

  • We've added the ability to override ACH verification for staff with the Manage Donations permission. This means they can override ACH without requiring bank login or a deposit verification just as they can update credit card numbers and bank information.
  • The update recurring form in the admin UI now supports ACH updates in addition to credit card updates for staff with the Manage Donations permission. Thanks to NRDC for the request.


A new setting for custom fields

You'll see a new checkbox option, "allow multiple", when you add or edit a pre-defined custom field (for templatesets, pages, mailings, and users). Unless that's checked, the admin interface will only allow you to add one instance of the custom field to any record. It's disabled for all new custom fields by default and for existing custom fields, it's enabled for any custom fields which have ever been used multiple times on a single record.

Most of the time you only want one value for each custom field, and there can be confusing side effects if you have multiple. For example, if you include two of a custom mailing field in one wrapper, the wrapper may not render. However, there are cases where you've used multiple of a field on one record to store structured metadata. This new setting provides protection against mistakenly added duplicates while allowing for the intentional use cases.

New A/B testing options for donations amounts on Pages

For your testing pleasure, we've added three new attributes that you can vary as part of an A/B test: the list of donation amounts to be displayed on the landing page, the default donation value, and the order in which donations amounts are shown.

Inline mobile preview for mailings

You can now toggle from desktop to mobile preview. The best way to preview a mailing is still through an emailed proof (and we added a warning to that effect) but this allows you to get a sense of responsiveness inline. Thanks Ana at Color of Change for suggesting at ClientCon 2018.

Lots of donation improvements!

  • Past due status: Thanks for your feedback on the newly-available "past due" status for Braintree recurring donations! In this release, we've built past due into more of your workflows, including adding the status to the active recurring orders targeting.
  • Braintree: We've changed how we interact with Braintree so that outages are on the Braintree side are much less likely to create problems on the ActionKit end.
  • PayFlow Pro Recurring Donations: We built a work around to capture payments toward long running profiles, which we previously wouldn't pick up. Congratulations to J Street on the long running profile! And thanks for reporting the bug.
  • ACH: We've improved monitoring and added a retry system for ACH recurring donation charges. We'll look back 3 days to see if any scheduled payments didn't happen, due to a temporary Braintree outage, network failure or other issue, and we'll prompt the payment. Thanks to NRDC for flagging the issue.

Everything Else

  • Events: When an event is cancelled, when a signup is removed, or when an attendee role is changed, the updated_at timestamp in the events_eventsignup table will now update. Thanks to Lee at Everytown for flagging this issue.
  • Mailing proofs: We fixed an issue that blocked proofs for sent mailings. Thanks David at ONE for the great bug report.
  • Merge files: While merge files are processing, they'll now show they'll now show that they are "processing" instead of "0 rows." Thanks Brandon at Mercy Corps for flagging.
  • Snippets: Custom snippet titles, in addition to custom snippet code, are now escaped so a broken snippet title won't break all your snippets. Thanks Everytown for pointing out the issue.
  • Query Builder: We've added payment method (ACH, credit card, PayPal) to the donation query builder. Thanks to Marie at NRDC.
  • WYSIWYG: We've fixed a bug that caused inaccurate warnings to display when users selected or copied using their keyboard and failed to warn when users used their mouse to paste in new content. Thanks to Keith at PCCC for the report.
  • Page Listing: Pages dashboards now display untruncated short names -- you'll see all of 2018-straw-poll-full-list instead of just 2018-straw-po... Thanks Kenton @ PCCC!
  • Image Uploads: You can now upload images directly from image custom fields and you can have multiple on a page or mailing.


First, we've updated the user's guide. There's a lot more here, including the object model, known limitations and workarounds, and updated mapping documentation.

Second, the mapping for the Salesforce sync provides a great deal of flexibility but it has been fragile. Invalid mappings can stop your sync entirely. To help you reduce the risk of selecting options that will break the sync we've added some validation. You'll get an error message with a description of the problem and need to change your mapping to save. The validation attempts to catch mappings to fields that aren't writeable in either system and mappings that will fail because the data types or values don't match.


New federal legislators went live in your instance on January 3. We're continuing to update with new office data and state and local data as it becomes available.

Event Mailings

We've made a bunch of improvements to make event mailings easier to use and more flexible. For now, you can continue to use the event snippets as you have in the past (they have 'old' appended). Or you can switch to the new approach which incorporates information from the landing page you select and/or the targeting choices you make. For example, with the new attendee recruitment snippet you don't have to enter the event campaign name or set a radius -- you just pick the event campaign and radius on the targeting screen. To change the number of events shown, just replace the 1 in the snippet with the number of events you'd like included; slice": 1" means return one event.

Read more about the new built in snippets and how to use them for common scenarios here

In future we plan to support additional options like limiting the events returned by a custom event field.

Spam Check Log

The spam check log is now faster and easier to use. The log now shows the outcome of a flagged comment -- whether it was suppressed or allowed -- and lets you delete spam actions right from the log.

Read the tips for more on how and why to use ActionKit's spam tools. Remember, actions flagged as spam based on your settings are not suppressed, and the user is not unsubscribed, unless you enable these.

Query Builder

We made lots of query builder updates for your reporting ease, adding query builder options for these query builder types:

  • Donations: custom action fields for recurring donations
  • Mailings: signature delivery mailings, message body text
  • Pages: individual targets for pages (not just target groups)
  • Users: user's first/most recent/highest payment in a date range, event ID for event signups

We also added the "clicks" report type to give you a sense of web traffic.

Thanks to Jin working for Beto for Texas and Real Justice, Emmett at FCNL, Cassandra at Win Without War, and the folks at First Look for the suggestions!

PDF Deliveries

We've modernized the PDF generation system for petition deliveries. This change makes PDF generation much faster and can handle even larger petitions. We've made this change as backwards compatible as possible, but if you have tricky PDF delivery templates, we recommend testing them before your next use.

Special Custom Fields

ActionKit has some built-in behaviors prompted by custom page fields with special names. We've added those special page fields to all client instances to make these behaviors easier to activate:

  • redir will cause all requests to view this action page to be redirected to the URL entered.
  • migration_redirect_url will cause requests from users who are not logged in as ActionKit administrators to be redirected, which can be especially useful when first setting up ActionKit.
  • ak_recaptcha_enabled will override your site's default settings for enabling captchas.
  • featured_image will show the designated image on pages, styled to be appropriately sized and mobile responsive (this page field is used in the Original templateset).

If you would prefer to never use these fields -- for example, to avoid accidentally turning on the Recaptcha feature -- you can hide these fields in the admin interface.

In addition, HTML custom user fields are no longer forced to always visible. Thanks to Kenneth working for Beto for Texas for the report.

Phone Numbers

On the admin screen for each individual user record, the list of phone numbers now includes the source of each number and the date on which it was last updated. For example, if the user entered the phone number on an action page, the source will be user. This should make it a bit easier to spot the most recent or most authoritative number to use when choosing how to contact someone.


Templatesets have their own custom fields that govern behavior across the templateset. ActionKit now stops you from adding more than one value per templateset field and provides a templateset field option to add military and territory addresses to state_select.html in the Original templateset. You can copy state_select.html from the Original templateset to use that behavior.


  • In addition to the simpler event snippets, you can now add co-hosts to an event with single API call using the promote_to_host param. Thanks to Mateo at Demand Progress for the request.
  • Report tags are now called report categories to distinguish them from the unrelated tags used for pages and mailings.
  • Mailings will try harder to find users for your proofs, rebuilding the targeting set if necessary; give a more helpful error if no users are found for proofs; and avoid sending two messages for failed proofs.
  • Minidashes are special optional dashboard reports that add more information to your pages list, users, mailing drafts, and more. You can now hide these reports to deactivate them in your admin.
  • If a staff user has two-factor authentication enabled and they STOP their 2fa text messages, ActionKit will prompt them to opt back into texts before logging in. Thanks to Marie at NRDC for flagging the issue.
  • {% save_sum %}, {% multiply %}, {% subtract %}, and other mathematical templatetags now return numbers instead of strings. Thanks Ed working for End Citizens United for the bug report.

Beta Updates

Thanks to our beta testers for your feedback on these projects!

  • ACH: We now support ACH-only donation pages without credit card fields. Also, first and last name are now required by the page because ACH requires both.
  • Salesforce: We've reduced and capped API calls to avoid hitting Salesforce API limits. There's also a new staff user permission for managing Salesforce settings.


Past due status for recurring donations

As mentioned in the last release, we're adding a past due status for Braintree recurring profiles. Expect to see the new status in your instance by late tomorrow -- after the next Braintree sync. Once the status changes in Braintree, we'll change it in ActionKit. Please be aware of this when viewing custom reports -- they may be inaccurate if you haven't accounted for this status. We have added past due to the query builder and updated built in reports to include it.


Send the winning subject line automatically!

Introducing... Automatic subject line testing! In response to your requests, you can choose a wait period, metric, and max unsub rate and we'll send the winning subject automatically.



Draft mailing minidash

We've added a draft_minidash report which will display next to each draft on your drafts list view -- similar to the minidash for sent mailings. The report will receive a mailing_id parameter and can give your admin users extra information about a given draft.

Thanks to Brittany at NRDC for the question that prompted this addition.

Event actions in query builder

You can now use the query builder to create a report for event-related actions that will include information about the event or campaign.

This lets you generate a report that includes both action information like source and custom action fields, and event information like event venue and start date.

We've included a number of basic event fields, such as title and address; please drop us a line if there is a specific field you would like to use that isn't available.

Thanks to Caitlin at Courage Campaign and Lincoln working for Bernie Sanders for Senate for documenting this use case.

For Developers

  • As promised, we enabled CORS: cross-origin resource sharing. You'll be able to set a list of authorized hostnames for which we will issue CORS headers. If you've been dying to bypass browsers' Same Origin Policy, this will make you very happy.
  • The new {% log_context %} template tag writes the current context to your browser's Developer Console as JSON upon rendering as long as you're logged into your admin. For pages, you also need to use the templateset previewer.


  • We added more zoom to search for users, large event campaigns, and mailing tags. Enjoy!
  • Only superusers can see and edit re-engagement queries and we've removed the link to edit these reports for everyone else. Thanks to Reuben from Demand Progress for finding the inconsistency.
  • Clean up your mailings list with a bulk hide tool linked from the Browse All mailings view. This is a great time to clean up your old drafts and speed up your Mailings Tab load time!
  • When you email users asking them to update recurring donations, you can now see the action rates from the mailing. Thanks again to Brittany at NRDC for pointing out the issue.


Source codes persist!

Your sources will persist through redirects! Thanks to requests from many groups, when someone comes to a page with a source appended to the URL, we'll now use that source for the redirect page. We check for a hardcoded source in the redirect first so we won't overwrite a source you add manually.

Recurring donations

Now when you try to cancel a recurring profile that's already been canceled at the processor, ActionKit gives you the option of updating the status in the ActionKit database. Thanks to Free Press and Represent.Us, among others, for the requests.

Query builder

Phone numbers: The query builders for users, actions, and orders now includes two prioritized options for displaying phone numbers. These return a single phone number for each user. The first displays the user's mobile number, or if that is not present, a home number, and then a work number, and then any other phone type on record. The second new option works the same way, but prefers home numbers to mobile numbers. Thanks to Nicole for Justice Democrats and Lincoln working for Bernie Sanders for Senate for pointing out the use case.

Transactional emails: The query builder for transactional emails previously counted all opens, but now defaults to counting unique opens like our built-in reports. The query builder for transactional mailings also now allows you to display and filter on the count and rate of unsubscribes they produce. Thanks to David at ONE and Kate at Demand Progress for the suggestions.

Reports on reports: You can now use the query builder to make a report about the reports in your ActionKit instance. This can be useful if you are trying to figure out which reports are used most often, review which reports are run automatically, clear out old reports, or perform other kinds of analysis. Thanks to FCNL for the request.

Mailing stats

Mailing comparison reports received an upgrade!

We broke out the elements of the individual mailing report, so it's easier to scan. We also added a column for New Users and a donation section, which only shows if your mailing includes a fundraising ask.

There's a new "Breakdown By Subject" checkbox on the Compare Mailings screen. Now you can see results both on a per-mailing and subject-line basis.

Config (for super users)

The "Your Progress" report is included in the Special Reports section on the CONFIG screen since it's one of the reports you can use to customize your admin. Edit this dashboard report to display info on your Home tab, like progress toward key metrics, or to point out frequently-used resources.

The custom snippets interface is more user friendly with title/textarea pairs instead of long blocks of text. If you haven't created your own snippets, give it a try! You can create a point-and-click custom button, whole FAQ section or other block of text, and more. Thanks to David at ONE for suggesting.


Fatal from lines: Double quotes in dynamic sender names would cause the remaining messages to die. Now we'll skip sending for any problem from lines and continue with the rest of the mailing. The from with quotes will still die so it's best to check for those in advance. Thanks Ben at PFAW, Sorcha for Progressive Takeover and others for the reports.

County targeting: When you're targeting by county, you can (and should) add in a state (e.g. Bucks, PA) to avoid confusion with another county of the same name. Now we have help text on the targeting so you remember the convention.

Event Targeting: We've improved the geocoding for event targeting. Along with the increased precision, you may see more failed mailings because we were previously fudging the radius for withevents to find events for users included in your targeting.

Previously, targeting was limited to ZIP-code precision but the withevents tag used better address-based locations. If you set the withevents and your targeting radius to the same distance, this meant you might be targeting some users actually outside of the radius. To keep you from getting lots of failed mailings (which can slow down your send), we would look as much as twice as far as your selected radius to find an event for a user.

Now withevents and targeting use precise locations and if no events are really within the specified radius of the user according to the precise location information, you'll get a failed user mailing. If you want to add back in the fudge, you can increase the radius you use in your withevents tag, or add "0 as strict_radius" to the withevents options.


  • We fixed an issue where hosts would see an error after sending event invitations, even though the messages sent. Thanks to James at 350 for the note.
  • Event campaigns with unicode characters in the title (like a degree) will now render correctly. Thanks Débora at 350 for the report.
  • The list of petition delivery jobs now includes the page title, short name, and ID so you can more easily differentiate between multiple pages with the same title.
  • We doubled the report size limit to 1024 MB so you can run EVEN BIGGER reports.



We've made changes to help the event tool handle huge campaigns more smoothly. And we've added the event campaign ID to the Campaign Dashboard so it's easier to locate for things like querying events. Thanks to Alec at J Street for asking.

We added a "Send moderation notification" checkbox to the campaign settings page. We'll send an event moderation notification to the staffer who checked the box after every moderator action so you can see in real time how your moderators are interacting with event hosts. By default, the notification will include the moderator's comment, event details, hosts, and signups. You can customize it and add recipients in Action Notifications.

Everything Else

  • The query builder for mailings can now display and filter on whether a mailing is part of an mailing A/B test group, including displaying which group it is part of or filtering for only the mailings in a particular group.
  • You can now add more people to the recipient list for scheduled reports! We bumped up the character limit to 4000, so keep those reports going. Thanks to Mercy Corps and Nikki at ONE Campaign for the request.
  • When you copy a survey page, survey questions already marked as ‘required’ keep the required flag in the copying process. Thanks to Luke at ONE Campaign for flagging.
  • We fixed up permissions so you can use EXPLAIN in SQL for zip_proximity in the events tables. That'll help you optimize queries for the sometimes-extensive events tables. Thanks to Third Bear working for Beto for Texas for the report.


Event Moderation

We’ve added more options for event moderation to support workflows beyond asking moderators to simply approve events.

The ‘Let Users Moderate Campaign Events’ checkbox has been moved to a new Moderation Settings section.

If you check that, you’ll see options to expose staff notes to moderators and to allow moderators to edit event details (like correct the location or time). The latter is enabled by default; uncheck it if you don’t want moderators changing event details. You can also edit the new template, event_moderate_details.html, that sets the event details available for moderator review and editing.

Also, previous moderator responses for custom event fields are now displayed in the previous moderator activity section (toggled closed by default). So a moderator can review previous moderators' responses on questions like ‘Has the host read the guide?’.

And moderators can now flag events, regardless of their approval status. You might use this to allow volunteer moderators to indicate which events still need follow up if you’ve got a list of criteria for moderators to confirm with hosts. This way you can have public, approved events that are still marked for follow up by moderators. Once an event has been flagged, the moderator can unflag it by approving it (whether or not the event requires approval). Relatedly, there’s a new search option for moderators that will only match events with status=flagged and we include flagged in the status on the event lists for staff and moderators.

Other Event Updates

  • We optimized the event attendee queries so host tools should load quickly even for really, really big events. Thanks to the Beto team for finding the problem by running a kick*** campaign!
  • We now use latitude/longitude directly for event targeting in the mailer. This allows us to use user street addresses to improve targeting precision (where we generally used 5-digit ZIPs before), and is the first step toward improving the accuracy of targeting outside the U.S.

Everything Else

  • Default from line: Building on the default from line in last release, your default from line will also govern the pre-selected from line for new mailing drafts.
  • Mailing fundraising totals: If your mailing raised money, see your fundraising totals in the mailing report rates summary, in addition to the raw numbers tab. Thanks to Robert at Demand Progress for suggesting.
  • User merge: We’ve made merging users a bit easier. From a user’s profile, click the “Merge Users” tab and we’ll prefill that user’s ID for you. Just paste in the other user’s ID and we’ll take you through the next steps.
  • Encoding: We fixed an issue where tell a friend sample text was sometimes showing punctuation as its HTML codes instead of punctuation. Thanks to Brenna at Courage for the initial report.
  • ACH donations: ACH is only available for donations in USD, so we're hiding the account switcher and non-USD accounts when you're using ACH.



Event targeting by congressional district

It's here! We know many of you host events specific to U.S. congressional districts -- a rally outside a district office, or a meetup to plan a lobby visit -- and you can now invite users to the closest event in their congressional district.

To limit events to congressional districts, add user.location.us_district as districts to your withevents tag in the mailing, then target by Event Campaigns and check the “Campaign Same District Only” box.

Other event updates

  • Event approval: We're now storing the time when an event is approved so you can use it to start post-approval workflows.
  • Bulk editing: See even more events! We've bumped up the number of events displayed when you click Show All to 300 so you can bulk edit more events at once. Showing more than this causes the page to time out. Thanks to Tara at 350 for the request.

Configuration and administration

The gear below the search bar in the ActionKit admin has handy settings for you! Superusers also have access to organization-wide settings like custom snippets, spam settings, announcements, and two factor authentication requirements.

Did you know...

That you can set up two-factor authentication for your own account, and that superusers can require 2FA across your instance? For those of you setting up lots of staff with 2FA, you can once again copy the token from Firefox. Sorry about this issue, Jin (working for Beto)!

That superusers can set up announcements just like the ones we use to highlight new releases? Now you can also set them to expire. Go into /core/admin/notice to choose a date and time to set a future expiry for your announcement, or check “Expire now” to expire the announcement immediately. Once the announcement is expired, it won't show at the top of staff users' screens.

ACH (bank account donations)

Two updates to ACH donations (still in beta -- let us know if you're interested in joining):

  • We've added snippets specifically for ACH donations so you can thank ACH donors specifically or invite non-ACH recurring donors to donate through their bank account.
  • We'll only show the Accept ACH checkbox when you select a payment account that is set up for ACH.


  • We defined staff in the UserStaffNote REST endpoint. Thanks to Ethan at PCCC for requesting.
  • For users created by a donation push, we'll check if there's a time on the donation and use that for the users' creation time. Practically, this means that we'll backdate users coming in through ActBlue so you won't have users with older donations who look brand new and mess with your reporting.

Everything else

  • Default from line: Set a default from line across your organization for notifications and confirmations. You can still create custom from lines and select alternate from lines; this just sets the behavior when you're creating a new notification or page from scratch.
  • Download actions: The Download Actions report will now display mobile numbers as well as home phone numbers.
  • Phone numbers in mailings: Add a user's own phone number to a mailing (perhaps to check if it's still accurate) using {{ }} or by type with {{ user.phones.home }}, {{ }}, or {{ }}.



Event moderation

The moderator tools screen now includes the full email log for the event, including messages sent by the host, attendees, moderators, or staff.

After a volunteer signs up to moderate an event campaign, a staff member needs to approve them from the Campaign Dashboard. An email, defined by the event_email_volunteer_approved.html template, is sent to the volunteer. With this release the link in the email leads to the 'set a password' page or directly to the list of events to moderate if the user already has a password.

More event updates

Searching for events by custom event field values is enabled for both the staff event under Manage Events on the Campaign Dashboard and the moderator advanced search. The search checks any custom fields you've added to any associated event page for the value you enter. It does not currently accept a name, value pair. For example, if you've added a custom field to the moderator page called next_followup, you would enter 8/29/18 in the search box not next_followup: 8/29/18.

You may have noticed the new Events section of the user record. We've added links to act as host or moderator (if the campaign allows moderation) for any event the user is signed up for as a host or attendee. You'll see a link to the email log for the event if there is one.

We've also added the event time, date, and location to the user's Action History tab so you can more easily distinguish between events.

Thanks to Jin working for People Power and Beto for Texas for inspiring these improvements.

Everything Else

  • After action notifications: When sending an after action notification to one of your end users, information about the recipient user can now be included. This doesn't apply to staff accounts, unless the staffer's email also has an ActionKit user.

  • Two changes to streamline reporting: You won't see the parameter help field unless there are parameters in your report, and we've added query builder support for "cancelled by failure" recurring status. Thanks to Clement at NRDC for the request.

  • Twitter sharing: If you include custom tweet text in a /share/link?type=tw link, that text is now stripped out before constructing the link to be shared, which makes for more compact and attractive share links. Thanks to David at ONE for pointing out the problem.

  • Links with ActionKit IDs: If you accidentally include links with ActionKit IDs in them in a mailing, tracking is broken, so we'll block you from sending. Thanks Credo and UltraViolet for flagging.



Find the link to email yourself report CSVs more easily! We've streamlined the UI so emailing reports isn't hidden behind a download button.

More reporting updates

  • Our built-in letter to the editor report now omits incomplete LTE actions so you get a more accurate count. Thanks to Brenna at Courage Campaign for flagging.
  • We updated built-in List Stats dashboard to note which stats are based on the past week and which are all time. Thanks to Will working for Progressive Takeover for the note on this issue.


We've added moderation actions to the admin-facing event detail screen.

More event updates

  • Sometimes Excel is ~very helpful~ and strips out leading zeroes from zip codes. We'll check uploaded events to make sure the zips have the right number of digits and add a leading zero to four-digit zips. (We already did this for user imports.) Thanks to Kenneth working for Beto for Texas for prompting the investigation.
  • We've streamlined event search for moderators. The search will run on page load, suggest using advanced search for more options, and jump down to the search results when you click Search.
  • We've added two fixes to help you avoid common event problems: Moderators need to acknowledge that event deletion is permanent before they can delete, and staff are prevented from deleting the last host of an event.


  • We fixed a bug where you couldn't submit support tickets that included the word password. Thanks to Jin working for Beto for Texas for flagging!
  • Remember when we said you could associate any page with your mailing using the landing pages dropdown? Well now it's actually true! Thanks to Tara at Win Without War for reporting the problem.


Event Moderation

We've added two new page types for moderators -- a moderator sign up page and a moderation page -- where your volunteers can greenlight events, contact hosts and attendees, mark an event as incomplete and request tweaks from hosts, or delete events outright.

To see these pages you'll need to check Allow Users To Moderate Campaign Events on the Campaign Settings screen for your event campaign. Two additional pages are then added to your Campaign Dashboard for you to set up.

1 Staff users set up Event Moderate and Campaign Volunteer pages

These pages have the usual text boxes for entering content as well as an area where you can add custom action fields to indicate specific items for the moderator. Read more about this and other options.

2 Volunteers sign up on the Campaign Volunteer page. You can ask them to agree to particular ground rules or provide additional information.

3 Staff users review and approve volunteers

4 Moderators search for events to moderate

5 Moderators have options to moderate individual events

In future releases we plan to expose custom fields to the staff and moderator event searches and add a moderator settings section to the Campaign Settings. Let us know if there are other changes that would make this new tool more useful!

Everything Else

  • Scheduled mailings will show up in the Rebuilding list as they rebuild at send (if that option is checked). This will be more noticeable for mailing targeting that takes a long time to run -- sorry to Brandy at Credo for the mailing that was invisible as it rebuilt, and thanks for the report!

  • To compare mailings, you can now paste in a comma-delimited list of mailing IDs into the Mailing Performance report in addition to manually selecting each mailing (the same goes for pages). Thanks Cassandra at Win Without War for the request!

  • You'll only be asked to pick a winner if there are multiple subject lines for the mailing.

  • On the Campaign Dashboard screen you can now search for events by the host's name, and sort events by the date they were created. Thanks to Jin working for Beto for Texas for requesting the former.

  • As promised last release, blanking out max_attendees will give events unlimited capacity, even if there was a limit before. H/T Kenneth at Middleseat.

  • You can now delete a mailing haiku in addition to replacing it from your haiku list. See the full list or click on the asterisk in a mailing haiku to add a new one.


ACH Payments

We're taking ACH (bank account) payments into beta! ACH payments typically have lower transaction fees, and people change banks less frequently than credit cards. It'll be available for U.S. banks for clients using Braintree as their payment processor. Thanks to NRDC and Mercy Corps who helped fund this feature and will start beta testing soon. Let us know if you'd like to join them!

User Recognition

Previewed at ClientCon: Gone are the days where you need to choose between showing one last form field and recognizing your users! We’ve added three new modes for user recognition: “Always Visible”, “Always Required,” and “Visible if Blank.”

With these new options you can do things like recognize users' existing information and still show them a survey question or require a current phone number every time they take action.


Gentle Save Notification

The mailing save pop-up doesn't take over your whole screen anymore! See a gentle note in the bottom right corner, and continue on your way.

Recurring Sent Tab

Thanks to multiple requests at ClientCon, we’ve added a “Recurring Sent” view to the Mailings tab and moved these mailings out of the “Sent” view.

Use All Landing Page Types to Associate a Page and a Mailing

Pages of all types are included in the landing pages dropdown on the Compose screen for mailings. Previously, landing pages had been restricted to donation pages and pages with targets. Thanks to Lianna at CREDO for the most recent request.


Upload Sharing Images from After-Action

Upload sharing images in the same place you set them. We've added an upload button next to the sharing image on the after-action screen, so you can get visual faster. Thanks to Kenneth for PeoplePower and Amy from Win Without War for the request.

No More Lost Survey Data

The survey builder will now warn you if you don't have user_ or action_ in each of your custom HTML survey questions -- you need those prefixes on fields to record the data from your survey.


Add to Query Builder

Adding criteria in the query builder is more streamlined; you can type to search for displays and filters.

Compare Pages and Mailings

On the Reports tab, we renamed the Performance by Mailing and Performance by Page buttons to Compare Mailings and Compare Pages, respectively. You'll see a new button to Compare Mailings on the Mailings tab that gives you access to the report, and ditto for Compare Pages on the Pages tab.


Late last year we set up an instance of One Time Secret ( that you can use to more securely send us things like payment account API keys. To use it, you go to, paste in the secret information, and get back a single-use-only link you can email us instead of the raw credentials.

We've set the help form up to remind you about One Time Secret, with a popup if your initial ticket message includes a phrase like "API key" or "password." We hope this makes it easy to remember to use it. Let us know if you need any help with One Time Secret, or if the help form changes cause you any trouble (e.g. the popup often triggers for messages without secret data).

Everything Else

  • We added an empty alt tag to the tracking pixel, so your HTML validator won't flag that as an error anymore! Thanks to Andy at CLCV for flagging.
  • Donation page names won't be able to collide with event page names anymore. Thanks to Sky at MoveOn for the report.
  • By popular demand, we added a snippet that your users can click to tweet your message at their electeds rather than just taking them to their targets' Twitter profiles. Thanks Cassandra at Win Without War and Raquel at Courage Campaign for the request.
  • API requests on core_usermailing are less likely to time out now, thanks to a report from Color of Change.
  • We ironed out some issues with custom boundary names, including letting you upload custom boundaries where the name is really a number (thanks MoveOn for the report) and improving the error if there isn't a boundary name field (thanks Brian from Progress Now for flagging).
  • Imports that unsubscribe users will use the date of the created_at column as the unsubscribe date, just like imports that subscribe users. If there's no created_at column, the import will still take the current date as the date of the unsubscribe.
  • We fixed a problem with A/B testing for Pages -- now a blank variation will always give you the original, whether you're working in WYSIWYG mode, code mode, or both. Thanks to Kenton from PCCC for finding the bug.
  • Add hosts to events from the new manage events screen even if the host had been deleted or demoted. Thanks to several folks at Beto for Texas for reporting.
  • Blanking out event directions and notes to attendees will get rid of the previous remarks in those fields. And, coming next release, blanking out the max_attendees field (event capacity) will also get rid of any previous capacity.


Event Admin

As you saw if you were at ClientCon, we've added a new admin screen for events. This fixes a gap in functionality that many of you had reported -- removing hosts. You can also manage attendees, send messages, and see a recap of the event information, without acting as a host. With Superuser or Event - Manage permissions, you can access this magic screen by clicking on the event name or clicking Manage:

Subject Text

Use the text of your subject line elsewhere in your mailing, or modify the email based on the subject text. Thanks to Gautham at Flippable for requesting.

{% if subject_text == 'Howdy'%}
  Was 'howdy' too weird of a subject line?
{% else %}
  Our subject lines, including {{ subject_text }}, are the very best.
{% endif %}

Survey Responses on User Record

See the full text of users' survey responses right from the user admin screen! They're not clipped anymore, so even long responses will be readable.

Congressional Delivery

If a U.S. rep. or senator wasn't in our vendor's data (because they didn't have a contact for them) and you added a contact, your addition was mismarked and didn't display. This has been fixed. Thanks Robert at Demand Progress for pointing out the issue.

Whatsapp Support

Links in your mailing to whatsapp no longer break inline preview and are now clickable (whatsapp: acts like tel: at the beginning of a link). Thanks to Benjy at Zazim and David at ONE for flagging.

Documentation Updates

  • For custom boundaries, we've documented that the data needs to be in the WGS 84 (EPSG:4326) coordinate system, since uploads won't be re-projected.
  • Send us a support ticket to turn on SSL everywhere (thanks to Joe at Everytown for pointing out that the process wasn't clear from the docs).
  • When users act multiple times on one page, we'll keep the first source. Thanks to Jase at DFA for pointing out that our docs and the behavior didn't match up.

Hidden Feature: Support Form

We learned at ClientCon this year that our handy support form is an unintentionally hidden feature! You can still email support, but the form helps us handle your ticket as quickly as possible. The support form tells you when support is open (or when we're closed for a holiday), collects browser information, gives tips on documenting bugs and requests, and provides fields for things we'll ask about like a link to where you're experiencing an issue. Check it out at the Support tab > Contact Us.


Staff Notes

Several of you have requested a way to record additional notes about users, such as interactions they had via phone or direct email, etc. This change adds a "Staff Notes" section that shows up on the bottom of each user's overview screen. Text a staff user enters into the "Add a note..." field is recorded in the log when you save the form and displayed along with the date and staff user name.

Some notes about notes

  • Notes may contain multiple lines of text.
  • Click the Edit link to make a correction to a previous note.
  • Removing all of the text from a note and then clicking save will cause the entire entry to be deleted.

Thanks particularly to Nate at MomsRising for building his own version and sharing with us!


We updated the name of the REST API permissions groups to make it clear that those groups grant access to all models and are essentially equivalent to superuser status (but without access to the admin UI). We hope this change will serve as a reminder to make sure you're working with a trusted partner when you assign this permission.

Permissions bonus bug fix: Staff only see the link to edit reports if they have permissions to edit reports. Thanks to Brandon at MercyCorps for the report.

Boundary Groups

From the list of boundary groups, we've added a link to overview maps. See a map that pulls in all the boundaries within that group! From that overview map, click on a boundary to go to its detail page.


A small number of Braintree transactions were recorded as completed but unsuccessful if we happened to catch them in the "settling" state. We fixed this issue. Also, we verified the status of existing transactions with Braintree and marked them successful where appropriate. Thanks to Marie at NRDC for reporting this!



Query Builder

We updated the query builder to make it easier to search for multiple IDs. With this change, pasting a comma- or semicolon-delimited sequence of one or more numeric IDs into a type-to-search report parameter field causes each of the IDs to be looked up and if a matching record is found it is selected.

This allows you to paste in a list like 32,57,82,43 on the Report Parameters screen to select a series of users, or a group of pages, or a set of targets, etc.

Non-numeric values, or any values which can't be matched to a record, will be left in the text-entry field to be processed normally. Thanks to Mateo at Demand Progress for requesting.

Built-In Reports

We added a few more "search queries" options on the users tab -- users who have taken action on a page with specified tags, users subscribed to particular mailing lists, and users who have ever made a donation or purchase. A reminder: search queries are reports tagged user search, and the built-in ones use optimized SQL to complete more quickly than they would using the query builder.

Mega Reports

When you attempt to email a report with more than 10,000 rows (too big to show inline) we now provide a link to download the report in the email, instead of just an error message.

Privacy and GDPR

Privacy Records on More Updates

User info doesn’t always come through user actions: import pages, the REST user API, and the user admin can also make changes. We’ve added ways you can create and optionally require privacy records for those updates, too.

Action Acceptance

We added a setting where you can choose not to accept an action from a user who doesn’t see the privacy UI after choosing a European country from a dropdown (perhaps because of a bug or an outdated form).

We've also updated the documentation with more details.

Mailer Popups

The popup when you save a mailing will only give you information about the mailing you're saving -- not other mailings in progress or sending. Thanks to Keith at PCCC for suggesting we prevent future heart attacks.

Custom Target Pronouns

We're asking for custom targets' pronouns instead of their gender on the custom target creation screen. Since we were only using gender to generate pronouns anyway, this change lets you directly select the way your target will be referred to in snippets, and it's more inclusive for targets who themselves don't fit into male or female boxes.

Technical Note: The column header for upload is still gender, with the options M, F, and leaving the field blank. To get they/them pronouns for your target on upload, leave gender blank.

Product Names

Product names don't need to be unique anymore! This means you can now have different "admin" product names on the backend but identical product names on different pages. Thanks to Nir from J Street for requesting this feature.

Hidden Feature: Redirects

  • Using a custom page field named redir will automatically create a 301 redirect to a URL you specify!
  • Using a hidden input field with the name redirect and value of a URL will change the after-action page to the URL you entered.

As of this release, both of these hidden features are now documented in the ActionKit manual.

5/24/18 (privacy and GDPR update)

We want to share a few more details on privacy features that were included in our latest release, but weren't explicitly called out in the release notes.

The updated documentation has details, and developers might find the new Original/privacy.html a useful reference. The biggest changes are:

1 We've redone the default privacy UI for users. Instead of checkboxes, Original/privacy.html can now show opt-in/out radio buttons, along with a notice and extra text to ask users to reconsider opting out.

2 Recognized users can be shown the privacy UI. You can show privacy options to recognized users in all of the countries you've configured by adding this tag to your form:

<input type="hidden" name="privacy_show_if" value="in_country">

You can use a value of 'missing' instead of 'in_country' to show the options only to those who don't have an active privacy record.

3 Opt-outs can unsubscribe users. Adding this tag to your form:

<input type="hidden" name="privacy_optout_unsub_all" value="1">

will unsubscribe users that opt out.

4 New options for handling confirmation emails. The section Handling confirmation emails in the docs covers how you can tweak or skip confirmation emails for opted-out users, with sample code.

5 Privacy records are visible in the user admin. Users with privacy records now have a "Privacy records" line in the "User details" section, and privacy records in the action history next to the corresponding action.

"Pre-GDPR" records coming shortly. If you've configured countries for privacy record support, we'll create records with type="pre_gdpr" and status="auto" soon.

As always, let us know through Support if you have any questions or need help.


ActionKitties are awesome! Everything in the release notes this time was inspired or reported by clients.


Admin subscribes and unsubscribes

Change a user's subscriptions right from the admin! Our new list admin interface lets you subscribe and unsubscribe users from individual lists, saving you a trip to a signup page or a cumbersome unsubscribe/resubscribe process. Thanks to Independent Media Institute, J Street, Story of Stuff, ONE, and several others over the years.

Stealthy members

We made it a little harder for suspicious characters to figure out whether a user is a member of your organization. When someone fills out a reset password form, they now get the same message regardless of whether they're in your database. Thanks to Kate @ NRDC for prompting an investigation.


Who created and updated

See who created and last updated your reports with a handy line in the reports listing. Thanks to Nikki @ ONE.


You can now get details on your transactional mailings from the querybuilder, making it easier to generate reports on the performance of after-action confirmation emails as well as tell-a-friend messages and admin notification emails. Thanks Kate @ Demand Progress for saying it would be useful.



In addition to lists and language, you can now include particular countries by default in your targeting. Thanks Manny @ MoveOn for the initial prompt.

Visual Editor

The visual editor knows that class is a valid attribute for td, so it won't strip out td classes when you save changes or switch back and forth between editor modes. Thanks Ben @ J Street for the report.


Multi-Currency Thermometers

We fixed a bug with progress meters on multi-currency donation pages. We're now summing donation amounts converted to USD. Previously we were summing units of currency donated without converting, so we would treat 1 EUR as 1 USD. Thanks Mais @ SyriaCampaign for flagging.

Braintree Recurring Profiles

We made two updates related to Braintree recurring profiles. If the amount of a Braintree recurring profile is different than what we have in ActionKit, the correct amount will be updated in the ActionKit database during sync. We also fixed an issue where a recently-updated recurring amount was overwritten if the update occurred during sync. (Note that this affected the recurring amount in the ActionKit database, not amounts collected by the processor.) Thanks Adam @ MoveOn for finding the bug.


Hey ActionKitties! We've got a crazy cool new feature, custom boundaries, coming out in this release as well as some small improvements that bring me great joy (editable phone number display for call pages! a list of mailing test groups!). I am also joyful about seeing many of you in June! This will be our biggest ClientCon with ~55 clients attending. You can still sign up for training on Friday, June 22 for $500 per person.

Anyhoo, just forget about the world for a moment and join me in rejoicing over small things!

Custom Boundaries

We're rolling out a new, experimental feature in this release: custom boundaries for targets! Upload a spatial data file to use as the jurisdiction for your targets, and we'll match constituents to the right target before sending. This gives you some of the same functionality for custom targets that we already have for built-in targets (U.S. House, Senate, many state houses). International groups, get excited! You can also draw map files right from the admin, so you could tell people about their local organizers, target just the liberal parts of a state/country, or map against local chapters. We’re looking forward to seeing what use cases you come up with.

Call Pages

You can edit the target and phone number display for call pages! We created a new template named target_list.html that you can customize. Shoutout to Auden at NRDC for suggesting that call target phone numbers should be clickable.

Mailing A/B Tests

See all of your A/B tests in one place with a new option in the Mailings Tab! A/B Testing Bonus: The mailer will let you know when the test group is done rebuilding.

Mailing Archive

From now on, we’ll archive the full HTML of your sent mailings -- including the wrapper, custom fields, and how snippets were rendered for a random user -- for auditing and copying purposes. You can also run SQL reports on the archived HTML to catch any content that’s hiding in custom fields (instead of core_mailing.html).

API for Recurring Donations

Donation push for recurring orders now allows order_id to be used for identifying profiles in addition to recurring_id. If you’re using the donation push API to record external recurring donations, you may have had failures to record if you had two profiles for different payment accounts with the same recurring ID. You can now use use order id as an alternative to recurring ID when adding payments or updating a profile.

More Updates

  • We documented how and when to prefill forms with basic (not sensitive!) user information.
  • When a non-U.S. country is selected in Forms, ZIP and ZIP+4 fields are hidden. That includes /me/update, where users update their own info.


Hey ActionKitties!

Tomorrow morning you’ll see new options for using social media to pressure your advocacy targets, more autocomplete options for reports, and tools to help you comply with GDPR.

And two reminders:

  • There are a few links to the user manual in these notes. Those links will work tomorrow, once the release it out, but not before then.
  • ClientCon 2018 is coming soon (June 20-21 in DC). This is a day and a half client-only conference (followed by an optional one-day training that we'll email about later this week). Learn more and sign up here.

Social Media Targeting

With this release, you can ask your users to pressure their federal legislators through their social media accounts. We have Facebook and Twitter addresses for 95% of federal legislators.

In the snippets menu, under Page Targets, you'll see new options you can use to embed a "Tweet Your Congressperson" link in the after-action thanks page, or to put a "Post a Question to Your Governor's Facebook Page" link in a mailing. We're looking forward to hearing about all the use cases you come up with!

The custom target groups interface allows you to enter these values as well. The fields are hidden by default in a new "Optional Fields" section at the top that allows you to reveal the ones you want to use. If you edit an existing target group that has values saved for any of these fields, those fields will start out visible.

More Autocomplete Options For Reports

We've enabled autocomplete, or type-to-search, functionality for tags, mailing lists, targets, users, events, and event campaigns. Yeehaw!

The functionality will be triggered if your report parameter names begin with any of the following: page_id, mailing_id, callpage_id, tag_id, list_id, user_id, event_id, campaign_id, or target_id.

When you type in part of the name or title of the related record, you can then choose from matching elements, as you can do with Pages and Mailings currently.

This should work seamlessly with reports you've created in the past as well as new reports you write by hand or generate with the query builder, but if you run into any rough edges let us know and we'll get them ironed out.

Thanks to Nathan and Ruby at MomsRising (among others) for suggesting!

Mailing Test Group Improvements

We made it easier to manage your mailing test groups. We’ve added a "scheduled" status for test groups that have been scheduled but not sent and a link to cancel the scheduled send time for an entire test group (and all the mailings in it). Thank you to both Brittany at NRDC and Sarah at AllOut for helping us find the sharp corners!

And we made it easier to start from a draft copy of your first mailing when creating a test group. If you create your test group from within a mailing and select "create copies" we’ll copy the mailing (instead of creating a blank draft). Thanks to ClientCon 2015 participants for suggesting! (Are you signed up for ClientCon 2018 yet?)

PA and NC Redistricting

Shortly after the release, we will do a mini-update and match redistricted users in Pennsylvania to the congressional district, and users in North Carolina to the state legislative districts, they will be in for the 2018 elections. We’re watching for decisions in other court cases that might lead to redistricting, but please let us know if you learn of other states!

The new data will be stored in the core_usergeofield table. Older, obsolete entries in core_usergeofield will be removed.

To report on or target users in these future districts you could use SQL like:

SELECT user_id FROM core_usergeofield
WHERE name = 'us_district_redistrict_2018'
      AND value IN ('PA_01', 'PA_02');

This snippet gives the district ID in a mailing (and other places where the user object is in context):

{{ user.geofield.us_district_redistrict_2018 }}

Here are the user geo field names currently in use:

  • us_district_redistrict_2018: future US Congressional district
  • us_state_district_redistrict_2018: future state house district
  • us_state_senate_redistrict_2018: future state senate district

Staff Permissions

Report Downloads: In our last release we modified who can edit and download reports. These changes created some problems. Sorry about that! Report related permission groups are now:

  • Reports - Anyone with this permission status will be able to create, edit, view and download reports. Full reporting access!
  • Reports View & Download - With this permission, staff can view reports in the admin and download them, but not edit them. Great for protecting your perfectly designed report from being altered.
  • Reports View Only - Staff can view the report within ActionKit, but they won't be able to edit or download the report.

Thanks to Brandon at MercyCorps and Aaron at Democracy for America for alerting us to the workflow problems!

Permission Standardization: Our built-in permission groups were not consistent across clients due to changes over time and customization. With this release, they’ll be standardized. This is the first step toward adding some more granular permission options.

We reviewed the changes and what they mean for your organization and do not anticipate issues. However, if a non-superuser staff member has problems accessing previously-available features, please report this to support!


Events: When creating a report with the events querybuilder, you can now display or filter on the source code for the action that created the event. We've also made it easier for you to access total signups for an event campaign in the templates. Requested by Beca at Everytown.

Snippets: Whipcount targets and response snippets have been added to the snippets menu for notification emails. Thanks to Chris at FCNL for the use case.

Donation Query Builder: We reordered payments and orders in the reporting querybuilder so the broadest option (orders) is at the top. As a reminder, the "all orders" options are associated with the original order information, while the "payments" options reflect individual transactions that transfer money into your organization's accounts. Thanks to Kate and Marie at NRDC and Mais at Syria Campaign for inspiring this change!

Mailing Page: In some circumstances, the “Performance” section on the top of a mailing result page was collapsed and could not be opened; this should no longer occur. Thanks to Caitlin at Courage Campaign for helping us with some complicated debugging.

Your Tweet Treat

Our favorite recent tweet and your bonus for reading all the way to the bottom!


Hey ActionKitties!

We've added a bunch of functionality to the admin and API to make complying with GDPR requirements easier for ActionKitties with European signers.

Our consent feature, to more easily track opt-ins, needs a bit more testing before going live and will be in our next release in early April.

Not subject to GDPR? There are still some goodies in here for you: A/B testing improvements, more granular permissions for reports and speeding up bulk mailings by a factor of 4x.

All this and more will be available in an ActionKit instance near you tomorrow, March 29th.

Right to Erasure

With this release, we’re rolling out the “Right to Erasure” feature to help you comply with the EU’s General Data Protection Regulation (GDPR). This feature anonymizes the user's data while leaving the relationships to actions and mailings intact.

To delete data for a user, first go to the Users Tab. If your staff account has superuser status, you will see an "Erase Users" button in the right side menu. Enter the User ID or email address of the user that will be erased. Checking the boxes below that allow you to get more specific with what data related to that user is erased.

The same functionality is also available via the REST API.

Erasing data in this manner is irrevocable, so take care.

You can review the documentation for this new feature here.

View Reports Permission No Longer Includes Download

To give you more control over which staff users can access large amounts of data, the View Reports permission group will only allow staff to view reports in the admin UI. They will no longer be able to download reports that return over 10,000 rows. The Reports permission group or superuser status is now required for downloads. Thanks to Sum of Us and MoveOn for requesting!

Even More Mailing Zooooooom

We turned mailings up to 11. The dedicated instances used to send mailings are now 4x's faster for all clients. For most mailings, this will translate directly to a 4x increased send rate. So proofread those mailings! (Note: this feature was made live on March 20th, so you are already seeing this speed up!)

A/B Testing Improvements

Preview of Thank You Pages for A/B Testing: You can now preview both your built-in follow-up (Variation A) and your test (Variation B) for any after-action options like thank you text or social media sharing from the A/B test dashboard screen. Just click "Thanks" under that variation. Thanks to Shannon at UltraViolet and Keith at PCCC for the suggestion!

Enrollment Decluttered: We fixed a bug that sometimes led to extra records being created in the lab_enrollment table. These didn't invalidate your test results, but they were confusing so we got rid of them. Discovered while investigating a report from Mark at CREDO — thanks!


Event Host Info: On the Host Tools screen, it’s now clear that the host’s personal email and address fields aren’t editable. They appeared to be previously, but attempts to edit them returned an ugly error. If a host wants to change their email address, they should use their user profile form at /me/update. Hosts who want to give someone else event responsibilities should use the attendee roster to promote an attendee to a co-host. Thanks to Everytown for reporting!

Special Page Fields Documented: There are a few special cases in which custom fields with a certain name trigger a built-in behavior at ActionKit. We’ve updated the manual to describe these:

  • A value in a field named redir will cause all requests to view this action page to be redirected to this URL.
  • A value in a field named migration_redirect_url will cause requests from users who are not logged in as ActionKit administrators to be redirected, which can be especially useful when first setting up ActionKit.
  • A value in a field named ak_recaptcha_enabled will override your site's default settings for enabling captchas.
  • A value in a field named image or og_image will be used as the sharing image URL for Facebook if one has not been set on the After-Action Info screen.
  • A value in a field named description or og_description will be used as the sharing description text for Facebook if one has not been set on the After-Action Info screen.

HTML in Reports: We've updated an internal filter used to format links in report results so it more carefully handles HTML in its input. If you're suddenly seeing raw HTML in a report output, and your report or query template uses the |link_text filter (or you're not sure if it does), contact us via Support.


Hey ActionKitties! Do you enjoy these release notes? Are there people at your organization who might find them useful? Please forward this ActionKitties sign up link to anyone who might be interested:

Improved Save for Mailings

Remember how irritating it was to scroll back down to the Content section of a mailing after hitting the “Save” button? No more! Experience the joy of saving in place! Complete with a pop-up alert to tell you if your work was saved, or if there are errors that need to be fixed first.

Donation Fraud Filters and High Risk Country List

We offer donation fraud filtering through MaxMind minFraud service which you can turn on in your instance. MaxMind uses a variety of factors to give each donation a score on how likely it is to be fraud. The donor’s country is one of these factors and MaxMind maintains a high risk country list and blocks donations from IP addresses in those countries.

Up until now, this list has been fixed (Ghana, Nigeria, and Vietnam). We can now vary this list on a per-client basis. If you'd like to add or remove countries from this list, let us know via Support!

Targets and Delivery

  • Last release we updated state legislator contact data. This release we added a script to load the latest data we have to your instance nightly. Changes still won’t be immediate -- our data source pulls most of this information from the websites of the various state legislative bodies. But you will have updated info almost as soon as we do!
  • We fixed a bug that could cause immediate signature delivery to fail. If immediate delivery was set to disabled in the backend because 30 signatures had already been sent to a target in a 24-hour period, and then you set the page to unlimited immediate delivery, immediate delivery still remained disabled. We found the source of the problem and fixed it. Now you can move to unlimited delivery for a page at any point. Thanks to Mais at The Syria Campaign for reporting the problem.
  • We updated federal and state districts to validate against U.S. boundaries, instead of known legislators. This means you can include vacant districts when you select recipients for a mailing without writing custom SQL so you can easily target constituents of these districts in advance of an election. But remember, it’s best to exclude these districts from standard advocacy mailings that use target snippets because there is no target name! Since the target snippet requires a name, the mailing will fail to send to anyone in the vacant districts, but failed mailings slow down your send. Thank you to Ben at People for the American Way and Matt at MoveOn for requesting.


  • Starting with the last release, a CSRF token is now required to edit an existing event on an event create page. Tokens were patched into your event_create.html templates.
  • Also, some parts of the REST API supported JSONP responses. This is now disabled.
  • We’ve strengthened the warning against forking actionkit.js -- this will break something. If you need to do something and you aren’t finding a good hook, please let us know.
  • The hint for filtering on "Lat/Lon, Distance" is now attached to the "Geographic Coordinates" selection (where the choice resides) in the Query Builder for Users, Actions, Events and Media instead of “Home Address” (where it doesn’t). Thanks to Chris at FCNL for alerting us to the error.

Documentation Updates

We updated:

  • Instructions on how to upload your custom event fields for events. (Hint: custom event fields are a type of custom action fields, so name your column action_[field_name]). Thank you to Lee at Everytown for Gun Safety for the suggestion.
  • DonationPush requirements. A string is expected for amount. Thanks to Micheál at Civis Analytics for reporting the unclear error!
  • Template tags. The page.type tag can be used by all Page types in the thank you text. Thanks to Ben at ProgressNow for template tag questioning!
  • Mailing Tools/From Line section. Our requirements have changed.


Hey ActionKitties! Just a few new things coming to your instance late tonight. We're continuing work on events improvements (like adding an event moderation tool and support for timezones), Instant Donate upgrades, exposing social media info for advocacy targets, and more.

User Form Field Customization for Pages

You can now set fields that use radio buttons or select lists to required when creating your page and we’ll enforce it. Thanks to Jin @ PeoplePower for reporting that we weren't previously!

Also, we moved the "is required" error message above the first input field or after the last one where possible as we do with other field types. Previously the message would show above or below the first input element of that type.

State Legislator Data

We’ve updated state legislator data in all client instances. Please let us know if you see anything off!


  • We’ve added a notes field to the Query Template creation screen. The notes as well as the created and updated dates are now displayed on the Query Template list. Thanks to Jase at DFA for the suggestion.
  • A few weeks ago, we added subscription change types for re-engagement related subscribes and unsubscribes. We’ve just now added these to the query builder. Reports for users subscribing or unsubscribing to various lists now include all change types. Thanks to Reuben at Demand Progress for reporting the oversight.
  • We fixed a missing join in the Mailings Query Builder. You could previously get a count of total failures but breakdowns by subject or user domain were incorrect. This has been fixed, however, this adds an additional join between some very large tables so expect to wait a bit. Thanks for requesting to Courtney at Color of Change.


  • If a web-viewable mailing used a mergequery for targeting, an ISE occurred when a user tried to view the mailing because the temporary targeting table didn’t exist. We now save data from mergequeries that aren’t cached for one week. During that week, web views are available. After that, the user will get a generic mailing view error message, not an ISE. Thanks to Zazim and Mercy Corps for reporting the specifics.
  • We’ve made mergefiles and mergequeries work for signature delivery mailings. Delivery mailings can use any of the columns in core_target for mergequeries and mergefiles. Thanks to Shannon at Ultraviolet for the use case!


  • We continue to make improvements to Instant Donate based on your feedback. Instant Donate now works on a page that you’ve enabled for PayPal donations. If the user selects PayPal they go to their PayPal account. If they go through the standard donation flow they see the Instant Donate pop up. For this release, we prettified the shared pages, like the user profile and privacy policy, that end users can see to look more like our Original templateset. These are Instant Donate pages that are shared across participating clients so they have a plain vanilla appearance and aren’t customizable. We’re still looking for beta testers this so let us know if you’re interested!
  • We cleaned up the formatting for currency symbols and ISO codes for display on donation pages. Thanks to 350 for asking about this!
  • Braintree only: We added an option to the CONFIG screen in the Recurring Retry section. If you set "Cancel After Retries" to true, we’ll cancel the profile at Braintree and set the status at ActionKit to canceled as well. Currently the profiles remain active unless you cancel them at Braintree manually or through the ActionKit API.


  • We added some text to the signature delivery screen clarifying that immediate delivery continues only until 30 immediate messages are sent to any target in a day then delivery switches to batch. Prompted by inquiry from Marie at NRDC.
  • We fixed the search tooltip that was covering up the username and other text beneath it. Thanks to David at ONE for noticing!

2/27/18 (announcement re: GDPR compliance)

Hi ActionKitties:

Europe will begin enforcing its General Data Protection Regulation (GDPR) at the end of May 2018.

These regulations give EU residents greater control and ownership of their personal information. The penalties for not complying with GDPR can be as significant as the larger of 4% of annual revenue or EUR20mm.

We've been working with our vendors to verify that they will all be GDPR compliant on or before the May 25th, 2018 deadline. All of our impacted vendors either are or will be compliant before the deadline.

You can build a GDPR-compliant solution on ActionKit today, but there are two specific GDPR requirements that we'll be making easier for you to comply with in the near future.

The first is the "Right to Erasure". EU subjects have the right to request that you delete or anonymize any data you've collected from them.

We'll be implementing an anonyimization feature, accessible via both the ActionKit admin UI and a REST API endpoint, that, given an ActionKit user id or email, will anonymize all of the personal information we've collected on that individual (specifically, all data stored in core_user, core_user_original and, optionally, core_order_user_detail tables). We will also track that that user id was anonymized for audit purposes.

This anonymization is permanent and irrevocable. We will not be able to honor any requests to restore data anonymized via this feature.

The second requirement is that you obtain the consent of EU subjects to collect and use their data. EU subjects must positively opt into any data collection. A pre-checked checkbox or language buried deep in a linked privacy policy is not sufficient to comply with this requirement.

To track consent, we will be implementing a system that allows administrators to define default consent wording for each language, along with the ability to override this language on a per-page basis.

You will be able to choose whether this language is displayed for all users or only for a list of countries that you designate.

If the consent language is displayed, the associated checkbox will need to be checked for the action to be processed. We will also record the consent language that we served, along with a timestamp, for every action, so you will have a permanent audit record.

You will be able to deploy this functionality regardless of whether you host your pages directly on ActionKit or embed them in your own CMS.

If you have existing consent information that you want to port over to our tracking system, let us know and we will work with you to figure out a migration process.

Both of these features will be available in your instance in March.

Finally, the GDPR landscape will evolve over time. We'll continue to monitor the state of the art and expect to revise and add to this feature set in the future.

If you have any questions or thoughts, please let me know.


Hey ActionKitties! We’ve got a big one coming your way this evening with lots of juicy new bits.

Support for Partial Refunds (currently Braintree only): You can refund part of a donor’s one time donation or recurring payment, if the donation was processed through Braintree. We’ll be adding support for partial refunds at other merchant vendors in the coming weeks.

You prompt a partial refund by clicking 'Reverse' from the user’s Donation or Action History screen, just as you would for a full refund. This brings you to the 'Reverse Donation' screen and if the donation has settled, you’ll see a link to 'issue a partial refund'.

Click that link and a box with the amount available for refund will display. We subtract any previous partial refunds so you can’t refund more than was donated.

Braintree donations generally settle overnight and you’ll see this message until partial refund is available.

For reporting purposes, ActionKit will reduce the amount in core_order by the amount refunded, and add a row to core_transaction with type='credit' and the amount refunded as a negative value. As of this month, query builder reports and ActionKit built-in reports that reference core_transaction count credits where applicable.

New Options for A/B Testing on Pages: You’ll see a few new checkboxes under 'Fields to Change' on the A/B Test screen for Pages.

The Statement Lead-in Text option corresponds to the Lead-in Text on both Petition and Letter page types. It has no effect on other page types. Similarly, the Statement/Letter Text option allows you to test variations in the script for Call and Whipcount page types, and the statement for Petition page types. Finally, the Survey Question option exposes the survey question for Call, Whipcount and Unsubscribe page types. You can see all this info in the tooltip for the relevant option.

There's also a new checkbox that allows you to test user recognition. This will modify the page setting that controls whether user AKID recognition is disabled, or is disabled for users who've already taken at least one action. Thanks to Mark at CREDO for requesting!

We documented how to use custom page fields and templates to A/B test page layout changes like disabling the thermometer.

And we added tooltips to each of the statistics on the Test Dashboard providing a bit more information about how the number is calculated. Thanks to Shannon at UltraViolet for highlighting the value of this and suggesting some descriptions.

Instant Donate: Thanks to those who took me up on the offer to see our Instant Donate set up. We got some excellent feedback and as a result have started on adding a monthly upsell to the flow. This will be built into the Original templateset for Instant Donate only. Expect to see this in the next release or three.

We also hotfixed a change that makes it possible to override the default button style for the one click snippets in the mailer. You can’t change the text or the basic structure but the appearance can be modified to match your look and feel. Details are in the Instant Donate section of the guide.


  • We now skip totally blank lines in merge files and we fail mergefiles that have a blank for the key column with data after it. Thanks to Nathan at MomsRising and Duncan at for the examples.
  • We made the error message clearer for merge files and queries that include multiple rows for one user. The mailer only accepts one row per user in the file. Thanks to Adam at MoveOn for reporting.
  • If you were a very speedy clicker with slightly bad luck it was possible to click the button twice to confirm scheduling your recurring mailing and have two copies of the mailing set up at the exact same moment to send at the exact same time. Just try to do that now! Thanks to Mark at Progress Texas for quick draw scheduling.
  • Recently we added a warning about links that had query strings in the URL that we couldn’t parse but it was displaying incorrectly in some cases. This has been fixed. Thanks to Chris at FCNL and Ben at Alternet for reporting.
  • We now allow whitespace chars other than spaces around "AS" in merge queries. This bit Jeff at M&R because our code searched for 'as column_name' expecting a space before 'as' and was fooled by 'as' appearing at the beginning of a line preceded by either a newline or tab character.
  • It was possible to use a recurring mailing parent as a targeting inclusion/exclusion, although this led to build errors on the mailing that targets the parent. These are now excluded from the targeting drop downs.

Braintree-Only Changes

Braintree Javascript upgrade: We added a {% braintree_js_libraries %} tag to load javascript libraries that Braintree donation pages depend on. You can use this in your donate.html and recurring_update.html templates to automatically load the latest version of the libraries that we have tested as working. We attempted to patch this to all client templatesets. If you don’t see this in your donate.html or recurring_update.html templates, you can insert {% braintree_js_libraries %} instead of the following lines:

If you want to target a specific, constant version, you can use {% braintree_js_libraries "3.12.0" %}.

Sync recently-cancelled profiles: We synced only active profiles, so if a payment was made the same day you or a donor canceled the profile, the final donation might not have made it into ActionKit. Now it will. Thanks to Scott at MoveOn for the use case. Sync status change: If the sync finds a profile that has been canceled, the status is only changed to 'canceled_by_processor' if the profile was previously 'active'.

Salesforce Sync

Work on the Salesforce sync continues! Recurring donations have been added and are now in testing.


  • We added a new option to the spam settings, accessible from the CONFIG screen, called "Email Blacklist Check" which accepts regular expressions to use for identifying spam email addresses. This allows you to block an entire domain. Please use with care. Don't blacklist gmail! Read more about the setting.
  • The optional inline TAF box (present but disabled in the Original templateset) had a typo that caused the preview feature to not work. Thanks to Ben at Progress Now for reporting the issue.
  • We added permissions to view the recently-released email log for transactional event emails to the 'Pages-Edit,View,Create' and 'Events-Manage' permission groups. This change was hotfixed so it's already in your instance. Thanks to David at MoveOn for flagging.
  • We changed our approach to freeing the emoji! For most of you this won’t change anything, but for international clients content that was previously converted to numeric entities should convert back in the visual editor, so Hebrew will become Hebrew again, etc. You may need to force a reload for your browser to load the new code. (Technical description: we now only convert the four-byte characters into numeric entities while leaving other characters alone). Thanks to Benjy @ Zazim for letting us know about the problem.


Hey ActionKitties! For this release we banged out some bug fixes and minor improvements, which you'll see in your instance by tomorrow morning.


  • We’ll show an 'Estimated Finish' for mailings with a rate limit on the mailing report screen in the speed section, so you don't have to calculate manually to see if your mailing is going to take 3 days to send.

  • Re-engagement jobs are displayed and can be stopped from the 'Manage Jobs' button on the Mailings Tab.

  • When we unsubscribe someone who marks your email as spam, they now have a source of 'mailing' in core_action for the unsubscribe. We already recorded the mailing_id. Thanks to Courtney at Color of Change for reporting the missing bit.

  • We fixed a couple of problems with mailing previews.

    • First, we'll use fake data to generate a preview on the compose screen if your mailing has a target set that had no users the last time it was built, instead of displaying a 'list index out of range' error. Thanks to Sara at Free Press for reporting.

    • And, if the preview hits an exception using fake data for an uncached merge query, you’ll see a more informative error:

      "We're unable to generate a preview for your mailing. This might be because you're using a merge query that isn't cached, so we're substituting fake data for it in the preview. You can fix this by either setting the merge query to cache or generating proofs instead of using previews. Proofs will run your merge query and use real data. Here's the original error we found: [error]"

      Thanks to Josh working for People Power for flagging.


  • For one-time donation reversals, we now display the name of the staffer who prompted the refund on the user’s donation history screen. Thanks to Michelle at NRDC for the request.
  • We updated some code in the admin UI to know about recurring profiles with delayed start dates so they wouldn’t be marked as failed while awaiting the initial payment. Thanks to Brandon at Mercy Corps for the example.
  • We stopped lying! On the Download Actions screen you can check a box to include 'full address' with the results, and that now includes address2. Thanks to Ben at J Street for flagging!
  • And we acknowledged reality. We still had Obama listed as President. Sadly, this has been corrected.


Happy New Year ActionKitties! In this release we have a few improvements to our code related to advocacy targets and we’ve added tracking for event-related transactional emails. As usual, you will see these changes in your instance tomorrow. Also, we’re starting to make plans for ClientCon 2018! Watch your inboxes for a survey on timing and location.

New Features Demo

Have you been thinking of trying out Instant Donate or Remember Me? Monitoring progress on the Salesforce integration? Let me know if you're interested in joining a call where I'll show how they work and how to set them up!

Congressional District Targeting

Historically we’ve used zip-to-district mapping to assign users to congressional districts. With this release, we’re moving to assigning users based on locating their geocoded latitude and longitude within TIGER census boundaries. We fallback to a new (TIGER-derived) zip-to-district and lower precision lat-lon lookup. State districts have already been using TIGER-derived boundaries.


  • We made a few changes to speed up the Advanced Search from the Event Campaign Dashboard in the admin UI.
  • And we changed how we calculate the “Count” for Tags on the user record. Previously we counted the number of actions. Now we count the number of pages. The tag order for specific users may change as a result. This speeds up the user record load time if the user has many tags and actions.
  • We fixed a bug that kept the required asterix from displaying for “Name” when first and last are both required. Thanks to Mark at CREDO for flagging.
  • The action query builder was unable to display whipcount targets or their responses; this oversight has now been rectified. Thanks to Chris @ FCNL for flagging the issue.
  • We increased the tweet limit to 280 characters. Thanks to Katie at PFAW for the request.
  • We fixed a place in the documentation that referred to but should've been event.title. Thanks to Ethan working for People Power for taking the time to point it out!