How to Send Birthday Campaigns with Pardot

Share this article...

Birthday campaigns are a way marketers can touch prospects on their special day; even just a simple greeting with a discount makes an impact. It’s the unexpected things you do that gets your brand noticed.

Question is: how can you fully automate this process? This has been on my mind, as I just celebrated my birthday this past weekend, so I wrote this post to walk you through the set up. You will learn how to get the data into the correct format, and build the Pardot automation that will drive the celebratory messages.

“Salesforce”

Note on Pre-requisites – before we start, I am assuming that you have a birthdate field in Salesforce already set up.

Step 1: Transform Birthdate to Birthday

This first step will use Salesforce automation to turn the birthdate (the actual day they were born), to their birthday (the day and month, this year).

Birthdate is a standard field on Contacts.

First, create a new custom field on the contact object. This custom field needs to have a field type of ‘date’.

Call it ‘Birthday’ or ‘Next Birthday’.

On Step 4 of the field create wizard, deselect all the page layouts listed. You don’t need to add the field to any page layouts, because it is only an operational field – for behind the scenes work.

Now, open up Process Builder.

Before you go any further – if you are not the Salesforce Admin, check in with your Admin about creating this process. It is best to combine processes wherever possible, especially as Salesforce can get overwhelmed when trying to execute multiple processes at once.

Here is what I named my new process. For “The process starts when*” dropdown, select ‘When a record changes’:

Once you’re into the Process Builder, click ‘+ Add Object’. The sidebar will appear.

  • Select ‘Contact’
  • Start the process = “when a record is created or edited”
  • Select the checkbox in the advanced collapsable section

Click ‘+ Add Criteria’. The sidebar will appear.

  • Criteria Name should be descriptive, for example: “Change Birthdate – current year”*
  • Criteria for Executing Actions = “Conditions are met”
  • Set Conditions, click ‘Find a field’

*you will see why later!

A window will appear, where you need to search for the birthdate field, then click ‘choose’.

Once you have returned to the main screen, select the following:

  • Next to Birthdate: ‘Is null’ — Boolean — True
  • Click ‘Find a field’, and select the ‘Birthday’ or ‘Next Birthday’ field you created earlier.
  • Next to Birthday/Next Birthday: ‘Is null’ — Boolean — True
  • ‘Find a field’, and select the ‘Birthdate’ once again.
  • Next to Birthdate: ‘Is changed’ — Boolean — True

It should look like the below images:

  • Conditions, select “Customize the logic”
  • Paste this into the Logic box that appears below: (1 AND 2) OR 3

What you have just told Salesforce to do is take action when:

  • The contact has a Birthdate*, but the contact has no Birthday (*Note the double negative!)
  • Or, when the Birthdate is changed

This is the finished product:

Let’s get to the action!

Click ‘+ Add Action’. The sidebar will appear.

  • Action Type = “Update Records”
  • Action Name = “Update Birthday” (or anything you fancy)
  • Record Type = “Select the Contact record that started your process”

 

  • Criteria for Updating Records = “No criteria—just update the records!”

Scroll down to the “Select and Define Action” section.

  • Click ‘Find a field’, and select the ‘Birthday’ or ‘Next Birthday’ field you created earlier.
  • Type = Formula
  • Click ‘Build a formula’. The formula editor will appear. Copy and paste the below into the box.
  • Finally, click ‘Use this formula’, then Save.

IF (AND(MONTH([Contact].Birthdate)=2,DAY([Contact].Birthdate)=29),
IF (OR(MOD( YEAR(TODAY()), 400 ) = 0,AND(MOD( YEAR(TODAY()), 4 ) = 0, MOD( YEAR(TODAY()), 100 ) != 0)),
IF (DATE(YEAR(TODAY()), 2, 29) > TODAY(),
DATE(YEAR(TODAY()), 2, 29),
DATE(YEAR(TODAY())+1, 2, 28)
),
IF (DATE(YEAR(TODAY()), 2, 28) > TODAY(),
DATE(YEAR(TODAY()), 2, 28),
IF (OR(MOD( YEAR(TODAY())+1, 400 ) = 0,AND(MOD( YEAR(TODAY())+1, 4 ) = 0, MOD( YEAR(TODAY())+1, 100 ) != 0)),
DATE(YEAR(TODAY())+1, 2, 29),
DATE(YEAR(TODAY())+1, 2, 28)
)
)
),
IF (
DATE(YEAR(TODAY()), MONTH([Contact].Birthdate),DAY([Contact].Birthdate ))>TODAY(),
DATE(YEAR(TODAY()), MONTH([Contact].Birthdate),DAY([Contact].Birthdate )),
DATE(YEAR(TODAY())+1, MONTH([Contact].Birthdate),DAY([Contact].Birthdate ))
)
)

NB: you will need to add the name of your custom field, which may be different to mine above! Search for your field name using the ‘Insert’ boxes on the formula editor – you can see this highlighted in the image above.

Note on Leads: remember I said Birthdate is a standard field on Contacts? If you want to roll this campaign out to your Lead database too, then there’s an extra step involved to create the Birthdate field for leads.

Step 2: Test the Birthdate to Birthday Automation

Go to a test record, insert or change the birthdate, and watch the birthday field populate when saved.

Step 3: Create & Map a Pardot Custom Field

In Pardot, name the field and map it to your Salesforce Birthday field. When you reach Sync Behavior, chose If Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value; this is because the Salesforce formula will be responsible for changing the birthday date, year by year. Finally, make sure you select Date type – this will open up the correct Pardot automation choices in the next step.

Step 4: Create the Segment

By using an Automation Rule, you can single out anyone with a birthday today (the criteria), and send them the birthday email (the action).

An Automation Rule is my preferred option, because you can set the criteria and action in one place. Here is how the criteria should be set:

Match all:
Prospect custom field — [Birthday] — days ago greater than or equal to — 0
Prospect custom field — [Birthday] — days in future less than or equal to — 0

This is telling Pardot to include anyone whose birthday date is less than 1 day away, and less than 1 day ago – in short, today.

If you want to make your birthday campaign into a longer sequence of emails, create a dynamic list using the same criteria (image below). Later, you can use this as the starting point of an Engagement Studio program.

Step 5: Add the Email Automation

The next section on the Automation Rule is the Action section. For this one-shot email, we can use the ‘Send prospect email’ action. Note that your email has to be an email template, otherwise it will not show up to select.

Step 6: Reset Birthday To Next Year

Hop back into your Process Builder – there’s one last thing to add!

Click on the ‘+ Add Criteria’ diamond, the sidebar will appear.

Criteria Name should be descriptive, for example: “Change Birthday – next year”
Criteria for Executing Actions = “Conditions are met”
Set Conditions, click ‘Find a field’, and select the Birthday field.

Change the operator to ‘does not equal’.
Set the type as ‘Formula’
Copy and paste this formula into the formula editor:

PRIORVALUE([Contact].Birthday__c )

Click ‘Use this Formula’ to confirm.
Then, scroll down the page, and select the checkbox in the advanced collapsable section:

We are now going to create a scheduled action. You can see the ‘Set Schedule’ button in the image below.

The sidebar will appear, where you “Set Time for Actions to Execute”: 1 days after birthdate.

Click ‘+ Add Action’, and the sidebar will appear.

Then repeat the same as before! I’ve pasted it all below to save you scrolling up.

  • Action Type = “Update Records”
  • Action Name = “Update Birthday – next year” (or anything you fancy)
  • Record Type = “Select the Contact record that started your process”

 

  • Criteria for Updating Records = “No criteria—just update the records!”

Scroll down to the “Select and Define Action” section.

  • Click ‘Find a field’, and select the ‘Birthday’ or ‘Next Birthday’ field you created earlier.
  • Type = Formula
  • Click ‘Build a formula’. The formula editor will appear. Copy and paste the below into the box.
  • Finally, click ‘Use this formula’, then Save.

IF (AND(MONTH([Contact].Birthdate)=2,DAY([Contact].Birthdate)=29),
IF (OR(MOD( YEAR(TODAY()), 400 ) = 0,AND(MOD( YEAR(TODAY()), 4 ) = 0, MOD( YEAR(TODAY()), 100 ) != 0)),
IF (DATE(YEAR(TODAY()), 2, 29) > TODAY(),
DATE(YEAR(TODAY()), 2, 29),
DATE(YEAR(TODAY())+1, 2, 28)
),
IF (DATE(YEAR(TODAY()), 2, 28) > TODAY(),
DATE(YEAR(TODAY()), 2, 28),
IF (OR(MOD( YEAR(TODAY())+1, 400 ) = 0,AND(MOD( YEAR(TODAY())+1, 4 ) = 0, MOD( YEAR(TODAY())+1, 100 ) != 0)),
DATE(YEAR(TODAY())+1, 2, 29),
DATE(YEAR(TODAY())+1, 2, 28)
)
)
),
IF (
DATE(YEAR(TODAY()), MONTH([Contact].Birthdate),DAY([Contact].Birthdate ))>TODAY(),
DATE(YEAR(TODAY()), MONTH([Contact].Birthdate),DAY([Contact].Birthdate )),
DATE(YEAR(TODAY())+1, MONTH([Contact].Birthdate),DAY([Contact].Birthdate ))
)
)

Step 7: Evaluate Next Criteria

Ensure that the ‘Stop’ button at the end of the first line (known as an action group) is changed to ‘Evaluate the next criteria’. Do this by clicking on it:

Summary

This post has taken you through how to build a birthday campaign in Pardot, step-by-step. You will have fully automated this process, including getting the data into the correct format, and build the Pardot automation that will drive the celebratory messages. Perhaps after this post is published, Pardot prospects all over will be showered by birthday messages!

Credit to Lara Black for her answer on the Pardot B2B Marketing Automation Trailblazer Community Group, which inspired this post.

10 thoughts on “How to Send Birthday Campaigns with Pardot

  1. Sébastien de Heaulme

    Reply

    Thank you for this complete post. I have read it more than 10 times but there is still something I don’t undersand. A process builder is launched when a record is created or modified. Thus in you post the Birthday will be calculated at the creation. But it won’t work more than once. If there is no modification in the contact record for 1 year, i will miss next birthday.

    1. Hi Sebastien, thanks for pointing that out – I’ve updated the post with steps 6 & 7 to ensure the date is reset to the next birthday. Let me know your thoughts!

  2. Copy/pasting the formula you have into the Process Builder yields a syntax error.

    The formula expression is invalid: Syntax error. Missing ‘=’

    I have no idea where it is. Could you provide a corrected formula?

    Thanks!

    1. Hi Matt, thanks for letting me know – I repasted the formula that I have working in my org. Do you mind trying again please?

  3. Hi,

    I’ve followed your step by step for adding Birthday date on Salesforce, adapted the fields to our owns in the formula. It should be working, but it’s not…The record itself is a person account, working with contact fields and the contact record on the process builder should not be an issue in itself no?

    Looking forward to solving this with your help if possible !

    Thanks

    1. Hi Pierre, thanks for your comment, and what a challenge to be confronted with! Let me take this away and have a look into it…person accounts are a weird object 🙂

      1. Hi Lucy, I’ve decided to go with a formula field instead, the only thing is that the birthday year will be updated only once per year for every record on January 1st with the YEAR(TODAY()) change. But that will still work just fine for us -> and much easier to implement since the formula is basically one line 🙂

        1. Hi Lucy and Pierre!

          This is a super helpful article, however like Pierre I am using PersonAccounts and not just contacts. Did you find a solution Lucy?

          Also Pierre, are you able to share the workaround you came up with?

          Many thanks in advance

  4. Thank you for providing these steps! This is so incredibly helpful. One question and one fix to an error.

    1. How do you update all current records in bulk now that we have the process builder set up?

    2. Under step 1, you state:

    Once you have returned to the main screen, select the following:

    Next to Birthdate: ‘Is null’ — Boolean — True
    Click ‘Find a field’, and select the ‘Birthday’ or ‘Next Birthday’ field you created earlier.
    Next to Birthday/Next Birthday: ‘Is null’ — Boolean — True
    ‘Find a field’, and select the ‘Birthdate’ once again.
    Next to Birthdate: ‘Is changed’ — Boolean — True

    The first “Boolean — True” should be “Boolean — False” I believe.

    Thanks so much!
    Laura

    1. Hi Laura,

      1. very good question! How you should do this is:
      -create a temporary checkbox field (on Contact and Lead)
      -Export all the Contact/Lead records (including the Contact/Lead IDs)
      -Use Dataloader to do mass update and check the temporary checkbox on all those records.
      -Salesforce will consider this record as edited, so will trigger your process and updates old records

      2. Oh, double negatives make my head spin sometimes. Thank I will take a closer look at this.

      Best,
      Lucy

Add Comment