The basic subscription center program

Building a Subscription Management Center

Level 10 - Champion Alumni
Level 10 - Champion Alumni

A version of this post appeared on my blog and it is similar to Christine Tran's approach. I thought I would post the full version here so you can see more detail on the planning and field detail.

The process involves four phases to achieve pages in dynamic languages.

Every customer receives the standard Unsubscribe page when they first turn on Marketo. This page helps you conform to the minimum legal standard in most countries. If you are smart, you will want to build out a subscription center fast to reduce total unsubscribes and encourage people to subscribe to different kinds of communications.

For example, you may want to provide options like:

  • Newsletter
  • Event Invitations
  • Webinar Invitations
  • Solution A Content
  • Blog Posts
  • Unsubscribe All

Remember, these are examples. You may want to add more like Fax, SMS, and other channels. When I create these fields, I usually use a picklist in Salesforce first, with Yes, No, "null" as values. This way, the system is easy to understand whether you are an engineer, salesperson, marketer, or machine.

Email Preference Center Phase 1: New Channels


  • Program – Operational
  • Email Preference Center Page
  • Confirmation Page to display results
  • Email Preference Form
  • 01 – Unsubscribe All campaign flow
  • Additional fields as desired

Step 1: Create a Program

This program should be Channel=Operational. In some situations, I have created a separate Channel called “Subscriptions” where the statuses are Opted In, Opted Out and the Type is Operational so reporting is not affected. This only helps you with the counts and is totally unneeded from a technical perspective. Up to you.

Step 2: Foldering and Naming

This is how I setup my folders, which is largely the same across all Program Channels. Note the leading number ensures the order is how I want it.The basic subscription center program

Step 3: Create a Confirmation Page

The reason we create this page first is to ensure the Form is completed more quickly. You will use this page several times, so might as well do it first.Most of my clients request the Confirmation page to reflect the new values provided. This is pretty easy with some tokens.confirmation-page-1confirmation-page-2

As I mention in the sidebar above, it is possible to display a human value. This is why I almost always use a picklist for each field with Yes/No/Blank. Blanks mean that the lead hasn't made a selection and we cannot send to them yet. The default token will say "Not Selected".Example URL SLUG:

  • Add requisite fields.
  • Modify the Values as needed. In this case, I want Unsubscribe All to encourage people to do what I want, but you can leave it as a simple checkbox.
  • On this form, we will keep everything as Not Required and Prefilled to show the current settings. You may want to mention that on the page.
  • Set the Confirmation page on the Form to ensure that it always goes to the right place.


Step 5: Create an Email Preferences Page

This is the main page you will point everyone to. The URL slug should look like this:

  • Must replace with full URL

The entire URL we created above is fine, alternatively you can append the URL slug to%mkt_opt_out_prefix%email-preference-center.html

  • Allowing people who find the page to Add themselves to your database. (Yeah, rare, I know).

To make this happen is fairly easy. There are two methods: Easy with more assets; and Hard with coding. Let’s talk Easy.

URL Slug:

  • Preferences Page – Not You

Add link to Not You under the original Email Preference Form as shown.


If you really want to go the Hard way, you can do one of two things:

  1. Have the Not You link reset the page without the munchkin identifiers.
  2. Go to the second page without any munchkin.

I like Easy and it takes advantage of Marketo’s existing features.

Email Preference Center Phase 3: Dynamic Snippets by Region/Language

If you are operating programs internationally, especially at a fairly large firm, you will eventually need to implement a regional or language friendly system. The process is fairly simple, however, I would urge you to test it carefully.

Option 1: one subscription page per Region.The overhead increases because you have to manage the links in your email template footers.

Option 2: one subscription page per Region with Dynamic SnippetsThis option takes partial advantage of dynamic content.

Option 3: one subscription page to rule them all.This is much better, however, I urge you to test it a lot before going live. We’ll talk about this one in Phase 4.With Option 2, you get to try your hand at Dynamic Snippets. This is a fairly underused feature of Marketo, which can be very powerful if thought out.


  • Segmentation by Region or Language
  • Email Footer Snippet
  • Add to Emails

Step 1: create a Snippet

Go to Design Studio > Snippets

Step 2: create the dynamic content for the snippet


I recommended using one Segmentation per asset to avoid confusion.Once this Snippet is ready, test it on an Email that uses a Template with a Footer as editable. The results should flow through automatically in preview or a Live Test.

Email Preference Center Phase 4: Dynamic Languages on One Page

Of course, the holy grail is Option 3: just using one page for everything. In this situation, we will add new ingredients and modify the original Email Preference Page to be dynamic.I will go through most of the steps, but be sure to read the docs on setting up Dynamic Content and Segmentations in order to follow along. Please remember that your Segmentation Segment order and smart list criteria will determine which Language is visible to the lead.New Ingredients:

  • One Form for each Language
  • Modify the original Email Preference Page to use Dynamic on the Form and any other text.

**The Not You Page will still be the Default Form because new leads won’t have a Segment yet. Remember to set the Default to English or the major language of your audience.



Here is an example in Japanese I made using Google Translate.

Step 3: Test the Forms in a Clone Page

If you already have a live Preference Center, I highly recommend that you clone the original Preference Page and Confirmation Page to test these Forms before going live.

Step 4: Set the Form in the Email Preference Page to Dynamic


Step 5: Set the other page content to Dynamic

Step 6: Make the Confirmation Page Text Dynamic

Look how cool this is! Is it all clicking now for you?

Step 7: Update the Unsubscribe All Campaign

You will have to add all the Forms to the Trigger. Feel free to test it.Wow, after all that work, you now have a fully functioning, international web page. What more could you need? Some options to consider for the future:

  • Double Opt In – this is required in Germany and some locations. Pro bloggers swear by it (including me) because it ensures email validity and engagement. All you need to do is add a flow or two to send out a confirmation email and link whenever someone subscribes. They click on the link and your second flow handles the final steps. See my Guide for an example.
  • Confirmation Email – please avoid this unless it is for Double Opt In. If I unsubscribe, I don’t want a final email. Use the Confirmation page for this.
  • Leave me alone for awhile. This option was first made famous by Marketo years ago. In this system, you ask people if they want to suspend emails for 30 days or more. The challenge is in setting up the workflows and lists to properly suspend someone for that period. Remember, the simpler methods work best.
  • List Setup – of course you will want a set of smart lists and even static lists to manage people who are Opted In vs. Out by Subscription. You will also want to update any suppression lists.
Level 8 - Champion Alumni

Awesome content Josh!

I always look forward the the rockstar posts that come to my inbox.

Your Marketing rockstar guides really helped me when i started with Marketo, I was actually one of the ones that paid for it, and do not regret the investment.



Level 9 - Champion Alumni

Hey Josh,

This post is really helpful. The only issue that I cannot resolve is making the form content dynamic. I assumed that when you segment the landing page  you could select a different form for each segment but was bummed to find you cannot. This leaves me with a translated landing page but a form that is in english.... I wish there was a resolution to this. Let me know if you have any ideas, but I cannot think of any with still being able to utilize the {{system.Unsubscribe}} variable. Only solution I can think of is creating a landing page for each segment, then I can have the form translated. Not ideal though.


Keith Nyberg

Level 10 - Champion Alumni

Keith Nyberg​ - you need to place the English Form first, then use Segment by Language/Region. Then for EACH Segmentation (selecting one by one in the lower right), you add a different form.

I'll add a video of this soon.

How to Build Subscription Management in Marketo - YouTube

Level 10

Hi Josh and Keith,

I also bumped a few weeks ago in this weird behavior that you cannot segment an element in an LP if you have not yet populated the element.

I added the point in these 2 ideas :

  • ​ 


Not applicable

Hi Josh - thanks for this post.  I too love the rockstar guide!

I was wondering, how do you prove the preference center is working?  How can I see if people are choosing not to opt out completely?

I was also wondering if you knew the javascript code that would un-check the other subscription fields if someone selects "unsubscribe from all" option?

Not applicable

Hey Josh,

Nice post, just wondering about this part in Salesforce: usually use a picklist in Salesforce first, with Yes, No, "null" as values.

How can you create a multi-picklist field and then create the Yes, No, and Null?

Level 10

This idea would come handy to support the subscription center:

Level 4

We're currently setting up our Subscription Center, and this may help without using JS...

For the Unsubscribe from All section of our subscription center, we added a second form to the landing page that has no fields and is basically just an "Unsubscribe from All" button. This "form" redirects to a separate Unsubscribe confirmation page. Then, I built a trigger campaign that listens for this "form fill" and changes data values to "false" (I wish I would have read Josh's suggestions about picklists before starting this project; it would have made everything so much easier!) for each preference option.

Level 4

Excellent guide!!!!

Level 1

In case anyone is looking for the javascript to show something like Unsubscribed in more user-friendly text, read on:

The javascript used to convert "1" and "blank" into more user friendly text such as "Yes" or "No" is as follows:


window.onload = function() {

    var unsub = "{{lead.Unsubscribed:default=No}}";

    var output = "No"; //change this to the full text you are replacing if unsubscribed

    if (unsub == "1")

        var output = "Yes"; //change this to the full text you are replacing if still subscribed

    document.getElementById("unsubscribed").innerHTML = output;



The mechanism here that changes the text is the last line "document.getElementById("unsubscribed").innerHTML = output;" which requires that you set an id tag on the element you want the "Yes" / "No" to show up in.  For example:

<div id="unsubscribed"></div>

For those of you that are not familiar with raw HTML code and javascript, the challenge is figuring out where to put this in your Marketo Landing Page. The way we accomplished this is by having a Landing Page with a "Rich Text" element and after entering the text you want to show, you will undoubtedly have a Marketo Token somewhere in the Rich Text element which looks like "{{lead.Unsubscribed:default=No}}".  This is going to be your anchor for searching in the next step.

Edit your Rich Text element and in the Rich Text Editor, click on the "HTML" icon which opens the raw HTML Source Editor. In the HTML Source Editor, copy and paste the java script from above into the the HTML Source Editor in front of any HTML text that is shown.  Next, search for "{{lead.Unsubscribed:default=No}}" and determine the HTML tag that it is in.  To do this, look for the very first < .... > section in front of the "{{lead.Unsubscribed:default=No}}". Typically, this would be either <span> or <div> or <td> (if you use a table). Now, you need to add id="unsubscribed" into the tag. For example, if you find <span> as the tag in front, change it to <span id="unsubscribed">.  Now, remove all the between the <span> and </span>.  That text should replaced in the javascript section in the 2 lines with "var output".  That's all there is to it!

PS - If your subscription center landing page for subscription confirmation already has a lot of javascript, it may be a bit more complex to integrate the above into the landing page.  It would be better to talk to the person or team that created those javascript and request they help with putting this into the page.