Build an Advanced Preference Center With Pardot and Salesforce

By Andrew Cook

There is a real need in any organisation to ensure you are properly recording any communication preferences and adhering to them, especially with GDPR and CCPA recently coming into effect. Your preference page (also known as a preference center, or EPC) is a key part of this but how should you build a preference page that works well with both Salesforce and Pardot.

In truth, building out the solution was the easiest part. The most difficult part, by far, was the back and forth with legal and compliance with how everything was being worded. This tutorial goes through the solution that you can build after this has been established!

Step 1: Create a ‘Marketing Preferences’ Object

The first thing I did was to create a ‘Marketing Preferences’ object. The idea of this custom object is to provide a specific place just for the preferences to sit, as preferences records.

I created lookups to Contacts, Leads, and the Individual objects so all of these can have related lists; this will make it easy for users to quickly see which preferences their contacts have.

Other fields I created were:

  • Preference (a picklist of either Opt-In or Opt-Out),
  • Preference Change Date (date/time field),
  • Preference Type (a picklist that lists the different types of preferences you can have) and,
  • Request Source (a picklist to show where the request has come from).

Step 2: Create Pardot Public Lists

Next, I created the necessary public lists in Pardot. Public lists are a specific type of list that is used for capturing preferences – you can find more information on them in this post. The lists are then selected when creating your marketing preference page.

One thing to note here is the ‘Label’ is how the option will be displayed on the preferences page.

Step 3: Create Salesforce Custom Checkbox Fields

Now we have everything set up for the preferences to be set in Pardot – but, how do we get them into Salesforce? Some custom checkbox fields are needed!

Depending on your business requirements you can do this on either the Contact object, the Lead object, or both. I’ve done it on both but obviously it all depends on if you need to record preferences on Leads and Contacts.

We need a checkbox created for each preference type we have. Having these allows us to check or uncheck them using Automation Rules depending on the option they select. Once the fields are created in Salesforce, we then need to replicate them in Pardot for Pardot Prospects.

Step 4: Create Automation Rules for Opt-ins and Opt-outs

With the fields setup, we can now create the Automation Rules we need. For each preference type, we need to create two Automation Rules: one for opt-ins and one for opt-outs.

When creating the Automation Rules we need to make sure it is set as a repeat rule; this is important as it ensures people can update their preferences more than once.

For the rules, we need to select a public list and if the prospect has opted-in or opted-out of it. The only action we need is to check the appropriate custom checkbox that relates to this list.

One thing to note here is I decided that the box being checked would mean they have Opted-Out. I decided this as if you decided to have these fields next to the standard Salesforce fields like Do Not Call and Email Opt Out I wanted the user experience to be the same (i.e. if all boxes were unchecked, they are ok to be contacted and vice versa).

Step 5: Processes on the Marketing Preferences Object

We are now at a point where a contact can set their preferences on your Pardot preferences page, which in turn sets a field in Salesforce to true or false. As much as this shows a user if they can contact someone and what about, it doesn’t necessarily make compliance happy. This is where the Marketing Preference object comes into it.

With a little bit of Process Builder magic, we can create records that show exactly when someone opted-in or out.

A process needs to be created on both the Contact and Lead objects if you want to record preferences against both. When creating the process make sure the option when a record is created or edited is selected as we obviously don’t want this to fire only on newly created records.

I’m going to use the example of Newsletter preferences.

For the conditions, we need to select the Newsletter checkbox field we created, and specify that the condition is this field value being changed (ISCHANGED). This is important to ensure that the process will only fire if the field was changed from True to False (or vice versa). The second condition will again use the Newsletter checkbox field, and fire if the field is changed to/from True and False.

The action is to create a Marketing Preference record.

  • Action type: Create a record
  • Record type: select ‘Marketing Preference’
  • Set field values: Now we pre-set the fields based on those already in the Contact or Lead record. You can be as detailed with this as you want to be! Feel free to use the image below for some ideas:

One important note here is for the Preference Change Date field, we use a formula of NOW(); this will ensure that it is time-stamped with the exact time and date of when the change is made.

Take this Process Builder further by creating nodes for the standard Salesforce Do Not Call and Email Opt Out fields to that records are created when these are changed, giving the end-user a true reflection of their customer’s preferences.


This is how I built a preference center that works well with both Salesforce and Pardot, plus, one that can cover multiple different channels, such as email, phone, and SMS.

There is a real need in any organisation to ensure you are properly recording any communication preferences and adhering to them, especially with GDPR and CCPA recently coming into effect. I hope this post has shown you what’s possible.

The Author

Andrew Cook

Andrew is a Salesforce Technical Instructor at Salesforce Ben. He is 14x certified and has worked in the ecosystem for 12 years.

Leave a Reply