Birthday and Anniversary Campaigns

Birthday and Anniversary Campaigns


A great way to utilize personalization in is to send messaging on Birthdays and Anniversaries. Send your users a nice birthday offer, celebrate their time as a customer, or just remind them of something that re-occurs on a long time scale.

The setup for this is slightly technical, requiring you to send in attributes into as a UNIX timestamp for the birthday or anniversary date you'll be tracking.


  • Ability to send attributes to
  • Knowledge of Liquid templating


Storing the attribute

When you create a new end user in, you can store their anniversary or birthday date as part of their attributes. This is an example of how you might do that with the _cio.identify() function in the Javascript snippet:

<script type="text/javascript">
        id: '189', // must be unique per customer
        email:      '',
        created_at: 1743259962,
        // Custom user attributes
        first_name:  'Johann',
        plan_name:  'free',
        anniversary_date: 1481067323

Here, I’ve used anniversary_date but you can define this date attribute however you like.

Now when you check out this person in, their attributes look like this:

Build the segment

Next, create a segment with the condition "anniversary_date is a timestamp before 0 days from now". This segment will now pay attention to the date/time in the timestamp you’ve set in that attribute.

"anniversary_date is a timestamp before 0 days from now" means that the anniversary date is a value before right now, so people will enter the segment when that statement becomes true which will be slightly after that date has come to pass. This rule is required to allow the customer to exit and re-enter the segment once we update the anniversary date.

Create the campaign

You will use this new Customer Anniversary segment as a trigger in a Segment Triggered campaign.

Add a message to your campaign workflow with your birthday or anniversary content. will automatically match a user when the anniversary date/time occurs.

“But, won’t this only work once?” you ask. That’s right, until we add our next step:

Make your campaign recurring

Now that your basic campaign is set up, we’ll need a way to update your user's attribute to a new value by adding a year to it for a birthday, or increasing it by whatever interval fits your recurring anniversary. We'll do this by using the Attribute Update action in the workflow.

After your first anniversary message in the workflow, click on "Add action" and then on "Attribute Update". Give the attribute action a name that best describes what it does, like “Update Birthday Timestamp”.

In the Attribute Name field of the composer, choose your attribute anniversary_date.

In the Attribute Value field, enter the new value for your attribute. In our case, we want to set our customer’s account anniversary to one year from now. We can do this with Liquid and timestamps: {{ customer.anniversary_date | add_year }}.

The add_yearfilter adds one year to the existing value (leap years considered).

Once you save your action, your workflow should look like this:

Now every year on the anniversary date: your customer will receive their anniversary email and will reset the timestamp for another year (or your chosen interval) in the future.

Wrap Up

Birthday campaigns are a great way to keep in touch with your customer. If you’ve found a cool use case for Anniversary/Birthday campaigns or you need some help setting it up, get in touch and we’ll be happy to help!

Was this article helpful?