Scheduled Automations
Scheduled automations run at specified times rather than in response to work item events. They are ideal for periodic maintenance, recurring reports, cleanup tasks, and time-sensitive workflows. When a scheduled rule fires, the engine evaluates its conditions against all work items in the project and executes actions on every item that matches.
Schedule types
SetGet supports three schedule types, each suited to different use cases.
| Type | Description | Best for |
|---|---|---|
| Once | Fires a single time at a specific date and time | One-time migrations, launch-day tasks, deadline reminders |
| Interval | Fires repeatedly at a fixed interval | Regular health checks, periodic status updates |
| Cron | Fires on a cron expression schedule | Complex recurring schedules, business-hours workflows |
Once: single execution
A one-time schedule fires exactly once at the configured date and time, then deactivates.
Configuration
- Create or edit a rule with the
scheduledtrigger. - In the schedule section, select Once.
- Choose the date from the date picker.
- Choose the time using the time picker.
- Select the timezone.
- Save the rule.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date | Date | Yes | The execution date (YYYY-MM-DD) |
time | Time | Yes | The execution time (HH:MM, 24-hour format) |
timezone | Timezone | Yes | IANA timezone identifier |
Behavior after execution
After the one-time schedule fires:
- The rule's status changes to Completed.
- The execution is recorded in the Execution History.
- The rule remains visible in the automations list but does not fire again.
- You can re-enable the rule by editing it and setting a new date and time.
Example: launch-day priority bump
Before a product launch on April 15, 2026 at 9:00 AM, escalate all open items:
- Trigger:
scheduled(once: 2026-04-15 09:00, America/New_York) - Condition: State group is "started" AND priority is "low" or "medium"
- Action:
change_priorityto "high",add_comment"Priority escalated for launch day"
Interval: recurring at fixed periods
Interval schedules fire repeatedly at a fixed period. The interval is measured from the last execution time.
Configuration
- Create or edit a rule with the
scheduledtrigger. - In the schedule section, select Interval.
- Enter the interval value (a positive integer).
- Select the interval unit from the dropdown.
- Select the timezone for the first execution calculation.
- Save the rule.
Parameters
| Parameter | Type | Required | Options |
|---|---|---|---|
interval_value | Integer | Yes | 1 or greater |
interval_unit | Enum | Yes | minutes, hours, days, weeks |
timezone | Timezone | Yes | IANA timezone identifier |
Supported intervals
| Unit | Minimum | Maximum | Examples |
|---|---|---|---|
| Minutes | 15 | 1440 (24 hours) | Every 15 minutes, every 60 minutes |
| Hours | 1 | 168 (7 days) | Every 1 hour, every 6 hours, every 24 hours |
| Days | 1 | 90 | Every 1 day, every 7 days, every 30 days |
| Weeks | 1 | 12 | Every 1 week, every 2 weeks, every 4 weeks |
WARNING
The minimum interval is 15 minutes. Shorter intervals are rejected to prevent excessive load on the automation engine.
Interval drift
Intervals are measured from the completion of the last execution, not from a fixed clock time. If an execution takes 2 minutes and the interval is 60 minutes, the next execution occurs 62 minutes after the previous one started. For clock-aligned scheduling, use cron expressions instead.
Example: daily stale item check
Check for stale items every 24 hours:
- Trigger:
scheduled(interval: 24 hours) - Condition: State group is "started" AND
updated_at_age_daysgreater than 7 - Action:
add_label"Stale",send_notificationto assignees
Cron: standard cron expressions
Cron schedules use standard cron expressions for precise, clock-aligned scheduling. This is the most flexible schedule type.
Configuration
- Create or edit a rule with the
scheduledtrigger. - In the schedule section, select Cron.
- Enter the cron expression in the text field.
- Select the timezone.
- The UI shows the next 5 execution times as a preview.
- Save the rule.
Cron expression format
SetGet uses the standard 5-field cron format:
minute (0-59)
hour (0-23)
day of month (1-31)
month (1-12)
day of week (0-6, Sunday=0)Cron field reference
| Field | Allowed values | Special characters |
|---|---|---|
| Minute | 0-59 | * , - / |
| Hour | 0-23 | * , - / |
| Day of month | 1-31 | * , - / |
| Month | 1-12 | * , - / |
| Day of week | 0-6 (Sun=0) | * , - / |
Special characters
| Character | Meaning | Example |
|---|---|---|
* | Any value | * * * * * = every minute |
, | Value list | 1,15 * * * * = minute 1 and 15 |
- | Range | 9-17 * * * * = hours 9 through 17 |
/ | Step | */15 * * * * = every 15 minutes |
Common cron expressions
| Expression | Description |
|---|---|
0 2 * * * | Daily at 2:00 AM |
0 9 * * 1 | Every Monday at 9:00 AM |
0 9 * * 1-5 | Weekdays at 9:00 AM |
0 0 1 * * | First day of every month at midnight |
0 */6 * * * | Every 6 hours |
30 8 * * 1 | Every Monday at 8:30 AM |
0 17 * * 5 | Every Friday at 5:00 PM |
0 9,17 * * * | Twice daily at 9:00 AM and 5:00 PM |
0 0 15 * * | 15th of every month at midnight |
Example: daily cleanup at 2 AM
Archive completed items older than 30 days every night:
- Trigger:
scheduled(cron:0 2 * * *, timezone: UTC) - Condition: State group is "completed" AND
updated_at_age_daysgreater than 30 - Action:
archive
Example: weekly report every Monday
Send a weekly report of stale items to the project manager:
- Trigger:
scheduled(cron:0 9 * * 1, timezone: America/New_York) - Condition: State group is "started" AND
updated_at_age_daysgreater than 7 - Action:
send_notificationto project manager with summary,add_label"Needs Attention"
Example: monthly archive
Archive cancelled items on the first of every month:
- Trigger:
scheduled(cron:0 0 1 * *, timezone: Europe/London) - Condition: State group is "cancelled"
- Action:
archive
Timezone selection
All schedule types require a timezone. The timezone determines when the schedule fires relative to local time.
Selecting a timezone
- In the schedule configuration, click the Timezone dropdown.
- Search or browse for your timezone.
- Select the IANA timezone identifier (e.g.,
America/New_York,Europe/Istanbul,Asia/Tokyo).
Daylight saving time
SetGet handles daylight saving time (DST) transitions automatically. When clocks change:
- A schedule set for 2:00 AM during a "spring forward" transition fires at 3:00 AM (the next valid time).
- A schedule set for 1:30 AM during a "fall back" transition fires once (not twice).
Next run calculation
The automation settings page shows the next scheduled run for each scheduled rule. This is calculated from the current time, the schedule configuration, and the timezone.
| Schedule type | Next run calculation |
|---|---|
| Once | The configured date and time, if in the future |
| Interval | Last execution time + interval duration |
| Cron | Next matching time from the cron expression |
If a rule is paused, the next run field shows "Paused" instead of a time.
Background scheduler
The SetGet background scheduler is responsible for firing scheduled triggers.
How it works
- The scheduler runs as a background goroutine in the API server.
- Every 60 seconds, it checks all active scheduled rules.
- For each rule whose next run time has passed, the scheduler fires the trigger.
- The rule's conditions are evaluated against all matching work items in the project.
- Actions execute on every item that passes the conditions.
- The next run time is recalculated and stored.
Execution guarantees
| Property | Guarantee |
|---|---|
| Timing accuracy | Within 60 seconds of the scheduled time |
| At-least-once delivery | Yes. If the server restarts, missed schedules fire on startup. |
| Exactly-once delivery | Best effort. In rare cases (server crash during execution), a schedule may fire twice. Actions should be idempotent. |
| Concurrent execution | A rule does not fire again if its previous execution is still running. |
TIP
Design scheduled automation actions to be idempotent. For example, "add label if not already present" is safe to run multiple times, while "toggle label" is not.
Monitoring scheduled rules
To review the status and history of scheduled rules:
- Go to Settings > Automations in the project.
- Filter the rule list by trigger type Scheduled.
- Each rule shows its schedule configuration, next run time, and last execution status.
- Click a rule to open its detail page and view the full Execution History.
Related pages
- Triggers -- All trigger types including the scheduled trigger
- Conditions -- Filtering which items the schedule acts on
- Actions -- What happens when the schedule fires
- Execution History -- Reviewing past scheduled runs
- Advanced Patterns -- Complex scheduling strategies