Build an Advanced Preference Center With Pardot and Salesforce
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.
Is it possible with Pardot Growth edition without custom object add-on
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!
Really good article. Does the process builder not need to evaluate the next criteria to catch multiple changes to preferences in one record save?
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.
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 <<.
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!
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
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.
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.