Customizing URLs in your Mailings

Many clients like to use UTM tracking codes to track clicks and performance in Google Analytics. (Ever see utm_medium=email at the end of a URL?) In fact, you could add these UTM tracking codes to all of your URLs in a mailing.

Of course, ActionKit already adds some information to your URLs to enable user recognition and link click tracking — this blog post is about additional customizations you can do.

The {% filter tag_links %} tag allows you to add some text to the end of every URL that appears between this tag and {% endfilter %}.

Let’s say we wanted to add utm_medium=email to the end of each of our links. In our mailing or email wrapper, we would add:

{% filter tag_links:”utm_medium=email” %} near the top, and {% endfilter %} near the bottom.

If you want to append the UTM tracking code on most or all of your URLs, it’s easiest to do this in your wrapper.  However, you may want to test using these tags in a test mailing’s body and move the code to the email wrapper once everything works the way you want. If you’re making these edits in your email wrapper be sure to save it then look at a mailing that uses that email wrapper to confirm.

By hovering over a link in my mailing preview, I can see where it's going -- and now I notice that my link has utm_medium=email appended.
By hovering over a link in my mailing preview, I can see where it’s going — and now I notice that my link has utm_medium=email appended.

Using |urlencode

Some clients have written into support asking how to append other values, like a recipient’s country, to links.

Let’s say we wanted to add our recipient’s country to the end of our URL as the URL parameter “country”. That’s easy enough to accomplish with a snippet: https://actionkit.com/?country={{ user.country }}

But we run into problems with many countries (like “United States”), because URLs can’t have spaces in them. So we end up with the URL https://actionkit.com/?country=United

To fix this, we need to tell this snippet that we’re going to use it in a URL. Use the |urlencode filter: https://actionkit.com/?country={{ user.country|urlencode }}

Once we’ve done that, our URL changes that space into a “%20”, which is the URL code for a space, and the URL works as expected.

If you’re using any snippet that might possibly have a space in the URL, like postal code, be sure to use |urlencode.

Combining |urlencode with the tag_links filter tag

This is a good start, but let’s say I want to include the recipient’s country and use the utm_campaign code.

Let’s go back and edit our tag. This time, we’ll also need to use some {% with %} tags in order to create variables that we can use in our snippets.

UTM tracking codes with |urlencode example

The first {% with %} tag creates a variable called user_country that has the |urlencode filter applied, so we don’t have to worry about any spaces.

The second {% with %} tag concatenates our UTM tracking code and the user_country variable we just created. Now those two pieces of information have been smushed into one piece and saved as the variable utm_tags, which is then used in the {% filter tag_links %} tag.

This might seem more complicated than necessary — why do we need to use one {% with %} tag, let alone two? This has to do with the way the tags and filters get parsed and applied. Should the entire text get |urlencode applied to it, or just the country? And using |concatenate inside the {% filter tag_links %} tag doesn’t work at all the way we might expect. Using the {% with %} tags sidesteps all of these problems.

So even though the above method uses more tags, it works and is ultimately more readable and straightforward, which can help when making updates!

Cut the clutter: Get rid of those old templatesets!

Do you have too many templatesets to choose from?

Too many templatesets to choose from, and they all kinda sound like the right one to pick. Does this look familiar?
Too many templatesets to choose from, and they all kinda sound like the right one to pick. Does this look familiar?

Not sure which ones you actually need? Not sure which ones are actually in use?

Now it’s easier than ever to figure out which templatesets you’re actually using — and clean up the ones you’re not. Reducing clutter in your menus will reduce confusion and mistakes so you can focus on making your pages look their best!

To find out which templatesets are in use — and which pages are using them, start on the Pages tab. In the sidebar menu, notice the Search Queries option and expand it to find the “Pages using a specific templateset” built-in query.

In the sidebar menu, notice the Search Queries option and expand it to find the "Pages using a specific templateset" built-in query.

On this page, you’ll have the option to choose which templatesets you want to check. In this example, I’ve chosen the “Use this! New templateset 2018 October” templateset, because I want to see: is this even in use anymore now that we have more recent templatesets?

Are we even still using this templateset?
Are we even still using this templateset?

On the screen that follows, I can see that this templateset is in use by only three pages, so I can probably edit these pages to use a different templateset, then retire this templateset so it stops cluttering up my drop-down menu and confusing new hires.

This templateset is not used by many pages, so we can change these pages to use different templatesets before we hide this templateset.
This templateset is not used by many pages, so we can change these pages to use different templatesets before we hide this templateset.

Go through each of your templatesets, see if they’re still in use, and if not,  hide them so they won’t appear in your drop-down menus anymore!

To hide a templateset you’re not using anymore, go back to the Pages tab, and in the sidebar, expand the Appearance menu option to find Templatesets.

The Templatesets menu option is on the Pages tab Sidebar under Appearance
The Templatesets menu option is on the Pages tab Sidebar under Appearance

From there, click “Hide” on any templateset you’re not using anymore and it won’t show up in your dropdown menus. (Don’t worry, if you ever change your mind, you can always unhide a templateset!)

Let's hide this templateset, we're not using it anymore!
Let’s hide this templateset, we’re not using it anymore!

Hiding templatesets that you’re not using anymore can be really helpful, especially when onboarding new staff who might not have the same institutional knowledge as you or know all of the differences between the templatesets you’re using, or even which ones are still in use. That’s also a great reason to add a description to each of your templatesets!

Creating re-usable reports

Do you have too many reports in the reports tab? Having trouble finding just the ones you need? Do you regularly copy old reports and make one tiny change to make a new report?

If so, re-usable reports are for you!

Re-usable reports will pause before they run to ask you: which page (or mailing, or tag, or other type of thing) did you want to see these results for?

Let’s take a look at an example. Here I have a report called “Top 10 Pages with the Most Actions by Tag”, which will answer the question “Which pages had the most actions for a specific tag?”

This report asks which tag we want to see results for before it runs.
This report asks which tag we want to see results for before it runs.

Now I could create one report for every tag I wanted to see results for, but that would take a long time and I could easily end up with several reports! Worst of all, if I made a mistake in one of those reports, I’d have to fix them all.

Instead of doing that, if I leave my filter criteria option for tags blank like in the below screenshot, then the report will pause to ask me which tag I want to see results for.

Our reusable report
Our reusable report

Let’s take a closer look at just our filter criteria:

This report has filter criteria, but it doesn't specify which tag to filter results by.
This report has filter criteria, but it doesn’t specify which tag to filter results by.

Note that this isn’t the same as leaving the filter criteria entirely blank, it’s just that we haven’t specified which tag we want to see results for, so the report will ask us when we run it.

In my example I’m using tags, but you could do the same with pages, mailings, or any other filter criteria you like!

10 Features Every Client Should Use

At ClientCon in May, I ran a presentation called “10 Features Every Client Should Use,” intended to help clients get the most out of ActionKit. I wanted to highlight a handful of different features that every client would find useful and wanted it to be a good mix — some things quick and easy, others that would take a little more time to set up fully. Here’s a brief overview of those ten features.

Mailing Models

Mailing models are templates or starting points you can use to create new mailings — with your pre-set targeting and layout all set up for you already.

Page Models

Similar to mailing models, page models are templates or starting points for your pages and are especially useful for types of pages that you’ve customized heavily, like a video share page or a reportback page.

Two-factor authentication

You care about your members’ privacy, and they trust you to protect their data. Setting up two-factor authentication allows you to safeguard that information by adding an extra layer of security to your ActionKit staff accounts.

Staff announcements

Announcements allow you to remind staff of new policies, targeting, or workflows and stick to the top of every page in ActionKit for logged-in staff users. They’re especially useful for reminding staff of changes or things to keep in mind, and you can easily dismiss them.

Customize “Your Progress”

The “Your Progress” dashboard that appears at the top of the Home tab when logged into ActionKit can be customized with things like documentation, onboarding and training resources, a mailing calendar, or report results.

Custom Page Fields

Custom page fields allow you to make big and small changes to your pages without needing a lot of ongoing code changes. Most commonly this is used to change things like the text of submit buttons, but the sky’s the limit!

A/B Testing

A/B testing allows you to test different variations of a page to see which one gets more actions or donations. You can test changes to the layout and design, or test different versions of content to see which images or messaging are more effective.

Cloudfront

The faster your pages load, the more actions and donations you’ll get. You should be doing everything you can to make your pages load as quickly as possible, and using a tool like Cloudfront can make a big impact with just a small one-time setup.

Customize “Draft Dash”

The “Draft Dash” dashboard appears just above the Send button of your mailings and can be customized with just-in-time reminders, a checklist of things to make sure you’ve done before sending a mailing, and even automated checks for common targeting and tagging mistakes.

Suppress Spam Actions

ActionKit has built-in protection against spam bots, and it’s worth periodically checking your spam settings to make sure that everything’s configured just the way you want it.

To learn more about setting these up, check out the presentation 10 Features Every Client Should Use — and be sure to read the presenter’s notes. It’ll be like you were right there at ClientCon!

Stop spam actions dead in their tracks

ActionKit has built-in protections against spam to ensure that actions on your pages come from actual people, not bots.

That’s important because you don’t want spambots on your list hurting your email reputation. Also, if you’re showing recent signers or their comments, you don’t want spam comments included with your legitimate signatures. 

There’s documentation with an excellent deep dive into the nuts and bolts of how everything works, but here’s a brief overview of the most important options.

Spam Check Settings

Superusers can configure a wide variety of spam settings on the bottom of the Configure ActionKit screen. By default, ActionKit will check for spam actions on Petition, Letter, and Signup pages, and can also check on Survey pages if you like.

The built-in defaults are meant to be a good level of protection without rejecting legitimate actions, but you can configure the settings in a way that works for you.  

Honeypot Check

This is the most effective option for catching spam.  Project Honeypot is a service that identifies probable spambots so that they don’t end up on your email list. ActionKit checks an action taker’s IP address against this list to determine the likelihood of an action being spam.

It’s enabled by default with a threshold of 20 — a good balance between not blocking legitimate actions and not letting too many spam actions through.

If you find that too many spam actions are getting through, you can try decreasing the threshold. Or if too many legitimate actions are getting blocked, you can raise the threshold.

Spam Check Log

ActionKit keeps a list of all of the actions that were caught by the filters you have in place as suspected spam actions.

You can view this list by going to the Pages tab, and in the Other menu in the sidebar, click Spam Check Log.

You can filter these actions by date and by which type of filter caught the action.

You should see mostly spam actions caught in the filter, but you might see some legitimate actions, too.

How can you tell if an action is legitimate? It’s mostly a judgment call — the automated filters aren’t perfect. It comes down to different patterns of behavior by spambots and real people.

What are some “tells” that make it more likely that someone is a spambot?

  • If someone’s email address has their name in it, and that name is very different than the name they gave on their action. For example: Jane Doe, brenda.smith@example.com
  • If someone’s state and zip code are very obviously in conflict
  • Email addresses with a lot of random numbers or letters
  • Lots of actions on an old page that’s not being promoted anymore

Spambots tend to appear in waves and have similar patterns, so it’s less likely that you’ll see just one or two spam actions — you’ll probably see a lot of similar actions all at once.

Typically, if an action comes from a member with an established action history, it’s usually legitimate. Sometimes, a first-time action taker might have their action marked as spam, and it’s up to you to decide whether it’s actually spam or not.

If you just see spam actions caught in the filter, great! If you see some legitimate actions caught in the filter, you can click Reverse on those actions so they aren’t marked as spam.  If you see lots of legitimate actions, you can adjust your filters.

Suppress Actions

By default, ActionKit does not suppress suspected spam actions caught by these filters — it only flags them for your review in the Spam Check Log.

If you want to automatically suppress suspected spam actions, enable Suppress Actions under Spam Check Settings on the Configure ActionKit page.

Don’t worry, if the filter marked a legitimate action as spam, you can always reverse it in the Spam Check Log or on that user’s Action History page.

Unsubscribe Users

By default, ActionKit does not unsubscribe suspected spambots caught by these filters from your lists — it only flags them for your review in the Spam Check Log.

If you want to automatically unsubscribe suspected spambots, enable Unsubscribe Users under Spam Check Settings on the Configure ActionKit page.

Don’t worry, if the filter unsubscribed a legitimate user for being a suspected spambot, you can always reverse it in the Spam Check Log or on that user’s Action History page.

Protect your reputation

Keeping your list spambot-free is important for your email reputation, and ActionKit makes it easy to stop spam actions with lots of options to configure to meet your needs. Be sure to check the Spam Check Log periodically to make sure that legitimate actions aren’t being caught and adjust your filters as needed. To your list health!

Customizing your ActionKit Home page

ActionKit’s staff announcements are great for reminding staff of new processes, monthly goals, and weekly priorities. And the Pre-flight dashboard can display a checklist of everything you need to do before sending a mailing and reduce mistakes by automating lots of things you’d check for manually.

You can also customize the “Your Progress” dashboard report to offer exactly this kind of valuable just-in-time help as well as running other kinds of reports that staff might find useful.

The “Your Progress” dashboard appears on the home page of ActionKit and displays some top-level stats about your all-time actions and users
The “Your Progress” dashboard appears on the home page of ActionKit and displays some top-level stats about your all-time actions and users

Let’s start by adding some resources to the top of the report. First, from the Reports tab, browse for and begin editing the your_progress report.

Browsing for the your_progress report
Browsing for the your_progress report
Your your_progress report will look a little something like this
Your your_progress report will look a little something like this

Let’s add this code just above the {% spaceless %}  tag.

<h3 style="background-color: #f3642f; color: white; padding: 10px;">ActionKit resources</h3>
<ul style="margin-left: 10px;">
<li><a href="https://roboticdogs.actionkit.com/docs/manual/guide/index.html" target="_blank"><b>Campaigner's Guide</b></a></li>
<li><a href="https://roboticdogs.actionkit.com/docs/manual/developer/wmd.html" target="_blank"><b>Database Reference</b></a></li>
<li><a href="https://roboticdogs.actionkit.com/docs/manual/faq.html" target="_blank"><b>Frequently Asked Questions</b></a></li>
<li><a href="https://roboticdogs.actionkit.com/docs/manual/tutorials/index.html" target="_blank"><b>Tutorials</b></a></li>
</ul>
<br>

Save your report and head back to the ActionKit home page to see your customized dashboard.

The “Your Progress” dashboard now has our newly-added resources up top
The “Your Progress” dashboard now has our newly-added resources up top

If you have your own staff trainings, helpful links, or resources that staff frequently use, you can add them here and customize it any way you like! Do you have a mailing calendar that all staff use? Add a link to it here!

Beyond adding resources, you could add more reporting that might be helpful. Here are some ideas to get you started:

  • What are the draft mailings we have today? What’s been scheduled, and what’s already sent?
  • What mailings are scheduled for this weekend?
  • How many people haven’t received a mailing yet today?
  • What events do we have coming up, and what do their recruitment numbers look like?

Just be sure to keep it high-level; this dashboard is best for at-a-glance information. And keep in mind that this dashboard won’t load until all of its reports have run, so don’t use this section for long-running reports.

Creating staff announcements

As we saw in Customizing your Pre-flight Dashboard, having reminders built in to your normal workflow can reduce mistakes and provide just-in-time help right where you need it.

For time-sensitive or one-off reminders, announcements are a great way to do this since they appear at the top of every page in ActionKit.

In the upper-right corner of any page on ActionKit, click the gear that has your name to open the settings menu, then go to Announcements.

Navigate to Announcements from the settings menu under the search bar
Navigate to Announcements from the settings menu under the search bar

On the announcements page, set your title and message. You can include a link and change the severity of your message (informational, warning, or critical) which changes the color of the display box.

Adding a new announcement
Adding a new announcement

Once you click save, all staff members who are logged in will see your announcement at the top of every page in ActionKit. Staff members can dismiss these messages for themselves once they’ve read them by clicking the X on the right of the announcement.

Our announcement appears at the top of every ActionKit page so all logged-in staff can get timely reminders
Our announcement appears at the top of every ActionKit page so all logged-in staff can get timely reminders

Use announcements to remind staff about monthly goals, weekly priorities, changes to work processes, or anything else you can think of!

Customizing page styling

ActionKit gives you full control over the look and feel of your pages so all of your pages look exactly the way you want them, with your branding.

Sometimes you’ll want to make one-off changes to the layout and styling of one page without affecting the way your other pages look. If you’ve found yourself wanting to add custom CSS to a page to change how a page looks (especially to use with ActionKit’s built-in A/B testing!), read on.

(One-time) Create a custom page field

Custom page fields allow you to change the layout or functionality of your pages on a page-by-page basis.

From the Pages tab, choose Other > Custom Page Fields from the sidebar. You’ll then be able to see any custom page fields you have already created.

Let’s add a new custom page field. This is something that you’ll set up once — and then you’ll be able to use it again and again on lots of pages.

Creating a new custom page field, custom_css
Creating a new custom page field, custom_css

Here, we’ve created a custom page field with the name “Custom CSS” and the description “Add custom CSS to pages.” We’ll use the “Text” field type.

(One-time) Add the custom page field to your templateset

Like creating a custom page field above, this is a one-time setup step that will help us to customize our pages easily once we’ve set it up.

Caution: Editing templatesets will change the look and feel of every page that uses that templateset, so when making changes to your templatesets, use the Preview feature and test lots of pages to make sure everything looks correct!

From the Pages tab, choose Appearance > Templatesets from the sidebar. You’ll then see all of the templatesets your organization is using.

Find the templateset you want to change and click Edit. You’ll then see a list of all of the templates available. We want to make this custom page field available on every page, so scroll to the bottom and open wrapper.html.

Search for a closing </style> tag and add this code just above it:

 

{% if page.custom_fields.custom_css %}
  {{ page.custom_fields.custom_css }}
{% endif %}

If your wrapper.html doesn’t have a closing </style> tag, add this code just above the closing </head> tag:

<style>
  {% if page.custom_fields.custom_css %}
    {{ page.custom_fields.custom_css }}
  {% endif %}
</style>

 

Preview a handful of pages that use this templateset — they should look completely unchanged, since this code asks: “Does this page have anything in the custom page field custom_css? If so, add it in here!” But it won’t do anything until our page itself has something in the custom page field custom_css. We’ll cover that in the next step.

Once you’ve tested several pages and you’re confident that your changes to your templateset didn’t break any existing pages, go ahead and publish your changes.

Note: if you use multiple templatesets and want to add this functionality to each of them, repeat this step for each templateset.

Add the custom page field to your page

Unlike the other steps, this is one you’ll do on each page where you want to customize the styling.

Let’s start with a petition page:

A page; notice the submit button is blue here
Notice the submit button is blue here

On the Action Basics section of your page, scroll to the bottom and expand the Custom Page Fields, then add the field Custom CSS.

Adding a custom page field to the page
Adding a custom page field to the page

In this example I’ve added some CSS to change the color of the submit button from blue to red.

button.ak-submit-button { 
  background-color: #CF1518; 
}

 

Once you save your changes, take a look at the page.

And we’ll see that this page, which normally had the submit button as blue, is now red.
And we’ll see that this page, which normally had the submit button as blue, is now red.

The submit button is now red.

This example highlights a very small change, but by adding custom CSS to your templatesets, you’ll be able to change the layout and styling of any element on your page very quickly on the fly, without impacting the way any other pages look.

If you combine this with running A/B tests on your pages, you can A/B test any CSS change you want to see layout and styling changes that drive more actions and donations to your pages.

Customizing your Pre-flight Dashboard

Ever made a mistake? Forget to tag your mailing? Missed a tag? Messed up your targeting? Get a little sweaty before pressing that send button? You’re not alone.

Checklists help pilots and surgeons remember every detail in stressful situations and they can help you too.

ActionKit’s draft_dash dashboard report is perfect for this —  it appears just before the Send button on the Proof and Send screen, and you can customize it to include a wide range of automated checks.

What do I check for?

Chances are, you already have a process for sending a mailing that looks a little something like:

  1. Draft, review, and incorporate edits
  2. Determine best targeting
  3. Get some proofs
  4. Proofread the email carefully
  5. Click all links to ensure none are dead
  6. Take action on your page to make sure it looks good
  7. Make sure everything looks correct on mobile
  8. Take a deep breath and click send

Eight steps is already a lot to remember — and there are so many other things we could check! We remembered to use HTTPS on our links, right? We didn’t forget any mailing and page tags? (I could go on!)

Some of these are things that we need to review manually; others we can check automatically through ActionKit.

If you can write a report for it, you can include it

You already use reports to see how many people took action on your page or opened your mailing. But you can create reports to see other things too, like which tags are associated with a page.

If you set up your tags by tag type, you can also make sure that each page or mailing has at least one tag of every required type. You can also check to make sure that the tags are consistent between your mailing and page.

Many clients use custom page fields to control whether a page shows a 501c3 logo or a 501c4 logo, and you can check for this custom page field too.

Is there a targeting query that you must include (or exclude) with every mailing? You can make sure it’s there!

Reports vs. Dashboards

Reports are built with the Query Builder (or written in SQL) and pull information directly from the ActionKit database.

Dashboards are HTML pages that can pull information from lots of reports at once. draft_dash is a special dashboard — if you create it, ActionKit will put it just above your Send button on the Proof and Send screen of each of your mailings.

Take a look at the code for the Rolling 12 Month Email Performance Rates Dashboard — you’ll see you can use Django template tags, lots of reports, CSS, and Javascript in your dashboards to make them powerful and flexible.

Start small

Even if you only added a bulleted list of your mailing process to the draft_dash dashboard, it would still go a long way toward reducing mistakes since that’s the last thing campaigners see before clicking the send button.

draft_dash dashboard report
Creating a new dashboard report, draft_dash and adding our checklist
<ol style="list-style: decimal;">
	<li>Draft, review, and incorporate edits</li>
	<li>Determine best targeting</li>
	<li>Get some proofs</li>
	<li>Proofread the email carefully</li>
	<li>Click all links to ensure none are dead</li>
	<li>Take action on your page to make sure it looks good</li>
	<li>Make sure everything looks right on mobile</li>
	<li>Take a deep breath and click send</li>
</ol>
What our dashboard looks like on the Proof and Send screen of our mailings
What our dashboard looks like on the Proof and Send screen of our mailings

Next, let’s create a report that will make sure a campaigner has written something in the mailing’s notes field. The notes field is a great way to know what a mailing is about without having to open it and read the whole thing, so we don’t want to leave it blank.

When browsing our mailings, the notes field is helpful to figure out what a mailing is about
When browsing our mailings, the notes field is helpful to figure out what a mailing is about

Let’s create a new Custom SQL report to check to see if the notes field was left blank.

If the notes field is blank, we’ll get a warning. Otherwise, nothing shows up - we’re good to go!
If the notes field is blank, we’ll get a warning. Otherwise, nothing shows up – we’re good to go!
SELECT
    IF(core_mailing.notes is null or core_mailing.notes = '',
	   'The notes field was left blank on this mailing!', '') as preflight_notes_check     
FROM core_mailing
WHERE
    core_mailing.id = {{ mailing_id }}

Notice how in line six we use {{ mailing_id }}. When using this with the draft_dash dashboard, ActionKit will automatically fill this in with the mailing you’re viewing.

Now we can use this SQL report we just created in our dashboard. Here I’ve added it under the checklist we already had:

Adding in the report we just created to the dashboard
Adding in the report we just created to the dashboard
<h4 style="background-color: magenta; color: black; padding-left: 50px;">
	{{ reports.preflight_check_mailing_notes }}
</h4>

Remember: if there’s something in the notes field, then nothing will show up here. If the notes field is blank, then the message “The notes field was left blank on this mailing!” will appear against a bright magenta background.

Results for draft_dash on a mailing with a blank notes field
Results for draft_dash on a mailing with a blank notes field

These reports are included as a suggestion to help you get started. You can build on this little by little, adding in checks as you go. For best results, make sure that staff is trained on how to use the dashboard and knows how to refresh the report once they’ve made changes. And once staff get used to the dashboard, they’ll find the extra checks and reminders useful, catching mailing mistakes you might have missed before!

 

A Tagging System that Works

(Updated April 2021 to show examples of using named prefixes rather than symbols, and emphasizing using multiple tags)

ActionKit has many built-in ways to see the performance of your mailings. The Rolling 12-month Email Performance Rates report is one of my favorites for showing how your overall performance is trending.

But do you ever wonder how well specific types of mailings perform? By default, your Rolling 12-month Email Performance Rates report shows the combined performance of every mailing you’ve sent. But petitions perform differently than call alerts and fundraising appeals. While it’s good to get a big-picture view, sometimes we need to take a different approach.

ActionKit’s built-in reports will answer questions like “What’s the average click rate of our mailings?” But maybe we have other questions, like:

  • What’s the average click rate of our petition mailings?
  • What’s the average click rate of our fundraising mailings?

What are tags, anyway?

Tagging your pages and mailings makes answering these questions easy. Tags can be used to describe pages and mailings in a way that can be used in analyzing your data, like to differentiate a petition mailing from a fundraising mailing.

Clients who work on a variety of issues might create a tag for different issues, to differentiate between how well an immigration mailing performed compared to a mailing about the Supreme Court. Or to see that mailings sent to a random sample of your list won’t perform as well as a mailing sent to your most active members.

You could create a tag for each of these different situations and apply them to your pages and mailings, then analyze your performance on a per-tag basis.

Grouping tags together

The tags themselves also have context and meaning, so it makes sense to group them.

Pages and mailings have lots of different categories that you could associate with them, like:

  • Purpose (petition, call, letter to the editor)
  • Issue (immigration, Supreme Court vacancy, climate)
  • Audience (random sample, most active)

UltraViolet (inspired by SumOfUs) created prefixes for each type of tag to group similar tags together. For instance, the purpose of a mailing or page became *petition and *call; the issue became #immigration and #climate; the audience was @random and @active.

Grouping these tags together with a prefix meant that they were sorted with similar tags, and best of all, campaigners didn’t have to remember all of the different tags, just the different prefixes, and autocomplete would do the rest.

Suggested tags

You’ll want to customize the tags and tag types that work for you, but here are some suggestions:

Type of Tag Description Examples
*Purpose How are you asking members to take action? *petition, *call, *lte, *share, *fundraiser
#Issue What is the issue area(s) or reason you’re sending this? #immigration, #climate, #healthcare, #abortion
&Moment Is this related to a specific, high-energy moment? &obamacare, &kavanaugh, &familiesbelongtogether
@Audience What is the targeting / who are you sending this to? @actives, @random, @everyone
!Target Who are you trying to move? !corporate, !media, !congress
$c3/c4 Is this a 501c3 or 501c4 action? $c3, $c4
%Mailing phase Is this a test, a full-list send, or a kicker mailing? %kicker, %test, %fullsend
-Staff member Who worked on this mailing or page? -Shannon, -Tanya

Suggested alternative

These symbols are good, but even better might be using named prefixes, like topic- or target- or type-.

For example, revising the above to use named prefixes instead of symbols, you could do:

Type of Tag Description Examples
type- How are you asking members to take action? type-petition, type-call, type-lte, type-share, type-fundraiser
issue- / topic- (choose one) What is the issue area(s) or reason you’re sending this? topic-immigration, topic-climate, topic-healthcare, topic-abortion
moment- Is this related to a specific, high-energy moment? moment-obamacare, moment-kavanaugh, moment-familiesbelongtogether
audience- What is the targeting / who are you sending this to? audience-actives, audience-random, audience-everyone
target- Who are you trying to move? target-corporate, target-media, target-congress
entity- Is this a 501c3 or 501c4 action? entity-c3, entity-c4, entity-pac
phase- Is this a test, a full-list send, or a kicker mailing? phase-kicker, phase-test, phase-fullsend
staff- Who worked on this mailing or page? staff-Shannon, staff-Tanya

Never too late

It might seem daunting to try a new system if you’ve never set up tags before, or if you’ve been tagging your pages and mailings a different way for years, but here are some tips that can help ease the transition:

  • Start by renaming your tags to conform to your new system
  • Train all staff who use ActionKit on the new system and incorporate feedback into the plan.
  • Triage the most important pages or mailings to go back and tag under the new system, starting with the pages with the most actions and mailings with the most recipients.
  • Everyone work together through the backlog, preferably at the same time so you figure out the nuances between your different tags and achieve some level of shared agreement about what each tag means. This is a really important step, so don’t skip it!  

Consistency is key

The whole point of doing all this is to be able to analyze data in creative ways. But reliable, accurate data requires consistent tagging. UltraViolet customized the draft_dash dashboard report to check mailings and pages to make sure they have at least one of the required tags, and reminds staff if they forget. Best of all, the draft_dash dashboard report appears just above the Send button on mailings, so it’s the last thing campaigners see before sending.

Keep it general

Don’t get too specific with your tags! Think about them like movie genres, and remember that a page can have multiple tags, and each tag should be used by many different pages. (If your tags are single-use, it might be better to capture that information in the page or mailing’s description).

Think about your tags like one fact describing the page or mailing. To continue the movie genre analogy, a good tag for movies would be “Comedy” or “Horror”. Movies like Parasite (2019) would have both tags, and it wouldn’t be as useful to create a third tag called “Comedy/Horror”, in part because there would be very few movies with that third tag, and because having the third tag doesn’t tell you any more information that the first two tags didn’t.

Sample questions

Here are some questions you could answer using the suggested tags above:

  • Do mailings with corporate targets have a higher click rate than mailings with congressional targets?
  • How does the performance of a kicker compare with a regular full-send mailing?
  • Are there specific issues that are more motivating to our member base? (Try to think of issues as broadly as you can. Even groups focused on a single issue will have issue sub-categories.)
  • What is the average performance of our mailings and pages by type?

Depending on how you set up your tags, you’ll be able to answer these and many others!