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.


    April 02, 2020 9:04 pm
    Is it possible with Pardot Growth edition without custom object add-on
    Lucy Mazalon
    April 06, 2020 8:15 am
    Hi Saurabh, it will still be possible on Growth edition because the custom objects are Salesforce custom objects, not Pardot. Let us know how you get on with building the solution for yourself!
    Jon Edwards
    June 23, 2020 5:27 pm
    Really good article. Does the process builder not need to evaluate the next criteria to catch multiple changes to preferences in one record save?
    August 07, 2020 7:47 am
    Well, is this really a solution? If there are some more preferences and some more countries with different preferences, how you handle automation rule limitations? You can't use all your automations just for the preference center. Currently I am facing issues with preference centers also because of the "value is better than null" >> feature <<.
    October 06, 2020 11:39 pm
    That was my thought, too. If there are independent lists that prospects can opt in/out of, it seems like there would need to be a condition for every permutation.
    January 28, 2021 9:12 am
    Hi Andrew and Lucy! Thanks for the great Article. Indeed very insightful. One questions and one Article requests: - We tried to build an comms prefs Centre with a related object (like you did here) - however we were getting into real trouble with duplicate contact records and what happens when you merge them. You end up with 2 related preference records, which one wins, you have to merge those too... it was a nightmare. Any comment on this specific problem and how to avoid this? (Some people say a junction object with master-detail relationship etc might be better, however seems even more complex). Any thoughts? - And my article suggestion: Could you please do a tutorial with Marketing Cloud instead of Pardon? Like “Advanced preference Centre with Marketing Cloud and Salesforce” :-) Thanks heaps and keep up the good work!
    January 28, 2022 3:11 pm
    I have the same question as Hendrik, I am beginning to think through a design/solution but Duplicates and Merges will 100% happen and we also want them to be automated. I am also interested in the Marketing Cloud angle as well. Basically echoing Hendrik and all his comments.
    January 28, 2022 3:13 pm
    Hey Hendrik - Since it has been a year, did you find a way to solve for your questions. I am in the same boat and trying to solution a full-proof way of handling
    October 19, 2022 8:30 am
    Any update on Peter's comment above, regarding multiple preference options? We're looking at 50+ preferences, it's not realistic to create automations for each one.
    June 19, 2023 1:57 am
    We've recently implemented this and I'm wondering how you would manage the flow the other way? For example if our team update someone's preferences in Salesforce, that field will of course update in Engagement BUT the prospect will still be on the EPC public list. Presumably this will break the automation as they can't then unsubscribe again, and it will re-trigger the automation to opt them out again??). Should I build an automation to go the other way to cover this, or add to the existing automation to remove the prospect from that list once the SF field has been updated? (although how would I stop it from going in an infinite loop??)

Leave a Reply