Custom Fields Tutorial: Personalization
Wednesday, October 22, 2008
So far in this tutorial series I've covered custom field definition and subscriber data capture
, analyzing the data
. This post is about personalization
, which tailors the content (and even the layout) of your newsletters depending on whom you're sending to and what you know about them.Using the Graphic Design Template Editor
Personalization requires you to use a custom graphic design template, since personalization modifies the HTML used to format the emails. To find the template editor, go to the Newsletter Center for the relevant blog, and click the "graphic design" link (marked by the icon you see at the left). You don't have to enable
the template right away, however: you can build out the personalization in the template and test it using its preview function before you go live.Personalization Basics
The most basic form of personalization is simply to have the system substitute the custom field in to the newsletter. Say you have the custom field FirstName and you want to build a basic greeting "Dear FirstName
" at the top of the newsletter.
If you just type FirstName into the template, then what happens is that the template just thinks that's regular text, and will simply add "FirstName" to your newsletter. Yuck. To tell the template that we want to use a custom field variable, you enclose it in template tags
(just like the other template variables that you see underneath the editor). So, to substitute in the recipient's first name, you enter the text
into the editor. The greeting therefore looks like this:
Custom field variable names are not case sensitive, so you can also write this and it will work:
You can use any of your custom fields this way. Easy! Don't forget that the custom field "email" is pre-defined for you, and so you can use it as
in your template.Default Values
But what if the user hasn't completed the registration form yet, or the field you want to use was optional and the user didn't enter any data? In this case, FeedBlitz will use the default value you specified when you defined the field. If you didn't specify a default, FeedBlitz will replace the tag with nothing (i.e. empty text).Unknown Visitors
Remember that that your template is used in places other than your newsletter mailings. It's also used to format:
- The subscription form;
- The online preview;
- Subscriber confirmation landing pages;
- Activation emails.
In the first two cases, your template is much more likely to be seen by a visitor who is not
a subscriber, or is not logged in
. In which case they are unknown to FeedBlitz, and the custom fields are all going to take their default values, if defined. But the defaults might not make sense in all of these locations - what to do?Conditional Fields
The answer is to use conditionals - if statements. The FeedBlitz custom field template system supports the following conditional tags:
. Rather than delve into syntax, it's simpler to show a couple of basic examples to demonstrate they work:
<$if email=""$>You are not logged in<$else$>Hi there, <$FirstName$><$endif$>
<$if FirstName=""$>Dear Visitor:<$else$>Dear <$FirstName$><$endif$>
The first example changes the output depending on whether or not the subscriber is logged in, and the second one changes the salutation depending on whether the FirstName field is empty or not.
Conditionals are therefore a great way to:
- Alter content where the reader is unknown;
- Change the output based on a custom field's value.
Although the examples above used an
<$else$> tag, you do not have to have one. So this is fine:
<$if premiumfield="1"$>You are a premium customer!<$endif$>
What you must have is a corresponding
<$endif$> for each
<$if$> you start.
If you use hidden fields you can use them in these template expressions, but if you expose them in the template like this
<$HiddenFieldName$> then the content of that field will be revealed in the output. So be careful and test using the preview to avoid any awkward subscriber data revelations. Like segmentation rules, text comparisons are case insensitive.
Conditional testing works in the same way that segmentation does (it's the same code under the covers). So you can test using math, parentheses to control precedence, and the following logical operators:
So you can write:
<$if favoritecolor!="blue"$>Why did you did not pick blue?<$endif$>
Nested If Statements
You can also nest if statements to multiple levels, so that (for example) you can decide (a) whether the subscriber is logged in, and (b) whether to do something based on what you know about them. Here's an example based on a Gender custom field for a clothing store:
<$if gender=""$>Please complete our registration form or log in<$else$><$if gender="m"$>Men's ties are on special this week<$else$>Half off leading designer handbags<$endif$><$endif$>.
The special offer is only presented to registered subscribers, and that the offer is different based on what you know about that subscriber. Note also that each opening
<$if$> has a corresponding
If you get this wrong, the template editor preview (and other screens where the template is used if you take it live with an error in it) will display "syntax error" if your statements don't match up properly. So don't forget to test, and make sure you have both the leading "
<$" and trailing "
$>" (i.e. make sure you write "
<$if some logical test $>" and "
<$else$>" and "
<$endif$>", and NOT "
<$if some logical test>" or "
<$else>" or "
<else>" or "
You can also use conditionals around HTML tags and page elements to based on subscriber data. For example, you could define an image in the editor, and then precede it with the opening
<$if> statement and put the
<$endif$> after the image. The image will only be put into messages and screens where the
<$if$> statement says it should. Really advanced users can go into the HTML source and use conditionals on the raw HTML for extensive personalization of styles and layouts, but that takes great care.
And no matter what you do, don't forget to test!
Testing, testing, testing...
And test more than your newsletter. Here are my tips to ensure that your template works everywhere it's going to be used:
- While you're editing, test using the online editor's preview feature.
- After you enable the template, test using your ID:
Log out, and then repeat steps 1 and 2 above.
- The online preview;
- The subscription form.
If all the above tests work out the way you want then your template will work wherever it's used.
Labels: custom fields, personalization
Custom Fields Tutorial: Segmentation
Sunday, October 19, 2008
Segmentation uses custom fields to extract subsets of subscribers from a single list. Applications for segmentation include:
- A/B testing: Sending a different message to different groups to test response rates;
- Special offers: Send a message to subscribers who have (or have not) bought a product or service;
- Registration updates: Send a message to subscribers who have not completed your registration form;
- Geographical targeting and event marketing: target subscribers in specific regions.
- Seed lists: Sending messages to a select few subscribers prior to a full blast.
Are custom fields required for segmentation?
Actually, no.... the email address of your subscribers is a custom field! So you can use segmentation even if you don't have special custom fields defined (so you can do some basic A/B testing and build seed lists this way). But you'll get the most out of segmentation when you set up and use custom fields.
Where can I apply segmentation?
On manual "on demand" sends and "Newsflash" email blasts. You can't use segmentation on scheduled automated updates. If you want to filter content from an RSS feed for specific subscribers, use tag filtering instead.
How do I use segmentation?
On the main Newsflash and On Demand pages you'll see a segment option at the foot of the page; the default select is "All Subscribers." If you have any segments saved (I'll get to that shortly) you can pick a prepared segment and use that straight away. Or you can click the edit icon and make a new one.
What defines a subscriber segment?
You use a (relatively) simple approach to define a segment - it's a just formula, if you like, or a line of very simple programming. When you use a segment, the custom fields for each subscriber in the list are grabbed from the database and inserted into the segmentation equation. If the fields match (more technically, if the segment expression evaluates to being true), then the subscriber is included in the mailing. Otherwise they're skipped.
What are the rules for segment expressions?
Just like in math, text within parentheses is evaluated first. When making comparisons, literals should be enclosed within quotes. Text comparisons are not case sensitive, so the expressions
FirstName="pHiL" are all the same. As you can probably guess, the way to refer to a custom field is simply to use its name without any quotes. In other words, a custom field is a variable that FeedBlitz assigns a value for each subscriber in your list.
When you test your custom fields, however, what you must be sure you're doing is testing against the Database Value for the field. For simple text fields the value is whatever the user typed in, but for predefined choice fields the values might be be "M" and "F" for a gender selection, not "Male" and "Female".
Simple segment examples
Say you have three email addresses, email@example.com, firstname.lastname@example.org and email@example.com that you want to be the seed (or test) list for your newsletter. Here's the segment code:
email="firstname.lastname@example.org" or email="email@example.com" or email="firstname.lastname@example.org"
Easy, right? Right.
email=="email@example.com" || email=="firstname.lastname@example.org" || email=="email@example.com"
Guess what - that works too!
And if you're a database developer, guess what? This works as well:
email IN ("firstname.lastname@example.org","email@example.com","firstname.lastname@example.org")
Now, naming individual email addresses like this is a drag if your seed list is more than a few addresses long. What you can do instead is define a hidden custom field called (say)
SeedList and then set the value in the database for your seeds to be "1" The seed list expression then becomes very simple:
(or use whatever equivalent syntax you like). You can then manage your seed list by simply changing the value of the variable in the FeedBlitz database (how? On the subscriber pages, set "show custom fields on" and then click the relevant edit button).
You can do some (very) simple A/B testing using two segments, like this:
Getting more sophisticated
Sending mail to people who have not registered
Let's say you had a list in FeedBlitz, and then you added some custom fields. You want to personalize the newsletter, so you made the FirstName field required. For the purposes of this example let's further assume that there is no default value.
In this case, anyone with a blank FirstName has not filled out the form (because the field is required, remember). So you can send mail to people who have not completed the form using this segment:
So you can now send then the link to the registration form. Similarly, you can send a thank you note or a special offer to folks who have completed the form using either of these expressions:
You can combine multiple expressions using logical operators. The following logical operators are available:
- Logical AND:
- Logical OR:
- Other comparators:
You can also do math in a segment expression, using the - ,+ , / (divide), * (multiply) and % (modulus) operators. You can also negate a value by preceding it with the - sign. If the field's value is empty or not a number it is treated as being a zero when used in an arithmetic context.
So you can send a newsflash to all premium customers in Texas or Oklahoma like this:
(state=="TX" or state=="OK") and CustomerType="premium"
Multiple Choice Fields
One complexity is that FeedBlitz allows some fields (multiple choice lists and checkbox fields) to have multiple values. A customer may have bought multiple products from your list, for example, or they may play multiple sports.
So let's say you ask them what sports they play and they can choose from soccer, baseball, basketball, tennis, rugby or other; you allow them to pick multiple values using checkboxes because many people play multiple sports. How, then, does this work when testing for a match as in:
when you want to select everyone who plays soccer?
Actually, it's pretty simple. If any of the choices match then the expression is true and the subscriber selected. So if someone has picked soccer AND tennis, then they're in.
So what about this?
The expression is true if we consider the subscriber's tennis preference, but false if we consider that they also chose soccer. And that's what FeedBlitz will decide: false. If any of the values matches then an equality is true and, conversely, an inequality is false. That's logically consistent, in that if you combine
sports=="soccer" and its opposite,
sports!="soccer" then you get all the subscribers exactly once.
You can look at the subscribers a segment picks by clicking the "Preview Selected Subscribers..." button. Be patient if you do this - may subscribers will have to be loaded and then the expressions must be evaluated - it can take a while. Talking of which, when you ship a mail using a segment expression it's probably going to take about as long to run as a full mailing without a segment, even if only a very small number of subscribers match your criteria. This is because every subscriber has to be loaded up and tested no matter what, and unless your list is large, the amount of time interacting with the FeedBlitz database to work through your whole list is going to be greater than the time spent actually mailing the recipients.
If you think you're going to reuse a segment, you can save it for use later against the same list. To edit a saved segment, load it up, change the expression and then save it using the same name; your changes will overwrite the prior version. Quite the time saver when you have the segmentation working the way you want.
And so to personalization...
Next we're going to look at personalization - customizing the updates you send a subscriber based on what you know about them. I'll run from the basics through to conditional expressions to control both content and layout. A quick heads up though; you can only personalize newsletters using a custom template. So if you haven't customized your emails yet, head on over to the Newsletter Center and the Graphic Design section (look for the icon on the left) to get the basics in place first.
Labels: custom fields, segmentation
Custom Fields Tutorial: Reporting and Analytics
Thursday, October 16, 2008
Having established the data you want to collect
- and you're now collecting it as users sign up - how to get it out? And what's the best way to make sense of all this raw data and turn it into actionable information?
Up until recently the only choice you had was to head over to the subscriber pages at the Newsletter Center, click the "Include custom fields" option, export the data and then look forward (not) to a lot of time with your favorite spreadsheet.
There is a better way. As I mentioned a couple of days ago
, there are some new reporting features for custom fields that let you slice and dice through your subscriber data. It's easy to use, and you can get pretty much as much or as little information as you like.Where to start?
Head over to the Newsletter Center and click the custom fields link. Once you've defined your fields, the reporting link enables. (If you're just starting out, use the subscriber update link form to add your own data to the system first). Click the link and dive in!First up: Submission Summary
The first page up tells you how many responses you have for each question. The numbers may not be the same for all questions if some are optional, and if you added some other choices after folks started submitting the form. You'll get a margin of error indication for each field, and an export option at the bottom of the table. No spreadsheets required.
Now you can click on the field names in the table and you'll be taken straight to a "top 10" report for that field, along with a chart and another export button. As an alternative way to start exploring your data, the summary report also provides two special links for you for two slightly different flavors of the top 10 report.
The "predefined choices" report shows the top 10 values for all the fields where you defined the choices for subscribers to pick. In other words, all the results from list boxes, radio buttons and check boxes.
The "All fields" version does what it says - includes all the fields in the top 10 summary. If you have simple text fields, they'll be included here.Drilling down - Top 10 and more
No matter which way you start drilling down into the detail, the detail reports all behave the same way. By default they'll limit themselves to the top 10 results (but show you how many responses fell into categories that didn't make it in). They all give you a choice of graphic layouts. They all give you a simple export option. And they all offer clickable tables for you to change your view into the data.
There are four ways to use the tables to navigate:
- Clicking the field name shows the top 10 report for just that field;
- Clicking the "All others" link (if it's there) shows all the results for just that field;
- Clicking the a value for a field (e.g. the the FirstName "Dave") limits results to just those submitted by people whose first name is "Dave";
- Clicking the number of responses shows you the detail for matching submitters and all the data they posted.
So it's easy to find out not only what your survey tells you (e.g. 54% of respondents are male, or that most people found you from a Google search), but also who they are (e.g. the respondent called "Phil Hollows" lives in Sudbury, MA, USA and his favorite color is red).
Once you're done drilling down, click the links in the report heading to jump start a new analysis.
Practical Results - The FeedBlitz Publisher Survey so far
Using these reports on the FeedBlitz publisher survey (currently standing at over 5,600 responses), it's trivial (and kinda fun) to analyze the data that has been put in so far. Here are some highlights:
- 59% of FeedBlitz publishers are in the US; the next largest countries are India (5%), the UK (4%) and Canada (4%).
- More publishers are in California (8%) than anywhere else, but (interestingly) the city with the most FeedBlitz publishers is in fact New York (2.0%) with London (UK) second (0.9%).
- 62% had not used any kind of mass mailing software or service prior to FeedBlitz.
- FeedBlitz publishers are more likely to be male (54%)
- Your name is more likely to be David, John, Michael, Jennifer, Chris, James, Steve or Lisa than anything else.
No spreadsheet jockeys required - so explore! The next tutorial will look at segmentation
: using custom field data to send emails to targeted recipients.
Labels: custom fields, reporting, tutorial
Custom Fields Tutorial: Lead Capture
Wednesday, October 15, 2008
The first use of custom fields is to capture data from your subscribers as they sign up for your newsletter.Where is lead data captured?
The extra data you want from your readers is collected on the same form they have to complete as part of the standard sign up process. The custom data is placed on the form just after the CAPTCHA test, as in this simple example from Gawker Media's auto site, Jalopnik
. In this case all that's being asked for is the reader's ZIP code, defined by Gawker to be a required field.How do I define custom fields for my newsletter?
Like most things in FeedBlitz, at the Newsletter Center. Click the "custom subscriber data" link (also marked out by the >icon you see at the top of this post) in the left hand column, where you'll be taken to a screen with options to define, report and link to your custom fields. Click the configuration link at the top and you're taken to the screen that does all the heavy lifting.
Note that the custom fields you define for subscribers apply to all
your newsletters - subscribers are asked for the same information, no matter which publication they sign up for.What kind of fields are there?
FeedBlitz currently supports different types of custom data field:
- Text - an edit control where the user can type pretty much anything;
- Choice (lists and radios) - where the user picks one option from a list you define;
- Multiple Choice (list and check boxes) - where the user can pick several options from a list you define.
A final option is the "separator" field, which you can use to split a form containing many custom fields into sections.
When you define a custom field, you also give it attributes which tell FeedBlitz whether the field is required or optional, whether the field should be hidden from the subscriber, and what to put on the form itself to help the visitor enter the right data. Most importantly, you give the field a name (such as "FirstName") which is how the field will be referenced later during the tutorials on customization, personalization and segmentation.
How do I define a custom field?
Let's say you want to capture two pieces of information from the subscriber: their name (so you can later say "Dear Jane" in your newsletter); and their gender. Let's also say you have an existing database you want to correlate your FeedBlitz subscriptions with, so a third field will be defined called "ID" to store the customer ID of the subscriber on the other system.
Defining a simple text field
From the edit screen, click "Add Custom Field." We'll call the first field "FirstName" (without the quotes, no spaces), which is what is you type between the <$ and $> signs (the reason for these will become clearer in a later tutorial). OK, so it's text, but what's this "default value" thing? The default value is used when the custom field is used in another part of FeedBlitz, but there is no data for it in the database. For FirstName we might make the default "Reader" since then a salutation might be "Dear Reader" instead of "Dear Jane" You can also leave the default blank and come back to it later.
We want this to be required and we do NOT want it hidden. Last two items: the "UI Label" (UI is the abbreviation for User Interface, i.e. the web page the form appears on). You could simply say "First Name" here, but you could instead say "Enter your first name" if you wanted to be more imperative. This text goes on the left of the form, and the space where the user enters this data is on the right. Finally, the help text is what pops up when the user hovers over the form or the label. If you go back to that Jalopnik subscription form you'll see that the UI Label is "Your Zip or Postal Code" and that the help text is "please tell us your five digit zip or postal code"
Save the field and you're back at that original screen.
For the "gender" field the process is similar, but the type of the field should be changed to one of the "Choice" options. When choice is selected the screen expands and you can now define the options to be presented. The "Choice" value is what the user sees; the "Database Value" is what is stored in the database. So the choices might be "Male" for the choice, "M" for the database value, and (similarly) "Female" and "F" respectively. Switching between the different choice options changes the preview so you can decide which one works best for you and your subscribers.
Now to defining "ID" which is going to be used to sync FeedBlitz with your database. The ID field should be text, not required and (crucially) hidden - it should NOT appear on the subscription form, as it's entirely an internal field for our own use. It should probably have a blank default too. The values for this field can be added manually or via import later.
Ordering and editing the fields
Now there are several fields defined. You can use the arrows to move them up and down, delete them, or edit them. If you delete a custom field you also lose all the subscriber data it holds, so do this early if you must (or export first). Once a field has been defined, you can't change it's type: a choice field is always going to be a choice field (but you can add or remove choices).
The end result
Once done, go to your site and start the subscription process (good to know that you don't need to change the subscription form on your site at all when you add custom fields; FeedBlitz takes care of it all for you when the subscriber gets there). And so you'll be collecting useful data from your new subscribers. Moreover, if you use "common" field names (such as FirstName, LastName, City, Address, State, Zip, Country, Gender), FeedBlitz will try and pre-populate the data from what it already knows about the subscriber in order to expedite completing the form, reducing the risk that the subscriber will bail on the form before completing it.
But what about my existing subscribers?
You can import data if you already have it in a different system, such as your personal email address book (we'll cover how to do that in a later tutorial). But defining custom fields also builds a standalone form which you can then invite existing subscribers to complete to help build out your database. On the custom fields management page you reach from the Newsletter Center the "Subscriber Update Form" link will enable once you have fields defined. You can use that link to have subscribers build out your subscriber database for you.
Next Up: Analytics
So now you know how to define your custom data collection and get the data in to FeedBlitz ... next up, how to get it out again.
Labels: custom fields, lead capture, tutorial
On Lead Capture and Custom Fields
Tuesday, October 14, 2008
One of the more common requests to have come out of the ongoing publisher survey
is the ability to capture data such as the subscriber's first name, or how they found out about your site, or their gender (etc., etc.) when they subscribe. FeedBlitz has actually had this functionality for a long time, but clearly we could do a better job of making it visible to you in order to simplify subscriber data collection (a.k.a. subscriber demographics).
The mechanism used by FeedBlitz to do this is called "Custom Fields." You use custom fields to define the data you want to collect from subscribers at subscription time (or import into an existing list from file). You can then use these data points to analyze your subscribers, send targeted messages to a subset of your readers, or link them back to an in-house database such as a custom relationship management (CRM) system.
Over the next few days, then, I'll be posting about custom fields in a series of articles to help you get the most of them. I'll start at the basics and work my way up from there. In the next few posts you can expect to learn about:
- Definition: Building custom fields to capture lead data;
- Reporting: Analyzing your subscriber database;
- Segmentation: Using custom fields to send messages to a subset of your list;
- Personalization: How custom fields can tailor your newsletter to each individual;
- Integration: Using custom fields to keep databases and web sites synchronized.
All of this will start tomorrow, and there's good stuff here for novice and experienced FeedBlitz user alike. So stay tuned. If you want to experiment now, head over to your Newsletter Center, pick the newsletter you want to work with and click the custom fields / subscriber data link (look for the icon you see here).If you're already using custom fields...
... there are new features you'll probably want to try right now. Head over to the custom field section of the relevant Newsletter Center and you'll see:
- New custom field types, including radios, check boxes and multiple-choice lists;
- New reporting and analytics functions to slice and dice through the data;
- Links to standalone forms to help collect data from existing subscribers.
Also, if you used subscriber export to get at captured custom field data, the file format has changed to be more spreadsheet-friendly.
Finally, if you haven't yet completed our publisher survey, you can get it over with at http://www.feedblitz.com/f/f.fbz?pubProfile (login required).
Labels: custom fields, lead capture
© FeedBlitz - Blog and RSS Email Solutions | www.feedblitz.com | email@example.com | Privacy | Terms of Service