Skip navigation
All Places > Products > Blog > Author: Brian Law
1 2 3 Previous Next


41 Posts authored by: Brian Law Employee

Here are some helpful tips for fine tuning your Marketo data normalization campaigns. In this example, I will show how to improve a campaign used to normalize the State field.


#1 Build batch campaigns instead of trigger campaigns whenever possible especially when high latency is acceptable. Batch and trigger campaigns use different ‘workers’ in and batch campaign workers are typically underutilized, especially at night or in the early morning.


In this example, I am changing the full name of a state to the abbreviation. You can also use Marketo to fix misspellings.

Smart List



Set your batch to run in the middle of the night or in the early morning.

#2 Build your campaign flows so the most popular states are normalized first. Marketo evaluates each choice so if you put the most popular states at the top, the campaign will run faster.


Example of flow step in alphabetical order.

Change the order so the largest states are on top

#3 Try not to use more than 25 choices in a single flow step. You may have already noticed that more choices equal slower performance/loading. Don’t be afraid to break up your campaign.

#4 Prevent performance issues caused by large list loads (greater than 5,000 records). Performance may be impacted if you have a lot of trigger campaigns using the Person is Created and Data Value changes triggers. Use a vlookup to correct the State field values before you import the file. I recommend setting as many fields as possible in your file such as Lead Source and Lead Source Details before your import.

  • Set the Source Type to ‘is not’ List import
  • Use a batch campaign to normalize the imported records if possible.

Having a lot of SFDC records can possibly impact the Marketo sync speed. I define a large SFDC instance as someone with more than 1M records based on the number of Account, Contacts and Leads they have. The first step in optimizing sync performance is to run counts in SFDC on the number of Accounts, Contacts, Leads, and Tasks.


Here are possible options to improve performance:


  • Clean up the SFDC database to reduce the amount of contacts and leads you have in the system. Start by deleting junk and test records. Merge duplicates if possible.
  • Implement a custom sync rule to limit the number of contacts and leads which will sync.
  • I recommend preventing records without an email address from initially syncing with Marketo, since Marketo uses email address as the unique key for de-duplication. Setup workflow rules in SFDC to enable the record to sync once a sales rep enters an email address for the record.
  • If you don’t use tasks in Marketo, you can with support to disable tasks from syncing.


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

I was reviewing all the great articles about implementing a custom sync rule and thought it would be nice to finally have them all in one location. Enjoy!


First, what is a custom sync rule? A custom sync rule can be used to keep specific records from syncing with Marketo. For example, if you have a lot of records without an email address it is recommended not to have them sync to Marketo.


Restricting Leads from Syncing to SFDC With Sync Filters by Mike Reynolds

Mike's article provides instructions for setting up the rules if you have SFDC. It includes a step by step guide with screenshots.


"Sync with Marketo" mysteries part 1 by Grégoire Michel

"Sync with Marketo" mysteries part 2 by Grégoire Michel

Greg's articles go in-depth about how the custom sync rule works.


Marketo Custom Sync Filter for Microsoft Dynamics CRM by Kristen Carmean
Kristen's article shows how a similar rule can be implemented in Dynamics without configuring anything in Marketo.


Finally, here are my instructions for creating a custom sync rule including step by step instructions.


Step 1 - Create the field for the Sync Rule in SFDC (Lead and Contact Object). Make sure you map the two fields together. Make the fields visible to Marketo. Check in Marketo to see if the field appears. The field in Marketo should be mapped to both the SFDC Lead and Contact Object fields. (Marketo Admin => Field Management)


SFDC Field Example = Sync with Marketo (sync_with_marketo) (Type Boolean (aka True/False))


Note: Do not use a formula field since the sync will automatically stop whenever the field changes to false which will cause you headaches since Marketo won’t recognize the value change. Marketo won't see when you delete the record in SFDC. Also, the custom sync field will work much better and be less confusing if the logic is if the value of the field is True the record should sync.


Step 2 – Create a workflow rule in SFDC to automatically change the field from False to True for any new lead that is created in SFDC with an email address. Create a second rule which changes the field from False to True if the email address field changes from empty to not empty.


Do not create a rule to change the field back from True to False is the email address is changed to NULL. The workflow rule should only run if the  sync_with_marketo field is set to False. It should run every time a lead is created or the email address field changes from null.


In SFDC, update all records for the sync_with_marketo field based on your criteria.


Step 3 - Contact Marketo support and request a custom sync rule be implemented.  Best practice is implement the rule prior to the record sync.


Ticket Example

Account String for the instance (Information can be found in Admin => Landing Page) Example: acmecompany


Hi Support,


I need a sync filter rule created. If the SFDC field below is checked (True) the record should sync between SFDC and Marketo. If the field is not checked the record should not sync. The rule should apply to both leads and contacts.


The field is


API Name



Friendly Label

Sync_with_marketo or Sync with Marketo



  • When you start your integration with SFDC, you cannot setup a custom sync filter until the field mapping schema has been configured. The ideal time to request a custom sync filter is after the schema has been configured in Marketo and before you start the record sync.
  • You can use custom sync filters on the Lead and Contact object plus the Account and User object. Check with Marketo support about other objects.
  • If the integration has already been completed, and a custom sync rule is necessary to reduce the number of synced records in the Marketo database, follow these steps:
    • Create "sync_with_marketo" field in SFDC on the lead and contact objects
    • Map the lead field to the contact field
    • Expose the field to Marketo sync user in SFDC
    • Create workflow rule that defines which records to sync
    • Update records accordingly via data loader or similar tool
    • Run reports to get record counts, for both lead and contact
    • Compare record counts in Marketo and SFDC
    • Schedule the go-live time with Marketo support
    • Marketo support to implement sync rule
    • Identify the SFDC records in Marketo you want to delete
      • SFDC is Created is not empty
      • sync_with_marketo = True
    • Run a batch campaign to set sync_with_marketo to False
      • Use the sync flow step to push the updates to SFDC
      • Use a wait step of an hour to make sure updates have synced
      • Use the delete record flow step to delete the record in Marketo only


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


Here is a checklist if you are preparing for your initial SFDC sync

Customers often ask me for tips for improving the integration, specifically the sync speed, between Marketo and SFDC. The syncing of a lot of fields can impact performance. Here is a list of things you can do to optimize the field sync between the two systems.


  1. Start by reviewing the activity log of a few records (leads and contacts) plus recently created and older records. If you see a lot of data value changes for fields you don’t ever use on a form or to segment your database they are probably fields you synced over unnecessarily. If the value of a field is changing every day the field is probably a formula field. Since it is difficult to use a formula field in Marketo I would recommend unsyncing it.

    Example of possible fields to unsync:
  2. Create a field dictionary listing the purpose of each field you are interested in unsyncing. A helpful way to see the SFDC field label and API name is a list of all the fields in Marketo (Marketo only and Synced from SFDC).
    1. Lookup each field you are interested in unsyncing in Marketo to determine how it is being used. Marketo will show you which smart lists and campaigns the field is being used in.
    2. Consult with your SFDC Admin if you don’t understand the purpose of a field.
    3. Run reports in SFDC or smart lists in Marketo to determine if the field is populated for many records and to review the values in the field.
  3. I recommend considering unsyncing a field if any of the following are true:
    1. If a field isn’t being used in a target marketing, a smart list, form or list import
    2. If you don’t understand the purpose of the field
    3. If the field isn’t populated for many records or the data doesn’t look valid.
  4. To unsync a field, meaning stopping the data sync between the two systems, have your SFDC Admin hide the field in the profile for the Marketo user. Remember to also hide the field in Marketo.
  5. That’s it. You can always start the data sync for field again by having your SFDC Admin make the field visible again in the profile for the Marketo user and change the SFDC last updated date for all the records so all the values are updated in Marketo. You will also need to unhide the field in Marketo.


Bonus tip: Remember to evaluate all the fields syncing between the two systems for all SFDC objects. Start with the Opportunity and Account objects but don’t neglect looking at any custom objects that are syncing.


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

Do you ignore the Marketo notifications because looking at potential issues isn't much fun? Many times they aren’t as bad as you might. Here are some of the common notifications I have seen and some tips regarding what to do about them.




Example of Error

Impact to Marketo if any

Recommended Action in Marketo if any

Salesforce Sync Error

An unexpected error occurred.

soqlBatchQuery failed.

Marketo will time out and try again during the next sync cycle.

Marketo logs the error to help identify whether it is a recurring issue and to assist your SFDC admin in investigating it. The error is not caused by Marketo and there is no data loss and all updates will eventually sync. Any investigation into the cause of the error needs to be done in Salesforce.

Salesforce Sync Error: Server is not Available

Marketo is unable to log into your Salesforce account.

The Salesforce server is not available.

Marketo will try again during the next sync cycle.


Salesforce Sync Error: Unable to update Lead

Marketo is unable to update Lead in Salesforce.

INSUFFICIENT_ACCESS_OR_READONLY: insufficient access rights on object id.

Record will not be able to sync to SFDC.

Verify that the SFDC profile that is assigned to the Marketo sync user has the correct permissions. The error can be caused be an object level or field level permission. One way to make sure is to look a given leads error message and see the last sync to SFDC attempt, paying attention to the last fields that were passed over from Marketo to SFDC. Resync lead as needed.

Salesforce Sync Error: Unable to update Lead

Marketo is unable to update Lead in Salesforce.


Record will not be able to sync to SFDC

Verify that the SFDC validation rule is met for the field specified. Create campaigns in Marketo if necessary to put the correct value or a temporary value in the field if you want to sync the record before collecting the correct value. Resync lead as needed.

Salesforce Sync Warning: Change in Salesforce Field

One or more fields has been changed in such as a change to the field's picklist or the length of the field

The following fields have been changed:

•  Lead Source picklist entries changed

•  maximum length changed - old value: '2000', new value: '32768'

The form using the field will automatically be re-approved causing the Landing page asset listed using field will be made as draft to reflect change.

Check your forms and make sure these fields are correct. Then re-approve the landing pages to update the live version.


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

Here is a list of some items that you should check in SFDC if you see a failed to sync error. Typically the root cause is linked to the permissions of the Marketo user that you have set up in SFDC but sometimes it may be a validation rule causing the issue. Usually the Marketo notification will show at least one of the leads affected which you can use then use to troubleshoot the issue.


  1. Has the SFDC Admin changed a user or field permission on the Marketo user profile?
  2. Has the SFDC Admin added any new field validation rules?
  3. Are there any look-up or master detail fields on the object in question? If these types of fields are being updated then make sure that the Marketo user has access to the object.
  4. Do you use record types? If so, make sure that the Marketo user has access to all required record types.
  5. Do you use Apex? If so you may have a trigger that fires on the update of a record, you will need to make sure that the Marketo user has profile access to the relevant Apex classes.
  6. Make sure "Convert Leads" is turned-on within SFDC. If it is not, you will get an error message when trying to merge leads that exist within Marketo and SFDC.


Happy troubleshooting.


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

Here is a helpful tip whenever you have to put on your ‘CSI’ hat to investigate a SFDC failed sync issue.


The robust integration between Marketo and SFDC is one of Marketo’s most powerful features and it is frustrating when problems arise. Recently I was helping a customer determine why they were unable to successfully insert a Marketo only record into SFDC. We started the investigation by looking at recently created records in Marketo which were inserted into SFDC using the Sync Person to SFDC flow step. When the client checked SFDC they found the newly inserted records. However, when they converted them to a contact a duplicate would magically appear in Marketo. When we looked at the original record in Marketo we noticed it was missing a SFDC Created Date and there was a Failed message in the activity log of the record. The SFDC information wasn’t flowing back to Marketo after the insert. We discovered the SFDC team had recently added a lookup field and the field needed to be populated before the record was inserted into SFDC for the first time. Once we made sure the lookup field was populated prior to the sync it fixed the issue.


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

Tips for Getting the Most from a Program Performance Report


Customers often ask me for tips for getting the most from their program performance reports. Here is a checklist you can use to help make sure you have everything set-up correctly.


A Program Performance report is great for providing a summary of your programs. The information is pulled real-time from Marketo so it is always up-to-date. Metrics include number of new names acquired by the program and the number of members who achieved success.


Before I get to the checklist, here is refresher of the different filters and metrics available in the report. The following is a webinar example report.


Program Performance Report Filters:

  • Channel (e.g. Roadshow, Webinar, Web)
  • Tags (e.g. Region, Vertical)
  • Period Cost (e.g. Date of incurred costs between x and y)
  • Programs (e.g Choose a folder containing a group of programs or a specific program


Metrics per program:

  • Number of members
  • Number of new names
  • Number who reached success


Metrics if you included period costs:

  • Cost per member
  • Cost per new name


Metrics if you click on show program status columns when you select a specific channel to filter on in your report:

  • Number of records in the program per status


Here are some tips for getting the most from a program performance report.

  • Establish a good folder structure grouping together first by marketing activities (aka channel) and then by year. It will make it easier to select a group of webinars to analyze within your channel
  • Use a good program naming convention that can be easily be sorted or filtered if you export the report to excel
  • Create only the channels which are necessary to reduce confusion and accidentally using the incorrect channel
  • Create only the program statuses which are necessary
  • Make sure the analytics behavior for each channel except Operational is set to inclusive
  • Remember to set success for each program
  • Add monthly period costs to all programs so you will be able to sort by cost time frame
  • Define tags before starting to create programs. Make all tags required.
  • Try not to remove members from a program since you won’t be able to reset the program membership date
  • And most importantly, think about what you want to report on before you create your program statuses and set-up all the campaigns inside your program

Here is a list of Marketo's native de-dupe behavior by activity.



De-Dupe Behavior


List import

Marketo will match with the record which was most recently updated

Not cookied and fills out form

Marketo will match with the record which was most recently updated

Record will become cookied. Pre-fill and progressive profiling will work on the next form.

Cookied and fills out form

Marketo will match with the cookied record

Pre-fill and progressive profiling will work

Not cookied, sent email and fills out form

Marketo will match with the record which was most recently updated

Record will become cookied. Pre-fill and progressive profiling will work on the next form. Email and filled out form activity will be on the record sent the email.

Cookied, sent email and fills out form

Marketo will match with the cookied record

Pre-fill and progressive profiling will work. Email activity will be on the record sent the email. The filled out form activity will be on the cookied record.

Send email flow step in a Batch Campaign

The email will be sent to the record with the lowest Marketo ID, that is, the one that was created first in Marketo

Send email flow step in a Trigger Campaign

Emails will be sent to every record since Marketo handles each record separately


Additional resources.

Here is additional information about native de-dupe behavior for form submissions to supplement the great article John Mattos wrote about "The Unintended Consequences of Duplicates in Marketo."


During form submissions if the record isn’t cookied and their email address is in Marketo multiple times, Marketo will match with the one which was most recently updated (by last modified date in the “updated” field).

  • The data value changes in Marketo will only affect one record if there are duplicates; they will not affect the duplicate records. For example, if a record changes their title, the change will not occur for the duplicate records.
    • There is one exception to the rule highlighted above. If the unsubscribed (SFDC opt-out) field changes to true, Marketo will automatically unsubscribe all records with a matching email address. Thus, if the SFDC opt-out field changes to true all records with the matching email address will change to true. The data value change will be noted in the Marketo activity log for each of the records.

  • Assuming that the Marketo cookie information is included in the form (standard for Marketo landing pages or embedded Marketo forms), the web page visits will now be tracked on the most recently updated record.
  • If there are duplicate records in Marketo and one of the records is cookied, the cookied record will be associated to the form fillout regardless if a duplicate record was updated last. Thus, the cookied record in a browser will always be matched/win versus a duplicate record which clicks on a link in an email.
  • The form fill-out activity may not be associated to a record which was sent the email directing them to the form fill-out
  • Pre-fill and progressive profiling will work when a record is cookied or sent an email


Cookie Behavior:

  • If a record is not already cookied it will become cookied when they fill out a form or click a link in an email which takes them to a web page which contains the munchkin tracking code
  • Any anonymous web activity will appear once the record is cookied

Here are the steps for syncing a lookup field on the SFDC Lead Object.


Step 1. Make the lookup field visible on the SFDC Marketo Profile

Step 2. If the lookup field is referencing a SFDC Custom Object, make sure the SFDC Custom Object is visible to the SFDC Marketo profile by setting the object permissions (Set to read only and view all records)

Step 3. If you want all the values of the field to sync over to Marketo immediately you can have your SFDC admin use the SFDC Data Loader to change the last modified date/system mod stamp for all the records.


Note: It is recommended you confirm with your SFDC Admin that the last modified date/system mod stamp is updated when the value of the lookup field changes.


A lookup field will translate to an id in Marketo. If you want the value to appear in Marketo so it will be easier to use, have the SFDC Admin create another field which populates it with the value.


See this article for part I of syncing a previously hidden SFDC field.


Additional resources for learning about the Marketo integration with SFDC.

Filter Blog

By date: By tag: