Issue #025

Why email personalisation is so damn difficult

First, let's talk about personalisation is not:

Many marketers – myself included – add people's first names to the emails they send. Chances are, if you're capturing the first names of your subscribers you're doing this too.

This is NOT what I'm getting at with personalisation.

That's easy to do, and basically every email platform on the planet supports this:

Personalisation means reshaping a message, not spitting out what someone already knows (like their name)

The easiest way to demonstrate what I'm getting at is to walk you through, step-by-step, an example of personalisation done right.

I have a product called the Creator Email Template Pack. It does well. 250+ people have bought it, and it's about to evolve into a full blown software-as-a-service product.

I want to promote this to people on my list, and I want to personalise how I promote the product.

Here's the gist of what I'd like to do:

"Because you're working toward <SOMETHING ABOUT THEIR CURRENT LIST GOAL>, I'd love to share with you why the Creator Email Template Pack can help you do just that.

With just a few clicks – <SOMETHING BASED ON THEIR EMAIL MARKETING EXPERIENCE> – you can design email templates and widgets that work seamlessly in <THEIR EMAIL MARKETING PLATFORM>. <IF THEY BOUGHT MASTERING CONVERTKIT, TALK ABOUT HOW IT WORKS ALONGSIDE IT>.

Here's what XXXX has to say: <TESTIMONIAL ASSOCIATED WITH THEIR GOAL>.

Talk about an eye sore, huh?

But the end result – if we can do it right – should perform really nicely, and offer no hints that this is dynamic content.

A subscriber should read this block of text and understand:

  • How the Template Pack will help them get closer to their current email marketing goal (i.e. if they're working on audience growth, tout the referral widget that James Clear and others are using to supercharge growth.)

  • That even if they're a beginner, it will be easy to figure out. And if they're more advanced, it'll help make things much easier (and placate any objections that more advanced email marketers might have.)

  • That it'll work with the software they use. No one cares that it works with X, Y or Z. They just want to know if it works with what they use.

  • If they're already a customer of Mastering ConvertKit, talk about how this will help them better implement the theory I teach in that course.

Overwhelmed?! 😂

(Truthfully, this is why most of us just stick to generic, unpersonalised content. Because even though it's pretty obvious that more relevance = more results, getting to that point... well, it's not easy.)

Step #1: What segmentation data do we have to work with?

If you're not segmenting your email list you can't personalise your emails. Full stop.

I'm going to assume you are segmenting your subscribers or are at least working toward doing that, but if you aren't – go and read this first.

Anyway, I'm tracking quite a good amount of data.

But my coverage is by no means perfect. Of the ~2500 people on my email list, more than half aren't fully segmented.

However, of the highly engaged subscribers on my list, closer to 80% are segmented. And the people who read your emails and generally engage with what you're sending are the ones who are most likely to buy.

The first thing we need to do is look at what segmentation data we'll be using to personalise the above offer description.

  • list_goal (Current Focus): audience / sales / automation / other

  • esp (Email Platform): activecampaign / convertkit / etc. etc.

  • esp_experience (Email Marketing Experience): new (0) / beginner (1) / intermediate (2) / advanced (3)

  • mck_status (Mastering ConvertKit status): (blank) - not a customer / purchased / installment / refunded

It's important to highlight what I mentioned above: not everyone on my list is segmented!

This means we need to think about some sane defaults.

For someone's current focus (list_goal) and their experience (esp_experience), I'm going to just make a data-driven assumption if segment data is missing.

The most common list goal response is audience (49.8%), and the most common experience response is intermediate (48.6%). While not perfect, I have a 50/50 chance of getting it right by assuming someone with zero segmentation is an intermediate email marketer who's main priority is audience growth.

Step #2: How will this data get used to personalise the offer copy?

Now that we've catalogued the segment data we'll be using, it's time to actually transform the above offer copy.

Let's look at it again, this time with the fields we're using to segment:

"Because you're working toward <LIST_GOAL>, I'd love to share with you why the Creator Email Template Pack can help you do just that.

With just a few clicks – <ESP_EXPERIENCE> – you can design email templates and widgets that work seamlessly in <ESP>. <IF MCK_STATUS=PURCHASED...>.

Here's what XXXX has to say: <LIST_GOAL>.

Unfortunately we can't just dump in our segment data and call it a day.

"Because you're working toward audience... With just a few clicks – intermediate – you can..."

Doesn't make much sense, does it? We'll need to do quite a bit more than injecting custom field data.

And there's another issue...

Someone's email marketing platform could 1) be something that's not yet compatible with the template pack or 2) "other" or "na" (not currently using one) – this makes up 27.6% of those segmented on my list!

(I warned you. Personalisation is harddddd.)

What should we do about them?

Well, the easiest thing would be to just only show this offer to people who could actually use the Pack. That would be customers of ConvertKit, Drip, or Customer.io.

Let's do that:

{%- if subscriber.esp == "convertkit" or subscriber.esp == "drip" or subscriber.esp == "customerio" -%}

Because you're working toward <LIST_GOAL>, I'd love to share with you why the Creator Email Template Pack can help you do just that.

With just a few clicks – <ESP_EXPERIENCE> – you can design email templates and widgets that work seamlessly in <ESP>. <IF MCK_STATUS=PURCHASED...>.

Here's what XXXX has to say: <LIST_GOAL>.

{%- endif -%}

And since we're not going to bother with people who fall outside of that email platform range, we can safely replace "that work seamlessly with <ESP>" with something like "that work seamlessly with ConvertKit".

We'll just need to do a bit of transforming with Liquid, the templating language my email platform uses, since I'm storing "convertkit" and we want to show "ConvertKit":

{%- if subscriber.esp == "convertkit" or subscriber.esp == "drip" or subscriber.esp == "customerio" -%}

...that work seamlessly in {{ subscriber.esp | replace: "convertkit", "ConvertKit" | replace: "customerio", "Customer.io" | replace: "drip", "Drip" }}...

{%- endif -%}

Fortunately, since we're only targeting people who use one of these three platforms, we don't need to worry about a default email marketing platform.

Step #3: Wrestling with language

Now things get considerably more interesting (and difficult.)

We need to now think about how we're going to swap in content depending on things like someone's current focus while ensuring the resulting copy doesn't sound weird.

(This is where you'll want to use something like TestMyLiquid to easily create & test all the various permutations of copy possible.)

To start, let's think about the introductory sentence that's based on someone's list goal:

"Because you're working toward <LIST_GOAL>, I'd love to share with you why the Creator Email Template Pack can help you do just that."

Everything leading up to the comma will need to be conditional based on someone's goal, and then to keep things simple the rest of the sentence will be standard.

(If we wanted to really go wild 🎉, we could swap out "...can help you do just that" with something like "...can help you build your list faster.")

Always start first with the sentence fragment variations (warning, this copy sucks and is just so I have something to demo!):

Audience (default and what we'll show if they chose "other"):

"One of the most under-appreciated ways to grow your audience faster is to regularly send not only great content – but to make that content so easy to consume that people just want to share it with their friends, ..."

Sales:

"You wouldn't dream of creating a plain-text sales page, so why are you sending unstyled, hard-to-consume sales emails? Being that you're currently focused on turning more subscribers into customers, ..."

Automation:

"Wouldn't it be great to leverage the power of marketing automation to always show the right offer to the right subscriber? Or to deliver dynamic, fully personalised content to those going through your automated sequences? Since you're knee-deep in automation, ..."

I'm not going to make this newsletter any longer than it already is, but hopefully this all makes sense. You'd want to do the above for the rest of the bits of the offer that need personalisation.

Step #4: Putting it all together

To incorporate our sentences + sentence fragments into our overall personalised offer copy, we're going to use Liquid switch statements.

{%- if subscriber.esp == "convertkit" or subscriber.esp == "drip" or subscriber.esp == "customerio" -%}

{%- case subscriber.list_goal -%}

{% when "sales" %}You wouldn't dream of creating a plain-text sales page...

{% when "automation" %}Wouldn't it be great to leverage the power of marketing automation...

{% else %}One of the most under-appreciated ways to grow your audience faster is to regularly...

{%- endcase -%}

, I'd love to share with you why the Creator Email Template Pack can help you do just that.

...that work seamlessly in {{ subscriber.esp | replace: "convertkit", "ConvertKit" | replace: "customerio", "Customer.io" | replace: "drip", "Drip" }}...

{%- endif -%}

​...Only, there's a bit of a problem beginning to develop.

We want the Liquid "code" we're writing (the {%- case subscriber.list_goal ... -%} stuff) to remain legible to us, which means making ample use of line breaks.

But this results in sentences with line breaks. Like:

"You wouldn't dream of creating a plain-text sales page, ...
, I'd love to share with you why the Creator Email Template Pack can help you do just that.
...that work seamlessly in ConvertKit..."

Ugh!

Well, there's a pseudo-fix. We can assign our entire paragraph in a variable and then run the "strip_newlines" filter on it. That does the trick.

And if you're using ConvertKit, you'll need to shove all this in an HTML Block, otherwise ConvertKit will turn those line breaks into HTML tags (paragraph tags, to be precise.)

But what a pain. And this is what we're stuck looking at:

THERE NEEDS TO BE A BETTER WAY TO DO THIS

If you've made it this far (👏👏👏) you probably want to send better, more personally relevant content to your email list.

But – hey – I'm pretty technical. I'm a programmer-turned-marketer. I've been living and breathing personalisation for half a decade now.

And this shit still overwhelms me.

Netflix, Amazon, and all the big personalisation case studies have scores of engineers on hand to custom code recommendation engines / personalised product descriptions / dynamic film/TV covers based on the type of people you're attracted to / etc.

And you're just... well, you're you. Or you're working on a small team.

I've been working on upgrading the Creator Email Template Pack to make the visual creation of complex, personalised blocks of content as easy as writing a one-size-fits-all block of generic content – along with loads of other stuff ("Webflow for email", more integrations with email platforms, etc.)

I'm still at least a few months out from this major upgrade to the current Pack, but it IS going to radically simplify how personalised content gets created.

Right now, anyone who buys the current version of the Pack – even if it doesn't yet integrate with your email platform or 100% suit your needs at the minute – gets effectively a lifetime license.

As an early "investor", you won't need to pay anything once the Pack gets a new name / new website and turns into a proper software-as-a-service that's billed monthly.

So if sending more personally relevant content to your list (and wrapping that content with beautifully designed widgets and templates) is your thing, definitely consider grabbing a lifetime license while you can. Otherwise, I'll let you know once the new version is up and running 👍

I hope this wasn't too... overwhelming?

I really do wish it was easier to deliver highly personalised content over email, but right now we're sorta suck a bunch of "if/else if/else" control flows that hopefully spit out a legible string of words.

In the meantime, simple personalisation – like {%- if subscriber.mck_status == "purchased" -%}Something something to customers....{%- else -%}Something something to everyone else{%- endif -%} – can go a long way to making your emails more relatable.

And while it might not make sense to personalise your one-off emails, like your weekly newsletters, definitely think about spending some time tailoring your evergreen emails – like your subscriber onboarding sequence – to take into account who your new subscriber is and what they're looking for from you.

It really does go a long way by not only showing your audience that you're listening, but also cutting to the chase and showing someone specifically why what you have to say or offer should matter to them.