Build a task scheduler in Bubble using a Task data type with date/time fields and a recurring rule. Users create scheduled tasks through a form with date picker and frequency selector. Backend workflows powered by Bubble's 'Schedule API Workflow' action handle the execution at the specified times, with recursive scheduling for repeating tasks.
Build a Task Scheduler in Bubble
This tutorial shows you how to create a system where users schedule tasks to run at specific times or on recurring intervals. You will use Bubble's backend workflow scheduling to execute tasks and implement a management UI.
Prerequisites
- A Bubble account on Growth plan or higher (backend workflows)
- Backend workflows enabled in Settings → API
- Basic understanding of backend and frontend workflows
- Familiarity with date/time operations in Bubble
Step-by-step guide
Create the ScheduledTask Data Type
Create the ScheduledTask Data Type
Go to Data tab → create 'ScheduledTask' with fields: name (text), description (text), created_by (User), scheduled_time (date), frequency (text: once/daily/weekly/monthly), status (text: pending/running/completed/failed), last_run (date), next_run (date), is_active (yes/no, default yes). Create an Option Set 'TaskFrequency' with options: Once, Daily, Weekly, Monthly.
Expected result: ScheduledTask data type with scheduling and recurrence fields exists.
Build the Task Creation Form
Build the Task Creation Form
Create a page with inputs: task name, description, Date/Time Picker for scheduled_time, Dropdown for frequency (populated from TaskFrequency Option Set). Add a Submit button. Workflow: Create ScheduledTask with form values, next_run = scheduled_time, status = 'pending'. Then use 'Schedule API Workflow' to schedule the backend workflow 'execute-task' to run at the scheduled_time, passing the new task's unique ID.
Expected result: Users can create tasks that are automatically scheduled for execution.
Create the Backend Execution Workflow
Create the Backend Execution Workflow
Go to Workflow tab → Backend workflows. Create 'execute-task' with parameter: task_id (text). Actions: (1) Search for ScheduledTask by unique ID. (2) Set status = 'running'. (3) Execute the task logic (send email, create record, call API, etc.). (4) Set status = 'completed', last_run = Current date/time. (5) If frequency is not 'once', calculate next_run and schedule the next execution using Schedule API Workflow recursively.
Pro tip: Always include a termination condition in recursive workflows. Check that is_active is still yes before rescheduling to allow users to cancel recurring tasks.
Expected result: Tasks execute at scheduled times and automatically reschedule for recurring frequencies.
Calculate Next Run Time for Recurring Tasks
Calculate Next Run Time for Recurring Tasks
In the backend workflow, after executing, calculate the next run: For daily: Current date/time +(days):1. For weekly: +(days):7. For monthly: +(months):1. Update the task's next_run field and schedule the backend workflow for that time. Include the condition 'Only when This ScheduledTask's is_active is yes' to prevent rescheduling canceled tasks.
Expected result: Recurring tasks automatically calculate and schedule their next execution.
Build the Task Management Dashboard
Build the Task Management Dashboard
Create a dashboard page with a Repeating Group of ScheduledTasks filtered by created_by = Current User. Show name, next_run, frequency, status, and action buttons. Add a 'Pause' button (sets is_active = no), 'Resume' button (sets is_active = yes and reschedules), and 'Delete' button. Color-code status: green for completed, yellow for pending, blue for running, red for failed.
Expected result: Users can view, pause, resume, and delete their scheduled tasks.
Complete working example
1DATA TYPES:2- ScheduledTask: name, description, created_by (User), scheduled_time, frequency (Option Set), status, last_run, next_run, is_active34BACKEND WORKFLOW: execute-task5 Params: task_id (text)6 1. Find task: Search for ScheduledTask (unique id = task_id) :first item7 2. Set status = 'running'8 3. [Execute task logic — varies by task type]9 4. Set status = 'completed', last_run = Current date/time10 5. Only when frequency is not 'once' AND is_active is yes:11 Calculate next_run based on frequency12 Schedule API Workflow: execute-task at next_run with task_id13 Update task: next_run = calculated time1415FRONTEND WORKFLOWS:161. Create task → Create ScheduledTask → Schedule API Workflow at scheduled_time172. Pause task → Set is_active = no (next scheduled run will check and not reschedule)183. Resume task → Set is_active = yes → Schedule API Workflow for next appropriate time194. Delete task → Delete ScheduledTaskCommon mistakes when creating a task scheduler in Bubble.io: Step-by-Step Guide
Why it's a problem: Not including a termination condition in recursive workflows
How to avoid: Always add 'Only when is_active is yes' before the Schedule API Workflow action in recursive workflows.
Why it's a problem: Scheduling tasks in the past
How to avoid: Validate that the scheduled_time is in the future before creating the task.
Why it's a problem: Not handling task execution failures
How to avoid: Wrap task logic in error handling — check for errors and set status to 'failed'. Include a retry mechanism.
Best practices
- Always include termination conditions in recursive scheduling workflows.
- Store last_run and next_run timestamps for visibility and debugging.
- Add error handling that sets status to 'failed' and optionally retries.
- Validate that scheduled times are in the future.
- Limit the frequency options to prevent abuse (e.g., no sub-minute intervals).
- Use the Scheduler tab in Logs to monitor queued and completed tasks.
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I want to build a task scheduler in Bubble.io where users can schedule tasks to run once, daily, weekly, or monthly. I need backend workflows that execute at scheduled times and reschedule for recurring tasks. How do I set this up?
Create a task scheduling system with ScheduledTask data type, a creation form with date picker and frequency selector, backend workflow that executes and recursively reschedules, and a dashboard for managing tasks.
Frequently asked questions
Can I schedule tasks on the free plan?
No. Backend workflows require a paid plan (Growth or higher). Free plan apps can only run frontend workflows that require the user's browser to be open.
What is the minimum interval for scheduled tasks?
You can schedule tasks down to the second. However, Bubble does not guarantee exact-second precision — tasks may execute a few seconds after the scheduled time.
How do I see which tasks are queued?
Go to the Logs tab → Scheduler. This shows all queued API workflows with their scheduled times and status.
Can users schedule tasks for other users?
Yes, if you build that functionality. Admins could schedule tasks on behalf of team members by setting created_by to the target user.
What happens if my app runs out of workload units during task execution?
The task fails. Set up WU monitoring alerts and ensure your plan has enough capacity for your scheduled workload. For complex scheduling needs, RapidDev can help optimize your task architecture.
Can I schedule tasks based on external events?
Yes. Use webhooks from external services to trigger backend workflows that create and schedule tasks dynamically.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation