> ## Documentation Index
> Fetch the complete documentation index at: https://learn.workflow.dog/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a Scheduled Automation

> Run a workflow repeatedly or queue another workflow for a future time.

WorkflowDog supports two scheduling patterns:

| Pattern                                                               | Use                                                                       |
| --------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| [Schedule trigger](/reference/triggers/core/schedule)                 | Start this workflow on one or more recurring schedules.                   |
| [Schedule Workflow action](/reference/actions/core/schedule-workflow) | Queue a separate callable workflow to run once at a future date and time. |

Choose the trigger for recurring jobs such as a daily report. Choose the action
for delayed work such as sending a follow-up two days after an event.

## Example: send a daily report

Create a workflow with the **Schedule** trigger. Each run loads the reporting
data, formats the summary, and sends the finished email or message.

<Steps>
  <Step title="Choose the schedule">
    Add a daily schedule at the intended local time and confirm its timezone. A
    workflow can have multiple schedule entries.
  </Step>

  <Step title="Load the data">
    Add the actions that read the source system. Keep unrelated reads on
    independent branches when they can run concurrently.
  </Step>

  <Step title="Build the report">
    Combine the values into text, HTML, a spreadsheet, or a file. Use a
    sub-workflow when the same report logic is reused elsewhere.
  </Step>

  <Step title="Deliver and inspect">
    Add the send action, wait for the graph to save, enable the workflow, and
    inspect its next run in Run History.
  </Step>
</Steps>

## Example: schedule a one-time follow-up

Create a second workflow with the
[Callable trigger](/reference/triggers/core/callable). Give its trigger inputs
the values the follow-up needs.

In the first workflow:

1. Add **Schedule Workflow**.
2. Select the callable workflow.
3. Set the future date and time.
4. Connect the callable workflow's inputs.

The scheduled execution appears in Run History. It already exists in the
queue, so pausing the child workflow does not remove it. Cancel that scheduled
run from history when it should no longer execute.

<Warning>
  A delayed run uses the child workflow's saved graph when it executes. Review
  scheduled work before making incompatible changes to the child's expected
  trigger data.
</Warning>

## Make schedules reliable

* State the timezone explicitly; do not assume every teammate or service uses
  the same local time.
* Design recurring work to tolerate being retried manually.
* Avoid relying on one run's in-memory state. Store durable state in the
  destination service or a [project variable](/essentials/variables).
* Add **Succeeded?** or **Error** meta outputs around critical delivery actions
  when a recovery branch is useful.

See [Scheduling workflows](/guides/scheduling) for configuration details and
[Workflow runs](/essentials/workflow-runs) for cancel and rerun behavior.
