Getting a birthday workflow to work

  1. Create a "Birthday Notification Date" field.
  2. Create a Workflow with a Workflow Field Update that checks for an entered birthday and updates the Birthday Notification Date field with the correct value.
  3. Create a Time Based Workflow rule that fires on the Birthday Notification Date field, sends the email, and clears the field.

    • Make sure that "recursive mode" is enabled for both workflows.

How it works:

  1. User creates or updates a contact with a birthday.
  2. The notification field is populated from Workflow Rule #1.
  3. The update from the previous step recursively calls Workflow Rule #2 to lock the notification into the Time Based Workflow queue.
  4. The user is notified when Workflow Rule #2 performs its delayed actions.
  5. The field update from Workflow Rule #2 will recursively call Workflow #1, updating the notification date for the next year.
  6. The cycle repeats from step 2.

The appropriate formula for the notification update value would be:

DATE(
YEAR(TODAY())+
IF(
    DATE(YEAR(TODAY()), MONTH(BirthDate), DAY(BirthDate))-10<TODAY(),1,0), 
MONTH(BirthDate), 
DAY(BirthDate))-10

Also, it should be noted that you'll have to perform an update on all contacts at least once (batch update) to queue the notifications.

Edit Updated formula after sanity check.

Edit Does not include February 29th individuals. If that's a concern, one additional check would be needed to bump the date back a day for non-leap years.