Skip to content

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.

TypeDescriptionBest for
OnceFires a single time at a specific date and timeOne-time migrations, launch-day tasks, deadline reminders
IntervalFires repeatedly at a fixed intervalRegular health checks, periodic status updates
CronFires on a cron expression scheduleComplex recurring schedules, business-hours workflows

Once: single execution

A one-time schedule fires exactly once at the configured date and time, then deactivates.

Configuration

  1. Create or edit a rule with the scheduled trigger.
  2. In the schedule section, select Once.
  3. Choose the date from the date picker.
  4. Choose the time using the time picker.
  5. Select the timezone.
  6. Save the rule.

Parameters

ParameterTypeRequiredDescription
dateDateYesThe execution date (YYYY-MM-DD)
timeTimeYesThe execution time (HH:MM, 24-hour format)
timezoneTimezoneYesIANA 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_priority to "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

  1. Create or edit a rule with the scheduled trigger.
  2. In the schedule section, select Interval.
  3. Enter the interval value (a positive integer).
  4. Select the interval unit from the dropdown.
  5. Select the timezone for the first execution calculation.
  6. Save the rule.

Parameters

ParameterTypeRequiredOptions
interval_valueIntegerYes1 or greater
interval_unitEnumYesminutes, hours, days, weeks
timezoneTimezoneYesIANA timezone identifier

Supported intervals

UnitMinimumMaximumExamples
Minutes151440 (24 hours)Every 15 minutes, every 60 minutes
Hours1168 (7 days)Every 1 hour, every 6 hours, every 24 hours
Days190Every 1 day, every 7 days, every 30 days
Weeks112Every 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_days greater than 7
  • Action: add_label "Stale", send_notification to assignees

Cron: standard cron expressions

Cron schedules use standard cron expressions for precise, clock-aligned scheduling. This is the most flexible schedule type.

Configuration

  1. Create or edit a rule with the scheduled trigger.
  2. In the schedule section, select Cron.
  3. Enter the cron expression in the text field.
  4. Select the timezone.
  5. The UI shows the next 5 execution times as a preview.
  6. 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

FieldAllowed valuesSpecial characters
Minute0-59* , - /
Hour0-23* , - /
Day of month1-31* , - /
Month1-12* , - /
Day of week0-6 (Sun=0)* , - /

Special characters

CharacterMeaningExample
*Any value* * * * * = every minute
,Value list1,15 * * * * = minute 1 and 15
-Range9-17 * * * * = hours 9 through 17
/Step*/15 * * * * = every 15 minutes

Common cron expressions

ExpressionDescription
0 2 * * *Daily at 2:00 AM
0 9 * * 1Every Monday at 9:00 AM
0 9 * * 1-5Weekdays at 9:00 AM
0 0 1 * *First day of every month at midnight
0 */6 * * *Every 6 hours
30 8 * * 1Every Monday at 8:30 AM
0 17 * * 5Every 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_days greater 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_days greater than 7
  • Action: send_notification to 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

  1. In the schedule configuration, click the Timezone dropdown.
  2. Search or browse for your timezone.
  3. 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 typeNext run calculation
OnceThe configured date and time, if in the future
IntervalLast execution time + interval duration
CronNext 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

  1. The scheduler runs as a background goroutine in the API server.
  2. Every 60 seconds, it checks all active scheduled rules.
  3. For each rule whose next run time has passed, the scheduler fires the trigger.
  4. The rule's conditions are evaluated against all matching work items in the project.
  5. Actions execute on every item that passes the conditions.
  6. The next run time is recalculated and stored.

Execution guarantees

PropertyGuarantee
Timing accuracyWithin 60 seconds of the scheduled time
At-least-once deliveryYes. If the server restarts, missed schedules fire on startup.
Exactly-once deliveryBest effort. In rare cases (server crash during execution), a schedule may fire twice. Actions should be idempotent.
Concurrent executionA 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:

  1. Go to Settings > Automations in the project.
  2. Filter the rule list by trigger type Scheduled.
  3. Each rule shows its schedule configuration, next run time, and last execution status.
  4. Click a rule to open its detail page and view the full Execution History.