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.


Deliver Signatures to the Senate with CWC

We've added support for the Senate's version of Communicating With Congress! This means that your petitions to the Senate can now use the Senate's preferred delivery mechanism.

Sadly, the Senate decided to require a particular set of name prefixes for signatures: Mr., Mrs., Miss, Ms. and Dr. are the only prefixes their system supports. To provide additional flexibility in how this is presented to your users, we allow you to override ActionKit's normal prefix field with an action field called "cwc_prefix." Depending on your use case, you could use this capability to provide separate handling for a user's true preferred name prefix as opposed to the more-restricted list used for signature deliveries, so that ActionKit knows that they would preferred to be addressed as "Mx. Sam Browne" but will use "Ms. Sam Browne" for their Senate submission. There are several ways this choice could be presented to users; contact support if you're not sure how to set it up and we can share some sample code.

Report to Custom User Field Import

Lots of clients have developed use cases that involve running reports and then importing data from the results into custom user fields; we've made this process much easier by cutting the number of steps necessary. You can also keep these fields updated on a schedule!

To start, you'll create a report with the data that you want to put into a custom user field. (Make sure you create this custom user field ahead of time!) In this example, I'm creating a report that tells me how much money a user can donate before they "max out". (This example specifically applies to candidates and parties, and may be different in your area.)

Running the report, I see that user 1 has $1,000 remaining before they max out:

Next, I need to create a User Updater (from the Reports or Users tab) for this report and run it:

After it runs, I can check the User Summary page for user 1 and see a value of $1000 for their maxout_amount custom user field:

Admin Search As You Type

The admin searchbox now has super powers!

From any tab you can search Pages, Mailings, Reports, and Users (provided you have the necessary permissions). Search will offer suggestions as you type.

Or, click the arrow in the search box to choose a specific category:

The category groups include related models, so searching the Pages + category will suggest Templatesets too.

You can even search the ActionKit manual!

And you can start your search and then switch categories. For example, you could start a search from the Support Tab, then realize you want to search Reports+, or Pages+

You can still use the previous search. Just type in your search term and hit enter to run the tab-specific search that you’re used to.


Embedded Dashboards

  • Charts and tables in built-in dashboards (Mailing Dash, Draft Dash, User Dash, Event Dash, Campaign Dash) now render with full functionality, so if your dashboard has a line/bar/pie/etc chart, or sortable table, you can now see and interact with these on the Proof and Send screen, Mailing Report screen, User Summary screen, Manage Event screen, and Campaign Dashboard screen. Thanks to Julia at 350 for suggesting this enhancement!

Event Template

  • The "event_attendee_tools.html" template previously constructed the "cancel signup" URL like this: {% templatetag openblock %} url 'events.views.cancel_signup' {% templatetag closeblock %}

    Now it does so like this: {% templatetag openblock %} url 'cancel_signup' {% templatetag closeblock %}

    We'll automatically patch your templates where possible, but if you have the old version in a github repository, you should change it to the new version above. (The original URL will be supported for now, but not forever.)

Drag and Drop Editor

  • We fixed an issue that could cause default font size, color, and related styles to be ignored in the Drag and Drop Editor.

Engagement Queries

  • We sped up the default re-engagement reports by making them use the new summary_user table when possible.

Advanced Search Results "Next Page" Link Fixed

  • When using the admin interface's advanced search feature, the links to browse to the next page of results caused the search criteria to be wiped out, so you could only ever see the first 100 matches. This is fixed now, with thanks to Ismael at Color of Change for reporting the issue.

EveryAction Integration

  • We've added support for vanity EveryAction URLs in the the EveryAction integration. If you have a non-standard URL that you'd prefer to use to access the EveryAction admin via links from ActionKit please let us know and we can update your configuration. Thanks to Lee Henderson at EveryTown for the request.

Salesforce Integration

  • We fixed an issue that could cause the Salesforce sync to format donation data in unexpected ways. Thanks to ThirdBear working on behalf of DreamCorps for the report.

Small bugs

  • We fixed an issue that caused one Congressional Rep's contacts to be omitted; thanks to Amy @ Win Without War for reporting.

  • We fixed a bug that was caused a few ActBlue express donations to fail to load into ActionKit. Affected donations have been reprocessed successfully. Thanks to Sophie at MoveOn for the report.


Drag-and-Drop Mailing Editor

We're thrilled to announce a new option to make it easier to build complex mailing layouts: the drag-and-drop mailing editor. It doesn't replace the existing code and visual editors—they're still there for direct control of your HTML—but provides a more visual alternative:

The drag-and-drop editor also offers interesting design options like grid layouts with rows and columns and options to hide blocks of content on mobile or desktop.

To make the editor available in your ActionKit instance, a superuser needs to go to the "Configure ActionKit" screen and enable it in the "Admin Settings" section at top right, shown below.

Once the feature is enabled, you can still choose whether or not to use it mailing-by-mailing, or even change your mind while working on a mailing. To switch, use the "Editor" toggle that will appear at the end of the "Basics" section of your mailing compose screen:

Much more info about the drag-and-drop editor is available in the documentation. We'd like to thank Theirworld for early feedback on the feature.

Query Builder

You can now filter clicks and actions based on the browser (user agent) used to create them. For example, you can now build a query for mobile clicks by date:

This adds to existing support for browser info in the Display Columns section. Remember that user agents are only tracked for actions since last release.

ActBlue Integration

We've changed how our ActBlue integration handles addresses received for ActBlue Express donations. ActBlue Express gifts are one-click, so they don't prompt the user for address data. As a result, the addresses we receive with those gifts can be months or even years out of date. This can result in overwriting fresher address data on the ActionKit side.

When we already have an address for a user, Express donation addresses will not update core_user. They will still go to core_order_user_detail for the donation. Additionally, when using Donation-Only/Compliance Mode in the EveryAction sync, these addresses will be ignored unless they are the only donation address we have for a user.

Thanks to Everytown for a detailed description of the issue and helping to puzzle out how this should work.

EveryAction Sync

  • We've improved our tracking of errors in the EveryAction integration. Two new tables are available, core_everyactionorderfailedsync and core_everyactiontransactionfailedsync, which can be used to report on failures to send contribution data to EveryAction. Additionally, failures to send user data to EveryAction are now shown in the user admin:
  • We fixed a bug that could break the EveryAction integration if you had a merge query used to generate source codes that didn't include every order being sent to EveryAction. Thanks to Kristin Peña at People for the American Way for reporting this one.
  • We've improved how date fields are handled in the EveryAction integration. You can now map new date fields like Date Deposited and they will get be converted automatically into an EveryAction-compatible Eastern Time date. Thanks to Everytown for the request.

Salesforce Sync

  • Previously you couldn't sync $0 orders to Salesforce if you also utilized a trans_id mapping to prevent duplicates. That's been fixed now, and we've added docs on the sync's handling of $0 orders. Thanks to Shawn at J Street for the request.

Bugfixes and Internals

  • We fixed an issue with the Twitter card meta tags in the Original templateset. In your custom templatesets, if you'd like your shares to feature a larger image when they appear in Twitter, you can change the content of the twitter:card meta tag from summary to summary_large_image.
  • Petition and call pages would sometimes incorrectly recognize users who were missing address details needed to find their legislative targets. We'll now correctly show a contact info form to those users. Thanks to Caitlin at Courage for the detailed report.
  • We reverted a recent change to the format of custom event fields in the REST API. Thanks to our colleague Kyle at Mobilize for the report.
  • We fixed a situation where rate-limited mailings could send slower than intended.
  • Our code to detect "TK" placeholders in emails and prevent sending was incorrectly activated by references to the Tk'emlúps te Secwépemc First Nation community. We've added an exception to avoid this. Thanks to and the British Columbia NDP for reporting.
  • Behind the scenes, we're in the process of upgrading to a more recent release of the Django framework that ActionKit is built on. This release includes a minor Django version upgrade.



You can now export report results to Google Sheets with the click of a button! The first time you export, you'll need to authorize ActionKit to have access to your Google Drive in order to complete the exports, but once you've done that, exports are quick and easy!




We already tracked user agents for opens and clicks, going forward we track for actions too. Check it out in the Actions Query Builder. Thanks to many for requests on this, most recently Jase at



You can now find users by email from the ActionKit header search box.


Also, the fields on the delivery options screen were not showing up under the correct headers. We fixed them! Thanks to Jordan at MomsRising for pointing out the problem.


We fixed a problem where Video blocks didn't work correctly and a bug in the image file viewer in the drag-and-drop mailing editor. Thanks to Tom Lavelle and Jamie Lonie at Their World for the reports!


We added a new template filter, at_most, that allows you to provide a maximum value. For example, if suggested_ask is 3200 and value is 2800: {​{ suggested_ask|at_most:2800 }} will return 2800. We also added at_least, which allows you to provide a minimum value. For example, if suggested_ask is 100, {​{ hpc|at_least:200 }} will return 200.


We added a new mode for the EveryAction sync called "Compliance Mode" which only sends Contact updates for donations and sources user address data from the order user detail table. Thank you to Brooke Heller and Lee Henderson from EveryTown for helping us figure out how this should work.

We improved the EveryAction sync to always send date values in Eastern Time which is the timezone used in EveryAction. Thank you to Lee Henderson at EveryTown for the request here.


Better Email Blocking

Usually you want members to receive your email, but sometimes you don't. So we've made it easier to avoid emailing certain email addresses.

You've been able to block recipients by domain or email address years. We've now extended that feature in a few ways. You can now block emails containing certain strings. For example, you can avoid mailing any address that contains the string "spam" or ".gov".

Blocked users won't be included in mailing counts and will be assigned a subscription status of 'blocked' in the database. You can use longer lists now, too.

You can configure blocking options through the Mailings tab, under List Hygiene in the right-hand menu.

They're also available via the REST API resources blackholedemail, blackholeddomain, and blackholedpattern.

Consult the documentation for more info and contact Support if you have questions.


We added a count of open, upcoming events to the campaign dashboard:

We've also documented a little-known REST API endpoint for event searches, and gave it support for custom event fields. Thanks to Lee at Everytown for the suggestion.


We sometimes hear of new staff finding themselves unexpectedly blocked from the ActionKit admin, because the "Admin Interface" checkbox on their staff profile isn't checked. To help avoid this, the "Admin Interface" option is now pre-checked when you create a staff user:

Everything Else

  • We now note in the Mailing History page when a mailing's build has been invalidated due to changing a mailing's targeting query report's SQL as well as other indirect changes.
  • Import pages were cluttering up the list of available landing pages for mailings, so they've been removed.
  • We fixed a bug where some timed send drafts displayed as "generating" despite being drafts. Thanks to Elijah at Ontario NDP for the report.
  • A mailing test group could die if you had added new entries to your seed list before sending, but now that's fixed. Thanks to Bianca at 350 and Mais at The Syria Campaign for the report.
  • We fixed an issue on donation pages effecting very old olde browsers. Thanks to Brandon at MercyCorps for the report.
  • We made a small change to Original's petition.html, to use a div tag instead of a paragraph for the lead-in. Thank to Third Bear working for Kairos for the request.
  • We fixed two issues with international targets, including one affecting last names of some UK Members of Parliament. Thanks to David and Tamara at for the report.
  • We fixed a bug that could result in a merge loop when automatic user merge was enabled, thanks to Eileen at DSA for the report.
  • Users now get only one unsubscribe confirmation email per day, even if they manage to unsubscribe multiple times.



Campaigners sometimes rebuild or change targeting on a mailing not realizing that it will cause other mailings to need rebuilds. We'll now let you know what other rebuilds will be required, and ask you if you're sure if you still want to go ahead with your rebuild or targeting change.

Rebuild now? If you do, one or more mailings will need to be rebuilt.


We updated our vendor for U.S. federal legislators, and have loaded district offices for all of these targets. Please let us know if you see any inaccurate data or hear feedback from legislator offices.

We now support targeting non-voting delegates to the U.S. House from DC, PR, VI, AS, GU, and MP. If that doesn't bring about DC statehood, what will? Go to Pages -> Targets -> Legislative Target Groups -> Add to create a group, and select "U.S. House Delegates" as the type. Thanks to Amy at Win Without War most recently, and many others over the years, for requesting we end taxation without target-action in the District.


We added a way to differentiate between users that have been merged and the primary users on the Users tab. Thanks to Dominique at Pollinis for the request!

Shannon Turner merged into user Shannon Turner (linked)

We also added some more documentation about our new permanent user merge feature.


We fixed an issue where lists inside the "talking points" section of a Letter-to-the-Editor page were not visible. The Original/lte.html template has been patched, and others where possible. Thank you to Jin on behalf of Grassroots Law for reporting the issue.


We added a new column to the Event Campaigns listing showing you the number of upcoming events in addition to the number of total events, to make it easier to see which campaigns are in the past and which are current.


When working with a query that uses type-to-search fields to specify parameters, the values you entered are no longer lost when the query is run, so you don't have to re-enter them to run the query a second time. Thanks to Third Bear and Jase for bringing this issue to our attention.


Hiding a language made it impossible to unset email wrapper and template set defaults for that language. We've made it harder to get into this situation. Thank you to Andreea at 350 for bringing it to our attention.


Sometimes, when creating an ActionKit admin account for a new staff member, someone would leave the "Admin Access" checkbox unchecked by accident. Previously, this led to a confusing result: if they user tried to log in, they were bounced back to the login page without an error message. Now we'll show a more specific error message indicating what happened.

EveryAction Sync

We've add endpoints to our REST API to allow you to manipulate the user, order, and transaction mappings created by the EveryAction integration.

We improved error handling in the EveryAction integration to address problems found during the last release. Thank you to Lee at Everytown for Gun Safety and Bryan at RepresentUs for reporting the bugs.

File Uploads

We upgraded the third-party code we use to handle some kinds of file uploads (including end-user file attachments in action forms) to a more recent version that has better support for iOS devices.

We don't expect a lot of people to be uploading merge files to the admin interface from your iPhone, but this will allow more of your users to upload photos from a mobile device straight into an action form. Thanks to Kathy at MoveOn for reporting the problem.


The currency account switcher is now supported for Braintree donation pages using 3D Secure 2.0.


Permanent User Merges

ActionKit's user merge offers a way to collapse multiple user records into one, moving action history into a single user account. This is helpful when you end up with one person with different email addresses and you want to see all of the user's activity in a single place. Previously this was quickly undone if the user took taking action again with multiple email addresses. Enter Permanent User Merges - a new configuration option:

With this setting checked your user merges will be permanent, meaning if a merged user submits an action or donation with a secondary email that you previously merged, the action will be automatically merged to the user record with the primary email.

The email the user submitted with will receive the after action confirmation if you set one up for the page but secondary emails will not be resubscribed so they won't receive bulk mailings sent from the Mailings Tab.

When you have this configuration option checked you'll also get the option to disconnect a merged user on the user admin page. This does not move historical actions back to the secondary user profiles but future actions by the secondary user will be attributed to that user and will resubscribe the user.

Thanks to Shawn Clement from J Street for the detailed feature request.

Query Builder and Reporting Improvements

Reporting gets some upgrades in this release:

Zip radius searches in the Query Builder are now much faster.

We added most recent phone number to the available display fields.

When you run a report, if you email yourself the results after the report finished running, we re-ran the report and then emailed you the results. Now, we'll just email you the results immediately. Thanks to Tamara at ONE for the request!

EveryAction Integration

The EveryAction Integration continues to be a hotbed of testing and fixes. Let us know if you'd like to join the beta. In this release:

We added support for ActBlue donations that transform from one-time to recurring. Previously these caused errors after they'd been upgraded in ActionKit.

We fixed a bug that resulted in the wrong total being sent for one-time orders which had been partially refunded before being sent to EveryAction.

We fixed a problem which was preventing some Contact updates from being sent to EveryAction when more than 10,000 updates needed to be sent.

Thank you to Lee Henderson at EveryTown for reporting all three of these and for all the help improving the integration working.

Other Changes

We have released support for 3D Secure 2.0 for Braintree accounts to ensure transactions are compliant with Strong Customer Authentication requirements.

We fixed an issue where special targets with blank country values could not be updated. Thank you to Brittany at NRDC for reporting the issue!

We made some improvements to international geocoding to ensure users always end up with the country they entered.

Uploading a spatial data file to an existing custom boundary group replaces boundaries with the same name, rather than erroring. Thanks to Patrick at NRDC for bringing this to our attention.

Using certain email targeting options with the Also Include feature previously caused slow or hanging queries, which we've now fixed. Thanks to Marisa at J Street and Jordan at MomsRising for reporting.

It's now possible to specify which list you would like to subscribe or unsubscribe a user to in your CSV file when uploading. This allows you to subscribe people to multiple lists in a single upload. This is done by including a "lists" or "unsub_lists" column in your file. Thanks to Daniel from National Nurses United for the request!

All "letter to the editor" pages require the user to enter their name and mailing address, because media typically will not print letters without having this information. When you create an LTE page and check the "customize fields" option, we make sure these fields are visible and marked as required so that you can't remove them -- but as a curious side-effect of the way this code was implemented, you could actually add those name and address fields to the page a second time, which made the page unusable because the system doesn't expect to ever find two different name or address fields on the same action form. We now properly disable those options so you can't break your LTE page in this way.

We fixed a problem where if you didn't set the About text for your page, you wouldn't be able to customize the share description for social media. Thanks to Third Bear working for Kairos and Dominique at Pollinis for the reports!


ActBlue and EveryAction Sync

We improved our support for ActBlue donation data in the EveryAction integration, addressing several bugs in the way refunds were handled.

We improved support for sending reversed orders and canceled recurring profiles in the EveryAction integration, which now handles the case where the reversal/cancellation happens before the original record was sent to EveryAction.

We've fixed a bug in the EveryAction integration where certain country codes allowed in ActionKit were not allowed in EveryAction, which could cause the integration to fail.

Thanks to Lee Henderson at Everytown for help identifying these bugs!

U.S. Legislative Targets

We now have names, email addresses, and phone numbers for almost all U.S. legislative targets. District offices for new members of Congress are still outstanding.

Some state legislator targets were missing phone numbers, which we've corrected. Thanks to MoveOn for calling our attention to it!

We corrected several state legislators whose names were spelled incorrectly, without accented characters. Thanks to Maggie and Jordan at MomsRising for noticing and mentioning it to us.

Thanks to NRDC for supplying email addresses for members of the Illinois State Senate.

We had the worst person in the United States as president for four years. A recent election corrected that error; the change is reflected in the U.S. President Custom Target Group.


Thanks Andrew at Dream Corps for reporting that the "churn" column was not displaying in the standard List Progress report. We fixed the issue.

We fixed an error in the code the "Pages" query builder used to calculate the sum or average of payments on a given page. Thanks to Nathan at MomsRising for the report.

We added a new table called summary_user, which contains the dates a user has most recently opened, clicked, or taken action from a mailing, among other useful stats. This is significantly faster than querying on tables like core_usermailing.


We now display more detailed errors for ACH donation errors. Thanks to Ty and Rebecca at DSA for the request.

We refactored the ActionKit Braintree Javascript integration so that it's easier to intercept the submit event, for example, to do an interstitial ask, or provide custom validation. Thanks to Aili at MoveOn and others for requesting this feature.

We fixed an issue where a non-whole number default donation amount would not show as the default. Thanks to Bianca at for reporting this.

Quality of Life

For clients with many tags, browsing pages in the admin was painfully slow. We improved the speed by only showing the 100 most-used tags in the sidebar filter. You can search for other tags in the search bar.


New State and Federal Legislative Target Data (Partial)

As the prophecy foretold, most newly-elected state legislators, at least for the majority of states that are already sworn in, will arrive in your instance by tomorrow morning. We have switched our vendor for US state legislator data to KnowWho and they expect to release the remaining states (Alaska, Arizona, Arkansas, Georgia, Iowa, Kansas, New Mexico, Oregon, Washington, South Dakota, Texas, Colorado and Illinois) next week.

We'll be updating federal legislators by tomorrow as well. Contacts and district offices will be added as they become available.

Yet More Zoom!

We added updated_at and created_at indexes to tables that were missing them. This should speed up some reports, as well as third-party sync queries on dedicated replicas.

Also, most mailing screens load much faster than before. The largest improvements are on the Mailing Targeting screen, which loads four times faster and the "Rebuilding" section on the Mailings Tab, which can load 10x times faster!

EA and SF Syncs

We released various fixes for syncing donations and handling financial batches with EveryAction. Thanks to beta testers at Everytown and Represent.Us. Submit a support ticket if you're interested in joining the beta!

We added a notice to the Salesforce Field Mappings screens to clarify that if your sync settings are configured to only send data from AK to SF or SF to AK (but not in both directions), then bi-directional field mappings will still only send data in one direction. Thanks to Jackie and Ethan at Third Bear working for Dream Corps for the report!


If you have a mailing that uses an hourly cached report in its targeting, we'll refresh the cache just before it expires, to help your mailings build even faster. This was inspired by Nissa, working for ECU.

We now show a warning if you use {{ "{" }}{ suggested_ask }{{ "}" }} in a mailing with a donation page that doesn't have a suggested ask rule. Thanks to Nathan at Faithful America for the report.

We adjusted the Re-engagement Overview and Settings screens to make it clearer when you have an active re-engagement job running. Thanks to Amy at Win Without War for the report!


  • We've added support for Canadian dollars using, in addition to the previously existing support through Braintree. Thanks to Lindsay at the Ontario NDP for suggesting this.
  • We improved emoji support! 😮✨🎉 Most text fields now accept emoji, including page content and custom fields. Some exceptions remain, like combined Name fields on action forms (which filter out the emoji) and user/click sources.
  • You can now delete survey questions via the REST API. Thanks to Ethan and Jackie at Third Bear working for ONE for the request!
  • We've tightened our anti-spam check for links in names to catch some links that got through previously, and added exceptions for some names and titles that could look like links to our code.
  • We had accidentally removed the Page from Model button from the Pages tab menu. Sorry about that! It's back! Thanks Joe from Everytown for the report.
  • We fixed a problem where you could create a GitHub connection for a templateset using the same branch for the live and preview versions. This would cause problems in previewing, so you can't do that anymore. Thanks to Rachel at 350 for the report!


Even More ZOOM!!!

New release, new zoom! We've got a bunch of speed improvements coming soon to an ActionKit near you.

Admin pages that display lots of minidashes are now much faster to load. That includes lists of mailings and pages. There's also a significant improvement in load times for the Pages tab and some related pages. (We'd understand if you have to go hit the Pages Tab a few times just now to see for yourself.)

We also sprinkled more zoom flakes on mailing build times. Mailings that use a lot of cached reports or target using other mailings now build up to 8 times faster. That's 800%!

Self Serve DB

Good news, you can now manage your own MySQL accounts for the shared reporting replica, if you're a superuser with two-factor authentication enabled, instead of needing to ask us through support. These accounts are necessary for direct database connections.

Each staff user's permissions page now indicates whether the staffer has a MySQL account. You can create a MySQL account if the staff doesn't already have one.

Or if they already have an account, but it isn't associated with the staffer, you can connect the two:

MySQL account management is limited to superusers with two-factor authentication enabled. Want to know who does or doesn't have 2FA enabled? That's now a staff filter.

If you have a dedicated replica you'll still need to contact ActionKit support to manage those accounts.

Paste Multiple Preview Lines Too

When composing a mailing, you can now paste in multiple preview lines just as you can paste in subjects. Once you have multiple subjects, paste multiple lines into the preview text box to set preview text for all of them.


The Mailer Limited Send Size setting now uses an absolute number of recipients. If you customized the setting, we'll use your custom percentage and current list size to set the absolute number. If you left the setting alone, we'll set the absolute limit to 5% of your list size up to a maximum of 10,000. If you use the limited send feature, you may want to review the new value and make sure it's in line with what you want.

Superusers, go to the Configuration > Mailer Settings > Mailer Limited Send Size to make changes.

We fixed a problem that sometimes caused mailings targeted to constituents of a legislative group to build very slowly. Thanks to Jenn at MoveOn for reporting the issue.

We fixed a bug where submitting an edit to a mailing's content at the exact moment it finished rebuilding could result in the mailing staying marked as building until a new build was submitted. This was most recently reported by Annie at Indivisible.

We fixed a bug that prevented certain mailings being used in targeting. Thanks to Jennie working for Jamaal Bowman for the most recent report.


It's easier to find which US legislators and built-in international targets have phone numbers or email addresses on file. Since most targets have both, we've added an icon to the target group admin screen to show where one is missing.

Thanks to Brittany at NRDC for the request.

You can now Bulk Edit to show or hide lots of Legislative and Custom target groups at once. Thanks to Joe at Everytown for suggesting!

We fixed a bug that allowed international users to take action without providing an address sufficient to identify their target. For Canada and UK MPs, we now really require postal code and country.

We added a new custom snippet type for Petition Delivery PDFs. You can add new custom snippets from the Config screen. Thanks to Brittany at NRDC for suggesting this too!


For users in the Salesforce sync, you can now trigger an instant sync from the user profile by clicking "Sync Now". Thanks to Shawn at JStreet for the suggestion.

And you can remove a user from the sync by clicking "Disconnect User". We've added docs on how to go about disconnecting a user. Requested by Mark working for FreePress.

Everything Else

  • We've added documentation on the recently added user-facing file uploads, prompted by questions from Eloise at StandUp America.
  • We've added a new report called Users Taking Action After Merge to help you find (and merge!) users who have taken action again after being merged. We also fixed an error that could occur when performing multiple user merges at the same time.
  • A recent release added rate-limiting as an anti-spam tool. With this release, actions caught by the rate-limiter are no longer saved. This release also extends name checking to catch more spammy links.
  • When displaying or filtering on user phone numbers in the query builders, you'll find some new "digits only" choices, which can be helpful for exporting or filtering. Thanks to Nicole at National Nurses United for suggesting this feature.
  • Custom user field names are normalized to lowercase before saving from a page. Thanks to Rebecca at DSA for reporting a bug that led to this change.
  • We fixed a bug with multiple-value parameters for re-engagement reports. Thanks to Sophie at MoveOn for helping us discover the problem.
  • Petition action resources in the API link to the actions targets, as with call and letter actions. Thanks to Third Bear (on behalf of for reporting this omission!
  • We fixed a bug that prevented page validation from catching some form values that were required but blank. Thanks to Rachel at 350 for reporting.
  • We fixed a bug in the display of the selected default Query Template. Thanks to Jase at 350 for reporting it.



We've improved the page load times for nearly every screen in the ActionKit admin. For example, the Reports Tab now loads 30 times faster! I was so excited I spent several minutes just hitting reload. (Sad but true.)

Most of the performance work doesn't lead to visible changes, except: we now only show 25 mailings of a type on the mailing summary screen instead of 75.

We also:

  • Optimized mailings that use a merge query or merge file for targeting so that they run faster and more efficiently.
  • Reduced the load time of the autocomplete widgets by more than 65%.
  • Improved rebuild times significantly for mailings that use a lot of cached queries or exclude a lot of other mailings. Maximum build times have been reduced by over 70-80% and average build times have been reduced by more than 50% across the board.

File Upload In Action Forms

We've added native support for accepting file uploads from users within your action forms. There's a new question type both in the survey builder and in the user-form-field customization options. You can restrict uploads to just images, or accept videos or document files. Uploaded files are stored in your AWS S3 bucket, using private URLs that allow you to download them without making them accessible to the public.

This feature does not work with pages that are hosted outside of ActionKit; contact us if you have a use case that would benefit from that capability. We've tested this feature on a variety of browsers, but let us know if you encounter any rough edges.

International Enhancements

We will now populate a user's city and region if they supplied a postal code when taking action.

We have improved postal-only geocoding for countries outside the United States. This was prompted by a report from Felix at ONE about issues with Canadian postal codes -- thank you!

We added a type to the display of international divisions so on your user admin pages you'll see "Constituency" for UK constituencies, and "Riding" for Canadian federal electoral districts. Thanks to David at ONE for suggesting this addition.

We added state, and if that's not available, region, to the Original print template for delivery PDFs. You can still customize PDFs however you want!

We improved the way we display error messages for form fields which have been hidden, such as the zip code or postal code fields which are hidden as you toggle between US and international addresses.

Mailings Bug Fixes

At long last, you can now specify users to view proofs for by email address as well as user_id. This was requested over the years by Jase for DFA, Michael for First Look Media and Shayna for Win Without War, among others. Thank you all!

We've edited the subject line for final mailing proofs for timed send mailings to note when they'll be delivered. Thanks to Erick at Presente for suggesting this improvement!

In a recent release, we added a check to let you know when you needed to exclude people who recently received a recurring mailing series, but that warning could misfire if you entered 0 for the series. This is now fixed -- thanks to Jessie at FCNL for the report!

We fixed a bug that prevented a recurring mailing series from stopping if you pushed stop at the moment that a mailing in the series was preparing to be sent. Thanks to Nicole from National Nurses United for helping us battle the undead.

We fixed a bug that could result in getting too few users when targeting a mailing with "Also Include" OR'ed criteria. Thanks to Aaron on behalf of Verified for reporting the MIAs.

Batch Delivery

You can now select which columns to show when delivering a CSV file of signatures to targets. With this change, you can hide users' full addresses, show international addresses, and include additional information like phone numbers. Thanks for the user cases to Kara at ONE, Caitlin at Courage and Virginia working for Ayanna Pressley.

When receiving a batch delivery proof, you'll now get a big red warning that this is a test message, much like you receive for one-off delivery proofs. Thanks to Emily working for 350 for the request.


You can now view which form types a user form field is associated with and filter UserFormFields by form types in the REST API. Thanks to Third Bear and Sky at MoveOn for the requests.

We made the relationship between custom boundaries and targets visible in the REST API. Thanks to Third Bear for requesting on behalf of ONE.


  • To frustrate some spam bots, ActionKit by default now allows only 20 actions from a single IP per minute. This is a limit that we set based on reviewing months of logs and confirming that this would only block spammy requests.

    API requests using a username and password are not rate-limited and, for now, unauthenticated submissions against /rest/v1/action/ are not rate-limited.

    You can disable the limit under Spam Settings on the Config screen. Read more in the docs, and please contact us if you have questions or issues.
  • We told you that if you used the importer's fast user field upload feature and only included an email, akid or user_id that we would automatically fallback to a normal import. In some cases, that was a lie.

    We now automatically turn off the fast user field upload option if you upload a file with only an email, akid, or user_id column. Really. We mean it this time.
  • If we know that your report results has too many rows, then we won't show the "Email report results (as table)" section anymore, since your only valid option is to download the results or email yourself the file.
  • It was easy to confuse snippets like {% verbatim %}{{ context.targets.title_last }}{% endverbatim %} (used on pages) and {% verbatim %}{{ targets.title_last }}{% endverbatim %} (used in mailings), especially when copy/pasting portions of a template from a page or mailing, so now we allow you to use these snippets interchangeably. Thanks to Senator Jo Comerford, formerly of MoveOn for the original request.
  • We fixed a bug that caused the express_lane custom user field to not be updated with information from ActBlue in some client instances. If this affected you, we’ll update the record in your database to fill in the missing information.
  • On the Action History and Transactional Mailing History pages of a user's record, we now display the timestamps in the staff user's time zone instead of server time. Thanks to Brandon at Mercy Corps for the request.
  • In some cases, the recorded time for tracked clicks could be off by a few seconds. Now it's not. Thanks to Adam at MoveOn for noticing the problem!
  • Custom fields using the "numbers" field type now use text behind the scenes; this prevents a rare HTML bug if you had an invalid number in your custom field and the custom fields section collapsed when you tried to save that would leave you unable to save your page until you either fixed the error or uncollapsed the custom fields section. Thanks to Josue at NRDC for finding this one!
  • Previously you'd get an unhelpful error trying to create custom boundaries by uploading a GeoJSON file that contained both polygon and multipolygon features. We now show a validation error and we've added the requirement that all of the geometries in the data must be a single type to the documentation. Thanks to Vanessa at Pollinis and Ben at ProgressNow for reporting the error.



We've got a bunch of improvements to snippets in this release.

We've added snippets to the Compose Mailing screen for your page content that you enter when setting up Petition, Letter, Call, and other types of pages.

Select your page from the "Landing Page" dropdown, then select the content you want to include for that page from under the renamed "Landing Pages" submenu. The snippets are divided by page type.

We also cleaned up some of the snippets menus when you're editing Pages to only show you snippets that are relevant to that Page's type.

We updated the snippets menus on the delivery job page to fix some broken snippets.

Finally, we removed some broken snippets on the Delivery screen for Petitions and Letters.


To facilitate organizing online and international events, we now save each event's time zone in a new column in the database. You can display this time zone in user-facing templates with {% verbatim %}{{ event.local_timezone|timezone_display }}{% endverbatim %} or query it from the events_event.timezone column. You can translate the names of time zones into other languages; see the documentation of the timezone_display filter for details.

We’ve made a few changes to the Original template set. We attempt to patch these to your templates, but if you don’t see these, we’ve outlined the changes in the documentation:

  • Region added to the Event Create template; region will display if the country selected is not the United States, so users can specify the relevant Canadian province, French department, etc.
  • Changes to event_search_results.html can speed up displays of the map if you have hundreds of events. Although we made several different change to this template, you can get most of the speed benefit by ensuring that this one short bit of modified JavaScript appears in your templateset: “Speed up map display by adding markers in bulk”
  • We fixed a bug where if you had moderation set up for your event campaign and you edited an event while Acting as Host, we would redirect you to the Moderator Tools page instead of the Host Tools page. If you are still being redirected to the Moderator Tools page after Acting as Host, you may need to update your templateset to pass the host_akid URL parameter.


  • If your page's after-action Redirect URL goes to ActBlue, we'll now fill the akid into the refcode2/refcode URL parameter, just like we do for /go/ redirect URLs and mailings. Thanks to Brandt working for Our Revolution for the request.
  • The REST API no longer requires trailing slashes! Thanks to everyone who's reported trouble with this.
  • Using the API to change orders with no import IDs resulted in invalid duplicate errors. This has been fixed. Thank you to Brandon at MercyCorps and Lee at Everytown for reporting it.
  • We've added SVGs to the list of image types we exclude from link redirection. Thanks to Aaron at Birdhouse working for Pollinis for the request!
  • We've fixed a problem where A/B tests were left running on pages the test was no longer attached to. Now, unattaching a page from an A/B test will end the trial for that page.
  • The Actions query builder now knows how to display and filter on the subject and letter text of letters to the editor. Thanks to Emily @ MiddleSeat for 350 and Liz @ CBD for requesting this feature.
  • If you don't have the permission to Manage Jobs and stop them, we now hide the button instead of showing you an empty list of jobs. Thanks to Phillip at ONE for the report.
  • The "rebuild at send" checkbox on the mailing "proof and send" screen only affects the behavior of scheduled mailings, so now we only show it if you are scheduling a mailing.
  • We added several useful text filters to the documentation. Thanks to Scott at MoveOn for the request!
  • We standardized email address tracking for state targets so it's the same as with federal targets:
    • is blank
    • TargetContact exists and has email only if a valid email exists for the target
    • TargetContact can also be created/overridden by clients and we won't change that data (until the legislator changes)


Recurring Donation Support in EveryAction Integration Beta

We've added support for recurring donations to our EveryAction sync. Contact support to join the beta today and help us test it out!

Pages Will Enforce If Postal/Region Are Marked Required

We've added code to allow you to require Postal and Region fields for international addresses. Previously we enforced Zip and State requirements but only for US addresses and we didn't provide a way to do the same for non-US addresses since there are countries that don't use postal codes. You can now set those fields required and they will be required for non-US users. We don't validate postal codes. We also added a "Required in US" mode for backwards compatibility with the old behavior of only enforcing zip/state requirements in the US.

Here's how it works:

  • In the user-form-field customization interface, there are now two versions of the "Required" mode for the State/Region and Zip/Postal entries: "Required", and "Required in US".

  • The "Required in US" mode matches the previous behavior of "Required": for US addresses, state and zip are required, but for international addresses region and postal are not.

  • The "Required" mode makes the relevant fields required for both US and international addresses.

  • The State/Region and Zip/Postal fields on all existing pages will show up in "Required in US" mode, and thus will maintain their previous behavior.

  • However, if you would like to require a region name and/or a postal code for international addresses, you can switch the corresponding entry in the user-form-field customization interface to "Required."


Customize Event-Related Emails Without Editing Templates

We've added a new step to Event pages called "Custom Emails" that allow you to customize event emails like event approval, cancellation, and similar emails without needing to make changes to your templatesets.

The options available are dependent on the page type -- the dropdown above shows the custom emails associated with the Event Create page type. Select an email type and the subject and body will be pre-filled from your templateset.

Select a type, make your edits and users who create an event on this page only will get them. Your templateset remains the same. Read more about this exciting new feature.

Customizing your events emails is easier with this new feature, but so is making mistakes! Be sure to test if you make changes.

House of Commons of the Parliaments of the United Kingdom and Canada Available as Advocacy Targets

These bodies are now available as built-in advocacy targets. As with US state legislators, you won't see these target groups in your instance until you enable them. You can do this from Pages->Targets->International Targets.

Simply select the body, customize the name if you'd like and save. The target group will then be available for selection when you create a Letter, Petition, Call or Whipcount page.

Currently you can only add the full body as a target group -- in an upcoming release you'll be able to target subsets of these bodies.

We match users to their electoral constituency or riding based on their geocoded latitude-longitude. The more address info provided, the more accurate the match. We suggest at least including postal code in the user form. Please note -- you cannot currently make postal required. This will be fixed in the next release, if not sooner.

You can also deliver signatures to targets for whom we have email addresses (100% for Canada and 98% for the UK). CSVs and a PDF template with appropriate fields for international deliveries is another upcoming addition.

You can use Page Target snippets and direct the mailing to constituents by selecting the Target Group or picking a Division:

Finally, international targets have been added to the user, target and page query builders.
We'll be monitoring for changes and updating our data regularly. Data about each target is in the core_target table.
This is our first step toward native support for international advocacy targets. Watch these notes for further improvements and please let us know if there's something you'd like to see! We may also add advocacy targets for additional countries in future -- please let us know where you are or would like to run targeted campaigns!


We continue to improve the Salesforce sync as well. This release we fixed a pair of SalesForce bugs that were using SF API calls by repeatedly sync'ing recurring donations, and by unnecessarily checking for missing donations. Thanks to Shawn at J Street for the reports.

We also added a 3 hour wait before we try again when any user fails to sync. Previously we only waited for new users.


  • By default, login_string tokens are good for 30 days, but you can also specify a TTL, in seconds, as an argument. An invalid TTL or a TTL longer than 30 days will by set to 30 days. Thanks to Ethan for the suggestion!
  • The embed widget now generates the code you need to include the Recaptcha spam prevention, if you have the Recaptcha Enabled custom page field set to 'Enabled'.
  • We fixed the Live Link Local Files template editing feature for Chrome that was broken by a recent Chrome release. Thanks to Aaron for Pollinis for flagging this!
  • We've improved how we email some reports. This resolves a variety of issues, reported by Mark on behalf of UltraViolet, including the occasional failure to deliver the reports.
  • There's a new filter for hidden in the Mailings Query Builder and Mailings Advanced Search so you can easily exclude these from your results.
  • We fixed a problem that prevented mailings with certain emoji characters in their subjects from building successfully - thanks to Blue America Project for the report.
  • Thanks for a report from Phil at ONE, we were able to find and fix a bug that sometimes hid the actual error when previewing a mailing with broken template code.
  • We changed a couple of names to improve clarity:
    • IP address checks: If an action taker's IP matches the block list, the spam check log will report: `Found in block list:`. If the IP matches the list of allowed IPs, the reason is `IP allowed`.
    • Multiple currencies: "Use Account Switcher" is now "Display Currency Switcher" to make it clearer that this is for switching between international currencies when dealing with donations.


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!