Skip to main content

Birthday Flows and Campaigns

Flows (Marketing Automation)

Written by BeyondCart

Last updated: May 2026 Category: Flows (Marketing Automation)

Overview

Birthday-triggered flows are one of the highest-engagement automations you can run. The customer feels seen, the message is timely, and a small discount feels like a gift rather than a sales pitch.

BeyondCart fires a built-in Birthday Today event for every customer whose birthday matches the current date in your store's local timezone. You can hook into that event in a flow, attach a custom discount, and deliver a push notification — all hands-off.

Prerequisites

  • Customers must have entered their birthday from the mobile app's profile screen. See Birthday Capture and Targeting for how the data is collected.

  • Your site must have a timezone set in Site Settings so that birthdays fire at the right time of day in your customers' local mornings.

How the Birthday Trigger Works

Every hour, BeyondCart checks every site for customers whose birthday matches today in your site's local timezone. When a match is found, it emits a Birthday Today event for that customer, which any active flow with the Birthday trigger picks up.

A few things to know:

  • The event fires once per customer per year (BeyondCart locks each site/day combination internally to prevent double-fires from server restarts).

  • It fires shortly after midnight in your store's timezone. In practice, it lands within an hour of local midnight.

  • You should add a Delay node if you want the message to arrive at a sensible hour (e.g., 10am instead of 12:30am).

  • Feb 29 birthdays are sent on Feb 28 in non-leap years, so customers born on the leap day still hear from you every year.

Building a Birthday Flow

Option 1 — Simple birthday wish

Best for stores that want to send a thoughtful message without giving away margin.

[Trigger: Birthday Today]
        ↓
[Delay: 10 hours]                ← fires around 10am local time
        ↓
[Push: "Happy birthday, {{user.firstName}}! 🎂"]

[Screenshot: Flow canvas showing the simple birthday wish]

Option 2 — Birthday with a discount code

Recommended for most stores. Each customer gets a unique, single-use Shopify discount code generated on the fly.

[Trigger: Birthday Today]
        ↓
[Delay: 10 hours]
        ↓
[Create Discount: 20% off, expires in 7 days]
        ↓
[Push: "Happy birthday, {{user.firstName}}! Use {{discount.code}} for 20% off"]

[Screenshot: Flow canvas showing the birthday-with-discount flow]

The Create Discount node generates a unique Shopify code per customer and exposes it as {{discount.code}} for use in the push body. Set the expiry to a window that creates urgency without feeling pushy — 7 days is the sweet spot.

Option 3 — Different gift for VIPs vs. new customers

Use an IF node to give your repeat buyers something more meaningful.

[Trigger: Birthday Today]
        ↓
[Delay: 10 hours]
        ↓
[If: Is Paying Customer]
    True ↓                       False ↓
[Create Discount: 25% off]    [Push: generic birthday wish]
        ↓
[Push: "Happy birthday! Here is 25% off, just for you: {{discount.code}}"]

Useful Variables

The following variables are available in birthday flows:

Variable

Description

{{user.firstName}}

Customer's first name from their Shopify profile.

{{user.lastName}}

Customer's last name.

{{discount.code}}

The unique discount code generated by the Create Discount node.

{{discount.value}}

The discount value (e.g., "20%" or "$10").

{{discount.expiresAt}}

When the code expires.

See the Variables Reference (if available) for the complete list.

Deep Linking from a Birthday Push

You can drop the customer straight into a relevant screen when they tap the push:

  • Loyalty / Birthday landing pagebeyondcart://pages/birthday

  • Recommended productsbeyondcart://recommendations

  • A specific bundlebeyondcart://bundle-builder

  • A specific collectionbeyondcart://collections/{collectionHandle}

Configure the deep link in the Push Notification node's "Action" field.

One-Off Birthday Campaigns vs. Always-On Flows

There are two ways to run birthday outreach in BeyondCart:

  • An always-on flow with the Birthday Today trigger — fires every day for the right customers, set it up once. Recommended for everyone.

  • A one-off campaign targeting a Birthday segment (e.g., "Birthday this week") — useful if you want to plan a single dated send rather than an automation.

For campaign-based birthday outreach see Targeting Segments and pair it with the Birthday segment.

Tips and Best Practices

  • Send at 10am local. Birthday messages perform best mid-morning, when customers are awake and not yet flooded with work email.

  • Personalize the greeting. {{user.firstName}} boosts open rates noticeably.

  • Cap the discount window. 5–7 days creates urgency without feeling like a flash sale.

  • Don't double up. Pick either the always-on flow or a one-off campaign for any given birthday window — running both means customers get two messages for the same event.

  • Test once with your own account. Set your own birthday to today in the app, activate the flow, and verify the push arrives looking the way you expect.

FAQ

Q: What if a customer hasn't entered their birthday? A: They will not be matched and the flow will not fire for them. Use the "Has birthday on file" segment rule to measure how many customers you can reach.

Q: Can I use this for a birthday week (not just the day)? A: Yes — use a campaign targeted at the "Birthday in next 7 days" segment instead of the always-on Birthday Today trigger. See Birthday Capture and Targeting.

Q: Will the discount code work after the customer's birthday? A: That depends on the expiry you set in the Create Discount node. The code is valid until that expiry regardless of the calendar date.

Q: What happens to Feb 29 birthdays in non-leap years? A: They are automatically rolled to Feb 28, so those customers always hear from you in February.

Related Articles

Did this answer your question?