Only credit influence to Campaign Responses from Campaigns and/or Contacts that have attributes that dynamically match attributes of the Opportunity being analyzed

For organizations that have multiple unique product lines, business units and/or sell to multiple departments or contact types within a single Account.

Table of contents for this functionality

If your organization sells multiple products to multiple departments, but your reps fail to consistently fill out all the right Contact Roles (and who wouldn’t?), you should consider taking advantage of this functionality so you can conservatively and reliably automatically increase your visibility into how Campaigns affect your Opportunities without asking anything of the sales field and very little from Marketing and/or the Administrator.

Organizations who could typically benefit from this functionality sometimes have the opinion that allowing MagicRobot to credit influence to any Campaign Response in the Account is too liberal a setting.  For example, imagine your Opportunity is selling “Landscaping Supplies” and the only Campaign Response in the Account is marketing “Laboratory Fume Hoods”.

One could make a convincing argument that the Campaign for Fume Hoods should receive no influence credit for selling Landscaping Supplies, whereas standard MagicRobot Account-based influence would indeed credit it (and you can make an argument in favor of this style as well).

So the previous example describes Product/Product matching using this “Dynamic Matching” functionality, but you could look at that same exact scenario using a slightly different lens, as Opportunity “Owner Business Unit” being something like “Facility Management” and Campaign “Owner Business Unit” something like “Lab Equipment”.

MagicRobot’s functionality gives us a variety of ways to creatively accomplish matching, enabling almost any scenario, despite any data consistency issue. This is especially true because MagicRobot allows you to match on all types of fields, including Custom Formula Fields and Multi-Select Picklists, and to use comma- or semicolon-separated values as “OR” operators, and to match or not match on null values — allowing you to instantly and pragmatically work with whatever attribute data completeness states of your Opportunities, Contacts and Campaigns.

Read on to learn more:


The Settings in Detail

MagicRobot has created an easy-to-administer and flexible set of controls for selecting the matching fields — including the ability to choose and use custom formula fields — to give you complete, pervasive and instant administrative control over how your Opportunities match to Campaign data.  You will see these settings within the Application in the “Campaign Influence Control Panel” Tab:

Note: If your org has hundreds of fields on the Opportunity object making use of the picklist drop-downs shown above and below overly cumbersome, you can go to the MagicRobot Advanced Settings and paste in the API Names of the fields you want to use (e.g. “Products__c”).

Back to top

The most common “Dynamic Matching” use cases from our clients include:

  • Product(s) Being Sold vs. Product(s) Marketed 
  • Product(s) Being Sold vs. Promotions Marketed 
  • Your Selling Business Unit vs. Your Marketing Business Unit
  • Product(s) Being Sold vs. Contact Title
  • Department buying vs. Contact Department Marketed To

When you use Custom Formula Fields and/or workflow rules with complex formulas to provide your Matching Fields, you can even combine multiple use cases in the same fields by formulaically concatenating their results, essentially joining the attributes by a series of “OR’s”.  Applying this to our previous “Laboratory Fume Hood” example, we could concatenate both the Product and Business Unit attributes increasing our chances for a match between Opportunity and Campaign:

  • Opp: “Landscaping Supplies; Facility Management;”
  • Campaign: “Laboratory Fume Hoods; Lab Equipment;”

Then we could also formulaically map the Products listed on the Opp to the types of contact titles or job roles attributes we are segmenting our marketing on, and display that on the Opportunity to match against the Contact attributes themselves.  In the previous example, let’s say that “Landscaping Supplies” maps to the contact types of “Maintenance” and “Facilities” we could have the Opportunity output:

  • Opp: “Maintenance; Facilities;”

And then we could even say in the formula, if the value is greater than $1,000,000 add the attribute: “Executive;” (Or, better yet, maybe we want every opportunity to always say “Executive;”)

  • Opp: “Maintenance; Facilities; Executive;”

And then we’d be able match against any Contacts with any of those values from our known marketing segmentation attributes.

For further examples on how to write formulas and workflow rules to establish this kind of matching, read more here.

Back to top

Tips on various use cases and example setting configurations

Matching Campaign Example
Matching Campaign or Contact Example
Matching Campaign and Contact Example

  • Simpler is better; Use as few categories as possible to keep separate the data your business actually cares about.  For example, it’s better to use a big value like “Footwear” instead of listing: “Sneakers; Sandals; Dress Shoes;”


  • It’s better to have clean and complete data, i.e. perform a data-cleansing / normalization process prior to using this functionality, than it is to repair data entirely with formula fields


  • If you perform a data-cleansing exercise, make sure to put proper go-forward governance in place, like requiring marketers to specify “Product(s) Marketed” when creating new Campaigns


  • If you use the MagicRobot setting to look for influence from Leads, you should utilize Opportunity-to-Campaign matching only


  • If you think you have good data, Strongly consider how you choose to handle null values, and use those settings to your advantage, including using your matching fields by filling a value like “X” so it’s not null for specific match scenarios


  • If you have a full sandbox, test this functionality in the full sandbox and perfect your approach to how best to perform matching

Matching Campaign Example

In this example, we are going to match two colors: Red and Green.  We are looking for Campaign Responses from Campaigns that are Red or Green — and we will only analyze Opportunities that have non-null matching values:

We end up with three matches.  The two null responses are disqualified because their matching values are null.  The blue campaign response is not null — it’s blue.  But it isn’t red or green.  So it’s out too.

Matching Campaign or Contact Example

Now let’s take that same set-up as last time, but let’s add on the variable of ALSO matching any responses that belong to contacts that match specific values:

Representing the Contact Matching value in a glow-color:

We end up with five matches.  The two null responses are not disqualified because the settings allow to match against nulls.  The blue response matches because its parent contact matches the opportunity.  The only one that isn’t matched, from the plumber-guy, isn’t matched because his campaign value is null, and we are not matching to nulls, and its color, turquoise, isn’t purple or red, the match-to-contact values.


Matching Campaign AND Contact Example

Now let’s take that same set-up as last time, but let’s add on the requirement that we only credit responses that match BOTH Campaign AND Contact Matching requirements:

We end up with three matches.  The two null responses are disqualified because the settings require the Campaign match –and the Campaign doesn’t match non-nulls to nulls.  So, we’re looking for red and green Campaign explosion colors from contacts that are red or purple or null color.  Three fit that bill.

.Back to top

Making sense of your results

If you test or use this functionality, inevitably you will want to understand how and why your campaign responses were or were not matched.

First, always check your settings.  Those will tell you primarily why things were or were not picked up, which fields you are matching on, and how you are treating nulls and non-nulls.

Second, you will see the matching values recorded on the campaign influence split object, in the fields: “Matching Opp-to-Campaign: Opp Value”, “Matching Opp-to-Campaign: Campaign Value”, “Matching Opp-to-Contact: Opp Value”, Matching Opp-to-Contact: Contact Value”

Back to top

Tips on working with formula fields

Remember that you can use matching on nulls or non-nulls in a variety of ways.

We recommend taking the stance that you should be using MagicRobot to help you find results within reason.  So, you may want to use MagicRobot to match in a variety of meaningful ways.

For example, you may not want to count campaigns that marketed irrelevant products, unless it was to an executive contact.  So you may want to consider matching on contact attributes, and to have Opportunity-to-Contact Matching fields on Opportunities always output “Executive;”.

The mechanics of writing formulas

If you don’t know the basics of what a formula field is or how to begin, we recommend checking out this trailhead:

The nature of this functionality is to essentially categorize.  You need to have your opportunities, or your users, or your campaigns categorized as representing some logical subset of all possible things you sell, or market, or organize your teams by.

And you may want to stack them up.

Let’s say you want to write a formula that concatenates these values together on your opportunity (so that you can match it reasonably to Campaigns or Contacts that parent potentially influential Campaign Responses):

  • The Opportunity Owner’s Division
  • The Products Line being sold
  • Buyer Types of this Opportunity

First start by creating a Custom Formula Field — “Text”.

Essentially we’re going to concatenate our values and follow a pattern like this, where we’ll build each of the three values by binding them with an “&” and then adding the text “; ” so that each value will be semicolon-separated which Magic Robot will read (along with commas) as a separate value to match on:

{Owner's Division}&"; "&{Products}&"; "&{BuyerTypes}

Now all we have to do is build the formulas to get each of the three values we want, easiest to hardest:

Owner’s Division

Do something like this by looking up the relationship to the Owner (User) fields and return Division:


So now, our formula looks like this:

Owner.Division&"; "&{Products}&"; "&{BuyerTypes}

Let’s say you have a multi-select picklist field that lists the products being sold, api name “Major_Products_Being_Sold__c”

We can put it in and update the formula like this:

Owner.Division&"; "&Major_Products_Being_Sold__c&"; "&{BuyerTypes}

But let’s face it, you probably want to summarize a text field from all the Opportunity Products.

Here’s an example Opportunity Product trigger that strings together an Opportunity’s Product’s field (Product Code) for all the products on the Opportunity and inserts them into an Opportunity field:


Contact [email protected] if you want to use this or something like it but don’t know what to do.  We’re happy to help!

Buyer Types

OK, this one is a little less “Science” and a bit more “Art” than the other examples.

The reality is, there could be a number of attributes that you may want to use to build out the list of possible buyer types.  They could be based on the products or the business unit doing the selling.  And you may need to normalize the values so they match those on your contacts.

First, it always makes sense to include “Executive” so let’s start it that way:


Now, let’s use an example on the products to build out the buyer types to demonstrate using IF-THEN statements.

Few logical constructs categorize better than IF-THEN statements.  In salesforce, they look like this:


Salesforce does a good job of explaining it here: 

Let’s try something like this where we string together some Product to Buyer Types — Note that for this one product we are listing multiple buyer types and then adding an “&”:

IF(INCLUDES(Major_Products_Being_Sold__c, "Analytics"), "Sales Ops; Finance; Analysts; "&

Now, lets add another product:

IF(INCLUDES(Major_Products_Being_Sold__c, "Analytics"), "Sales Ops; Operations; Finance; Analysts; "&
IF(INCLUDES(Major_Products_Being_Sold__c, "Storage"), "IT; Operations; Analysts; Finance; "
Let’s put it all together:

Remember, we’re doing this:

{Owner's Division}&"; "&{Products}&"; "&{BuyerTypes}

And this is what it looks like with the details:

Owner.Division&"; "&Major_Products_Being_Sold__c&"; "&"Executive; "&
IF(INCLUDES(Major_Products_Being_Sold__c, "Analytics"), "Sales Ops; Operations; Finance; Analysts; "&
IF(INCLUDES(Major_Products_Being_Sold__c, "Storage"), "IT; Operations; Analysts; Finance; "

We hope you found value in these examples.

If you are considering using a framework like this and want to discuss strategies or specific issues you may be encountering, please don’t hesitate to contact us at [email protected]!


Back to top