Release Email Archive: 2017


Hey ActionKitties! This is our last release of 2017. As usual, you'll see these changes and the new documentation will be live tomorrow . We'll be back with more exciting features in the new year, including tracking for event-related transactional emails, event management tools for volunteers, partial reversal for donations and additions to the Salesforce integration.

Happy Holidays and New Year from the Walkers! We'll be enjoying some time off ourselves so support will be closed on 12/22, 12/25, 12/29 and 1/1.

If you use Braintree as your merchant vendor, skip to the bottom for an important update on recurring retry settings.


  • There’s a new 'Event Campaigns' button on the Pages Tab in the tools menu on the right. Click to quickly access a list of all your event campaigns.

  • We’ve added event management staff user permissions. This is the first step toward building out a tool for volunteers to manage events. Staff users can be assigned only these permissions or these in combination with others, as with other permission categories.

    With only these permissions, the staff user will see the Home, Pages and Support Tabs when they log in. On the Pages Tab, only the Event Campaigns button shows in the tools menu on the right and only the ‘view’ link shows for any Page type except event pages. Event pages also have a link to the Event Campaign Dashboard.

    Staff users with either permission have access to all event campaigns and all the event management tools available on the Dashboard for each campaign (e.g. they can confirm, approve and delete events, email hosts, etc.). They cannot create or edit event pages.

    Staff users with 'Events - Manage plus Campaigns' can also edit campaign settings for any event.

  • In a release last month, we added an option to the Host Tools for uploading attendees after the fact. We were unable to patch this change to most templatesets but we've added a description of the changes to the manual so you can incorporate this yourself. If you don't see a link to 'Add Attendees' on your Host Tools page after the event is over or it doesn't work, your designer can review the relevant changes and adjust your template. Thanks to Ethan working for People Power for flagging.

  • We modified the Original templateset to decrease the maximum radius that a cluster will cover from the central marker on the event map. If you'd like to apply this change to your templatesets, make the following change to the event_search_results.html template:

    Remove: var markers = L.markerClusterGroup();

    Add: var markers = L.markerClusterGroup({ maxClusterRadius: 20 });

Thanks to Maya @ Indivisible for suggesting.


  • You've been able to set an alias for each selection you make in the 'Display' section of the QueryBuilder, but this feature was so subtly hidden that even Patrick had trouble finding it. We’ve made this explicit by showing what the column is named by default. Simply type over that name to set your own.
  • The SQL generated by the Orders QueryBuilder for "Home Address > At Time Of Order > Country" failed because it did not use the core_order_user_detail table. This has been fixed. Thanks to Kate @ NRDC for reporting.
  • The Events QueryBuilder allows you to display the start time for events either in the local timezone, or adjusted to a shared global clock. It also offers the ability to perform timezone adjustment from the global clock to your local timezone. However, it mistakenly included an option to perform timezone adjustment on the time in the local timezone, which is a combination of features that doesn't make sense and which produced results that were meaningless. That combination of features is now no longer available. Thanks to Jin @ PeoplePower for flagging this issue.


  • There's a new checkbox on the Recurring Mailing Series screen that you can uncheck to disable the notification that is sent by default after each send in a series is completed. Requested by Emma @ Story of Stuff and Eric from Trilogy.
  • You can send proofs to a specified user_id whether or not the user is in the target set for the mailing. This approach can be used to view a proof for a recurring series for which nobody meets the criteria today. Thanks to Ben at ProgressNow for the most recent request.
  • We changed the way we redirect from URLs in a mailing to leave query strings with Django template tags in them untouched while still redirecting. This fixes a problem where URLs with query strings that we couldn't parse were not being redirected. We also fixed a related problem with those URLs not getting the proof template tag added to them. (URLs with Django template tags in the path are still not redirected.)

Advanced User Search with SQL

Have you ever had an advanced user search time out before it returned results? If so, this feature is for you!

The advanced user search uses the same logic as the query builder. Because the query builder needs to support many combinations of criteria it doesn’t write the fastest SQL. Generally that’s OK, but queries can get bogged down for large clients or just complicated queries involving large tables.

We’ve added a new option that allows you to write your own SQL to power a user search. You can do this by creating a query report using SQL and tagging it 'user search'. That tag adds the report to a menu that opens up under 'Search Queries' on the Users Tab.

We added a sample report that finds all active recurring donors, and we’re taking nominations for other samples. Is there a user search you do regularly that either times out or is just really slow? Let us know!

You can use the tag with any query report that meets the criteria described under Custom Search Queries section in the manual whether it's written in SQL or generated by the query builder and you can include parameters so you can reuse common searches.

Templateset Changes

To make it easier for Django template authors to write secure templates, we've made a technical change to how one of ActionKit's custom template tags works in some contexts. It's a narrow change we don't expect to create problems for existing pages, but let us know if you do see problems on a customized thanks page or event invite form post-release. The template tag documentation describes the new include_tmpl behavior in detail.

The Original templateset now has a drop-down currency picker for PayPal and ActionKit Instant Donate accounts, instead of a long list of radio-button options.


Death to CSE! We’ve been saying we would do it for more than a year, but with this release CSE is deprecated and donations attempted through a page using a Braintree account that still uses the old processing method, will fail.

Previously we recommended to Braintree clients that they disable Braintree's automatic retry for past-due recurring accounts when using ActionKit recurring retry. However, this does not prevent Braintree from doing retries in subsequent months. To effect this, we now recommend turning on Braintree's automatic retry with the settings outlined here:

Thanks to Kristen at PFAW for alerting us.


Hey ActionKitties!

I hope you all had a wonderful holiday.

This release we are making search great again and releasing a beta-version of our Salesforce integration to our first tester! We’re hoping to get another release or two in before we freeze the feature set for year end fundraising.

Multi-word searches in the admin now look for each word independently, rather than as a single phrase. For example, searching on the Pages Tab for Trump Call will find a page named "Call To Impeach Trump." You can still look for phrases with words in a specific order by enclosing them in double quotes. For example, searching the admin for "Support Racists" would match a page named "Don't Support Racists" but it would not match a page named "Racists Support Trump" because the words are not present in the same order. Thanks to several folks for requesting but h/t to Tara for compelling examples of the daily pain caused by the existing search method.

We added a warning if you try to upload a merge file but you don’t have S3 set up. If validation fails, you'll be redirected back to the form with fields filled in. Previously the uploaded file would be lost and need to be uploaded again.

We documented a handy template tag, “once”, that was previously a hidden feature. This tag can be used to wrap template code that will only be rendered one time

Finally, the Salesforce sync is working! Or at least we think it is -- the beta version goes out tomorrow. The initial release includes users and one-time donations. We’ll be adding recurring donations next. We’ll be looking for a second beta-tester by January. Let us know if you’re interested!


Hey ActionKitties!

Have we got an exciting release this week! As promised, we're re-enabling after-action sharing for events, adding options for targeting mailings by action and user field and providing hosts with a tool for adding attendees who didn't sign up in advance to their events. You'll see these changes in your instance tomorrow. We've got a few announcements, followed by the release notes below.


  • We're hiring! We're looking for a full-time Trainer/Technical Writer and a part-time Quality Assurance Tester. Help us find excellent candidates to provide improved documentation and training resources and to find bugs before they get to you. Please pass the descriptions on to anyone you think we should consider!
  • Support is closed next Thursday and Friday for feasting on turkey or tofurky. Get your requests in by EOB Wednesday or we'll get back to you on Monday the 20th.
  • Updated information on third party integrations. We updated the list of Tools that Integrate with ActionKit with some great new options from Relay (peer-to-peer texting including for ActionKit event RSVPs), ControlShift (coordinate drop-in office visit at district offices and stage in-person deliveries of ActionKit petitions), and New/Mode (LTEs and options for contacting your rep for Australia, UK and Canada).

We freed the emojis!

You can now enter or copy and paste four-byte emojis into pages, mailings and custom fields of type HTML using the visual editor. These are converted into an HTML entity escape sequence, like "&#1F404", in the database and that's how you'll see them in code or plain mode. The rendered page or mailing displays the emojis as does visual mode.

Clients using languages other than English should take note as this means that "é" will turn into "&eacute"; in the database (but display correctly to your end-users).

You can also use four-byte emoji characters in plain text fields like subject lines, preview text and some custom fields for mailings without escaping them by hand.


Event hosts, or staff acting as hosts, will see a link to "Add attendees" in their tools box once the event has started. Click the link and a new section will open below the guest list where you can enter name, email or phone. If you don't include email, we'll create a fake email. Attendees added with valid emails are treated as if they signed up themselves; they are subscribed to your mailing list and hosts should make sure they know this.

After action sharing for events is great again! In the Original templateset share buttons have been added to the host tools, event search, and attendee tools pages using our standard after-action sharing. This means signups from shares will be sourced back to the share and you can use the A/B Test Tool to optimize your message.

On the host and attendee tools pages, the share buttons are displayed beneath the TAF box and the links send users to the signup page for this particular event.

On the search screen, the share buttons are displayed at the top and the links send users to the search page for this Event Campaign.

You'll need to modify your templateset to enable sharing for events and until you do so, you'll see a warning that the page does not have full support for sharing On the after action screen. View the Original templateset or read about the changes required under Sharing and Social Media for Events.

New Mailing Targeting Options

We've added custom action fields and custom user fields to the point and click menus on the Target Mailing screen.

These give you a number of options.

For action fields, you can select a page and all action fields associated with that page will be available in the field drop down. You can enter a value to match on, or if you leave the value blank, anyone with any value for the selected field will be targeted. Or you can leave the page blank and select from a list of all action fields in your database in the field box. Again, enter a value to match on or leave value blank to find everyone with any value for the field.

For custom user fields, the options are field and value and they work just as for custom action fields.

Recurring Donations Tracking

We've added a new section to the individual recurring donation screen showing changes made to the profile and noting who made the change, whether it was a staffer or the user. You reach this screen by clicking 'Manage Profile' on the user record or 'View Payments' on the user's donation history. Thanks Kate & Marie at NRDC for the suggestion.


  • We changed the event_email_approved template so it's now editable and we've patched the change to all client templatesets.
  • If your report fails and it's scheduled or set to email or download-and-email, we've added a notification. Thanks to Katie at PFAW for reporting the silent failure.
  • If a report runs multiple times simultaneously, such as a dashboard report being scheduled at the same time as the query reports it includes, this could cause the report not to run as scheduled; now we will use previously cached values if available, otherwise the dashboard report waits until the query report runs. Thanks to Carli at Demand Progress for the example.
  • If you were getting occasional csrf errors on login, we've fixed a problem with submitting using return. Let us know if you see this again in future and thanks to Chris at FCNL for the initial report.
  • We fixed a unicode error that prevented sending notification of a failed mailing. Sorry about that to Brittany at NRDC!
  • In future, if you have a letter page set for CWC delivery and the user deletes the letter body, we will skip this message but delivery will continue for other user's messages. Thanks to Demand Progress for reporting.


Hey ActionKitties,

A bunch of little UI improvements and the changes below will hit your instance late tonight.

For the next release we're hoping to have sharing for events enabled and a point-and-click option for targeting mailings on action or user field values. We'll also be following up with existing Salesforce users as we get close to releasing a beta version of our integration. Holler if we aren't already in touch!


Suggested ask $500 rule eliminated

The suggested ask rules included a bit of logic that displayed all amounts if the ask defined by the formula was greater than $500. We included this originally due to user complaints about forms that only showed extremely high amounts, but the amount was hardcoded many years ago. We’ve eliminated this now so you can go as high as you’d like. Remember: we still show all amounts if the suggested ask formula would result in a user only seeing one or two choices. Thanks to Marie at NRDC and Ben at PFAW for asking about the logic.

Two changes for Braintree clients only

  • We fixed a bug that kept updates made by staff through the admin UI to a recurring donor's credit card number or expiration date from being recorded in ActionKit, although they were transmitted to Braintree. Thanks to Michelle at NRDC for reporting.
  • We've added a setting to your CONFIG where you can tell ActionKit to require CVV for recurring donor credit card updates made through the admin UI. We had removed the CVV from this screen since we don’t require it. However, you can configure your Braintree account so that it is required and if you do this you can’t update the field unless it’s displayed! Thanks to Hilary at Alaska Wild for the example.


  • We removed the 'zip_to_state_district' method from the XML-RPC API. Since we’ve moved to a new system for determining state district this method would return old or invalid results. We don’t believe this is currently in use.
  • When emailing report results, we’ll include a download link for results of any size, not just large reports. Thanks for the idea to Kate at NRDC.
  • When you create a new import page, the second screen shows a summary of your upload settings. Due to an unrelated change, an import page copy included "send confirmation" in the settings, even though import pages never send confirmation emails. This row no longer displays. Thanks to Scott at PFAW for reporting the problem.


  • Event notes are more obvious. We recently tweaked the layout of the admin's event listing screen to make it a bit more compact, but the "notes" section was easy to miss as a result. Alicia at FCNL reported the difficulty.
  • Previously the mailer might include a link to the tools page associated with a canceled or deleted signup if the user had a host and attendee signup in the same campaign, and one was canceled. Canceled or deleted signups are now excluded. Thanks to Kenneth@PeoplePower for finding this.
  • The error message when you click to approve an event and there's a syntax error in the event approved email template now provides some information about the problem instead of "Can’t create event".
  • You’ll no longer get an error if you use both the "Is Active" filter and the "Host/Attendee List (Multiple Rows)" display in the Events Query Builder. Reported by Jin at The Big Organizing Project.

User Interface Improvements

  • Even a very long list of user_ids in mailing targeting will no longer cover other include or exclude sections. Thanks to Keith at PCCC for flagging.
  • We made sure the "Confirmation Email" section on the after-action screen is not hidden if there are errors associated with a hidden email wrapper or a hidden from line. Thanks to Aaron from DFA for reporting the issue.
  • The default search highlighting color is now more legible in Firefox. Thanks to David from ONE for noting.


Hey ActionKitties,

Just a small release going out tonight. There are a number of improvements on the backend but only a few things you can see:

Districting for State Legislatures

In this release we are transitioning to a new data source for US state legislative districts, based on boundary lines provided by the US Census. This will let us maintain and update this data with a more standard and transparent process. Some district codes will change (e.g. "MN_041" -> "MN_21A"), but where possible targets will be mapped over, so things like petition signature targets should not be affected. These new boundaries also incorporate recent redistricting changes.

User Interface Improvements

In addition to adjusting alignments and generally making things prettier in various places in the admin, we made the subject/preview breakdown more legible on the individual mailing report.

Thanks to Jase at DFA for flagging!

Thanks Redirect Improvement

We added the referring mailing ID to akids we generate for after-action redirects. This can help trace followup actions back to a mailing; also note that it means users can get akids for mailings they didn't personally receive, if they were referred through a forwarded link. Thanks to Eric at Trilogy for the suggestion.

New Mailing Target Snippets

We added another snippet (title_informal_full) to the Page Targets section in the mailer so you can insert the target’s nickname if available and fall back to first name. This snippet was already exposed for Pages. Thanks to Aaron at DFA for requesting.


We've added more to the Events section and to FAQs, including how to use snippets to list targets in confirmation email. Chris at FCNL and Jo at MoveOn were both interested in doing this.


Hey ActionKitties! Just a few things in this release. We're working on two more events improvements -- adding after action sharing to events and allowing you to add attendees after the fact. No ETA yet but work has begun.


  • We added the subject line to the in-line preview in the mailer. Inspired by a question from Shannon at UltraViolet.
  • We also added a pulser to show that the preview is loading if you’ve got a slow connection.
  • We added notes to the mailing subject in notifications that a mailing failed. Suggested by Hilary at Alaska Wild.
  • We improved the interface for scheduling an A/B test group by adding the hours until send and rearranging the screen. Thanks to Allyse at 350 for requesting.
  • If you click a link in the preview of a mailing, the linked page will now open in a new window.

Visual Editor

  • We upgraded TinyMCE, the visual editor we use. This fixes an issue noted by Keith @ PCCC: when removing the link from part of a linked area of text, trailing spaces in the selection would remain linked. A bunch of other minor issues were also fixed, including some with cut-and-pasting text, and compatibility in IE 11.
  • We enabled the file upload dialog In the visual editor. If you click the "image" toolbar button, the dialog panel now has an upload tab with a button to trigger a local file picker as well as a "drop files here" target.


  • We added a warning if you select a target group with no targets in it for a call or whipcount page. Thanks to Josh at Color of Change for reporting the issue.
  • We added the newest subscription change ids for re-engagement (15 and 16) to reports with a built-in list of change types.
  • We prettified the event list.


  • We’ve improved the appearance of the search results in the manual.
  • We added the event_minidash and more to the events section.


Hey ActionKitties! It's another challenging week in America, but as usual, we're heartened by the work you all are doing.

Tonight's release is jam packed with something for everyone. As usual, watch for these changes in your instance late tonight/early tomorrow.

Events Map

Ding, dong the interactive search map is here! In the Original template, we’ve added a map of all events in a campaign on the search page (if you’ve checked the box to show addresses under the Event Attend Settings).

To avoid slowing down the page load significantly, we've added caching and we only display the map for campaigns with 300 or fewer events. The caching adds a few minutes of delay between changing a campaign setting (like unchecking/checking "show address" to hide/reveal the map) and seeing the effect on the page.

We are using our geocoding, combined with OpenStreetMap, for geolocating and display. If you’d prefer to use google’s map and geocoder, we've noted how you do this in the Templates documentation.

Read about how you'd add this map to your templateset in the Templates section under Examples.

Thanks to many of you for the awesome map examples!

Events Minidash

We’ve added a minidash for events, like those for pages and mailings. If you create a dashboard report named event_minidash the results are rendered on your events list in the admin.

For example, let’s say you have custom event fields on your host page that the host can use to categorize their event and you want to display their selections on the events list.

First, you’ll create a query report. The available variables are {{campaign_name}} and {{event_id}}.

Then create the event_minidash and include the query report.

You could also use this to display custom user field values for the host (for example, if you had a field where you rate users on past events they've hosted).

Thanks to Jin at Big Organizing for the request that inspired this.

Reminder: check out the "Special Reports" section on /dash/config to see which mini dashboards you may not be taking advantage of yet!

Other Events Improvements

  • We now support filtering by ?role= in the eventsignup REST API.

    For example: []/rest/v1/eventsignup/?role=host []/rest/v1/eventsignup/?role=attendee

    In addition, you can order events by id, created_at, or updated_at.

    For example: []/rest/v1/eventsignup/?role=host&order_by=-updated_at

    Thanks to Sky from MoveOn for requesting.

  • If you direct users to an event search page and your URL includes a custom source code (one starting with ?source= or &source=), the source code persists to the event signup page and is recorded in core_action if the user signs up. Thanks to Avi for the flag.

  • Previously, snippets like {{ user.first_name|default:"Friend"}} would not render correctly for end users when the snippet was saved as part of text within the event creation admin screen. We fixed this by patching the fields in templatesets like {{form.search_page_text|safe }}into {% include_tmpl form.search_page_text %}, which renders the snippets correctly. Thanks to Ash from for finding this bug.

  • We changed several mailing snippets to work correctly for groups with SSL everywhere enabled in their instance. Events and a petition snippet had continued to use HTTP in URLs, so we added a new tag,{%client_domain_url%} which outputs an HTTPS URL if your instance has the ssl_by_default flag set. Shannon @ UltraViolet reported.

    Remember, you too can have SSL everywhere! Just let us know you'd like to turn that on for your instance.

Deleting Import Actions

You can now delete import actions, except donations, from the user action history screen. We previously allowed deletion of petition, letter, signup and survey actions. This change makes it possible for you to use import pages to approximate user tags since you can group users who took action on a page for mailer targeting or reporting and remove the user from the grouping by deleting the action.

As with the other action types, deleting an import action isn't a magical "undo" option -- it removes the action from the database, but does not roll back any other changes it might have caused. For example, if you imported information about a user that included a new street address and a custom user field, and then you delete the import action from that user's action history screen, the new address and custom field values will still be present -- only the action record itself will be removed.

User Interface

  • We’ve had many questions about why stats in the admin, like on the Pages and Mailings Tabs, aren’t up-to-date. Stats are cached to avoid long load times on these frequently used screens. You can update the count by double-click on the number or by clicking the new double-arrow-circle icon.
  • When you search from the box in the top right-hand corner of a screen, like the Users Tab, you’ll be directed straight to the matching object if there’s only one instead of seeing a list of the search results first. If there are multiple matches, you’ll still see a list.
  • You can submit on the login and logout screens using the return key.


  • We added mailing notes to the mailing count notification. They’ll be added to proofs as well in the next release. Requested by Hilary from Alaska Wild.
  • Preview auto-updating will work for changes in text fields as well as other field types with this release.
  • We fixed a bug with copy-and-paste for mailing subjects where the display wouldn’t show the full subject if you were pasting multiple subjects and the second or third (etc.) subject was too long to fit on a single line. Kurt at Demand Progress flagged the issue.
  • If you use an uncached merge query report for targeting, your target set is now invalidated if you edit the report directly. You’ll see a link to rebuild the set before you can send. Thanks to Tara at SumofUs for reporting the problem.

Query Builder

  • In the Donations query builder, the user's name, email address, and street address items now have "[Current/Time Of Order]" appended to their names. If you select "Time of Order" you'll get the values that were saved to the core_order_user_detail table when the donation was made.
  • We made it easier to add more AND/OR filters to a Query Builder report. You can nest these up to six levels deep, but previously that was hard to do because the drag-and-drop became very finicky for deeply-nested groups. We’ve added more space to make this easier. Thanks to FCNL for attempting.
  • We fixed a bug with “Avg of Pmts in Orig Currency” that produced inflated results. Thanks to Chris @ 350 for flagging this issue.
  • We fixed another bug that displayed random text as the value for mobile numbers in the Donations Query Builder. Thanks Sara at FCNL for the report.
  • It’s now possible to request a report with breakout=1 and a single ID in a dashboard report you are emailing. Thanks to Shannon @ UltraViolet for letting us know it wasn't previously.
  • We’ve added support for sorting reports using a custom SQL expression or a value that isn't displayed. This allows you to sort your report by a value that isn't a column in your display. If you hold the shift key down while clicking the unsorted/ascending/descending button in the query builder, you can make a display column which affects the sorting, but doesn't generate any output. The example below shows what this looks like using a custom SQL expression to sort by rand. Other uses mentioned at ClientCon include sorting a list of users by last name, while displaying their full name (e.g. "first middle last") or sorting a list of orders chronologically while listing the dates as text (e.g. "month day, year").


  • You can import recurring donation profiles with a period aside from monthly. The options are weeks, months, quarters, years. You will receive an error if your period isn’t one of these.
  • We fixed a bug, which was causing trouble on donation pages with products that allowed international donations. Before the fix, only postal and region shipping fields had appeared, and Continue button had no effect on the address step.
  • For Braintree recurring retries, we accept a retry interval in days, with a minimum of 4. Previously, if you set it to 4, we would look for orders that hadn’t been tried for 4 calendar days, which amounts to orders that failed 5 days ago. With this change we’ll retry orders that failed 4 days ago. Thanks to Kristen at PFAW for asking about the retry interval.


  • If you select a custom user field to display in the user form fields section when you create page, we now show a field for ‘label’, which is pre-filled with the user field display name and can be edited.

  • The district fax numbers for local offices are no longer displayed on call pages where you have selected the "show local" option using the current Original templateset. To apply this change to an existing templateset, insert the following bit of code in the {%style%} block at the top of the wrapper.html template:

    .ak-target-phone .ak-target-label, span.office_phone_label,

    span.ak-target-fax, span.ak-target-separator { display: none }

  • The admin config has a setting for "Text Editor Default Mode" which allows you to select whether template editors that don't support the visual mode should default to using the CodeMirror editor or not. The templateset editor interface ignored this setting. With this change, instances which have "code" mode enabled by default will have their templateset editor open up that way automatically.

  • Similarly, custom Page and User fields of type "HTML" didn’t respect the "Admin Editor" configuration settings. They do now! Thanks to Auden @ NRDC for flagging the issue.

  • We fixed a bug with the templateset editor which caused edits to be lost if you switched to code mode, made changes and clicked "Publish". Now your edits will be saved. H/t to Jin, working for People Power.


Hey ActionKitties! Hope you all enjoyed the eclipse, or if you missed that, the site of our illustrious President looking directly at the sun. The new features described below will brighten your instance late tonight.

Event Improvements

We've saving more precise latitude/longitude coordinates to events_event. We made this change in anticipation of providing an overall map of events within a campaign. Existing events that are open for signup will be updated with the more precise coordinates with this release so you may see some minor differences in event locations. If an event cannot be located, we fallback to a 5-digit zip code centroid.

We also changed the way the mailer finds users near an event to account for the lat/long coordinates change. The mailer uses the less precise zip-based location, which would lead to more cases where we skip sending to a user because we can't find an event within the designated radius. For now we fall back to searching a larger radius for events to include if nothing is found. Long-term we'll make event targeting also use the more precise locations.

Previously if you entered a confirmation email body for an Event Attendee Page but forgot to enter the subject before submitting, an error was returned and the body was deleted. Sorry about that! This has been fixed. Thanks Chris at FCNL for reporting.

We added caching so event counts weren't delayed for campaigns with hundreds of events and for the events map we'll be rolling out soon. It's also now possible to display all events in a campaign on the event search page if you would like to do so.

We fixed a bug with required custom action fields on the Event Host Tools Page that prevented hosts from sending tell-a-friend messages. Thanks Maya at Indivisible for reporting.

Custom User Field Options Used By Pages

You can define a field type and a list of choices for custom user fields. These are currently only used on the individual user record.

With this release, we've exposed them for user form field customization on the Edit Content screen for Pages. If you select a custom user field the type and choices will be based on your custom user field settings. For example, if your custom user field has a 'Select List' type, when you select the user field under 'Customize Fields' the type is set to 'Select Menu' and the options for your user field are shown under 'Values'. You can then edit the selections in the Customize Fields section.

Other field types are set to Text. Other custom user field settings, like 'required', 'regex', and 'field default' are not used. In the next release, we'll also make the custom user field label editable for the page.

Miscellaneous & Bug Fixes

  • The preview on the mailing compose screen will now update automatically as you type. This doesn't apply to text fields with this release, but it will in the next release.
  • We added History links to settings on the CONFIG screen that didn't have them and to re-engagement settings. We record the person who made the change and what the change was.
  • We've added new subscription change types for re-engagement. Change id 15 applies when a user is put on the re-engagement list. Change id 16 applies when a user is re-engaged and moves off of the re-engagement list. Change id 12 already showed when a user was unsubscribed due to NOT re-engaging and timing out or manually being removed from all lists. Thanks to Jase at DFA for the suggestion.
  • The months_ago snippet now works correctly with date subtraction. Thanks Simona at SumofUs for reporting that it wasn't working!
  • We made the suggested ask language clearer and improved the layout to make it clear that the suggested ask if based on the donor's history up to but not including the amount in the first column. Thanks to Hilary for pointing out where it was confusing.
  • Users with either the "REST API API - View, Edit and Delete" or "Users -plus Donation Management" permissions can now cancel or change recurring donations.
  • We added "sample data only" to the US governors custom target group, which is not maintained and is provided only as an example of using the jurisdiction settings for custom groups.
  • Previously, if you hid a templateset that was in use by a page, then went to the page and made edits, you might end up saving the page to a new templateset because the hidden templateset was replaced with a visible set on the Edit Content screen. Now the Edit Content screen shows the hidden templateset with a warning "(Hidden! Un-hide this TemplateSet to use". Attempts to save on this screen will error until you change the templateset. Thanks to Ethan, consulting for 350, for the detailed bug report!
  • The staff permissions editor is now responsive, in case you want to edit permissions on the go!
  • You can now manage blackholed emails and domains using the API.
  • Last year, we added an identifier, the aktmid, for click tracking for transactional emails. This release we're adding the akid to links in confirmation emails so these can trigger user recognition, for example if your thank you email links to another action page. Thanks to Indivisible and for suggesting.
  • Often the first charge toward a new recurring profile is made when the profile is created so they are displayed as one line on a user's Donation History screen. If the first charge is made more than 24 hours after the profile is created, the charge is now broken out in a separate row.


Hey ActionKitties! Sorry for the image-free release notes this week but hopefully I'll see some of you over the next few days at Netroots. Images will be back next release and these features will be live in your instance tomorrow:

Event uploads

You can now create individual events with an existing event campaign by uploading a CSV with the relevant data. Unlike other imports, events are uploaded to Event Creation pages, and processed, validated, and recorded in the database as Event Creation actions.

This provides a faster way to quickly create multiple events for which you already have a host, date and location, or valid placeholders for each. It doesn’t eliminate any of the current requirements for creating events.

To get started you must first add an Event Campaign and create your ‘Event Creation’ page. Events created by upload are just like those created manually through the page - e.g. if your page has a confirmation email that email will be sent to every host in your upload. And, if you’ve set additional required fields for the Event Creation page you need those values in your upload.

After you’ve set up this page, return to your campaign dashboard which will have a new ‘upload’ events link, which takes you to a screen summarizing your event page settings.

Each event should have one row in your file with one host email or AKID. You can have one person down as the host for multiple events -- just include their email address with the event details in every row for which they’ll start as the host. There is no way to create co-hosts through the uploader, but you can add them manually afterward through the admin.

Fax is Back

Rest in peace, Greenfax. Long live InterFax!

We integrate with Interfax for delivery of petition or letter signatures by fax. You can hook up your account by entering the user name and password you get from Interfax on the CONFIG screen.

Improved Mailing Preview

We added more zoom, improved the preview behavior for test groups and provided a nicer message if you simply haven't filled out your draft yet.


  • Staff users must have a ‘Users’ permission to view a user’s donation history and to view the list of actiontakers for a Page, linked from the Pages tab. Thanks to Hawley at MoveOn for flagging.
  • It was possible to end up with name, first name and last name all required for a page. Now it’s not! Thanks to Brandon at Mercy Corps for helping us find this sharp corner.
  • We now redirect to the mailing test group dash after you create a test group. Credit to Ethan for the request!
  • We’ve documented how you add cohosts to the event_search_results.html template.
  • We also documented the tag_links_if_untagged filter -- thanks to Sebelo at 350 for reporting that your tracking parameter was unexpectedly overwritten by a tag_links filter in the email wrapper. This will fix that next time.
  • We’ve added a message to Pages that target state legislators reminding you that we require a full address so we'll add the necessary fields to your user form.


Hey ActionKitties!

To celebrate the the Republicans continued (relative) ineptitude at destroying health care in the United States, we’ve added previews on the Compose screen.

Actually, the two aren’t related at all, but we've added it anyway. Along with several other juicy items. Enjoy!

Also a reminder that we’re standing by to turn on SSL EVERYWHERE for you! ActionKit has always used TLS/SSL encryption for security-critical pages, like donation and login pages, but we are now able to turn it on for all of your pages. Get rid of that pesky "Not Secure" label and help make the web a safer place for all of us.

Preview on the Compose Screen

You can edit your mailing and generate a preview without leaving the compose screen. When you click Update Preview, your changes are saved. The preview selects a random user from your mailing set if you have one or a fake user if you haven’t targeted anyone yet.

You can also enter a user id to view the preview as it would appear to that user (whether or not your targeting includes the user) on the compose screen or the proof and send screen.

In future we plan to rollout some changes that will speed up the preview generation and also save and update the preview automatically as you edit it.

More Mailer

We’ve also got a bunch of smaller improvements to the mailer this release. We:

  • Block the send of mailings that include "REPLACEME" or "TK" in the subject or content fields. Insert one of these phrases to protect against accidentally sending a mailing that isn’t final yet.
  • Improved the UI for the individual mailing report. It’s been re-ordered based on your feedback and hopefully is easier to follow. The same items should all be there -- let us know if you can't find something!
  • Added the notes for each mailing in the include/exclude select lists to help you distinguish between mailings with the same subject. Thanks to David at ONE for requesting.
  • Renamed the button on the compose screen to "Save and Send Proofs" so it’s clear that you don’t have to hit save separately first. Thanks to Kenton at PCCC for requesting.

More Support for Annual and Other Recurring Donation Periods

We added support for additional periods for recurring donations for PayPal, PayFlo Pro and They will all accept weekly, quarterly, yearly as well as monthly. Braintree still does not support weekly as a period.

We also added recurring period to the user’s donation history and to the Donations Query Builder.

Reports Improvements

  • The Users and Lists Query Builders now offer individual subscription change types like "Subscribed by Import" or "Unsubscribed by Re-engagement". Thanks to Hilary at Alaska Wild for the suggestion.
  • Filtering users, actions, or orders for users with a certain phone number, or whose phone number matches a certain pattern, is now much faster. Thanks for the report to Jase at DFA.
  • The Events Query Builder won’t fail with "Subquery returns more than 1 row" if you attempted to display a custom event field which had more than one value set for a given event. Thanks to Jin at The Big Organizing Project for flagging.
  • Parameters will be listed in the order that we find them in the SQL. (Unless stated explicitly using required_parameter.)


  • The event approval email will no longer fail if the event has more than one sign up. Thanks Shannon at Ultraviolet for reporting.

  • Datetime is now a supported type for custom fields. Thanks to Chris at FCNL for the request.

  • Templateset fields were added for privacy and contact in the Original templateset so these can be added without editing the wrapper template. Also thanks to Chris.

  • The individual mailing history shows ‘Open’, ‘Click’, etc. instead of ‘Yes’ in the relevant column, making it easy to interpret even when the header isn’t visible. Thanks to Jase at DFA for flagging.

  • The merge file uploader will recognize csv extensions, even on Windows. Thanks to Chris at FCNL for the report.

  • The user name on the recurring donation update page links to the user profile page in the Original templateset. You can add this to your own recurring_update.html template by adding a link around the {{ }}.

  • In the unsubscribe.html template, it's now possible to check if a user is subscribed to a particular mailing list ID using a new template tag {{ user.subscriptions.list_ids }}, like:

    {% if 1 in user.subscriptions.list_ids %} User is in list ID 1 {% endif %}

    Thanks to Mark at CREDO for the use case.


We’ve added some new content which you can access tomorrow including:

  • Context Object Reference outlining the attributes of form fields you can use to customize the user_form.html template. Thanks to Sky at MoveOn for requesting.
  • An FAQ on adding a favicon
  • Information about Grassroots Unwired’s integration with their mobile canvassing platform.

Recurring Donation Pages

We are removing some very old code that supported recurring donation pages as a distinct page type. This almost certainly won't affect you! Recurring donations will continue to work but we’ll be removing access to the old models. These include RecurringDonationAction in the REST API and RecurringDonationPage/Action/Form in the XML-RPC API, so if for some reason you are using those, they will stop working.


Hey ActionKitties! Just a few things in this release but they include support for annual and quarterly recurring donations for groups who use Braintree as their merchant vendor. Expect to see this for and PayflowPro in the next release, as well as the events map, if testing goes well.

Annual and Quarterly Recurring Donations (Braintree Only)

If you use Braintree as a merchant vendor, you can now accept annual or quarterly recurring donations.

To start, you’ll need to set up new plans in Braintree and file a support ticket to let us know so we can update your site configuration. You’ll need to create a plan for each recurring period you’d like to accept (e.g. one for yearly and one for quarterly). If you support multiple currencies, you will need to create separate plans for every combination of currency and period.

Once we’ve updated your configuration, you'll need to make some adjustments to your templates to use this option.

In addition to the donation_type parameter that ActionKit has long supported, we now also check for a recurring_period parameter. The donation_type parameter may contain "single" or "recurring", and the recurring_period parameter may be omitted or blank, or may contain "weeks", "months", "quarters", or "years".

These two parameters interact as follows:

  • If donation_type=single (or anything but "recurring"), it's a one-time donation and we ignore recurring_period.
  • If donation_type=recurring, it’s a recurring donation. If recurring_period is omitted or empty, we set it to monthly. If you specify the billing frequency in recurring_period, we’ll use that.
  • If donation_type is not provided at all, it’s a one-time donation if recurring_period is also omitted or empty and a recurring donation if recurring_period is provided.

There are several different ways you can set up your templates depending on what choices you want the user to see. For example:

  • You can offer radio button choices between one-time, monthly, quarterly and yearly:

<input type="radio" name="recurring_period" value="" checked>

<label>One-Time </label> <input type="radio" name="recurring_period" value="months"> <label>Monthly</label> <input type="radio" name="recurring_period" value="quarters"> <label>Quarterly</label> <input type="radio" name="recurring_period" value="years"> <label>Annual</label>

Or, you can default to a one-time donation with a checkbox for yearly renewal:

<input name="recurring_period" type="checkbox" value="years" /> Renew my donation annually

As always with template changes, be sure to test! This will help you catch any places where you have a static reference to ‘monthly’ support built in.

Customizing Your Admin Interface

We’ve added a new ‘special reports’ section to the Configuration screen (accessible from the menu under your name in the top right corner if you’re a super user).

These are all reports that define the stats returned on one of the views in the admin. For example, you can customize the stats that show on the Pages Tab and the browse all screen for Pages by editing the page_minidash report.

More Reports Improvements

We made a number of improvements, many of which we got the idea for from you at Client Con:

  • We added QB support for custom mailing fields.
  • We added a warning that merge files are deleted after 30 days to the merge file creation screen and we made the table background brighter to stand out better.
  • We added a view for ‘Reports I’ve created’ to the Reports Tab.
  • We added explanatory text to the ‘Key Reports’ view on the Reports Tab to remind you how reports get added to this view: ‘Add or remove the 'homepage' tag to control which reports appear here.’

Mailer Improvements

  • The custom mailing fields displayed under snippets on the wrapper screen now reflects the order you set on the custom mailing fields list screen.
  • Since we replace ‘from lines’ from secondary domains now, we’ve removed the message saying unknown ‘from’ domains will cause deliverability problems.


  • We added a link under ‘Targets’ on the Pages Tab to edit the print template for PDF deliveries.
  • When generating a PDF, if the template header or footer contained a non-ascii character, you would get an error. This has been fixed.
  • When you copy a templateset, we won’t copy the github connection. Thanks to Ethan on behalf of 350 for requesting.


Hey ActionKitties! It was wonderful seeing so many of you at ClientCon this year. We’ll be sending out notes and slides soon. The features described below will be available in your instance early tomorrow.

We're looking forward to getting out another release soon with more features we discussed at ClientCon including support for annual recurring donations (if you use Braintree) and possibly the new events maps as well.

Re-engagement UI

This release includes one of the features we previewed at ClientCon -- a reorganization of the re-engagement screens. Based on your feedback and questions, we’ve come up an interface we think makes the process clearer with an overview, summaries and a chart on the first screen and sub-menus that allow you to dig into the details.


We added support for a share link to contain a tweet=parameter that will override the share message configured for that page, which enables clients to write some custom code in their thanks template to pick from among several messages (either random rotation or via end-user choice) and pass that selection along to the share code to have a tracking URL added to it. Thanks to James @ Their World, who requested the ability to let users choose from several different Twitter messages for greater share variety.

For example, if there were two different messages you wanted to offer on your thanks page, you could replace the regular Twitter button on the thanks page, which looks like this:

<a class="ak-button ak-share-button ak-twitter" href=";page_name={{}}&amp;action_id={{}}&amp;akid={{akid}}" target="_blank">Share on Twitter</a>

With two links that contained the alternative messages:

<a href=";page_name={{}}&amp;action_id={{}}&amp;akid={{akid}}&amp;tweet=This+is+an+important+message." target="_blank">Tweet "This is an important message"</a> <br> <a href=";page_name={{}}&amp;action_id={{}}&amp;akid={{akid}}&amp;tweet=Learn+more+about+robotic+dogs." target="_blank">Tweet "Learn more about robotic dogs"</a>

You could have any number of sample messages offered this way, or you could use a bit of templating logic or JavaScript to personalize the message or randomly select one of the choices for each user.


  • The stats shown on the Pages tab for each page now link to a list of user records for recent action takers.

  • The default page_minidash which defines these stats links to the action_takers report and displays the matching user records.

    If you’ve already edited your page_minidash, you can add the link with the following HTML:

    <p><a href="{{}}/users/">{{ reports.action_takers }} people</a> took action</p>

  • Previously the donations query builder filter for pages and pages-with-tags would only match on completed actions, meaning that you couldn't use them to effectively find all failed donations on a given page -- now you can. Thanks to Mais at the Syria Campaign for the example

  • The User querybuilder now supports name prefix/suffix, thanks to Faith in Public Life for requesting.

  • We fixed the querybuilder's "Event: Is In The Future" filter by using now() instead of current_date(). Thanks to Nicole at PeoplePower for pointing out that this filter was sometimes still returning past events before the fix.

  • We improved the error message you receive if trying to save a report as a mailer library query fails so it’s clearer about what’s wrong. It now says "The SQL for mailer queries must select a single column named id or user_id."


  • We added the ID to the top of user, report, page editing screens. Thanks to Jase at DFA and Matt at 350 for requesting.

  • We removed the proof form on model mailings because you can’t get proofs for models and the message was confusing! We also made a change so you can get a proof for mailings that were sent but are too old to have a mailing set.

  • Thanks to a report from FCNL we were able to track down and fix a bug that caused one staffer’s content to be lost after a midair collision under limited circumstances.

  • We set the image uploader to redirect to the same hostname that you’re logged in under, instead of always redirecting to the SSL host, thanks to Courtney at Courage for flagging.

  • You’ll need to click on the drag handles instead of anywhere in the row to sort tags and custom fields. This change means you can copy the content in the rest of the row without triggering the drag and drop -- thanks to Ethan at PCCC for reporting.

  • We fleshed out the "Getting Started" staff section with more information about the different settings and examples of standard checkbox settings for normal staff vs API only staff. Also, we corrected some sample code in the docs that referenced instead of your domain, thanks to Eduardo at 350 for pointing it out.

  • When you submit a support ticket, we’ll display the details you submitted on the thank you page so you can confirm it went through correctly. Thanks to Jin at The Big Organizing Project for the suggestion!

  • We fixed a bug with TAF message sent using the mailto link. Any single- or double-quote characters, as well as angle braces, were replaced with their HTML entity equivalents. Thanks to Chris at FCNL for reporting. This change was applied to all templatesets.

  • We’ve improved how we handle template tags in URL’s. Previously if you used a template tag in the key, it was replaced with TEMPLATE0000, resulting in a broken URL. URL’s like this now work and are tracked as usual:{{user.thing}}=7

  • If your query string doesn’t follow URL rules, the template tag also now renders, but we don’t redirect so tracking is disabled for external links. An example of this would be:{{user.thing}}&bar

    Thanks to Tara at SumofUs for the use case.


Hey ActionKitties! We’ve been working on one giganto release, which will be in your instance late tonight. Some highlights:

  • Custom page fields have been added to A/B tests for Pages.
  • Lots of event improvements including copying events, and automatically emailing hosts when their event is approved.
  • Login notification -- we’ll send an email alerting the staff user when we see a login from a new location using their account. Under the gear symbol on any screen in the admin, there’s a link where a user can view their recent login location history.
  • Removed the 255-char limitation for subject lines, preview text and from lines.
  • Re-organized and expanded REST API docs! Check them out -- we think they’re easier to follow and, we’ve added a bunch of examples for events.

We’re looking forward to seeing many of you at ClientCon in June!

More info on this release below.

Page AB Tests

  • After many requests and a good bit of Django-fu by our own Simon, we have made custom page fields available for a/b testing.

    Combine this with the “featured_image” page field for easy image testing.

  • We’ve improved the algorithms behind A/B optimization testing by making them less aggressive in allocating traffic when only a few data points have come in and more aggressive as more actions come in.

  • You can access information about the current user's enrollments on a page with tests via template variables. These template variables are also available to the confirmation, tell-a-friend, and notification emails. Read more about this here: Thanks to Aaron at DFA for the suggestion.


  • You can copy individual events from within a campaign. Click the copy link and you’ll land on an event create page with the event data prefilled.
  • We’ve made a couple improvements to the Original templateset for hosts whose events need staff approval.

    We’ve added a new email to hosts when their event is approved by staff, if staff approval is required for the event campaign. The email is exposed as a template, as are most of the event-related emails, so you can edit it by editing the event_email_approved.html template. This template has been added to all templatesets so you don’t have to do anything; it’ll start sending automatically. Here’s the default message:

    We’ve added a message on the host tools screen saying the event is awaiting approval (until it’s approved). The host lands is directed to the host tools page after they confirm their email address and login. This has only been added to the Original templateset; you’ll need to add this bit of code to the event_host_tools.html template to get this in your templatesets:

    {% if event.is_awaiting_approval %}
      <span class="ak-error">Note: this event is awaiting approval by staff.</span>
    {% endif %}

    Be sure to test if you add this yourself!

    And thanks to Avi at Everytown for the suggestions.

  • Built-in event reminder snippets for hosts and attendees will not include events that occurred in the past; previously you had to limit to future events in the targeting. Thanks to Duncan from for suggesting.

  • We've eliminated the corner case where creating an event without a title and setting your campaign to use the title as the signup link would lead to signup link-less event search results. This required a template change, which we’ve patched to all templatesets. Thanks to Caitlin from the Courage Campaign for finding this.

  • You can use {{ from_line }} to display the host or attendees name in event emails from templates. For example, you can change the event_email_from_attendee.html template to include who the message is from like this:

    <p>Here's a message from {{ from_line }}, an {{ sender_signup.role }} of your {{ campaign.local_title }} event:</p>

    Thanks to Scott at MoveOn for the request.

  • Event search and attend screen options like “Show Attendee Count” were not exposed unless you selected “Provide a Public Search Page” on the Campaign Settings screen. We provide a public search page regardless, so we removed that checkbox. Now you can elect to show the attendee count on the Signup Page whether or not you intend to share the URL for the public search page. We renamed this section “Event Attend Settings”.

  • We’ve added two new built-in reports called “Events: Events With Few RSVPs” and “Events: List of Almost Full Events”. Thanks to Chris at FCNL for requesting.

  • We’ve hotfixed a warning about unchecking “Let Users Host Events”. Several of you had unchecked this to shut off event creation not realizing that it also restricts access to existing events to staff users only.

  • We made event.is_private return 0 and 1 instead of True and False.


  • Recurring mailing schedules are even easier to set up. Type-to-select (or scroll and click to select) send hours for a recurring mailing schedule instead of scanning a list of checkboxes for the times you want, or choose “Select All” to create an hourly send. The prettier schedule preview is now below the form.
  • We added a template tag for {{ mailing_web_viewable }} so you can trigger conditional content using this. Thanks to Chris at FCNL for the idea.
  • You can use command/control-click to copy a mailing and open it in a new window once again, thanks to Keith at PCCC for the request.
  • We fixed a bug where URLs in the CSS in a mailing wrapper were being displayed as links in the mailing. Thanks to J Street for reporting.

Braintree Recurring Retry

We made a bunch of improvements to the recurring retry functionality for Braintree. Instead of making our first retry attempt immediately after the initial failed payment, we wait the retry_interval you set on the CONFIG screen. To comply with Braintree’s rules, we don’t retry hard declines and there is a minimum retry interval of 4 days. We’ve also sped up recurring retries so this will work even for clients with thousands of lapsed profiles and we’ve added the account name to the retry transaction.


  • We modified the subdirectory options on the Pages Tab to show 'new pages' and 'recently edited'.
  • We added the report id after the name on the Reports Tab and made read-only fields (e.g. custom field name) visually different from editable fields. Thanks Jase from DFA for the suggestion.
  • We added snippet menu to custom page and templateset fields of type HTML. Thanks James at PGM for requesting.
  • The Donation History view shows the transaction time as well as date. Thanks to Scott at MoveOn for the request.
  • The visual editor is back (and has been since we hotfixed this) for signature deliveries. Thanks to Nate at MomsRising for noticing.
  • We’ve fixed the whitespace for the share description by inserting regular space characters before <br>, <p>, and <div> tags, then after removing HTML tags, compacting any run of multiple space characters to a single space. Thanks to Keith at PCCC for the report.
  • Thanks to Kenton & Ethan at PCCC for finding some problems previewing RememberMe changes, which we hotfixed to all your instances.
  • We modified our built-in sharing reports to exclude clicks from user agents which appear to be bots.
  • Added a ‘type’ field to the context for transactional emails to allow users to distinguish between confirmation, tell-a-friend and notification emails. Thanks to Jordan from CREDO for the idea.


Hey ActionKitties,

Wowzer have we got a release for you! YUGE!

But first, thanks to everybody who took the ClientCon survey. San Francisco was the clear winner, so we’ll be holding ClientCon 2017 on Friday June 9th at the Women’s Building in San Francisco. We’ll send a separate email with details soon.

Also, a reminder that we’ll be phasing out support for Braintree CSE at the end of this month. Contact us for help transitioning to if you need it.

Now for this release. These changes will hit your instance late tonight.

With our new mailing template system, you can define elements like headlines, sidebar content, images, and more, making it simple to create and edit mailings even when your mailing structure is complex. As part of this, we’ve reorganized the Compose screen so that you’ll now see 4 sections: Basics, Content, Advanced Options, and Custom Mailing Fields -- along with the standard Send Proof and Save options. We’ve also added a built-in mobile responsive email wrapper as an example of how to use mailing templates -- it’s ready for you to make your own.

You can now use snippets in your from lines to create dynamic from lines for your mailings and autoresponders.

And we’re rolling out two features that were in beta, cross-client Remember Me and the Communicating with Congress signature delivery system.

These and more will be in your instances late tonight.

Mailing Templates

You can create mailing templates by adding custom mailing fields to your mailing wrappers. These fields will display in a new Content section of the Compose screen along with the mailing Body field so that you can have multiple editable elements of the wrapper, while hiding the messy structural code out of sight -- and safely out of editing range.

For example, you may have a wrapper like this:

<h1>{% include_tmpl custom_fields.headline %}</h1>
<img src="{{ custom_fields.image_url }}" width=300>
{% block content %}{% endblock content %}
<p>{{ custom_fields.signature }}<br/>
Your Organization</p>

Choose this wrapper for a draft and your Compose screen will look like this:

Switching wrappers will change what fields show up here; their display is governed by what is defined in the selected mailing wrapper.

Mailing fields used in the wrapper are standard custom fields, so you can set a type, description, defaults, or make a field required. They should be created prior to including them; including a field unrecognized by the system will display the field in red with a warning that it needs to be created. If you create an HTML type custom field, we’ll include the WYSIWYG in that section under content. You must use specific syntax when you include fields of this type, or of any type where you plan to use template tags or filters: {% include_tmpl custom_fields.NAME %}. Otherwise, {{ custom_fields.NAME }} is sufficient.

The new custom mailing fields section in the snippets menu on the Wrapper screen will insert your fields using the appropriate syntax for the field type. You’ll also see a list of custom mailing fields used in the wrapper under the template box. Hover over them to see the field type, display name and description.

Any custom mailing fields not used for the selected mailing wrapper will continue to be available in the Custom Mailing Fields section at the bottom of the Compose screen.

On the Proof and Send screen, click on the blue Preview link next to the Content header to view a rendered version of your mailing combining all of the fields as previously.

Read more about mailing templates when these changes go into effect late tonight:

New Built-In Email Wrapper

We’ve added a beautiful new mobile responsive email wrapper called “Template with Sidebar” that uses the new templating system.

Here’s what it looks like on desktop:

And here’s how it transforms on mobile:

We’ve added new custom mailing fields of sidebar_text, featured_image, link_url, signature and references to your instances if they did not already exist.

The image and buttons will automatically link to the URL entered in the link_url field, and the call-out box will only appear if there are values for either the sidebar_text or the featured_image. The button is drawn via CSS so it’ll be visible whether or not the user has images enabled for their email client. And the image is automatically sized to be a max width of 260px.

For mailing wrappers based on this new email template, be sure to replace our ActionKit logo and colors with your own branding, and to update the address and links in the footer to go to your own social media properties.

We’ve run this through Litmus about 200 times so it should work well across all major email clients, but please let us know if you find a bug!

Remember Me

We're rolling out ActionKit Remember Me to everyone after a successful beta test. Much thanks to UltraViolet for testing!

Remember Me lets users coming from sources like Facebook take action with you without re-entering their contact info. It's also ActionKit-wide: users are recognized after they save information with you or any participating group.

To get started, go to Pages > Remember Me. You'll be able to add code to your templateset to show users a "Remember me" checkbox in the action form.

And if a remembered user visits a form using Remember Me, they'll see a "Hi, [Name]!" interface much like what users remembered via akid see.

Pages > Remember Me lets you preview with your own templatesets before you make any changes live.

More detail is in the documentation. Some things may differ from what you see in the screenshot; for example, we're A/B testing different versions of the checkbox language.

In the beta test, we hid the checkbox from a control group so we could estimate the checkbox's effect on action rates. The pre-checked "Remember me" box only decreased action rates around 0.5%, and about two-thirds of action-takers saved their information. Long-term, you should get more actions even if only a few percent of the users who save their information take additional action as a result.

If you have questions or need help integrating with your templatesets, contact us through Support.

Communicating With Congress

Thanks to FCNL for beta-ing.

You’ll see this additional signature delivery method on the Delivery screen when you set up a petition or letter page. This House-approved delivery system only works for House members -- there is no equivalent for the Senate. You’ll need to enter some settings for your organization on the CONFIG screen. Also, the House requires email, prefix, full name and address, so we’ll add these fields to your form if they aren’t already required. Read more here:

Snippets For From Lines

From lines in mailings, event emails, and transactional emails can now include snippets to make them dynamic.

This gives you the ability to vary the from line based on merge data, custom user or action fields, action information, or any other criteria that can be evaluated in a snippet. You can use them in both standard and custom from lines.

Here’s an example of a possible dynamic from line:

"{% if user.state == 'CA' %}The Golden State{% elif user.state == 'VA' %}Virginia is for lovers{% elif user.state == 'GA' %}Georgia on my mind{% endif %}" <{{ user.state_name }}>

Which would result in the following from lines during send depending on the user’s state:

“The Golden State” <>
“Virginia is for lovers” <>
“Georgia on my mind” <>

Note that when you use a snippet in a from line, we will validate the from line when generating proofs and at send time to make sure that the from line is properly formed; invalid from lines will kill the mailing and you’ll receive a notification that the proof or mailing was unable to send.

Read more about from lines:


  • User recognition can be enabled on event creation pages by removing the never_recognize hidden input field from the form. Thanks to Kenneth at ACLU’s PeoplePower Campaign and Sky at MoveOn.
  • We've added more documentation that you can append &l=1 to the login_string tag to bypass the password step for event tool pages. This also works for recurring donation update or cancel pages. Use with discretion as that link would skip the login step for anyone who receives the link, whether the original recipient or not. Thanks to Chris at FCNL.
  • You can now pull in the event address2 field in your event_search_results.html template. Thanks to Aaron at DFA for the request.
  • We hotfixed a bug where displaying the event address on the Event List screen in the Admin was dependent on whether users were allowed to set the starting date/time of their event. The event address will now always display on that event list screen. Thanks to Cole at ACLU’s PeoplePower Campaign.

Miscellaneous and Bug Fixes

  • We made a one-line addition of actionkit.forms.reflectCountryChange(); to line 177 of the recurring_info.html template in the Original templateset, fixing a bug where you weren’t able to submit the update form after changing the country to United States. We’ve also patched templatesets based on Original to add this.
  • We’ve made {{ context.targets.title_informal_full }} available as a snippet on call pages, so that you can use “Sen. Bernie Sanders” instead of “Sen. Bernard Sanders”.
  • User recognition will work as usual when you require mobile or other specific phone types in the user form. Thanks to Kenneth at PeoplePower.
  • Share links will now accept either page= or page_name=. Thanks to Michael at Faithful America and Kenton at PCCC for noticing the discrepancy between the behavior and the documentation.

Documentation Updates

We added more documentation for several situations that have come up recently:

  • SQL connection information has been updated with the correct host name requirements. You should all be using “[clientname]” as your host name now. Thanks to Nir at JStreet.
  • Use the {% include_tmpl %} syntax for custom page fields if you’re using tags and filters in the field, just as for custom mailing fields. Thanks to James at PGM for inquiring.


This release we’ve got a handful of visible improvements and some behind-the-scenes work to increase ZOOM. Later this week, we will be redistricting US users with new federal boundary and zip data for the states with changes.

Also, thanks to everyone who responded to the ClientCon survey. The Bay Area in June was the clear winner since a number of you aren’t planning to attend Netroots. We’ll be in touch soon with more specifics. Looking forward to seeing you!

Here’s what you’ll see in your instance late tonight:

  • Call pages use the informal name for targets if available. So instead of seeing “Sen. Bernard Sanders”, you’ll see “Sen. Bernie Sanders”. Thanks to Matt at MoveOn for the suggestion.
  • James at PGM found a problem with the “Read more” links in the Original templateset wrapper.html template affecting mobile users in Chrome and Safari. We’ve fixed this in Original and patched client templates that were based on the Original templateset.
  • We added another section to the Events Pages documentation for Transactional Emails to help you identify where you can edit these emails and we’ve added some more commonly asked questions to the FAQ.
  • You can now click into the expanded rows for User Action/Mailing/Donation History screens to select and copy the data without toggling the row closed. We fixed this for the Spam Check Log screen as well. Thanks to Kenton at PCCC and Brandon at MercyCorps for the suggestion.
  • The Upload Library list screen now uses ellipses to truncate the list of pages (e.g. “1 2 3 … 19 20”). Thanks to Jordan at CREDO.
  • We’ve added the mailing list notes to the mailing list selection on the Page Action Basics screen so that it’s easier for you to know which mailing list to use.
  • If a user is on the re-engagement list and they bounce or mark your email as spam, they will now receive the appropriate unsubscribe code in the subscription change history instead of showing as a general unsubscribe. Thanks to Nikki at ONE and Jase at DFA for the reports.

Hidden Feature Callout: Sidebar Help

Sometimes you’ve got a question, but you don’t want to click over to the Support Tab to search the manual for your issue. There’s a shortcut: you can click on the orange “?” tab on the right side of your screen, which will open the sidebar help menu without leaving your current screen. Some related questions and articles are linked in that menu for each page, and you can also use the search bar in the sidebar to search for specific terms.


Hey ActionKitties,

So many goodies in this release. In addition to the normal mix of bug fixes and assorted improvements, we’ve also got sped up delivery PDF creation and mailings, more ZOOM for the database, and a faster loading Mailings Tab in your admin.

More Zooooom

This release, we made a concerted effort to identify and fix areas that could be sped up in ActionKit.

Along with improved signature delivery PDF and mailing generation and faster loading of the Mailings tab, we added useful indexes to the database, reworked some queries so that they run faster, added more caching, and reduced the number of database calls by batching them together.


  • We made the built-in query report users_mail_main, used by some groups in the your_progress and list_stats_mini dashboard reports, 20 times faster.
  • In order to speed up the previewing of a mailing that uses merge queries, the generated merge data for a user will only display if there is saved data (whether from caching the query, or from the table generated when a merge query is used for targeting). In cases where that data is not already saved, you will instead see the column name in all caps where the merge data would show.
  • The User’s Donation History screen will now load faster for users with lots of donation history. You’ll see the 100 most recent transactions for the user, with an option at the bottom of the page to “Show All”. Thanks to Ann at MoveOn for the suggestion.

Signature Deliveries

Campaigns with lots of signatures and/or lots of targets were having trouble getting proofs and delivering signatures. We optimized the underlying query. PDF generation may still take some time for a lot of signatures, but you can successfully prompt delivery. Thanks to CREDO for the test case and for your patience!

Speedier Mailings Tab

The Mailings tab was painfully slow for clients with lots of draft mailings. We’ve sped this up by having a maximum of 50 mailings display within one section (drafts, scheduled, rebuilding, models, or sent).

You can still use the search or Browse All to find drafts that no longer appear on the main Mailings tab. And we’ve also added a new link at the bottom to “Show All Drafts”, which gives you a shortcut to a list of mailing drafts.


  • As mentioned in the previous release, we’ve backfilled data for the core_subscriptioncounthistory table. This is calculated data, so you may notice some messiness, especially around the beginning of February.
  • Mailer queries can now start with SET statements, comments, and {% templatetag openblock %} required_parameter {% templatetag closeblock%}tags. You still need to have the query return just one column of user_ids, but you have more flexibility in structuring your query. Merge queries are still finicky about this though and we'll be addressing them in a future release.
  • We’ve darkened the sidebar text in the Manual to make it a bit more legible. Thanks to Jase at DFA for suggesting.

Bug Fixes

  • Mailer queries used for targeting that have a parameter will no longer close when you click to scroll. Thanks to Jase at DFA for the report.
  • The mailing jobs shown by clicking on the “Manage Jobs” button were missing some mailing rebuilds triggered by changes in dependent mailings. All rebuilding jobs should now be visible. Thanks to Jordan at CREDO.
  • We added a check to ensure that event campaign, event creation, and event signup short names are unique across all pages and campaigns. Previously you could set the page name to be the same as the campaign name (and vice versa) which then led to problems in getting to the event search page. So you’ll now get an error if you try to set the name of any of those pages/campaigns to be the same name as an existing page or campaign. Thanks to Aaron at DFA, and Vicki and Sky at MoveOn for the reports.
  • The last release broke the Download HTML link for pages set to be hosted outside of ActionKit. Oops. This has been hotfixed. Thanks to Conen at Progress Now for the report.
  • We hotfixed a brief issue where our job processing system was getting backed up, causing various types of jobs (like sending mailings, running a report, uploading a file) to stall out. Thanks to PCCC and SumOfUs for flagging this!

Hidden Feature: Two-Factor Authentication

With the new administration in office, we’ve been paying additional attention to security. And so for this hidden feature callout, we’d like to focus on one simple change you can make to make your ActionKit instances more secure: Enabling two-factor authentication (“2FA”).

2FA provides an extra layer of security for your ActionKit Admin by requiring a code from an authorized device (your phone or an app) when logging in, in addition to the normal password. This can be enabled on a person-by-person basis, or, if you want to enforce it across the board for all staff, you can ask us to require 2FA for all logins for your instance (but everyone should have it enabled first, or it’s more work for you!).

To set up 2FA, click on the gear menu in the top right and select the “Two-Factor Auth” option. This will then guide you through the set up.

You can choose to use a phone call, a text message, or an authentication app to receive your token. And upon logging in, you can choose to “trust” devices such that you’re only asked for a 2FA token every 30 days.

Once you’ve set up 2FA, the same gear menu option will take you to your 2FA settings page. Here, you can set up backup phone numbers, generate and download backup tokens (for situations where you don’t have your device handy), change the way you receive your 2FA tokens, revoke trust from devices, and also disable 2FA for the account.

Read more about 2FA at ActionKit here:


Hey ActionKitties!

We've got a few exciting things in this release. The first is an improvement to custom fields, which is a piece of the new templating system we’re adding for mailings. Mailing templates are coming later this month.

Other priorities in the first quarter include rolling out several features that are in testing now -- cross-client Remember Me for actions, cross-client saved credit cards and Instant Donate, and the new system for delivering signatures to House Representatives. We’re continuing to update districts and contact information for legislators. We've got a few more district offices to add, we're working on updating state district boundary data, and hoping for updated LD data soon! We’re starting to spec out the Salesforce integration that many of you have expressed interest in. We’re adding custom page fields to the A/B testing options for pages, improving the re-engagement UI and making some events improvements. We’re also hoping to expand Instant Donate to work with foreign currencies, to speed up some places in the admin that are especially slow for large groups, and to add some additional security features.

Phew, that’s a lot! For now, here's what you'll see in your instance late tonight:

Core Code Speed Improvements

We made a number of performance improvements to core code. Some of you saw slower-than-normal performance this week, particularly around mailing targeting. We've added some optimizations to help keep things moving more quickly. More to come!

Custom Fields

Custom fields can now be marked "required".

Required custom fields will always appear on the Page/Mailing/User/Templateset screen and the screen cannot be submitted without a value for that custom field.

Donation API Updates

With this release, it’s possible to cancel existing recurring profiles using the API.

Recurring profiles can now be canceled by sending a POST to /rest/v1/orderrecurring/{id}/cancel/. This is the equivalent of canceling from the user record in the admin. The profile is canceled at the merchant vendor and in ActionKit.

For profiles created with the DonationPush API, you can still cancel using the /rest/v1/profilecancelpush/ endpoint. Remember, Donation Push just adds donations to ActionKit, tied to an import stub account, that have already been processed elsewhere.

Payment details, such as status, can now be updated with a PATCH or PUT to /rest/v1/transaction/{id}/, and payments towards a recurring profile can now be cancelled with a POST to /rest/v1/transaction/{id}/reverse/. One-time donations should still be canceled through /rest/v1/order/{id}/reverse/.

Two other additions to the DonationPush APl:

Thanks to Omar at SumOfUs and Eric at Trilogy for these suggestions.

Other API Updates

  • We fixed a bug where copying a mailing using the Mailer API returned the wrong resource endpoint. This now correctly points to /mailer. Thanks to Andy at ShareProgress for flagging!
  • And you can now create custom mailing fields for the /rest/v1/mailing/ endpoint.

Miscellaneous & Bug Fixes

  • We’ve added a new table, core_subscriptioncounthistory, that stores the subscription counts for your mailing lists by day as well as an overall subscriber count. This will run on a daily basis moving forward. We’ll backfill historical data over the next week or so. There's a lovely new "Subscribed Users History Dashboard" report that will show historical results once we complete the backfill. The reconstructed subscription history data is likely to have some anomalies so you may see a jump in this month where we bring the data in line with current reality. Thanks to Simona at SumOfUs for requesting most recently.
  • We now display the max attendees value for events on the list of events screen. Thanks to Shannon at UltraViolet for the suggestion!
  • We added documentation for the image features in your visual editor toolbar that were rolled out last release. If you haven’t yet come across it, check out the image editor toolbar that appears after selecting an image, and allows you to flip, rotate, resize, crop, and adjust the color of the image.
  • The “Download Actions” and “Compare Pages” reports will now search for terms within the page name, not only at the beginning of the page name. Thanks to Hilary at Alaska Wild for the report.
  • You can use the concatenate filter to combine two strings. For example, you can do: {{ "foo"|concatenate:"bar" }} and that will return "foobar". Thanks to David at ONE for spurring action on this.
  • You can pass extra parameters to be added to share links. For example, if you added a foo=bar parameter to the /share/link/ URL, the shared link would have “&foo=bar” as well. Thanks to James at PGM for requesting.
  • Merge files and merge queries will match on us_county and state as long as us_county is the first column. Thanks to Mark at CREDO.
  • We’ve increased the number of rows on the Library screen from 25 to 100, and fixed it so that your search settings are preserved when you move from page to page. Thanks to Keith at PCCC and Jordan at CREDO
  • The fax option is gone from the delivery page, unless you have an account with GreenFax.


Hey ActionKitties!

Happy New Year!

In our first release of this year we've got some exciting new features including drag and drop image uploading through the compose screen and bulk editing of events. And we're looking for beta testers for our new petition and letter delivery vehicle to the US House of Representatives, and also for Instant Donate which provides one-click donation ability for users who have saved payment information.

New Legislative Data

We're collecting data from several sources to update federal and state legislators and legislative boundaries, plus Legislative Directors and District offices for federal legislators. A rough timeline for updating this data follows although much of this is dependent on when other vendors finish.

Federal House and Senate data: Complete.

District offices for Federal House and Senate: In progress, House available mid-to-late next week, data for 7 new Senators may lag until the Senate website catches up.

New Federal district boundaries (limited redistricting in AZ, FL, NC, TX and VA): Waiting on USPS data, likely February.

LD contacts for delivery: Waiting on vendor, likely late January/early February.

State legislators: Rolling with some likely available late this month. Full updates may take through the end of February.

State legislative boundaries: Rolling, full updates may take through the end of February.

Communicating With Congress

We're looking for some beta testers for a new immediate delivery option to the US House. We've integrated with Communicating With Congress in order to directly submit constituent communications via the House-approved delivery system.

When setting this up, you'll be prompted to add a subject line, choose a topic, and enter a campaign statement for petitions (letter pages use the submitted user letter).

Note that this only works for the House (the Senate does not use this system), and that the House requires prefix, first name, last name, and full address. Selecting this delivery option will add those fields to your user form.

Please let us know if you're interested in trying this out and we'll make it visible in your instance.

ActionKit Instant Donate

ActionKit Instant Donate allows you to create one-click donations directly from email for users who have chosen to save their credit card info. This is effective ActionKit-wide -- your users and those who have saved their info with other participating organizations can make quick donations to you, without having to re-enter their payment information.

Read more about Instant Donate here:

We're looking for beta testers so please let us know if you'd like to try this out!

Easy Image Upload

Drag and drop images into your mailing, page or anywhere you're using a visual editor. This will automatically add the file to your mailing library and upload it to your connected Amazon S3 account. Thanks to many of you for requesting this!

We also fixed a bug where the “advanced” options for updating margins and border width went missing when we upgraded the visual editor. Thanks to Nate at MomsRising for pointing this out!

Event Tool Updates and Fixes

  • We've added bulk editing for events within a campaign. You can now approve, confirm, delete, make private, and make public multiple events at once from the event list screen. You get there by clicking on the links below Manage Events:

Then on the event list screen, click on the “Bulk Edit” link in the top left to make your selections.
  • We've added a new parameter of order that you can use with {% withevents %}. This allows you to specify the sort order of results by distance, starts_at_utc or a combination of both.

    Ex: {% withevents with user as nearby_user 'CAMPAIGN_NAME' as campaign 30 as radius 1 as limit 'starts_at_utc,distance' as order %}

    Read more at:

    Thanks to Aaron at DFA and Cody at MoveOn for requesting.

  • We now record the date and time when a host confirms their event. You can find this in the events_event.confirmed_at field. Also, action field entries on an event page are also all saved to the event_eventfield or event_eventsignupfield table. Thanks to Aaron at DFA for requesting these as well.

  • We've added a new section on event-related pages to the manual. Marked up screenshots show you where each section of content is pulled from for any screen your users may encounter. Read more here:

  • We've updated the Original templateset and patched your event_email_created.html templates so that all HTTPS links in event emails will use the defined SSL domain for your instance. Some HTTPS links were using a client's default domain and were causing security warnings when the domains didn't support SSL. Thanks to Caitlin at Courage Campaign!

  • We've added errors messages in the Admin when an attempt to contact signups or confirm or cancel events fails.

Templateset Updates

  • We made two changes to the Original templateset that you may want to apply to your templates.

    We've fixed a bug in the Original templateset's donate.html template. Previously if a recognized user arrived at the page the address fields would be treated as not required by ActionKit's javascript and the form would submit without them only to be rejected by the server-side code.

    If you want to fix this in your sets, you can update your own pages by adding actionkit.forms.alwaysRequireUserFields = true;. This was added at line 762 in the Original templateset's donate.html.

And we added some more helpful error messages if update actions fail (e.g. removing attendees, changing roles, etc.) on event Host Tools or Attendee Tools pages. To display these, add <ul id="ak-errors"></ul> above the ak-confirmation div to your event_contact.html template like so:

Thanks to Jay at DFA and Allyse at 350!

  • You no longer need to include {% load actionkit_tags %} in order to use ActionKit specific tags and filters. We've made it automatic in all templates in ActionKit, including for externally hosted and embedded pages, and all mailings. It's harmless to load twice, so there's no need to remove that line from existing templates. Thanks to Gabriela at MoveOn!
  • You can now drag and drop files into the “Upload files” dialog of the Templateset screen.
  • When uploading or linking local files, only files with .html, .css and .js extensions will be saved or added as a custom template. Thanks to James at PGM for noticing that.
  • And when previewing a change to your thanks.html template, we will now serve up a selection of recent non-import actions that you could use to preview the changes so you don't have to re-submit an action page in order to get to the thanks page.

Miscellaneous Updates

  • We've updated the User Query Builder so that you can query for subscription changes to specific lists. In the List Subscriptions > "Number Of List Subscriptions" and "Number of [Subs/Unsubs/Bounces] During [Time Period]" items, you will now see options for “All lists” or “Selected Lists”. Thanks to Chris at FCNL for the request!
  • Using merge queries and targeting with the query library should be easier now that we've implemented type-to-search functionality for page IDs and mailing IDs parameters used here.
  • We now support the use of report parameters when setting your default exclude queries and engagement queries, so you can provide a formatted parameter label, hint text and a default value. Note that these both require that the reports be tagged mailer, and currently you will need to have the {% required_parameter %} definition at the end of the query or you'll trigger an error.
  • If you need your login to the ActionKit Admin reset, the password reset email will now come from 'ActionKit System <>' instead of the previously unspecific sender of 'webmaster@localhost'. Thanks to Sky at MoveOn for suggesting this.

Mailer Bug Fixes

  • We made some updates to ensure that mailings that die get updated with the proper "died" status. Thanks to Manny at Moveon.
  • Mailings using auto-excludes will no longer appear as if they've excluded themselves in the sent mailing report. Thanks to Shannon at UltraViolet.
  • If you update a query used for targeting a mailing, you'll be prompted to rebuild the mailing before sending it. Thanks to Johnny at Color of Change.

Other Bug Fixes

  • We fixed a bug where there was an issue with the batch delivery email (e.g., no email address for that contact), but the error message was not visible. Thanks to Kurt at Demand Progress.
  • The key tables diagram in the database reference is back. Thanks to Tara at SumOfUs for flagging!
  • Removed the notice that unequal sample sizes are a problem for mailing test groups as that is just patently untrue. Thanks to Jase at DFA for factchecking us.
  • Hotfixed a bug where reports run via the API would sometimes fail if the results were above a certain size. Thanks to Brandon at Mercy Corps.
  • We also hotfixed an issue where the geocoding service was being overly strict about addresses that don't officially exist according to USPS, but do in reality. Thanks to Lucia at Free Press!