Execute workflows automatically on recurring schedules using cron expressions or fixed intervals. Perfect for periodic automation, batch processing, and time-based workflows that need to run without manual intervention.
Overview
Schedule triggers enable workflows to execute automatically based on time-based schedules. Unlike webhook triggers that respond to external events, schedule triggers run on a predictable, recurring basis at times you define.
Specify a fixed interval with a time unit for simpler recurring schedules.
Available time units:
Minutes
Hours
Days (default)
Weeks
Months
Years
Examples:
1 Hour β Every hour
3 Hours β Every 3 hours
1 Day β Daily
3 Days β Every 3 days
1 Week β Weekly
1 Month β Monthly
Creating a Schedule Trigger
Step 1: Open Workflow Trigger Tab
Open your workflow in the workflow builder
Click the Trigger tab
Select Scheduler tab
Click New Schedule
Step 2: Configure Basic Settings
Schedule name (required):
Schedule description (optional):
Step 3: Select Schedule Type
Click the Select schedule type dropdown and choose between:
Option A: Cron Expression
For precise scheduling at specific times.
Cron Expression: Enter standard cron syntax
This runs daily at 8:00 AM.
Common Frequencies:
Hourly: 0 * * * *
Daily: 0 0 * * *
Weekly: 0 0 * * 0
Monthly: 0 0 1 * *
Option B: Interval (Recurring)
For simpler recurring schedules.
Custom Interval: Enter a number and select time unit
Time unit dropdown:
Minutes
Hours
Days
Weeks
Months
Years
Show Presets: Quick access to common intervals
Every hour
Every day
Every week
Every month
Step 4: Configure Parameters (Optional)
Click Add Parameter to define input data for your workflow.
Parameters: Key-value pairs passed to your workflow on each execution
Important: Input parameters are stored as-is and passed to your workflow without modification. Use your workflow's logic to handle dynamic values like current date/time.
Example for workflow expecting order data:
For workflows that need current date/time:
Since parameters are static, use workflow nodes to get current date/time:
Add a JavaScript node at the start of your workflow
Generate current date/time in the node
Use the output in subsequent nodes
Example JavaScript node:
Step 5: Create Schedule
Click Create Scheduler button to save and activate the schedule.
The schedule will execute immediately according to the configured interval or cron expression.
Schedule Management
Viewing Schedules
To view all schedules for a workflow:
Open your workflow in the builder
Click the Trigger tab
Select Scheduler tab
See all configured schedules
Each schedule shows:
Schedule name and description
Schedule type (Cron Expression or Interval)
Configuration details
Delete option (trash icon)
Editing Schedules
Currently, schedules cannot be edited after creation. To modify a schedule:
Delete the existing schedule
Create a new schedule with updated settings
Deleting Schedules
To remove a schedule:
Click the trash icon next to the schedule
Confirm deletion
Note: Deletion is permanent and cannot be undone.
Monitoring Schedule Executions
To view execution history for scheduled workflows:
Navigate to the History tab in your workflow
Scheduled executions appear alongside manual runs
Each execution shows:
Execution timestamp
Run status (success/failed)
Run duration
Input parameters used
Schedule Trigger Examples
Example 1: Daily Report Generation
Use Case: Generate sales report every morning
Configuration:
Workflow structure:
JavaScript node - Get current date
API Call node - Fetch sales data for current date
Generate PDF node - Create report
Send Email node - Email to recipients from input
Example 2: Hourly Data Sync
Use Case: Sync customer data from CRM every hour
Configuration:
Execution pattern: Every hour at minute 0 (1:00, 2:00, 3:00, etc.)
Example 3: Weekly Backup
Use Case: Create database backup every Sunday at midnight
Configuration:
Execution pattern: Every Sunday at 00:00
Example 4: Monthly Billing Process
Use Case: Process monthly invoices on the first day of each month
Configuration:
Workflow includes JavaScript node to calculate:
Previous month's start/end dates
Invoice generation date
Payment due date
Execution pattern: First day of every month at midnight
Example 5: Interval-Based Monitoring
Use Case: Check website health every 2 hours
Configuration:
Execution pattern: Every 2 hours
Example 6: Time-Bound Campaign
Use Case: Send promotional emails during a campaign period
Configuration:
Execution pattern: Daily at 10:00 AM, only from Dec 1-25, 2024
Cron Expression Reference
Cron Syntax
Special Characters
* - Any value (every)
, - List of values (e.g., 1,15 = 1st and 15th)
- - Range of values (e.g., 1-5 = 1 through 5)
/ - Step values (e.g., */5 = every 5)
Common Patterns
Note: The minimum supported frequency is hourly. For sub-hourly execution, contact support about your use case.
0 * * * * β Every hour
0 */2 * * * β Every 2 hours
0 */6 * * * β Every 6 hours
0 9-17 * * * β Every hour from 9 AM to 5 PM
0 0 * * * β Every day at midnight
0 9 * * * β Every day at 9 AM
30 14 * * * β Every day at 2:30 PM
0 0,12 * * * β Every day at midnight and noon
0 0 * * 0 β Every Sunday at midnight
0 9 * * 1 β Every Monday at 9 AM
0 9 * * 1-5 β Weekdays at 9 AM
0 0 * * 6 β Every Saturday at midnight
0 0 1 * * β First day of every month
0 0 15 * * β 15th of every month
0 0 1,15 * * β 1st and 15th of every month
0 0 1 1 * β January 1st every year
0 0 1 */3 * β First day of every quarter
0 0 1 6,12 * β June 1st and December 1st
const now = new Date();
// Get various date formats
const currentDate = now.toISOString().split('T')[0]; // 2024-01-15
const currentTime = now.toTimeString().split(' ')[0]; // 14:30:45
const timestamp = Math.floor(now.getTime() / 1000); // 1705329045
// Get yesterday's date
const yesterday = new Date(now);
yesterday.setDate(yesterday.getDate() - 1);
const yesterdayDate = yesterday.toISOString().split('T')[0];
// Get month start/end
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);
const monthEnd = new Date(now.getFullYear(), now.getMonth() + 1, 0);
return {
current_date: currentDate,
current_time: currentTime,
timestamp: timestamp,
yesterday: yesterdayDate,
month_start: monthStart.toISOString().split('T')[0],
month_end: monthEnd.toISOString().split('T')[0]
};
{{current_date}}
{{yesterday}}
{{month_start}}
const now = new Date();
const firstOfThisMonth = new Date(now.getFullYear(), now.getMonth(), 1);
const firstOfLastMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1);
const lastOfLastMonth = new Date(firstOfThisMonth - 1);
return {
period_start: firstOfLastMonth.toISOString().split('T')[0],
period_end: lastOfLastMonth.toISOString().split('T')[0],
report_month: firstOfLastMonth.toLocaleString('en-US', { month: 'long', year: 'numeric' })
};