Skip navigation
All Places > Marketo Whisperer: Implementation Tips

I find there’s often confusion around how the Content Recommendation Engine (CRE) functions when clients have the CRE turned on for multiple domains managed under one instance of Web Personalization (RTP).  You can read a product document about this topic here and I thought it worth expanding upon this conversation with an example.


Before we jump into that, let’s start by looking at some basic points for RTP tag implementation:

  • You can only have one RTP tag per web page
  • You can have one RTP instance with multiple domains (different tags for different domains)
  • You can manage segments and campaigns per domain within one instance
  • Currently only one Marketo MLM instance can sync with one RTP instance. (It is on the road-map to look at changing this, but currently there are no dates available)


A look at what happens once the Content Recommendation Bar is enabled


Content Discovery is enabled in Account Settings and can be turned on by domain. Read more about that here.


Content Discovery.png


Content Recommendation can also be turned on by domain. The CRE will discover content, and once content is enabled for recommendation that content will appear on all domain(s) that have the CRE (bar overlay) enabled.


Here’s an imaginary example to show you just what that means - to make it easier to read, I'm going to bullet out the use case to highlight the main points:


  • Let’s pretend you are a food purveyor that has two domains in one RTP instance. On one domain, you promote meat ( and on the other, you promote vegetables (
  • Once the RTP tag is placed on both domains and content discovery is enabled, eligible content will be discovered on both domains (e.g. case studies, white papers, press releases, .pdfs and videos) and HTML content (e.g. articles and blog posts) if Content Patterns have been configured.
  • If the CRE is enabled on one (or both) domains, content that’s enabled for the recommendation engine will show on both sites.
  • This means if you have vegetarians going to the site and if meat related content is CRE enabled they may see meat related recommendations
  • You may want to consider which type of content you recommend – in this case recommending more general content about the history of your business, or how you back sustainable farming, etc. may be the best types of content to enable.

Cross Domain and CRE.jpg

On the other hand, for clients who are looking to cross- and up-sell, having the ability to easily recommend content for different products, in the case where each product has its own domain, can be ideal!


Are there other options to gain control of what content is being recommended?


Take a look at the enabling the Rich Media Recommendation Engine (RMRE). Unlike the CRE, which is an overlay on your site, the RMRE is embedded on your site. There is a configurable template which allows you to present three types of content at one time - in separate boxes - either vertically or horizontally.  You can even customize the template to make it match your brand guidelines.


Read more about the template here; if you are interested in using the RMRE, simply contact support and they can enable it for you.  Once you have the RMRE up and running you can use categories to show certain content in the template.


What is a Category?


A Content Category will group content for a specific rich media recommendation template.  If you want to recommend only specific content for a Rich Media template, simply add a category for the content and associate that category with the recommendation template. Note that if you leave the category empty you content will appear on all recommendation templates. David Myers wrote about how categories works and provides two use cases here.


Can I block the RTP tag from showing up on certain pages?


Yes; work with your consultant or support and they can walk you through how to make this happen.


How are you making the most of predictive content in your instance?  I’d love to hear all about it.

In a flow step, you can add a choice “Program Status is” or “Program Status is not”. When you look at the dropdown options, you will only see program statuses that apply to the program the smart campaign lives within. For example, if the smart campaign is inside of a Live Event program, you will only see the program statuses available for the Live Event channel.


However, people sometimes wonder if this choice applies only to those who have that status within the program or if it applies to anyone who has that status in any program with that same channel. After testing, I confirmed that this only applies to the program that the smart campaign lives within. If you have one individual with Registered status in Program A and one individual with Registered status in Program B, a smart campaign built within Program A will only apply to the first individual; it would not apply to the second individual.


In Marketo, there are often multiple ways of designing the same program using one or more smart campaigns, particularly when it comes to nurture. Not all ways of doing things are equal from a performance/efficiency standpoint. I recently had the opportunity to do some testing to confirm which of the variations would be the most efficient and which tradeoffs are worth making.


Note that throughout all of these tests, smart list optimization techniques were applied as described in this earlier blog post.


These tests were run with batches of 20,000 leads to compare overall and average processing time. They were done with a specific campaign objective in mind and, as such, may not be applicable in all situations.


The basic premise of this campaign was that an Interest field was being populated by various actions in the Marketo database. Based on this Interest field, we wanted to check against a list of qualification criteria to update another field, indicating which nurture program and which stream the person should be in. We then wanted to move them into the appropriate stream of the appropriate nurture.


Question 1: Are two triggers triggering off the same action better than one trigger with choices in the flow step?

Even this morning I saw someone suggest on the discussion forums that someone consolidate two identical triggers into one single campaign. I think this is a pretty common viewpoint among Marketo users, even myself. But is it always the best choice? In this particular example, I had several filters on the smart list in addition to the triggers. I ran a test of this variation against a variation in which I moved the qualification criteria into the flow step and combined the two campaigns into one campaign, but using choices and referencing smart lists containing the filters.

Variation A (criteria in SL)

  • Average run time of campaign A: .1557 sec per lead
  • Average run time of campaign B: .2115 sec per lead
  • Summed total processing time for 20,000 records: 7,500 sec

Variation B (criteria in flow with choices)

  • Average run time of combined campaign: .3539 sec per lead
  • Summed total processing time for 20,000 records: 7,077 sec

So, as you can see, the difference is relatively minimal. However, since in Variation A, I can be running two campaigns simultaneously, the total time to complete could be slightly lower. As you add additional flow steps with more choices, however, the performance of Variation A pulls away from the performance of Variation B.


Question 2: If I have shared criteria across multiple campaigns and want to move them into a smart list to make it easier to manage, how much efficiency gain do I lose?

Often times when we're constantly repeating the same criteria over and over again, it can be tempting to pull that criteria into a central smart list to make it easier if we have to update it. But as most Marketo users know, Member of Smart List references do add a little more performance overhead. Is it still worth it? How much performance do we lose? I took the criteria from variation A and moved all of the shared components into a central smart list to test this out. (Note by this point I was doing tests on batches, not triggers, so my baseline comparison will be different from Question 1).

Variation A (criteria in smart campaign)

  • Average run time of campaign A: .2928 sec per lead
  • Average run time of campaign B: .1230 sec per lead
  • Summed total processing time for 20,000 records: 2,394 sec

Variation B (criteria in separate smart list)

  • Average run time of campaign A: .1122 sec per lead
  • Average run time of campaign B: .1385 sec per lead
  • Summed total processing time for 20,000 records: 2,471 sec

As you can see, the additional cost for moving the smart list criteria out into a central smart list was relatively small, so this may be worth doing in cases where you have complex criteria being used over and over and you want to maintain central management.


I'll share some more tests in a few days when I have a little more time to write them up.

What's a control group?

A control group is established in order to facilitate tracking the impact of a marketing campaign. It is executed by selecting a random sample from the target audience and excluding them from the marketing tactic. This allows you to filter out the effect of those individuals who might have purchased anyway as well as the effect of other channels that might be difficult to measure, such as TV or radio advertising.


What are the options for control groups in Marketo?

There are several ways of structuring control groups in Marketo. However, only one approach provides complete capabilities for program-level reporting, so if you want to report in Marketo (particularly in Revenue Explorer), having separate programs is your best choice. The chart below compares the four major approaches:



Lead Custom Field

Static List

Program Status

Separate Program

Can be in multiple control groups at a time





Works for both campaign and tactic-level reporting





Visible in RCA





Usable in all RCA program reporting







To see how this would be executed in Marketo, we will use the example of Campaign A, which will have a control group, and which consists of two marketing tactics: Tactic 1 (an email) and Tactic 2 (a direct mail), each of which will also have a control group. For the purposes of this example, we will set the control group at 10%.


Program Structure

For Campaign A, we create two programs – one to contain the eligible audience and one to contain the control group. We do the same each of the tactics. The channel utilized for the campaign audiences is operational, while the channels utilized for the tactics are selected based on the type of tactic (Email and Direct Mail).

Selecting Control Groups

Selecting control groups is done using Marketo’s random sample functionality, which allows you select a percentage of a target audience defined in a smart list and then take some action.


To select the campaign control group, we define our audience in the smart list and then run a Change Program Status flow action to select a random sample of 10% and add that group to the Campaign Control Group program. The balance of the audience is added to the primary program.


To select the tactic control group, we define our audience in the smart list based on membership in the primary campaign program.

In the flow, we then select another 10% of this remaining audience to pull out into a control group specific to this tactic. The balance is placed in the program that will complete the outbound activity.


The end result with 111 people who are initially eligible for the campaign would look roughly like this:




In reporting, the outbound program and the control group program can be viewed side-by-side for comparison purposes. To facilitate this by ensuring the programs show up next to each other in the reporting, I recommend naming them virtually identically, with the addition of CG at the end to indicate which program is for the control group.


Each program should also be tagged as being a member of that specific campaign:


This will allow you to group the control groups and the active programs to compare success rates and pipeline/revenue generated:

Note: There may be one small flaw here with my operational control group programs not showing up in the Program Opportunity Analysis report. I'm still testing various things to figure out exactly what's making them not show up. I'll update this once I figure out the best approach.


If desired, these programs can be synced to Salesforce using the Salesforce campaign sync.

During an integration with SFDC there are some fields from SFDC which will automatically appear in Marketo which aren't part of the SFDC object visibility rules. (Check out this article for a list of fields). Two of the fields (Email Bounced Date and Email Bounced Reason) which will sync into Marketo are used in SFDC to track whether the email address is valid. These two fields are not connected or integrated with the Marketo Email Invalid and Email Invalid Cause fields. You can use smart campaigns and tokens to set these two fields. Remember to set up data management campaigns to reset the fields if the email address changes.


SFDC Field


Available in Marketo as a Filter in a Smart List

Marketo Token

Email Bounced Date

Date record bounced in SFDC


{{lead.Email Bounced Date}}

Email Bounced Reason

Reason record bounced in SFDC


{{lead.Email Bounced Reason}}


Marketo Field


Available in Marketo as a Filter in a Smart List

Marketo Token

Email Invalid

Marketo recognizes the email address is invalid



Email Invalid Cause

Cause of the email being invalid


{{lead.Email Invalid Cause}}


Here are some additional resources for learning about the Marketo integration with SFDC.

What is a period cost?

Period cost is a Marketo term that refers to the amount spent on a program. This amount is defined by the Marketo user in the Setup tab of a specific program. Information on how to add the period cost can be found on the Marketo Community.


Why do we need period costs?

Period costs are important for reporting in Marketo for a couple of reasons:

  1. The default behavior in Marketo is to only show programs with period costs in Revenue Cycle Analytics (RCA) reporting. If you do not put a period cost in the program Setup tab, you will be missing valuable information from your reports.
    Note that you now have the ability to override this default behavior at the Admin > Channel level as well as at the individual program level if desired. However, there are still other reasons you should include period cost in your programs, as explained below.

  2. The Program Cost Analysis, Program Opportunity Analysis, and Program Revenue Stage Analysis reports in RCA have cost-related options for timeframe – Cost Year, Cost Quarter, and Cost Month.  If you do not associate some kind of cost, even $0, to a specific month, the program will not show up in any reports where
    you use the Program Cost Timeframe dimension. In the Program Opportunity Analysis report, opportunity-related timeframes are available, but in the other
    two, cost timeframe is the only time dimension.
  3. Much of the reporting available in Revenue Cycle Analytics utilizes cost to help analyze the effectiveness of marketing tactics. Metrics like Cost Per New Name, Cost Per Success, and Return on Investment will be meaningless without cost data entered into Marketo.


What costs should be listed as a period cost?

We advise that you capture variable costs in Marketo as period costs. Fixed costs, such as headcount and capital resources, are complex to add in and do not provide a large amount of additional value, since the primary purpose of cost reporting in Marketo is to enable comparisons between programs. By excluding fixed costs from all programs, we can obtain a reasonably accurate comparison without unnecessary work that is better suited to a financial reporting tool.


Variable costs that should be included in Marketo as period costs include agency fees, event sponsorship costs, pay-per-click fees, and any other incremental expenses accrued specifically for the execution of one program.


How should costs be allocated across time?

For variable costs that are accrued at a specific point in time, there are arguments to be made for accumulating the cost in the month it occurred, in the month the marketing activity is launched, or dividing it across all of the months the marketing activity is live. Although it is not as realistic, we advise that you allocate the cost to the month in which it was launched, because there is no other way in which to see the month the program launched in RCA reporting in the three reports that utilize cost timeframe and do not offer membership status timeframes.


Although you can choose to enter multiple period costs within a single month in Marketo, there is no reporting benefit to doing so. The descriptions entered in Marketo are not visible in RCA reporting and you are not able to see the individual costs per month. All of the reports show sums of period costs across the given time period. For this reason, it is simpler for the Marketo user to enter the sum of the costs for that month in one single period cost entry in the Marketo program rather than breaking them
out into multiple entries, which has no effect on reporting.


How should we manage period cost for ongoing programs and/or programs with no variable costs?

For programs with no variable costs, such as most web form and email programs, we advise adding a period cost of $0 or $1. Whether you choose $0 or $1 only impacts what you see in the cost-related columns in reporting. If you select $0, you will see dashes or N/A messages. If you select $1, you will see very large, essentially meaningless numbers or $0 instead.


For ongoing programs, we recommend setting up multiple period costs when you do the initial setup of the program. For example, if I have a web form that will be live on the website for the entire year, when I build the program, I can add 12 period costs of $0 beginning with January. This will ensure that the program’s new names and successes are always available in your monthly and quarterly reports.


What if I do not want to enter period cost manually?

While you can enter period costs manually, it is also possible to populate period cost using the REST APIs for programs. The Update Program API call allows you to pass in cost information to an existing program. You can also create a program via the API using the Create Program API call, at which point you could choose to pass in the cost.

Brian Law

Landing Page Report Tricks

Posted by Brian Law Employee May 2, 2016

The landing page performance report in the analytics area of Marketo is helpful for reporting on the following information:

  • Marketo landing page name
  • Total Views
  • Conversions
  • Conversion rate
  • New names
  • First/Last Activity




Some of the things the report doesn't include are Page URL, Template, Editing Mode and Program. This information can be found in the Design Studio area of Marketo. When you click on Landing Pages you will only see the Page Name, Approved, Mobile Enabled, Templates, Editing Mode and Program. However, when you export the information you will also be able to see the Page URL, Views and Conversions.


Export Example


By the way, you can use the view to approve landing pages in bulk.

Here are some tips on using the Change Owner flow step when you are integrated to SFDC:

  • A record must be synced to SFDC
  • Leads can be changed to Users or Queues
  • Contacts can be changed to Users
  • Contacts cannot be owned by a Lead Queue. If you assign a Contact to a Queue, nothing will happen.
  • The change owner flow step will only change the lead/contact owner.  It isn't configured to change account owners.


If you use the Sync Lead to SFDC flow step and choose the auto assignment rule, if the lead is already in sync and assigned to an owner it should stay the same. The lead owner will not change. You need to use the Change Owner flow step to assign the record to a different owner.

Here is a summary of which triggers can be used across workspaces.


Any of the Email triggers since “Contains” is available

  • Clicks Link in Email
  • Email Bounces
  • Email Bounces Soft
  • Email is Delivered
  • Opens Email
  • Received Forward to Friend Email
  • Sent Forward to Friend Email
  • Unsubscribes from Email




Additional Triggers since “Contains” is available

  • Fills Out Form
  • Program Status is Changed
  • Visits Web Page
  • Clicks Link on Web Page
  • Added to List
  • Removed from List
  • Engagement Program Cadence Changes
  • Engagement Program Stream Changes
  • Has Interesting Moment
  • Score is Changed
  • Sent Alert
  • Revenue Stage is Changed




Have a good naming convention is super helpful when you have triggered smart campaigns reacting to activities across workspaces.

It is easy to get confused by all the different smart list operators when you use a date field in a smart list. Here is a summary of the operators and how to use them. The follower operators are based on using a date field and not a datetime type field.


When you filter based on whether the date is "in future", "in future after", "in past", or "in past after" you can use hours, days, weeks, months or years. For example, use in future 1 hour if you want the records which qualify today. If you use in future 2 days the smart list will include records from today, tomorrow and the next day. I have also tried using minutes which seemed to work.


Here is how to filter based in the future after 3 days time

  • A record will qualify if there is a date 4 or more days from now (e.g. the 4th day)
  • A record will qualify if there is a date 5, 6, 7, etc days from now.
  • If the date is 3 days away the record will not qualify
  • If the date is 1 or 2 days away the record will not qualify


Here is how to filter based in the past before 3 days time

  • A record will qualify if there is a date 4 or more days ago (e.g. the 4th day)
  • A record will qualify if there is a date 5, 6, 7, etc days ago.
  • If the date is 3 days in the past the record will not qualify
  • If the date is 1 or 2 days in the past the record will not qualify

At the heart of your social media activities is the desire to both engage with your audience and to capture data.  Whether you are using Marketo Social Apps or creating custom audiences and Lead Ads in Facebook (or both!), it's important to know that data instigated by Marketo Social Apps and Facebook Lead Ads can be used to enrich and append your Marketo data.


Social Apps are created as local assets:




Marketo Social Apps include:

Social Button

You Tube Video


Referral Offer








Click here to read more about pushing Marketo data to Facebook using Ad Bridge and here to learn more about how to set up Facebook Lead Ads. Use List Actions "Send to Ad Bridge" to send your list to Facebook:


Send via Ad Bridge.png


What data is returned?

The below grid provides an overview of the data that can be returned by each social feature. Note that when using Social Form Fill for Twitter and Facebook (represented by orange dots on the grid) you'll need to add a required email field to ensure that data is captured, since this data is not passed by those social networks. Read more about that here.



You can configure which data you want to capture for Sweepstakes and Referrals:


Lead Capture Sweepstakes.png


One you enable Facebook Lead Ads you can choose which fields to map. The following fields are automatically mapped: Full Name, State, Country, Email, City, Date of Birth, First Name, Last Name, Street Address, Job Title, Phone Number, Company Name, Zip Code, Post Code.  Edit the Service in Admin under LaunchPoint:


Edit Services.png

Determining which Lead/Contact/Account Object fields to Sync with Marketo

One of the most important items in the SFDC integration set-up process is determining which SFDC fields to sync with Marketo for the Lead, Contact and Account objects. Syncing a field means that the SFDC field will automatically be created in Marketo during the integration process. There will be an automatic mapping of the Marketo created fields with SFDC fields. You can view SFDC field mappings in Marketo if you have access to the Marketo Admin area.


I recommend syncing only the fields you need for target marketing, form fill out and list imports. It’s easy to sync new fields at a later time, but much harder to remove/hide synced fields that you really don’t use. I have seen many customers sync hundreds of fields and then spend a ton of hours trying to clean up the chaos. As you review the fields for each object, ask yourself what will the field be used for and do really need it.


SFDC Field Sync Best Practices

Make sure the field label and API names match so they will automatically be mapped together when they are created in Marketo. You can re-map fields during the integration set-up but the process is confusing and it is much easier to do it in SFDC. If the field is on multiple objects, also check the mapping in SFDC.


If you are syncing a picklist field I recommend updating the values before you sync it and verifying that the values are the same if the field is on two objects.


Make fields read only if you absolutely need to protect the data integrity. Otherwise use block field updates to allow Marketo to edit a field if the field value is empty. Without field blocking, the updated information in Marketo would then sync to Salesforce and overwrite the data.


Enable Salesforce history tracking to see data value changes.


Read this article if you are thinking about syncing formula fields.


If you are creating a new SFDC field remember to name your field so it is easy to understand the purpose of the field. Think carefully about the naming convention and whether you want to be grouped with other fields based on the name since Marketo shows fields in alphabetical order.


Try to sync as few fields as possible to reduce confusion and decrease the chance of using the incorrect field. Always ask yourself what is the purpose of the field.


Never rename a SFDC field in SFDC or Marketo since the API name can’t be edited. If you rename a field in SFDC nothing will change in Marketo. If you change the API name a new field will sync to Marketo.


To create a score field in SFDC, create an integer field. and when it appears in Marketo, change the field type to Score. The field will not appear in the Change Score flow step unless the field type is Score.


If you can’t remember what the field is for then hide it and create a new one. It is not possible for your Marketo admin to delete a field. You can add additional fields at any time.


Finally, I recommend creating a field data dictionary to document which SFDC and Marketo fields you will be syncing. The dictionary should list how each field will be used and whether the field will be blocked from updates. At any time you can export a list of all the fields in Marketo (Marketo only, Marketo System and Synced from SFDC).


Note: If you sync a field later which contains values you will need your SFDC admin to update the last modified date/system mod stamp for all the records which have a value. Marketo does not automatically pull in the values for newly synced fields.


Additional resources for learning about the Marketo integration with SFDC.

Today's marketing is about effective story telling. And with the viral nature of digital marketing, top of the list when it comes to getting your story out there is the use of video content.  If you still haven't included video as part of your marketing strategy, or if you want to learn about using video to increase engagement, qualify and convert your buyers, check out this great eBook. Now add the power of web personalization to the mix and you're telling that powerful story to the audience most likely to want to watch.


Let's look at how easy it is to include video in your web personalization campaigns.


First you'll need to follow the relevant video player's Embed HTML instructions:


In the RTP campaign editor, open the HTML editor and simply paste the video's Embed HTML code.  In the below example I'm using a YouTube video.


In YouTube click on the Embed tab and copy the embed code:


Embed YouTube Example.png


Then copy and paste the embed code into the campaign HTML and click Update:

Embed HTML.png


The video won't render in the WYSIWYG editor - but don't worry, it will still work - just check out the Preview:

Embed Preview.png


And here's the final result:

Embed YouTube Final.png


Did you know you can also include forms in your Web Personalization campaigns?  Check out the instructions here.


As always, thanks to Yanir Calisar for all things RTP related.

Here is how you can send a post-birthday messages to a person. The following example uses the Date of Birth field which is automatically created when a new Marketo instance is created. It is automatically mapped to the SFDC Contact Birthdate field when Marketo is integrated with SFDC. The field type is “date.”


You have to set up two smart campaigns since the lead token, {{lead.Date of Birth}}, can only be used in a trigger campaign.


Step 1. Create a batch campaign with campaign is requested in the Smart List

Step 2.  Configure Wait Step in the Flow

  • Add token {{lead.Date of Birth}}. Remember a token can only be used in a trigger campaign. Choosing "Plus" will make the wait step end after the date in the token. Choosing "Minus" will make the wait step end before the date in the token.
  • Remember to click "Use next anniversary date"
  • Set time for when you want the wait step to end. This will be the time the email will be sent out.

Step 3. Add Send Email to Flow

Step 4. Activate


Step 5. Next create a batch campaign with a request campaign in the flow step.


Step 6. Set Smart List


Step 7.Request the first campaign in the Flow

Step 8. Run the campaign


Alternative Method for Sending a Message after a Person’s Birthday

In this example you will need your SFDC Admin to continuously update the value of the SFDC Contact Birthdate field to the upcoming year. Since the Birthdate field includes Month, Day and Year, the year always needs to changed to the upcoming year. For example, if today is 5/14/2016 then all values in the Birthdate field need to be 2016 or 2017. Once a person's birthday has passed then the year needs to be updated to the next year.


Set the Date of Birth field twice in your smart list in your smart campaign based in the past before 2 days time and in past 3 days time.

  • If the date is exactly 3 days in the past the record will qualify
  • If the date is not exactly 3 days in the past the record will not qualify


Smart List


Set the schedule to run every day. Set the flow so a record can flow either only once or once every 364 days.

Instructions to send a birthday message.

Got pesky scroll bars in your Dialog Web Personalization campaigns? Let's look at how easy it is to get rid of them...


In the Dialog Campaign interface you have options to setup the dialog box size, or you can make it even simpler by choosing Auto Width.  Also, don’t forget the great choices you get for Dialog Style including, Modern Trim (a black outline), Basic (includes a gray box for the Dialog Title) and Modern Trim II (a gray outline):


Dialog Types.png


Here are my settings - I selected a Transparent background and Auto Width:

Dialog Sidebar.png


Then simply insert the following CSS code to the campaign's HTML:



    overflow-x: hidden;

    overflow-y: hidden;




And here’s the result:

Dialog Transparent.png


Bye Bye, scroll bars!