# How to schedule daily reminder workflows in Bubble

- Tool: Bubble
- Difficulty: Intermediate
- Time required: 20-25 min
- Compatibility: Growth plan+ (requires backend workflows)
- Last updated: March 2026

## TL;DR

Build a scheduled daily reminder system in Bubble using backend API workflows that run every 24 hours. This tutorial shows how to create a recurring workflow that finds users due for reminders, sends personalized emails or in-app notifications, and handles timezone differences so each user gets reminded at their preferred local time.

## Overview: Setting Up Automatic Daily Reminders in Bubble

Daily reminders keep users engaged with your app — whether it is a task reminder, habit tracker prompt, or subscription renewal notice. This tutorial uses Bubble's backend API workflows with recursive scheduling to create a system that runs every 24 hours, finds users who should receive a reminder, and sends personalized emails.

## Before you start

- A Bubble app on the Growth plan or higher
- Backend workflows enabled in Settings → API
- A User data type with email addresses
- Basic understanding of backend workflows and scheduling

## Step-by-step guide

### 1. Add reminder preference fields to the User data type

Go to the Data tab, select the User data type, and add fields: reminder_enabled (yes/no, default yes), reminder_time (text, e.g. '09:00'), reminder_timezone (text, e.g. 'America/New_York'), and last_reminder_sent (date). These let each user control whether they receive reminders and at what time.

**Expected result:** The User data type has fields for reminder preferences and tracking.

### 2. Create the daily reminder backend workflow

Navigate to Backend workflows. Create a new workflow called send_daily_reminders. This workflow does not need external parameters. Add a step: Do a search for Users where reminder_enabled is yes and last_reminder_sent is less than Current date/time rounded down to day (ensuring each user gets only one reminder per day). For each user found, schedule a send_single_reminder workflow.

**Expected result:** A backend workflow that finds all users due for a reminder today.

### 3. Create the individual reminder workflow

Create another backend workflow called send_single_reminder with a parameter: user (type User). Add a Send email action with the recipient set to user's email, subject like 'Your Daily Reminder', and a personalized body using dynamic data such as the user's name and relevant app data. After sending, add Make changes to user setting last_reminder_sent to Current date/time.

> Pro tip: Include a one-click unsubscribe link in the email that sets reminder_enabled to no via a backend workflow triggered by URL.

**Expected result:** Each user receives a personalized email and their last_reminder_sent date is updated.

### 4. Set up the recurring schedule

The daily reminder workflow needs to reschedule itself. At the end of the send_daily_reminders workflow, add a Schedule API Workflow action that schedules send_daily_reminders to run again in 24 hours (Current date/time plus 24 hours). This creates a self-perpetuating daily loop. To start the loop the first time, manually schedule the initial run from a one-time admin workflow or the API Workflow admin page.

> Pro tip: Add a termination condition by checking an app-level setting (e.g., an Option Set flag) to stop the loop if needed.

**Expected result:** The reminder workflow runs every 24 hours automatically, rescheduling itself each time.

### 5. Add a user preference page for reminder settings

Create a settings section on your user profile page. Add a Checkbox for enabling reminders (bound to Current User's reminder_enabled), a Time Picker or dropdown for preferred time, and a timezone dropdown. Create a Save workflow that updates the Current User's reminder fields. Show a confirmation message after saving.

**Expected result:** Users can enable/disable reminders and choose their preferred notification time.

### 6. Handle timezone-aware scheduling

Instead of sending all reminders at one fixed UTC time, the send_daily_reminders workflow should filter users whose reminder_time matches the current hour in their timezone. Add a constraint or post-search filter: users whose reminder_time converted to UTC equals the current UTC hour. This ensures users get reminders at their preferred local time rather than a fixed server time.

**Expected result:** Users receive reminders at their configured local time regardless of timezone.

## Complete code example

File: `Workflow summary`

```text
DAILY REMINDERS — WORKFLOW SUMMARY
====================================

DATA MODEL
  User (additional fields):
    - reminder_enabled (yes/no, default: yes)
    - reminder_time (text, e.g. '09:00')
    - reminder_timezone (text, e.g. 'America/New_York')
    - last_reminder_sent (date)

BACKEND WORKFLOW: send_daily_reminders
  (Runs every hour to check all timezones)
  Step 1: Search for Users
    - reminder_enabled = yes
    - last_reminder_sent < start of today
    - reminder_time matches current UTC hour for user's timezone
  Step 2: Schedule API Workflow on a list
    → send_single_reminder for each matching user
  Step 3: Schedule API Workflow
    → send_daily_reminders in 1 hour (hourly loop)

BACKEND WORKFLOW: send_single_reminder
  Parameter: user (User)
  Step 1: Send email
    - To: user's email
    - Subject: Your Daily Reminder
    - Body: personalized content with user's name
  Step 2: Make changes to user
    - last_reminder_sent = Current date/time

FRONTEND: User Settings
  Checkbox: Enable reminders → reminder_enabled
  Dropdown: Reminder time → reminder_time
  Dropdown: Timezone → reminder_timezone
  Button: Save → Make changes to Current User
```

## Common mistakes

- **Forgetting the termination condition for recursive workflows** — Without a way to stop the loop, the workflow runs forever even if you want to disable reminders globally. Fix: Check an app-level flag (like an Option Set value) at the start of the workflow. If disabled, do not reschedule.
- **Sending duplicate reminders on the same day** — If the workflow runs before the last_reminder_sent field updates, users get multiple reminders. Fix: Always update last_reminder_sent immediately after sending and add a search constraint to exclude users reminded today.
- **Not handling email delivery failures** — If Bubble's email action fails silently, the last_reminder_sent still updates and the user misses their reminder. Fix: Consider using SendGrid or another email service via API Connector for delivery tracking and retry logic.

## Best practices

- Include an unsubscribe link in every reminder email
- Track last_reminder_sent to prevent duplicate sends
- Run the scheduler hourly to handle different timezone preferences
- Use backend workflows (not frontend) so reminders send even when no one is using the app
- Log reminder sends in a separate data type for debugging
- Test with a small group before enabling for all users
- Monitor your WU consumption — bulk email workflows can consume significant workload units

## Frequently asked questions

### Do I need a paid plan for daily reminders?

Yes. Backend workflows require the Growth plan or higher. Frontend scheduled workflows do not work when the user is not on the page.

### How many reminders can Bubble send per day?

Bubble's built-in email sending has limits based on your plan. For high-volume sending (1000+ emails/day), use SendGrid or Mailgun via the API Connector.

### Can I send reminders via SMS instead of email?

Yes. Replace the Send email action with an API Connector call to Twilio or another SMS provider. Store phone numbers on the User data type.

### Will recursive workflows run up my WU costs?

Yes. Each email send consumes WUs. Monitor usage in Settings → Metrics and consider batching sends during off-peak hours.

### How do I test the reminder workflow without waiting 24 hours?

Schedule the workflow to run in 1 minute instead of 24 hours during testing. Remember to change it back before going live.

### Can RapidDev help build a notification system for my app?

Yes. RapidDev can build multi-channel notification systems with email, SMS, push notifications, timezone handling, and preference management.

---

Source: https://www.rapidevelopers.com/bubble-tutorial/set-up-automatic-daily-reminders-in-bubble
© RapidDev — https://www.rapidevelopers.com/bubble-tutorial/set-up-automatic-daily-reminders-in-bubble
