User-selected reminder messaging
Use Braze landing pages, custom attributes, and campaigns to let users choose when they want to receive reminder messages about upcoming events or appointments. This approach lets non-technical Braze users create and edit the content for reminder sign-up pages, while the preferences users select can drive segmentation, targeting, and personalization across all of your Braze-powered messaging.
With this approach, you can:
- Let users self-select the date of their reminder message relative to an upcoming event.
- Capture preferences directly from users using a Braze landing page and write them to user profiles—no extra backend needed.
- Send messages on the dates users choose, so messaging stays relevant and permission-based.
- Extend the use case with additional Braze features, such as message delays, follow-up retargeting, and A/B testing.
Prerequisites
To complete this guide, you need:
| Requirement | Description |
|---|---|
| Landing page access | Access and permissions to create landing pages in Braze. |
| HTML and JavaScript knowledge | Basic familiarity with HTML and JavaScript to customize your landing page. Required for Option B only. |
| Liquid knowledge | Basic familiarity with Liquid for templating personalized variables. |
Step 1: Create a landing page and link to it from a message
First, create a Braze landing page. Then, create a message (such as an email) that links users to the landing page.
To automatically associate landing page activity with the recipient’s user profile, use the {% landing_page_url %} Liquid tag when linking to the page from a Braze message. For example:
1
<a href="{% landing_page_url your-page-url-handle %}">Sign up for reminders</a>
When a user clicks this link, Braze automatically identifies them, so any preferences they submit are written to their existing profile — no manual URL parameters needed. For a full walkthrough, see Track users through a form.
Step 2: Capture preferences on the landing page
How you capture user preferences depends on whether you’re collecting shared dates or personal dates. Choose the option that fits your use case.
Option A: Shared dates (drag-and-drop form blocks)
For events where many users share the same date (such as holidays or sporting events), use the drag-and-drop editor’s built-in Checkbox form blocks to capture preferences. Each checkbox natively sets a boolean custom attribute (true or false) on the user’s profile when the form is submitted—no custom code needed.
For example, add a checkbox labeled “Super Bowl 2026 reminder” that maps to the custom attribute super_bowl_2026_reminder. When a user checks the box and submits the form, Braze sets:
1
super_bowl_2026_reminder = true
These boolean attributes can then be used directly in segment filters to build your target audience.
Option B: Personal dates (custom code block)
For dates unique to each user (such as birthdays or anniversaries), use a Custom Code block on your landing page to capture the date and write it to Braze using the lpBridge API. This approach gives you a date input (or picker) and lets you store preferences in a nested custom attribute array of objects, which the drag-and-drop form blocks don’t support.
When users arrive through the {% landing_page_url %} Liquid tag, Braze already knows who they are, so your script only needs to:
- Listen for the form submission button click.
- Read the date value from your custom input.
- Use the
lpBridgeAPI to set nested custom attributes and flush the data to Braze.
Store these preferences using a nested custom attribute array of objects. This structure lets you store multiple reminders per user and add derived fields later, such as next_reminder_name or last_reminder_date.
Example script
The following example script disables the default button behavior and executes custom methods on button click. Replace the element IDs and attribute values with your own.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<script async="true">
// Set IDs (as found by inspecting your landing page preview) and success message
const registerButtonId = "YOUR_BUTTON_ID";
const messageDivId = "YOUR_MESSAGE_DIV_ID";
const successMessage = "You're all set! We'll send your reminder.";
// Wait for page content to load
document.addEventListener("DOMContentLoaded", () => {
// Remove the default redirect event from the Braze Message Handler Script
props[registerButtonId].onclickContract[0].brazeEvents =
props[registerButtonId].onclickContract[0].brazeEvents.filter(
(event) => event.eventType !== "REDIRECT"
);
const registerButton = document.getElementById(registerButtonId);
if (registerButton) {
registerButton.addEventListener("click", async (event) => {
event.preventDefault();
// Set the custom attribute (replace with your actual key/value)
await window.lpBridge.setCustomUserAttribute("key", "value");
// Flush data to Braze
await window.lpBridge.requestImmediateDataFlush();
// Remove the button and update the message
registerButton.remove();
const messageDiv = document.getElementById(messageDivId);
if (messageDiv) {
messageDiv.innerHTML = successMessage;
}
});
}
});
</script>
To find the element IDs for your landing page components, preview your page, right-click, and select Inspect in your browser. Locate the IDs for the button and message components in the HTML.
Step 3: Set up and trigger reminder messages
After collecting custom attributes through the landing page, create campaigns to message users about upcoming events.
Option A: Shared dates
If you used boolean custom attributes (Option A in Step 2), use that attribute as a segment filter to build the audience for your reminder message. Then create a new campaign, scheduled before the event, to target this group with your chosen content.
Option B: Personal dates
If you used nested custom attributes (Option B in Step 2), use the Nested Custom Attribute audience filter to select all users who have a reminder date within a specific window—for example, two days from now.
To send reminders on an ongoing basis, set up a daily recurring campaign so that each day, users with upcoming reminders that fall within your window receive their messages.
Step 4: Verify your integration
After completing the setup, verify your integration:
- Send yourself a link to the landing page and complete the form.
- Navigate to your user profile in the Braze dashboard and confirm the custom attribute appears.
- Send a test reminder message to your profile and verify that any personalized details render correctly.
- Monitor results closely as you launch your campaign.
Considerations
- For a detailed example of how to send messages based on date-based custom attributes, see the email use case in the REST API messaging guide.
- If you duplicate a landing page or replace any fields, the component IDs change. Update your custom code block to reflect the new IDs.
- Nested custom attributes consume data points for each key in the array of objects. Updating a custom attribute object to null also consumes a data point.
- The code presented in this guide is intended as an illustrative example. Thoroughly test all code and components within your environment before deploying to production.
Edit this page on GitHub