> This page is part of the [Customer.io documentation](https://docs.customer.io). For the complete index, see [llms.txt](https://docs.customer.io/llms.txt).
> Last updated: July 15, 2026

# Birthday and Anniversary Automations

## Introduction

Sending messages on birthdays, anniversaries, and other recurring dates is a great way of keeping customers engaged with your company throughout the year. Customer.io makes this simple. Let’s get started sending your customers a birthday discount, celebrating their time as a customer, or reminding them of something that reccurs on a long time scale.

This recipe documents a yearly anniversary automation, but the same steps work for any type of date.

## Ingredients

*   A date of each profile’s anniversary stored in an attribute on their profile

 Do not send zero as a value for your date field

Ensure that your system does not send zero (0) or other false default values for profiles when you do not have an actual date for them. Incorrect date values may still be interpreted by our system and may cause your automation to send messages you do not want to send.

For example, zero (0), as a timestamp, is equal to January 1, 1970, 0:00:00 which will cause yearly automations to trigger every January 1st and monthly automations to trigger on the first of every month.

## Method

### Storing the attribute

If you already have the date attribute stored on the profiles in your account, then you can skip this step.

When you create a new person in Customer.io, you can store their anniversary or birthday date as one of their attributes. This is an example of how you might do that with the `_cio.identify()` function in the JavaScript snippet:

```fallback
<script type="text/javascript">
    _cio.identify({
        id: '1899', // must be unique per customer
        email:      'john@example.com',
        created_at: 1743259962,

        // Custom user attributes
        first_name:  'John',
        plan_name:  'free',
        anniversary_date: 1481067323
    });
</script>
```

Here, I’ve used `anniversary_date` but you can name this date attribute however you like. Note, we are using UNIX timestamps in this recipe.

Once the `anniversary_date` attribute has been added, when you check out this person in Customer.io, their attributes look like this:

[![image.png](https://docs.customer.io/images/image%28395%29.png)](#d3ab074d70331012d059a5c6475f0ea7-lightbox)

### Create the automation

You will use this `anniversary_date` attribute as the trigger for your automation. Customer.io will use the month and day from this attribute to trigger the automation once per year.

1.  From **Automations**, click **Create Automation**.
2.  Click **Choose trigger**.
3.  Select **Important date** as the trigger type.
4.  Pick `anniversary_date` from the date attribute dropdown.
5.  Set the desired time of day to trigger the automation. Click **Save**.
    
    [![recipe_anniversary](https://docs.customer.io/images/recipe_anniversary-1.png)](#ab8a65018a5f7378e425405c91ea7f1a-lightbox)
    
     We recommend setting this to midnight in the [user’s time zone](/messaging/send/timezones/match)
    
    If someone just signed up and their `anniversary_date` is a timestamp today at 11am and your automation triggers at 12pm, then that profile would enter your anniversary automation. This may be desired if it’s a birthday automation! But wouldn’t make sense for an anniversary automation that’s meant to be sent yearly. Midnight in the user’s time zone ensures the trigger time will most likely have passed when the profile signs up and will schedule them for NEXT year’s occurrence.
    
6.  Scroll down to *Frequency* on the trigger panel. Choose **Yearly** from the dropdown so this automation sends yearly on your customer’s anniversary date. Click **Save**.
    
    [![recipe_anniversary-2.png](https://docs.customer.io/images/recipe_anniversary-2.png)](#ab34d0e7440da499daea17efd9646b95-lightbox)
    
7.  If you set the trigger to midnight in a user’s time zone, then drag a **Time Window** onto your workflow. Set this to the time of day you want to reach your audience.
8.  Drag a message block into your workflow and add your content. Remember to update the [sending behavior](/messaging/send/timezones/queue-draft/) to **Send automatically** so you don’t have to manually send drafts.
9.  Review and start your automation.

## Wrap Up

This recipe covered the basics, but you can also:

*   Choose to send the automation a certain number of days before or after the anniverary date. For instance, if you want to give 3 days of notice for a promotion they can use on their anniversary.
*   Build a countdown workflow leading up to a date. Follow this same recipe, but use Delays in your workflow to create a drip of messages.
*   Send messages for events that occur monthly rather then yearly. In this case, Customer.io will use only the day of the month as the recurrence criteria.

If you need any additional help setting up your automation, please [get in touch](https://customer.io/contact/) and we’ll be happy to help!

*   *   [Introduction](#introduction)
    *   [Ingredients](#ingredients)
    *   [Method](#method)
        *   [Storing the attribute](#storing-the-attribute)
        *   [Create the automation](#create-the-automation)
    *   [Wrap Up](#wrap-up)

Copy page

Copy page [Download .md](/messaging/send/recipes/birthday-and-anniversary-automations.md)

Is this page helpful?

![](https://docs.customer.io/images/export-success.png) ![](https://docs.customer.io/images/export-failure.png)

# How can we make it better?

Close

Do you need help from Customer.io support?  No  
 Yes

What part of Customer.io do you need help with? 

How can we improve this page?

Email (optional):  Please provide a valid email address

 I am not a bot

 

We appreciate your feedback!

Our support team will contact you as soon as possible
