Skip navigation
All Places > Certification Study Group > Blog > 2019 > October
Amit Jain

Optimize the Marketo Program

Posted by Amit Jain Oct 22, 2019

***Originally posted on "The Marketing Automation blog". For latest updates, follow this LinkedIn Page


For all day to day marketing activities in #Marketo, you start with creating a program. Marketo programs are very powerful tool to manage your marketing assets and track the campaign performance. To get most out of your Marketo programs you need to make sure you have set it up properly.


Programs represent a single marketing initiative. You can think of it as a container with all the stuff that you need to make the program work – these are called local assets and include landing pages, email, smart campaigns, and more.


Throughout my experience, I have seen ~20 Marketo instances and everyone had something good and bad. Based on my experience, there are a few thing that needs to be setup before even you click on create a new program button. In this blog post, I’m going to reveal some best practices and things you should know:


Program Channel

Whenever you create a new program, you have to select a channel. Channel here represent the way you are going to target your audience/prospects.


A program is one specific marketing initiative. The channel is intended to be the delivery mechanism, like Webinar or Sponsorship or Online Ad.


I have seen many Marketo instances where people had a long list of channels which included duplicate entries like Email, Email Blast, Email Campaign etc. and a number of channels that they don’t even use. I mean seriously!! If you do not have proper channels setup, it will ruin all your marketing efforts. At end of the quarter and year, when you start looking at the marketing performance by channel, you will not be able to analyze it. If you want your life to be easy, make sure you have a clean list of channels available.

Program Status and Progression

Along with channels you have to make sure to have meaningful and unambiguous program status defined for each channel. The best way to define statuses for a channel is to look at the user journey on that channel and what is the expected out come. The different stages of the user experience will be your program statuses and the outcome/ final status can be defined as the success of your program.


Before defining the status, define the customer journey for that particular channel. Once you know how your prospect will transits through your campaign, you will know what stages you wanted to track.


In addition to defining the statuses, you have to assign a weightage to every status. By assigning the weightage, you make sure that any user can’t go backwards the user journey by accident. This weightage in Marketo is called “Step”.


The Step number is used for sorting of program statuses. Keep in mind that people cannot go backwards in these progression steps. They can only change status to a higher or equal value status. Use the equal values when statuses are intended to switch back and forth as opposed to a progression.


Program Tags


The other vital thing to be considered while planning the program setup are the “Tags”. Tags are necessary for reporting purpose. You can assign multiple tags to a program. You can tag a program by country, region, segment, financial year, Marketing team etc.


Tags will help you organize your programs while channels will assist in gathering data for reporting purposes.


Period Cost


Period cost is necessary to calculate the ROI of your marketing campaign. You can define different cost for different time period for the same program in Marketo. This allows you to measure the ROI of your program over time.


A period cost is the amount you spend on a program. It can be for one or more months and is used for reporting ROI.


With program cost defined, you will be able to measure following by program, by channel and/or by custom tag:


Cost per MemberAverage cost per member of the program
Cost per New NameAverage cost per lead acquired by the program
Cost per SuccessAverage cost per lead who achieved success in the progression of a program
Cost per Success (New Names)Average cost per lead acquired by the program AND achieved success in the progression of the program
Program CostTotal period cost of the program


Tip: At the beginning of a Program, enter forecasted costs. Once the period in the Program completes, you can edit the Period Cost and enter in the actual cost. This will provide you with accurate reporting results.


Analytical Behavior


Analytics behavior defines which type of program will be available for the RCA reporting. Your Marketo Admin can define the Analytics behavior on the channel level and if needed you can override the same on program level. There are 3 type of Analytical Behavior:

  1. Default: With the default behavior, the program would be included in Analytics ONLY if there is at least one period cost, even one with zero dollars assigned.
  2. Inclusive: This option will ensure that the program is available for reporting in revenue explorer and analyzers regardless of whether or not you’ve included a period cost.
  3. Operational: This option results in the program not showing up in either revenue explorer or analyzers.


The Program Analyzer buckets Program Success by period cost. If there is no period cost available, Program Success will not be displayed, regardless of the analytics behavior of the program. If the analytics behavior is set up, data will display for opportunity metrics (pipeline opportunities, revenue won, etc.).



Program tokens (My Tokens)


If used effectively, my tokens on Program can be very useful and effective. These tokens help improving efficiency of the team and quick development of the program assets including Emails, Landing Pages, Forms, Smart Campaigns etc.


My Tokens are defined within a program and begin with ‘{{my.’ followed by the name you created for the token.


Marketo allows following type of tokens to be created as {{my. token:

  • Calendar File
  • Date
  • Email Script
  • Number
  • Rich Text
  • Score
  • SFDC Campaign
  • Text


Tip: You can define the my token on the campaign folder level and all the programs will inherit those token automatically. If needed, you can override those token on program level as well by creating a token with the same name and type on the program.

Acquisition Program


Every business would like to understand where they are spending money and how that money is helping acquiring more customers. When working with Marketo Programs, it’s absolutely necessary to associate the new leads with the appropriate program as acquired leads.


Acquisition Program tells you which program actually generated a particular lead. This is very important if you are using RCE or if you rely on the Program Analyzer or Program Performance reports to measure your program success. Based on Acquisition program, Marketo


When a new name enters the system as a program member, Marketo automatically sets that program as “acquisition.” This establishes credit for First-Touch attribution.


The next question you might have in your mind is how to ensure every lead has acquisition program assigned? Well, marketo has an in-build smart list in database named “No Acquisition Program”. Check this list today and see how many records are there.


Tip: If you are seeing a lot of records in “No Acquisition Program” smart list, You have to fix it immediately. Check out my other post on how to fix acquisition program in Marketo?


As mentioned earlier, Marketo programs are very powerful tool and will help you prove how marketing is generating revenue. If you follow the above steps, you will see improved program organization, improved reporting capabilities, improved team’s efficiency, and improved relationship between Sales and Marketing.

Web-forms are being used widely to collect information of potential customers. Everyday people visit tens of websites and have fill out their information to access certain marketing content. Though it is necessary for a business to capture the information of their prospects but it can be a tedious task for your audience to fill their information again and again.


In this blog post, we are going to cover:

  • How to reduce the number of times someone has to fill the form?
  • How to limit the number of fields on the form?
  • How to ensure best user experience during the form submission?

How to reduce the number of times someone has to fill the form?

  • Add form only where it’s absolutely necessary: No one would be happy to provide their information to you until they are confident and there is a trust. First try to engage the visitors on your website with your content and in the next phase of user engagement ask for their information. If you ask their information on their first visit to your website, there are high chances that they will provide invalid/junk information.

    Follow 80%-20% rule. 80% of times, engage user with your content. Provide them information that could be useful for them. And 20% of times, ask for their information and what they are looking for.

  • Hide form from the know users: I receive may emails throughout my day with some CTA. When I click on that CTA, they ask me to fill my information again? Most of the modern marketing automation systems have this functionality to hide form from known visitors. Instead of showing completed form, only show a custom message with a CTA. There will be no impact on the activity tracking. Utilities it.

    How to hide form for Know user in Marketo?

  • Prefill the form: If you still want to show the whole form to your known audience as well, try form prefill. This way, your prospects will be able to see what information you have on them and can correct if needed. This way your prospects do not have to fill their information again.

    How to enable/disable prefill Marketo form?

    Marketo has recently made some changes in form pre-filling but you can use  Sanford Whiteman  technique to prefill the from anywhere.

How to reduce the number of fields on the form?

  • Minimize number of fields on the form: Fewer the fields, lesser the effort required resulting in more conversion rates.
  • Remove the fields that you can infer from other data set: You purpose is to know who is interested in your product or services. If you are asking for the company, avoid asking for the industry/company size/Annual revenue etc. Use data append services to append additional data set based on the company/email address domain provided by the user. You can user services like Discover Org, etc.
  • Use progressive profiling: This a technique that help to capture the additional data points over time. Instead of showing 10-15 at once, you can decide to show only 5 fields for the first time and then how another 5 fields next time the user visit your web-site. There is no sense to keep showing the same fields again and again to the same user.
  • Use conditional visibility for the form fields: You should only show relevant fields and option values the user on the form. For example: If user select United states as country, only show US states in state drop down.

How to enable progressive profiling on Marketo forms?
How to enable Conditional field visibility on Marketo forms?

How to ensure best user experience during the form submission?

If you’re following the above two things, you are already halfway through. To make sure the optimum user experience, we have to take care of a few other additional things:

  • Make sure there is no scripting error
  • Post submission user experience: Make sure your thank you page is embedded properly with the form and have proper messaging. In addition to this, you can offer some more relevant content to the user on the thank you page itself.
  • Mobile first design approach: The mobile device usage is increasing day by day. Your form should be designed with mobile first approach.
  • Use input masking: Input masking is a great way telling user in what format we need a particular information. Input masking really works for phone number field.
  • Use field tool tip: The tool tip will show up when a visitor hovers over the field.
  • Use field set: It allows to group logically relevant fields together. With field set, it’s easier for your leads to understand what it’s about and improve the user experience.
  • Local language: Use local language on the form field. This reflects that you really care for your customers and also reflect their local culture and value.

Yes you heard it right! You can use segmentation for Anonymous lead as well as known leads. I hope you must be interested to know how if you haven't done it yet.


I will start with what is segmentation and how it works. 


Image source: Marketo product doc



Segmentations are special database tools that allow you to identify your database groups for various purposes, including Dynamic Content. Segmentations are pre-set list divisions that run in the background automatically and are much faster than smart lists.

To create segmentation, follow the method/steps below:


Step 1: Go to the Lead Database

Step 2: New > New Segmentation

Step 3: Add Segments

Step 4: Adjust Segment Priority Order - Why this step is important? This is to ensure that the right lead end up in the right segment because there is a possibility for a lead to be in the multiple segments.

Step 5: Press Create.

Step 6: Define Each Segment

Step 7: Approve the Segmentation


Once you have established the rules for each Segment, you can go to Segmentation Actions > Approve to make it available throughout the process.


Approval triggers a process to move through lead into one or the Default Segment or one of the three segments. It may take some time to complete this. Marketo will alert you or you can watch the updates to the green checkmarks with the little icons.


Read more about segments here: Understanding Dynamic Content - Marketo Docs - Product Documentation 


Now your segmentation is created and ready to use. Now, by using the same segmentation we have to create a landing page. Read here how to you use dynamic content in your Marketo landing page - Use Dynamic Content in a Landing Page - Marketo Docs - Product Documentation 


Once this landing page is ready then follow the below process:


For example, we have below details:


Landing page URL:

Segmentation Name: Area-of-interest

Segment in the segmentation: Marketing, Sales, Default


Important Note: I believe you have already updated the content for the above segments in the landing page. If not then please go back to your landing page and add dynamic content.


Now you just need to create a query string URL to call your segments to populate the content for the respective segment.


Syntax will be:


Landing Page URL + ? + Segmentation name + = + Segment name




So, if we will use the above URL then it will populate the content based on marketing and at the same time if we will use the sales segment then sales content will appear on the page. If no condition is met then default content will appear.

I hope you're going to enjoy reading this. Keep reading!


You can read the same blog on my website at as well.


Read the blog here: Use segmentation for Anonymous lead...



Sant Singh Rathaur


Connect me on LinkedIn

When we say what all type of tokens you can create in Marketo?, It means that these tokens are not predefined. In Marketo's language, you can call my tokens.


If you are studying for the Marketo certification exam then you must know about what all type of tokens are available in Marketo that you can create. You might be aware that Marketo has added more type of tokens recently. In this blog, I will try to explain each of them one by one and with their usage...


1. Calendar File - First in the list when you go to my token section under any program or root folder. This is token is widely used for webinar and onsite event to to create .ICS file. Now what this .ICS file does? 


This .ICS file also called as calendar file, It helps the business to share calendar information via landing page or email and once user will download the .ICS file, he/she can save the event information in his/her personal calendar as a gentle reminder.


Important Note: This is the only token type where you can use nested token. You might interact with a question where it is asked that in which token type you can use another token? You now know the answer and see the explanation in the screenshot below:


Read More: 


2. Date - This token can store a date value and date format will be mm/dd/yyyy when you are adding the date to token but in the display it'll be yyyy-mm-dd (ISO 8601 with hyphens). For example: (e.g., 2019-10-28).

Thanks to Sanford Whiteman for correction..  



3. Email script - This token is used to execute velocity script in your emails. 
Read More: 

Example Here: 


4. Image (New) - This token can store image URL only and it has been recently added to the token list.


5. Number - A Number {{my.token}} has a maximum positive value of 99,999,999 and minimum value of 0.*



Thanks to Sanford Whiteman for correction..  


6. Rich Text - In this type of token, you can html/css.


7. Score - This token is used to assign/update value of lead score in the change score flow step. Now your question might be, why we are using only score type of token to update lead score? why not any other token?


Important Note: Answer is, this is the only token where you can perform arithmetic operation.


8. SFDC Campaign - Use this token to allow leads that become part of a Marketo Program to also be added to whatever SFDC Campaign is added.

You can use the token in the "Add to SFDC Campaign" flow step. So if you clone Programs, you would only update the tokens and not have to go into the Smart Campaign to change the SFDC Campaign. 


9. Text - It stores only text value. The size limit for Text tokens is 524,288 characters or 2 MB. These numbers are not consistent, though. 524,288 ASCII characters is 524,288 bytes.  2 MB is 2,097,152 bytes, and you'll find that you can store > 2MB of ASCII in a Text {{my.token}}. UTF-8 characters beyond Latin-1 take 2, 3, or 4 bytes; UTF-16 characters are always 2b. You need to understand when these factors do and don't apply, because Marketo supports Unicode.

Thanks for correction Sanford Whiteman.. You are true champion..  


Apart form these token types, do you understand the difference between Local, Inherited & Overridden token?


If you have been a science student then you can easily relate it with DNA inheritance in Genomics and you will find it difficult. 


1. Local Token Token which are locally created inside a Marketo program or parent folder are called Local tokens. 


For Example, You have created a program named Marketo-Token-Testing and then you created some token inside this program itself. So for this program, these tokens will be called local tokens.

2. Inherited Tokens - 
Inherited tokens are not created locally, they are inherited from a tree somewhere in a higher-level program or folder.

For Example: In the Program "Marketo-Token-Testing", you have created another program inside called  "Marketo-Inherited-Token-Testing. So all the token you have created in "Marketo-Token-Testing" will be available to use in this program as well and they will be called inherited token because they are not created in this program hence they are inherited from parent program.



3. Overridden Tokens - This token was also inherited from a tree somewhere in a higher-level program or folder and then someone made an exception in this program or folder by making some changes in the token value.


For Example: In the Program "Marketo-Token-Testing", you have created another program inside called  "Marketo-Overridden-Token-Testing. So all the token you have created in "Marketo-Token-Testing" will be available to use in this program as well and they will be called inherited token until you will not update the value of those inherited tokens. So once you will update the value of inherited tokens, mean you have overwritten the value then it's called overridden token.


Read more about the token here: Understanding My Tokens in a Program - Marketo Docs - Product Documentation 



I hope you're going to enjoy reading this. Keep reading!


You can read the same blog on my website at as well.


Read the blog here:  



Sant Singh Rathaur


Connect me on LinkedIn

What do you do when your stakeholder demands a solution and particularly when it is not possible to do so directly? 

I'm sure you want to come up with the answer. So here's one of my answers that could benefit you as well, or it could be your own answer too.


It's easy to personalize Marketo landing pages, but it's a tricky one to do for non-Marketo pages. Our use case was to personalize thank you page with the lead first name when he/she submitted his/her details through Marketo form.


That's how we got it...


Step 1: The following script can be placed either in your Marketo form or on the landing page where the Marketo form is located.


MktoForms2.whenReady(function(form) { 
//Add an onSuccess handler 
form.onSuccess(function(values, followUpUrl) { 
var vals=form.vals();
// Take the lead to a different page on successful submit, ignoring the form's configured followUpUrl 
location.href = followUpUrl+"?fname="+vals.FirstName.replace(/ /g, "-"); 
// Return false to prevent the submission handler continuing with its own processing 
return false; 



Why did we add this script to our form/page? Ok, let me explain that before I come up with another script that has to be placed on the thank you page. So, on submission of Marketo form, this script will pick the value of the first name and add it to the thank you page URL.

Step 2: Now you need to add the next script to the thank you page that will capture first name value from the URL, store it in a variable, and show it on the page.



function getParameterByName(name, url) {

if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace("", " "));

var studentName=getParameterByName("fname");

if (studentName =='NULL') {

$('.Thankyou span').text(function(i, oldText) {
return oldText === 'NAME' ? studentName : oldText;



Step 3: This is the most important step and if you miss a single thing then it's not going to work. I spent almost the whole day fixing this when just one parameter was missing in the third step...


Now when you are placing this thank you page content, don't forget this line of your second script where you have defined a class and added a HTML tag. 


<h1 class="Thankyou"> <span>NAME</span> Thankyou for submitting your enquiry</h1>


You have to define this message in the same structure. You can change the h1 tag and thank you message but can't change the variable added under span tag "NAME" or class "Thankyou" unless you have changed it in the javascript itself.


I hope you're going to enjoy reading this or maybe this will answer your problem. Keep reading and I'd also encourage you to continue sharing your methods and new solutions that may benefit your buddies.


You can read the same blog on my website at as well.


Read the blog here: 



Sant Singh Rathaur


Connect me on LinkedIn

What is the benefit of having various parameters with the Marketo form when you can simply capture the data with visible fields? Are you using hidden fields in your Marketo form? If yes then which one you are using? Do you understand the difference between various parameters?


If you have used or already aware then you can skip this read and if you haven't then no worries, I will provide my understanding for each one of them one by one and will also provide some examples, how you can use them with your business case. Also, if you find any mistake then your feedback is most welcome.


In our business case, we have used all of them to overcome some or other challenges and they are actually helpful with additional attribution which is necessary for reporting at the end of our campaigns. These parameters are really helpful even when something seems impossible.

Let's begin...

1. Use Default Value: By using default value you can hardcode or pre-define the specific value for that field. So, every time when forms will be submitted, this default value will be tagged with the lead. For example: In the below screenshot I have added main area of interest as hidden field in the form and added the default value as Animation.



2. URL Parameter: By using the URL parameter (website/landing page URL with query string) we can capture necessary information from the website/landing pages URL when a person is submitting the form and we can populate that information in the hidden field.



Note: I would always recommend to use this parameter defining default value as well so that at the end of your marketing initiatives, you are able to identify how many people have removed the query string during filling out the form. And by doing this, you are also helping your database to be normalized.


Example: In this URL ( I have used discipline query string with Learning-marketing-automation as value. When someone will submit the form here, in the main area of interest hidden field this value will be captured and if that person will remove the query-string then the default value will be tagged.


3. Referrer Parameter: There is a slight difference between the URL parameter and the referrer parameter. In the referrer parameter, you are still capturing the query string parameter value but not from the current page. You are capturing the value from referrer page (the page which redirected you to the current page).


Note: One of the use cases of referrer parameter is when you are actually promoting your website home page but your visitor might visit some other page (like contact us) and fill out the form there itself. In that case, you will miss the query string value or default value will be added. So if you have used the referrer parameter then it will pick the value from the referrer page.

Example: In the same URL ( after visiting this link, the visitor jumped to contact us page (unfortunately I don't have separate contact us page in my website but they might go to blog page.. ) then query string parameter will go blank. In that case, the method will pick the value from the referrer page.






4. Cookie Value: Capturing the data from cookies parameter is little tricky and you might need to take the assistance from your developer friend if you are not the one.

Do you know as server can store the information about an individual user, the browser, too, can store the information. One way to do this is with the use of 
cookiesCookies are a great way to store data about a user on their machine, which you can fetch to your CRM on a particular event such as form submit, page load, etc. and Marketo form are very intelligent to grab the information from cookie.

Hope you will enjoy reading this and I would love to hear your feedback/suggestions/improvements.


You can also read the same blog in my website . Website page link here.


Sant Singh Rathaur


Connect me on LinkedIn