# Birthday treat: dessert on the house

> Store the date of birth in a Date field, filter with Equals today and Birthdate mode, and send every day at 09:00 in a Recurring campaign. With Allow Lead Re-entry and a 300-day cooldown, each customer gets the birthday message once a year.

Fonte: https://wiki.bip.marketing/en-us/birthday · Atualizado: 2026-10-08

<UseCaseMeta effort="nocode" channel="whatsapp,email" plan="lite" />

Every day at 9 a.m., each customer who has a birthday gets a happy-birthday message from Padaria Aurora with a dessert on the house, and nobody on your team has to remember.

<Checklist items="WhatsApp connected to BIP (paid plans) or, for email only, any plan|A spreadsheet of your customers with name, phone or email, and date of birth|Each customer's city, if you only want to reach people who live nearby|A WhatsApp template approved in the Marketing category (the text is ready below)|A house dessert and a fixed coupon, such as BDAYWHATS" />

## What you'll get

- Birthday wishes on the right day, every day, at the time you choose, with no birthday list taped to the wall.
- One message a year for each customer: never forgotten, never repeated.
- A reason for customers to come back during their birthday week, with dessert on the house.
- Only people who live nearby, if you want: customers in cities within 30 km of the bakery.
- A small draw on your balance each day: each run counts only that day's birthdays.

## How it works

<Steps items="Store each customer's date of birth in a Date field|Every day at 9 a.m., BIP finds whose birthday is today|Each of them gets the birthday message with dessert, once a year" />

The recipe has three parts:

- **The _Date of birth_ field**, of type **Date**. This is where **Birthdate** mode works: BIP compares only the day and month and ignores the year.
- **The _Today's birthdays_ segment**, with the date **Equals** today. BIP recalculates the segment on every campaign run, so each day it brings in the right people.
- **The Recurring campaign**, **Daily** at 09:00, with **Allow Lead Re-entry** on. Without re-entry, each customer gets the campaign once in a lifetime, and the following year there's no birthday message.

Each campaign uses one channel. Here, the main path is WhatsApp; the email is ready in [Ready to copy](#ready-to-copy) and in [Variations](#variations).

On BIP Lite, each run reserves the segment's count at that moment from the month's balance. Since the segment holds only that day's birthdays, each run uses very little. If the balance doesn't cover everyone, that day's run doesn't go out: nobody receives part of the campaign.

## Step by step

### 1. Create the date and city fields

1. In **Settings** → **General**, go to **Fields** and click **Add Field**.
2. In **Field Type**, choose **Date**. In **Field Name**, type _Date of birth_ and click **Save**.
3. Click **Add Field** again, choose **Location**, type _City_ and click **Save**.

The _City_ field is what lets you filter by region. **First / Last Location** stays empty for anyone who comes in through a spreadsheet or the API; a **Location** field stores the city from your spreadsheet.

<Shot src="/img/aniversario/1-en-us.png" alt="Custom fields Date of birth, of type Date, and City, of type Location, in Settings" url="dash.bip.marketing/…/settings" />

### 2. Bring in your customers with their date of birth

1. In **Leads**, click **Import Leads** and upload the spreadsheet. The template is in [Ready to copy](#ready-to-copy).
2. In **Map Columns**, link the date column to _Date of birth_ and the city column to _City_, under **Custom Fields**.
3. In **Validate Data**, leave **Default Country Code** set to Brazil (+55) and, in **Tags**, add the batch tag, such as `aurora-customers`.
4. Click **Next Step**, then **Import _N_ Record(s)**, and wait for **Import Complete**.

Write the date as dd/mm/yyyy (day first) or yyyy-mm-dd, and the city with the state, like `Curitiba, PR`. If your list only has the day and month, fill in any year, such as `2000`: **Birthdate** mode ignores the year. Anyone already in BIP with the same email or phone is updated, not duplicated.

<Shot src="/img/aniversario/2-en-us.png" alt="Map Columns step with the date and city columns linked to the custom fields" url="dash.bip.marketing/…/leads/import" />

### 3. Build the segment of today's birthdays

1. In **Segments**, click **New Segment**. In **Settings**, set the **Name** to _Today's birthdays · WhatsApp_ and click **Save**.
2. Click **0 filter(s) selected** to open the **Filter Editor**. Click **Add Criteria** → **Field** and choose _Date of birth_.
3. In **Operator**, choose **Equals**.
4. Click **Value**. In **Date Mode**, switch on **Relative**. Leave **Relative Time** at `0` **Days** and switch on **Birthdate**. **GMT Offset** already comes with the account's time zone: for Brasília, `-03:00`. **Preview** shows only the day and month, and **Value** now shows **Today**.
5. Click **Add Criteria** → **Field** → _City_ **(Geo)**, with **In radius**. In **Select Region**, search for `Curitiba`, set **Radius** to `30` and **Unit** to `km`, and click **Close**.
6. Click **Add Criteria** → **Phone**, with **Starts with** and the value `+55`. This way, WhatsApp goes only to people with a Brazilian number, and you don't spend balance on contacts without a phone.
7. In **Match**, choose **All (AND)**. Click **Close**, check **_N_ matches of _T_** and click **Save**.

On a day with no birthdays, the count is 0, and the rule is still correct. The radius selects the cities whose center falls inside the circle: location in BIP is always by city.

<Shot src="/img/aniversario/3-en-us.png" alt="Filter Editor with Date of birth Equals Today and Birthdate mode on, City in radius and Phone starting with +55" url="dash.bip.marketing/…/segments/…" />

### 4. Create the WhatsApp template

1. In **WhatsApp**, open the **Templates** tab and click **Create template**.
2. In **Identity**, fill in **Name (lowercase)** `aurora_aniversario_sobremesa_en`, **Category** **Marketing** and **Language** **English (US)**.
3. In **Header**, choose **Text** and paste the header. In **Body**, paste the text and fill in the `{{1}}` sample with `Marina`. In **Footer**, paste the footer.
4. In **Buttons**, add a **Quick reply** _Book a table_ and a **URL** _See the menu_, with your menu's address.
5. Click **Save Template** and wait for the **Approved** status.

The full text is in [Ready to copy](#ready-to-copy). The coupon is fixed text in the body: the same for everyone, with no extra field.

<Shot src="/img/aniversario/4-en-us.png" alt="New WhatsApp template with header, body, footer, buttons and the preview of the birthday message" url="dash.bip.marketing/…/whatsapp/templates/create" />

### 5. Create the recurring campaign

1. In **Campaigns**, click **New Campaign**.
2. In **Campaign Details**, fill in the **Campaign Name**, choose the 🎂 emoji and write the **Description**.
3. In **Schedule Type**, choose **Recurring**. The tab opens on **Daily**, at 09:00.
4. Check the **Time** and choose the **Timezone**: for Brasília, **BRT (Sao Paulo) (-03:00)**. Below, BIP spells out the schedule: _Every day at 09:00_.

<Shot src="/img/aniversario/5-en-us.png" alt="Recurring Schedule Type with Daily Frequency, Time 09:00 and BRT Timezone" url="dash.bip.marketing/…/campaigns/…" />

### 6. Turn on re-entry: it's what guarantees next year

This is the step people forget most. With **Allow Lead Re-entry** off, the default, each contact receives the campaign only once, forever. Marina gets her birthday message this year and, on her next birthday, BIP holds the message back.

1. In **Lead Re-entry Window**, switch on **Allow Lead Re-entry**.
2. In **Cooldown Period (Days)**, type `300`.

With 300 days, nobody receives it twice in the same year, and next year's message, 365 days later, goes through with room to spare. Use a value well below 365: with the exact number, a difference of a few minutes in the send time can hold back next year's birthday message.

<Callout type="warning">
If you activated the campaign without re-entry, click **Pause Campaign to Edit**, switch on **Allow Lead Re-entry** with `300` days and activate it again.
</Callout>

<Shot src="/img/aniversario/6-en-us.png" alt="Lead Re-entry Window with Allow Lead Re-entry on and a 300-day Cooldown Period" url="dash.bip.marketing/…/campaigns/…" />

### 7. Choose the channel, the template and the segment

1. In **Channel**, click **WhatsApp**.
2. In **Template**, choose `aurora_aniversario_sobremesa_en`. In **Phone Number**, leave **Use account default phone number** or choose another number.
3. In **Variable mappings**, click **Add variable mapping**. In **Variable**, choose **Body · {{1}}**; in **Lead field**, choose **first name**.
4. In **Segments**, switch on _Today's birthdays · WhatsApp_.

<Shot src="/img/aniversario/7-en-us.png" alt="WhatsApp channel with the birthday template, the variable mapping and the birthday segment switched on" url="dash.bip.marketing/…/campaigns/…" />

### 8. Test and activate

1. Click **Save** → **Save Draft**.
2. Click **Test Campaign**, type the phone or email of one of your contacts in BIP, ideally yourself, and click **Send Test**. The message arrives on that contact's WhatsApp, with their first name, and doesn't use any sends.
3. Click **Save** → **Save and Activate** and confirm with **Activate Recurring Campaign**.

The campaign becomes **Active** and runs every day at 09:00. The test doesn't have to happen on your birthday: it goes to the contact you choose.

<Shot src="/img/aniversario/8-en-us.png" alt="Ready to Activate Recurring Campaign? confirmation dialog" url="dash.bip.marketing/…/campaigns/…" />

## Ready to copy

### Spreadsheet template

Copy it, paste it into a text editor and save it as `aurora-customers.csv`. First, create the _Date of birth_ (type **Date**) and _City_ (type **Location**) fields.

<Copy label="aurora-customers.csv" code>
name,email,phone,tags,date_of_birth,city
Marina Alves,marina.alves@exemplo.com,41 99876-5432,customer,12/05/1990,"Curitiba, PR"
Tiago Pereira,tiago.pereira@exemplo.com,41 98765-4321,customer,03/11/1985,"São José dos Pinhais, PR"
Sofia Costa,,41 99123-4567,customer,27/08/1994,"Colombo, PR"
Rafael Lima,rafael.lima@exemplo.com,,customer,15/02/1988,"Curitiba, PR"
</Copy>

| Column        | Lead field                              |
| ------------- | --------------------------------------- |
| name          | Name                                    |
| email         | Email                                   |
| phone         | Phone                                   |
| tags          | Tags                                    |
| date_of_birth | Date of birth (custom field, Date type) |
| city          | City (custom field, Location type)      |

### Segment

Name: _Today's birthdays · WhatsApp_. Combine the three criteria with **All (AND)**.

| Criterion             | Operator    | Value                                     |
| --------------------- | ----------- | ----------------------------------------- |
| Field → Date of birth | Equals      | Relative: `0` Days, **Birthdate** on      |
| Field → City (Geo)    | In radius   | Search `Curitiba`, Radius `30`, Unit `km` |
| Phone                 | Starts with | `+55`                                     |

If your whole customer base is in the region, remove the city criterion. Contacts without _City_ filled in are left out of the radius criterion.

### Campaign

| Option                     | Value                             |
| -------------------------- | --------------------------------- |
| **Schedule Type**          | **Recurring**                     |
| **Frequency**              | **Daily**                         |
| **Time**                   | 09:00                             |
| **Timezone**               | **BRT (Sao Paulo) (-03:00)**      |
| **Allow Lead Re-entry**    | On                                |
| **Cooldown Period (Days)** | `300`                             |
| **Channel**                | **WhatsApp**                      |
| **Template**               | `aurora_aniversario_sobremesa_en` |
| **Segments**               | Today's birthdays · WhatsApp      |

<Copy label="Campaign name and description">
Daily birthday · WhatsApp
Dessert on the house for everyone whose birthday is today. Recurring, daily at 09:00; each customer gets it once a year.
</Copy>

### WhatsApp

<WaTemplate name="aurora_aniversario_sobremesa_en" category="MARKETING" header="Dessert's on us today" footer="Padaria Aurora · One dessert per person" buttons="Book a table|See the menu">
Hi, {{1}}! Happy birthday! 🎂 To celebrate, Padaria Aurora is treating you to a dessert on the house on any visit in the next 7 days. Just show this message at the register or mention the coupon BDAYWHATS. Would you like us to save you a table?
</WaTemplate>

Buttons: _Book a table_ is a **Quick reply**; _See the menu_ is a fixed **URL**, like `https://www.exemplo.com.br/cardapio`. A tap on _Book a table_ within 24 hours of the send counts as a reply in the campaign's **Reply Rate**, and the booking continues in the WhatsApp Business app.

| Variable in the campaign | Lead field     | Sample value |
| ------------------------ | -------------- | ------------ |
| **Body · {{1}}**         | **first name** | Marina       |

### Email

In **Emails Templates**, click **New Template**. In **Settings**, set the **Name** to _Birthday · Padaria Aurora_, choose **English** as the **Language** and paste the **Subject** and the **Preview**. Build the blocks in this order:

| Order | Block             | Suggested setting                              |
| ----- | ----------------- | ---------------------------------------------- |
| 1     | **Add Image**     | Photo of a house dessert                       |
| 2     | **Add Heading**   | Birthday wishes with the first name            |
| 3     | **Add Text**      | Two short paragraphs, with the coupon          |
| 4     | **Add Button**    | _See the menu_, with **Width** at 50           |
| 5     | **Add Signature** | **Simple**, with the bakery's name and website |

Wherever you see `[@first name]`, type `@first`, choose `lead.firstName()` and use `friend` as the **Fallback Value**.

<Copy label="Subject">
Happy birthday, [@first name]! Dessert is on us 🎂
</Copy>

<Copy label="Preview">
Stop by Padaria Aurora in the next 7 days and pick a sweet treat on us.
</Copy>

<Copy label="Heading">
Happy birthday, [@first name]! 🎉
</Copy>

<Copy label="Text">
Today is all about you, and Padaria Aurora wants to celebrate with you. Come have a coffee with us in the next 7 days: dessert is on us.

Show this email at the register or mention the coupon BDAYEMAIL. One dessert per person, in store.
</Copy>

<Copy label="Button — Name">
See the menu
</Copy>

## How to measure

- **Before sending**: open the segment. The **_N_ matches of _T_** count shows how many customers have a birthday today.
- **To check the rule**: in the date's **Value**, change **Relative Time** to the number of days left until the birthday of a customer you know, close the editor and see if they show up. Then set it back to `0` and save.
- **After the runs**: in **Campaign Stats**, **Processed (_N_ runs)** adds up every day. Track **Sent**, **Delivered**, **Read Rate** and **Reply Rate**.
- **Re-entry**: in **Recipient Interactions**, filter by **Rejected**. The reason **Lead has already received this campaign** means re-entry is off.
- **At the register**: count the `BDAYWHATS` and `BDAYEMAIL` coupons each week. One coupon per channel shows which one brings more people into the bakery.

## Variations

### Email or WhatsApp

- **Email only**: create the email template from [Ready to copy](#ready-to-copy) and, in step 7, choose **Email** in **Channel** and pick the **Email Template**. In the segment, remove the **Phone** criterion. Email works on any plan, including the free one.
- **Both channels, one message per person**: in the campaign list, click **Duplicate**. In the copy, switch the **Channel** to **Email**, choose the **Email Template** and, in **Segments**, use the second segment. The copy keeps the schedule and the re-entry settings. Each customer gets it through one channel only:

| Segment                      | Criteria                                                                                  |
| ---------------------------- | ----------------------------------------------------------------------------------------- |
| Today's birthdays · WhatsApp | Date of birth (**Birthdate**) + City (Geo) + **Phone** **Starts with** `+55`              |
| Today's birthdays · email    | Date of birth (**Birthdate**) + City (Geo) + **Tags** **Does not include any** `whatsapp` |

To split the channels, tag everyone who has a phone with `whatsapp` at import: in the sample spreadsheet, write `"customer,whatsapp"` in the `tags` column of every row with a phone. Rafael has no phone and no tag: he gets his birthday wishes by email.

### First-purchase or customer anniversary

**Birthdate** mode works on any **Date** field. Create a field such as _First purchase_ or _Customer since_, fill it in at import and use the same rule: **Equals**, Relative `0` **Days**, **Birthdate** on. **Creation Date** doesn't have **Birthdate** mode and, for anyone who came in through a spreadsheet, it records the import date; that's why the real date belongs in a field.

### With Easy Auth Wi-Fi

If you use Easy Auth Wi-Fi, the date of birth can come straight from EasySpot, with no spreadsheet. See [Today's birthdays on the Easy Auth hotspot](/en-us/wifi-birthday).

## Frequently asked questions

### Why didn't the customer get a message on their next birthday?

The **Lead Re-entry Window** was off. When it's off, each contact receives the campaign only once, forever. Pause the campaign, switch on **Allow Lead Re-entry** with a **Cooldown Period (Days)** of `300` and activate it again.

### Do contacts without a date of birth enter the segment?

No. The criterion only finds contacts with _Date of birth_ filled in. Complete the spreadsheet and import it again: anyone already in BIP is updated by email or phone, not duplicated.

### Can I send only to people who live in the restaurant's neighborhood?

Not by location: it's always by city, and the radius selects cities. Store the neighborhood in a **String** field (for example, _Neighborhood_) or in a tag at import, and filter by **Field** or **Tags**.

### How many sends does the campaign use?

On each run, the campaign reserves the segment's count at that moment from the month's balance: that day's birthdays. If the balance doesn't cover everyone, that day's run doesn't go out and nobody receives it. Track your usage in **Settings** → **Billing**.

## See also

- [Today's birthdays on the Easy Auth hotspot](/en-us/wifi-birthday)
- [Segments: the 10 criteria to filter contacts](/en-us/segments)
- [Campaigns: one-time, recurring and API-triggered](/en-us/campaigns)
- [WhatsApp templates: create, sync and use](/en-us/whatsapp-templates)
- [Email editor: blocks, variables and preview](/en-us/email-editor)
- [Import contacts from a spreadsheet](/en-us/import-contacts)
- [Plans and limits: sends, capacity and pricing](/en-us/plans-and-limits)
- [Birthdays on the BIP website](https://bip.marketing/en-us/use-cases/birthday)
- [BIP for restaurants](https://bip.marketing/en-us/solutions/restaurants)
