Use “Interest Scoring” to target like a bull

Anonymous
Not applicable

A big part of having an Engagement Platform is that you can target leads very precisely and dynamically based on a host of data coming into the platform. Despite this many clients still have not utilized the full potential this targeting can offer. Nurture Programs are a great place to take advantage of this targeting (Nurture is automated communication streams).

We recently designed a Nurture Program for a client that looked like this:

Lead Nurture Summary 2015 05 22

There would be 12 nurture streams based on persona and lifecycle stage - so for example a CIO in the late stage of their buying cycle would get a certain type of communication. There would be 6 industry nurtures - if we know someone's industry, would get industry related communication. And 4 of the planned communication streams were based on product interest (Mobility, data center, management and security and application analytics).

The challenge for the client was how to know the interest for leads in their Engagement Platform. The client was asking interest on forms on their website, but many of the leads in their platform did not have an interest identified because they had not filled out a form:

table image

The client wanted to identify interest based on web pages visited by a lead. The challenge with deriving interest from web pages visited is that someone might visit many pages on their website representing many different interests. In this case how could we say the person had a particular interest?

“Interest Scoring” provides a solution to this challenge.

The general idea with Interest Scoring is to create a scoring model that scores interest for the purpose of identifying the leading interest for a lead (no pun intended). As an example say the company is Apple (completely made-up example). I may visit various web pages but I visit the Apple Watch pages far more than the other pages. If Apple was scoring interest by product interest my Apple Watch score would be very high – higher than the scores for all the other Apple products. So Apple might decide to focus communications with me more on the Apple Watch.

How to setup interest based scoring

Here is the 1-2-3-4-5 on how to create interest scoring:

  1. Select interests
  2. Organize pages by visits
  3. Assign points
  4. Build interest scoring model
  5. Reap the results

Let’s explore each of these steps in a bit of detail.

Select Interests

How you might organize interest usually varies by company. In the Apple example  above interest was organized by product. So in this example interest could be Mac, iPad, Apple Watch, etc. Another example could be a business-to-business Healthcare company that organizes interest by types of customer such as Hospital, Clinic, Individual Doctor. How you categorize interest will vary by client and much thought needs to go into how this should be for your company.

Organize pages by visits

Once you have selected your categories of interest, you will want to organize your web pages into these categories. Back to the Apple example all the Apple Watch web pages would indicate interest in the Apple Watch. If I look at the Apple website all the Apple Watch pages seem to contain the word “watch” so in this example it would be as simple as saying any visit to a web page that contains “watch” means we should score for Apple Watch. By the same token all the iPad page visits would be score for iPad interest. Etc. If the web pages are not named like this you can still collect all the web pages for each interest – page-by-page.

Assign Points

Then you will need to assign points for visiting the various interest pages. You can keep it simple and assign the same point value for all the web pages or you can get more granular if you want.

Build interest scoring model

Finally you will need to build your interest scoring model in your Engagement Platform. Once it is built and activated you will start to see leads in your database scoring up for various interests.

Reap the results

There are many ways to reap the results. Targeting is the use case we have already focused on. But you can use this interest information in many ways:

  • To target your nurture or other communications
  • To help assign to the correct team if you have a sales process
  • To give sales better visibility into interest for a lead
  • To get a better idea of relative interest in your current database and over time to spot trends

Interest changes

The point I want to make here is that interest can change rapidly. So say we follow the Apple example and three months later John visits several Macbook pages, Macbook interest might score up to the top and I would move John from the Apple Watch nurture to the Macbook nurture. You don’t have to do it exactly that way. It is a business decision for each client to decide how to act on this powerful information.

Other activity

This example focused on looking at web activity. I also want to point out that you can look at any activity and expand your interest scoring model accordingly. You can look at email activity, event attendance or anything else you want to add to your interest scoring model.

5330
11
11 Comments
Phillip_Wild
Level 10

Hi Rajiv

I love this approach and we've actually built it all out ourselves based on our products. The key problem we have is this: there is no way (that I know of) in Marketo to compare two score fields. So if I have Product A, Product B and Product C, all with interest scores attached, then the only way to assign a "Product of Interest" field, and therefore a segmentation / dynamic content would be to see which score is the highest at any time. But it doesn't seem like that's possible.

So the only alternative is to change "Product of Interest" to a given value whenever a score hits a certain point, regardless of what is contained in the other scoring fields. As you can see, this is far from ideal.

Any ideas?

Anonymous
Not applicable

Hi Rajiv,

Thank you for this! I will be bringing it up in our next MQL / Scoring meeting. As a tech company I also found it extremely translatable to our products and services. Look forward to reading more of your content.

Edward_Unthank_
Level 10

We do this same thing! We call them "profiling programs," and do Product Interest Profiling, Buyer Stage Scoring, and Persona Profiling (generally). It definitely has its upper limits when you have a large volume of traffic to your site, because "visits web page" trigger is very noisy and can impede processing speeds at large page-visits/day volumes.

Walk-through of a single example (philosophically) and setup: Buyer Stage Scoring: Data that Guides Your Nurture - Etumos

Three types (including "interest scoring" as you'd call it): 3 Types of Profiling Programs to Guide Your Marketing Efforts

Diagram using this for a nurture strategy with the different profiles:

pastedImage_2.png

Phillip Wild: Once you have the scores, we compute them into a segmentation. You have to choose, all else equal, which prioritization of categories to place people into. If you're talking about which product, I generally sort (all else equal) into prioritizing based on profitability of products. Make a new segmentation, and have the rules be:

If [Score - Product Interest A] > 100, Product A

If [Score - Product Interest B] > 100, Product B

If [Score - Product Interest C] > 100, Product C

Else Default

Then you're watching for the trigger "Segment changes" and routing people to different engagement programs based on that trigger. Segmentations change automatically, so you can use a segmentation to route prospects originally (adding them to an engagement program for the first time) as well as routing people when the segmentation changes (pausing them in the old engagement program and adding them to the new engagement program).

Cheers,

Edward Unthank | Founder, Etumos

Phillip_Wild
Level 10

Thanks Edward, that's very helpful and I think the best way to do it until Marketo brings out some field comparison tools.

Anonymous
Not applicable

Awesome!!

Anonymous
Not applicable

Hi guys,

I've found a way to calculate what interests beats the other in two different ways. The first one is doable if scoring in each field is below 20 or so and can be done in Spark, while the other is more flexible and scalable, but requires a webserver and a Marketo license with webhooks. You could also build this with the API, but I'm not that strong in coding to do so. I'll write up the second one next week.

This example is for a client, who's a travel agency, and we're scoring leads' interest all the different tours they offer - that's why fields are called "Tours - XYZ..."

Here goes:

Solution 1: Request campaigns

Create the following four new fields:

Tour - Temp Max Score (integer field)

Tour - Temp Max Score Name (string field)

Tour - Max Score (integer)

Tour - Max Score Name (string field)

The temporary fields ("Temp") are updated every time a interest/tour score is updated. That means if a lead is interested in tour A and have visited that tour webpage 3 times, the temp score will be 3, but when a lead visits a tour B for the first time, the temp score will change to 1. This is done by using the lead score token to update the temp score field. See the score flow here:

pastedImage_0.png

The same thing goes with the Tour - Temp Max Score Name, which will update every time an interest score has been updated. So in the above example, Tour - Temp Max Score name will have been set to "Tour A" three times in a row, but then be set to "Tour B".

We will then setup a system that checks to see if the updated "Tour - Temp Max Score" field is larger than the ​real​ "Tour - Max Score". If so, update the "Tour - Max Score" with the value from the "Tour - Temp Max Score" and also update the string "Tour - Max Score Name" with the content of "Tour - Temp Max Score Name".

This would be easy to do, if tokens could be used in flow step choices, but unfortunately that doesn't work, so I've build the following system:

1. Create a smart campaign called the "Max Score Handler" that is requested in each interest scoring smart campaign. The flow of the campaign checks how large the "Tour - ​Temp ​Max Score" is, and request the corresponding Smart Campaign, like this:

pastedImage_3.png

The smart list of the corresponding smart campaign for choice 6 looks like this:

pastedImage_5.png

The "Tour - Max Score" filter is key here. Let's say that a lead has visited tour A 12 times. That means the "Tour - Max Score" is 12 and the "Tour - Max Score Name" is "Tour A". When a lead has engaged with tour B for the 6th time, the smart campaign "Max Score Handler" will request the above corresponding smart campaign, but since the smart campaign will only run if "Tour - Max Score" is 6 or less, nothing more will happen, since the max score is 12 at the time.

If - however - the "Tour - Max Score" is only 5, then the smart campaign will run, and this flow will be executed:

pastedImage_6.png

How high a score you can handle, is only a matter of how much time you wanna put into creating corresponding smart campaigns and add choices in the handler. In this case, we've set it to 15, and every time the "Tour - Temp Max Score" is above 15, it overwrites the real Max score and Max name, even though it might have been 40 i.e.

We can now create a segment based on what tour leads are most interested in, and use this in all the emails we send out, and automatically include the most relevant tour in the email etc.

Phillip_Wild
Level 10

Thanks Thomas, that's an ingenious solution. Although I think in my case I might have scoring campaigns that go too high to feasibility build out all the requested campaigns.

Anonymous
Not applicable

Thanks Phillip - then you'll love my next solution. 🙂 This requires access to a webserver that supports PHP and at least the STANDARD Marketo license, because we're using webhooks.

The basic idea is to send all the scores to a script outside of Marketo with a webhook. The script then compares the scores and returns a name of the interest that scores the highest back to Marketo, which is automatically added to the lead in a pre-determined field.

Here goes:

Create a PHP file on your webserver, and input the following content. Please take into account that I'm not a seasoned programmer, so I'm not 100% sure about the security of data send between Marketo and this PHP file. However, the data that I send between Marketo and the script isn't that secret, so I'm okay with the following security. If you're sending sensitive data, please consult someone, who can validate the data security:

<?php

/* The first part is basically making sure that it's only our webhooks from Marketo that's allowed to access the script */

  $key = $_GET['key'];

  if ($key != 'SECRET KEY THAT YOU CHOOSE') {

    header('HTTP/1.0 403 Forbidden');

    exit();

  } else {

/* If the secret key in the script matches one from our Webhook, execute the following script */

/* The following simply means: Get the value from the URL parameter "url_param_dogsledge", and save it to the array - etc. Copy paste the below lines to match the scores you want to compare: */

  $interest_scoring_arr["exp_dogsledge"] = $_GET['url_param_dogsledge'];

  $interest_scoring_arr["exp_whales"] = $_GET['url_param_whales'];

  $interest_scoring_arr["exp_ice_cap"] = $_GET['url_param_ice_cap'];

  $interest_scoring_arr["exp_ice_bergs"] = $_GET['url_param_ice_bergs'];

  $interest_scoring_arr["exp_northern_lights"] = $_GET['url_param_northern_lights'];

/* The following finds the maximum score, and returns the name of the score, that we defined in the above lines. Lets say the interest for dogsledging is the max score: The output will be "exp_dogsledge" */

  $max_interest_exp["max_interest_exp"] = array_search(max($interest_exp_arr),$interest_exp_arr);

/* Send the name of the max score back to Marketo */

  echo json_encode($max_interest_exp);

}

?>

When this is setup, go to Marketo and create the following webhook:
pastedImage_5.png

The URL is the URL of your PHP file, and include the following URL-parameters:

?key=THIS SHOULD MATCH THE KEY, YOU DEFINED IN THE PHP SCRIPT&url_param_dogsledge={{lead.dogsledge_score}}&url_param_whales={{lead.whales_score}}...etc...

Basically you the names of the URL parameters should match the names you defined in the PHP script:
pastedImage_6.png

The value of each URL parameter is the lead token that references the lead field with the score.

An example could be:

URL.com?key=secret &
url_param_dogsledge = 4 &
url_param_whales = 8 & url_param_ice_cap = 2 &
url_param_ice_bergs = 12 &
url_param_nothern_lights = 4

The PHP script gets the values and saves it to the array, figures out what score is the highest (ice bergs), and returns the JSON:

{
   max_interest_exp :  exp_ice_bergs
}

In the webhook settings in Marketo, you map the result JSON from the PHP script to the field, where you want to save the name of the max score:pastedImage_14.png

We're now almost done. Now everything is setup and ready, and we just have to create the smart campaigns that will call the webhook. Remember that a webhook can only be called in a trigger campaign, so we have to setup two smart campaigns to combine a batch campaign every 24 hours, and a trigger campaign to call the webhook.

Trigger campaign:

Smart list: "Campain is requested"
Flow: Call webhook
Schedule: Each lead can run through the flow every time

Batch campaign:

Smart list: Add "Data value changed" for each of the scoring fields you want to compare. In each "data value changed" you find each scoring field, and set the date of activity to "in past 24 hours", and smart list to "Use any filters" (below scoring field names is in Danish)
pastedImage_21.png

Flow: Request the trigger campaign you just created previously.

Schedule: Each lead can run through the flow every time - and schedule it for every 24 hours sometime at night.

This way all the leads, who's interest value has changed in the last 24 hours, will be sent to the trigger campaign that will call the webhook, which sends the scores to the PHP script, which calculates the max value and returns the name of the max score to the field you chose in the webhook settings.

Fully scalable and with no limitations on lead score. 🙂

After all your smart campaigns are setup and activated, create a smart campaign that will run all leads through the trigger smart campaign with the webhook, if any of their score fields is not empty. Then you've setup your baseline, and the 24 hourly batch smart campaign will update segments every night.

NOTE: You can of course setup it up to call the webhook every time a scoring field is changed, but I don't recommend doing so, since a webhook call might take 1-2 seconds and depending on your traffic and leads can clock up your webserver. But in theory it would be possible to do so.

I've then created segments based on the value in lead field max score names, which I use in personalizing email content and flows:pastedImage_23.png

Phillip_Wild
Level 10

Gold. Thank you Thomas. I'll look into this!

Phil

Anonymous
Not applicable

Product interest scoring is exactly what we are trying to implement in our instance, these articles are incredibly helpful. Could y'all elaborate on how exactly to setup the "interest scoring model"? We will have 6 different product types to measure interest in and I'm not sure the best way to build the scoring model around them.

Thanks!