Skip to content

Birthday or anniversary

From a real engagement · 2026-10-22 Base playbook: every workspace

Sends a birthday (or joining-anniversary) message on the day, every year, in your time zone. Optionally gives a team a short list of today's birthdays to call.

  • You keep a birthday, a joining date or another yearly date on each profile.
  • A personal message on the day fits your relationship with people.
HowWhat
A form people fill inA birthday question (month and day) on any form you already use.
A Google Sheet or Excel file, syncedOr a synced sheet or CSV with a birthday column.
KindNameWhat it doesLands
Team‹Call team›Calls people on their day.Empty
Segmentbirthday todayEveryone whose date falls on today's month and day, in your time zone.Ready
TemplateHappy birthday (email)The birthday or anniversary email.Ready
TemplateHappy birthday (SMS)The birthday or anniversary SMS.Ready
Follow-upHappy birthdayEvery day at the send time, the message to everyone in today's segment.Off
#QuestionDefaultFills in
1What should messages call your organisation?none, must answerorg_name
2Is this for birthdays or for an anniversary (like the date someone joined)?birthdayoccasion
3Which trait holds the date? Year-less dates (month and day) work too.birthdaydate_trait
4What time of day should it go out?
07:00 or later. The segment refreshes within about an hour after local midnight, and the date check uses the segment's time zone (a step condition would use UTC).
08:00send_time
5Send an SMS as well as the email?Nosend_sms
6Should a team get a task to call each person? Which team? (leave empty for no calls)empty: skippedcall_team

These have defaults. Change any that don’t fit.

SettingDefaultKey
Sender address‹workspace default_sender›email_from
Time zone ("today" starts at local midnight)‹workspace timezone›timezone
Greeting when a first name is missingfriendgreeting_fallback
  • Every day at 08:00 in ‹workspace timezone›, everyone whose birthday falls on today's month and day gets the message.
  • Each person gets it at most once a year (a 300-day cooldown, as the calendar's own birthday journeys use). 29 February birthdays are celebrated on 1 March in other years.
ChannelNeeded forBefore it can send
emailThe birthday emailA verified sending domain for ‹workspace default_sender›.
smsThe birthday SMS (optional)An SMS provider, or Origamy managed SMS after business verification (KYC).
  1. Fill birthday on profiles. A form date question set to month and day only saves it without the year, plus birth_month and birth_day.
  2. Verify the sending domain; for SMS, connect a provider or finish business verification.
  3. Switch the follow-up on, and check the segment on a day you know someone has a birthday. A follow-up only runs once it's on, so test with a test person whose date is today.
  • Don’t compare full dates. A rule like “date of birth before 1 November and after 30 September” compares the year too, so it matched nobody. “Same day of the year” ignores the year.
  • Set the time zone on the condition. “Today” starts at midnight in that zone. The segment refreshes within about an hour after midnight, so send at 07:00 or later.
  • Year-less dates work. A form date question set to month and day saves MM-DD.

The request used to test the copilot on this playbook (a live eval):

Send everyone a happy birthday email at 8am on their birthday, in Lagos time. The birthday is in the date_of_birth trait. Only once a year per person.

It passes when every piece is a valid draft and everything lands off, with at least: segment, workflow, message_template.