> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.runtype.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.runtype.com/_mcp/server.

# What are Schedules?

Use Schedules to run Flows and Agents automatically at a specific time or on a recurring cadence. Create a Schedule instead of starting a Flow or Agent manually each time.

## How Schedules work

Each Schedule targets one Flow or one Agent and has a trigger. A one-time trigger fires at a date and time that you pick. A recurring trigger fires on a cron expression in a time zone.

When the trigger fires, Runtype starts a run of the Flow or Agent with the input source that you configured. The run receives the `_now` and `_schedule` variables, so messages and inputs can refer to the time of the run. Each run appears on the Schedule's **Runs** tab with its status and results.

A record-based Schedule resolves its Records each time it fires. Each Record creates a separate execution, so later runs include Records that you add after you create the Schedule.

## Example: daily lead scan

Dana leads growth at Example Organization, a business-to-business (B2B) sales intelligence company. Manually checking job boards takes hours, and the team misses opportunities to faster-moving competitors.

Dana builds a Flow that scrapes job boards for new vice president of sales postings and enriches each company with funding data. The Flow scores each company against ideal customer criteria and generates personalized outreach messages.

Dana schedules the Flow to run daily at 6 AM on Records of the **lead-sources** Record Type. Each Record contains the URL of a job board search. Each morning, the Flow processes the overnight postings, adds qualified leads to the customer relationship management (CRM) system, and queues outreach emails before the team's standup.

After reviewing the run history, Dana notices that some boards update at different times. Dana creates two Schedules: one at 6 AM for boards that update overnight and another at 2 PM for boards that post during business hours.

## Create a Schedule

To create a Schedule in the dashboard, follow these steps:

1. Open **Schedules** from the sidebar, then click **New schedule**. The **Create Schedule** panel opens.
2. Select **Flow** or **Agent**, then select the Flow or Agent that you want to run.
3. Under **Input Source**, choose what the run receives. For the options, see [Choose an input source](#choose-an-input-source).
4. Optional: For a Flow, add input values under **Input Variables**. Input names can't start with `_`, because that prefix is reserved for system variables such as `_now` and `_schedule`.
5. Under **Timing**, select **One-time** or **Recurring**, then set the date and time or the recurrence. For the options, see [Set the timing](#set-the-timing).
6. Click **Create**. The Schedule appears on the **Schedules** page.

### Choose an input source

A Flow Schedule offers the following input sources:

* **Standalone**: Run the Flow without input.
* **Messages**: Pass the messages that you add to the Flow on each run.
* **Records**: Run the Flow once for each matching Record. Select a **Record type**, then add optional filter conditions on Record metadata.

An Agent Schedule offers the following input sources:

* **Message Sets**: Run the Agent on conversations that you define in the Schedule.
* **Records**: Run the Agent on the messages stored in each matching Record. The Agent skips Records that have no messages.

An Agent Schedule can have several message sets. Each set runs as a separate Agent execution on every run, and the **Runs** tab shows one result per set. Name each set to identify it in the results. An unnamed set appears as **Message Set N**, where N is the set's position.

The dashboard targets Records by type and filter. To target a fixed list of Record IDs, create the Schedule through the API. For more information about Record targets, see [Automating batch processing](/user-guide/schedules/automating-batch-processing).

### Set the timing

Choose one of the following timing options:

* **One-time**: Run the Flow or Agent at one date and time. After it runs, the Schedule turns off and shows a **Paused** status. To run it again, click **Run now**.
* **Recurring**: Run the Flow or Agent on a repeating cadence. Under **Repeat**, choose **Every few minutes**, **Every hour**, **Every few hours**, **Daily**, **Weekly**, or **Monthly**, or edit the cron expression.

A new recurring Schedule uses your browser's time zone, which appears next to **Timing**. When you edit a recurring Schedule, it keeps the time zone that it was saved with. A one-time Schedule created in the dashboard has no time zone, so its `_now` date and time fields use UTC.

### Plan limits

Your plan sets two limits on Schedules:

* **Active Schedules**: The number of Schedules that can be active at one time. Paused Schedules and one-time Schedules that have already run don't count. Reminders that Agents create with **Set Reminder** count.
* **Minimum interval**: The shortest recurring interval that you can choose. The recurrence picker marks faster options **(not on your plan)**.

When you reach the active Schedule limit, Runtype refuses to create or resume a Schedule. Runtype also refuses to save a recurring interval that is faster than your plan allows. For more information, see [Rate limits and usage](/user-guide/troubleshooting-faq/rate-limits-and-usage).

## Use the current time in a Schedule

Use the built-in `_now` and `_schedule` variables to include schedule timing and metadata in messages, prompt steps, and Flow inputs. A scheduled run calculates these values once and keeps them fixed throughout the run.

### `_now`: the current date and time

The `_now` variable is available in scheduled and manual runs. On a scheduled run, its date and time fields use the Schedule's time zone, or UTC if the Schedule has none. On a manual run, they use UTC, or the Agent's default time zone when its [`temporal.timezone`](/user-guide/agents/creating-and-configuring-agents#temporal-awareness) is set.

The following table lists the fields that you can reference from `_now`:

| Variable                                          | Example                    | Description                                     |
| ------------------------------------------------- | -------------------------- | ----------------------------------------------- |
| `{{_now.date}}`                                   | `2026-05-20`               | Date in the run's time zone                     |
| `{{_now.time}}`                                   | `10:42:13`                 | 24-hour time in the run's time zone             |
| `{{_now.weekday}}`                                | `Wednesday`                | Day of the week                                 |
| `{{_now.year}}`, `{{_now.month}}`, `{{_now.day}}` | `2026`, `5`, `20`          | Numeric date parts                              |
| `{{_now.timezone}}`                               | `America/Los_Angeles`      | Time zone that renders the date and time fields |
| `{{_now.iso}}`                                    | `2026-05-20T17:42:13.123Z` | Full UTC timestamp                              |
| `{{_now.unix}}`                                   | `1779298933`               | Unix time in seconds                            |

### `_schedule`: details about this Schedule

The `_schedule` variable is available in scheduled runs, including recurring runs, one-time runs, and **Run now**. It is empty for manual dispatches and Surface requests.

The following table lists the fields that you can reference from `_schedule`:

| Variable                  | Example                            | Description                                                           |
| ------------------------- | ---------------------------------- | --------------------------------------------------------------------- |
| `{{_schedule.id}}`        | `sched_01jv0000000000000000000001` | The Schedule ID                                                       |
| `{{_schedule.name}}`      | `Lead enrichment`                  | The name of the Schedule's Flow or Agent when you last set its target |
| `{{_schedule.cron}}`      | `0 6 * * *`                        | The recurring expression, or empty for one-time Schedules             |
| `{{_schedule.timezone}}`  | `America/Los_Angeles`              | The Schedule's time zone                                              |
| `{{_schedule.lastRunAt}}` | `2026-05-19T13:00:00Z`             | When the Schedule last ran, or empty on the first run                 |
| `{{_schedule.nextRunAt}}` | `2026-05-21T13:00:00Z`             | When the Schedule runs next                                           |

Two Schedules on the same Flow share a `_schedule.name`. To tell them apart, use `_schedule.id`.

### Use the default Schedule message

The dashboard pre-fills the first message of the first message set for an Agent Schedule. The preamble includes the date, time, time zone, weekday, Schedule name, cron expression, and previous-run time.

The preamble includes lines like the following:

```plaintext
- Now: {{_now.date}} {{_now.time}} {{_now.timezone}} ({{_now.weekday}})
- Schedule: {{_schedule.name}} (cron: {{_schedule.cron || "one-time"}})
- Previous run: {{_schedule.lastRunAt || "this is the first run"}}
```

The full preamble instructs the Agent to complete the task and stop. When the work needs a human, it instructs the Agent to reach out through a tool, such as a messaging, email, or issue tool. Edit or replace the preamble before you save. At least one message set must contain a message, and the dashboard drops empty sets when you save.

A scheduled run has nobody to answer a mid-run approval prompt. If the Agent carries a tool approval policy (`tools.approval.require`), the run fails with an error that names that policy, and no gated tool runs. Remove the policy from the scheduled Agent, or move the approval-gated work to a Surface that can collect a decision.

## Manage Schedules

The **Schedules** page lists existing Schedules, their next run, and their status. Select a Schedule to open its detail sheet. The sheet includes **Runs**, **Config**, and **JSON** tabs.

### Edit a Schedule

Select a Schedule, click **Edit**, update the Flow, Agent, input source, messages, inputs, or timing, then click **Update**.

### Pause or resume

To stop future runs without deleting the configuration, turn off the **Status** switch in the detail sheet, or click **Pause** in the Schedule's row actions. To start runs again, turn on the switch or click **Resume**. Paused Schedules show a **Paused** status.

### Run now

To start a run outside the normal cadence, click **Run now** in the detail sheet. The run appears on the **Runs** tab.

### Delete a Schedule

To remove a Schedule, click **Delete**, then confirm. The Schedule no longer appears in the list.

## View run history

Open a Schedule and select the **Runs** tab to review past runs. Each run shows its status, duration, timestamps, and errors when available. Record progress appears for record-based runs. Open a run to review its results.

If a recurring run fails, the Schedule keeps its normal cadence. Review Logs to investigate the failure.

The following table lists the causes of common unexpected results:

| Symptom                                      | Cause                                                                                                                                                          |
| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| No run appears for a scheduled time          | A Flow Schedule's Record target matched no Records, so Runtype skipped the run and moved to the next scheduled time.                                           |
| The Schedule shows **Paused** without action | The Flow or Agent that it targets was deleted, or the Schedule was a one-time Schedule that already ran.                                                       |
| A run failed without running any steps       | Your account reached its daily execution limit or its monthly spend cap. For more information, see [Daily executions](/user-guide/dashboard/daily-executions). |

## Manage Schedules from code

You can create and manage Schedules through the Runtype API at `/v1/schedules`, the TypeScript SDK (`client.schedules`), the `runtype schedules` CLI commands, and the Runtype MCP server.

The following request creates a recurring Flow Schedule that runs daily at 6 AM:

```bash
curl -X POST https://api.runtype.com/v1/schedules \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": { "flowId": "YOUR_FLOW_ID" },
    "trigger": { "type": "recurring", "cron": "0 6 * * *", "timezone": "America/Los_Angeles" }
  }'
```

Replace the following:

* `YOUR_API_KEY`: your Runtype API key
* `YOUR_FLOW_ID`: the ID of the Flow to run

The `runtype schedules create` command creates recurring Flow Schedules only, and it requires `--flow`, `--cron`, and `--timezone`:

```bash
runtype schedules create --flow <flow-id> --cron "0 6 * * *" --timezone America/Los_Angeles
```

Replace `<flow-id>` with the ID of the Flow to run.

The API also accepts options that the dashboard doesn't show, such as `target.recordIds` and `executionOptions` for timeouts, retries, Record concurrency, and chunk size. For every field and range, see [Create a schedule](/api-reference/runtype-api/schedules/create-a-schedule).

If you build from a full product object (FPO) template, define Schedules in the top-level `productObject.schedules[]` array. A Surface with `type: "schedule"` doesn't create a trigger. For more information, see [FPO templates](/developer-guides/guides/fpo-templates#add-scheduled-jobs).

## Best practices

Use these practices to keep scheduled runs predictable:

* **Start with manual testing.** Run your Flow or Agent with test inputs before you automate it.
* **Start with a less frequent cadence.** Increase the frequency after you confirm that the Flow or Agent behaves as expected.
* **Use Record Types for batches.** Keep future Records in scope without editing the Schedule. To create or organize those Records first, see [Creating and managing records](/user-guide/records/creating-and-managing-records).
* **Monitor early runs.** Review the first few runs to find configuration issues.
* **Split Schedules when needed.** If sources update at different times, create separate Schedules instead of one catch-all run.

## Next steps

Continue with these guides:

* [Automating batch processing](/user-guide/schedules/automating-batch-processing): Set up automated batch workflows with Schedules.
* [What are Flows?](/user-guide/flows/what-are-flows): Understand the workflows that you automate.
* [What are Records?](/user-guide/records/what-are-records): Understand the data that your Schedule processes.
* [What are Logs?](/user-guide/logs/what-are-logs): Troubleshoot scheduled runs.
* [Managing Schedules programmatically](/user-guide/schedules/managing-schedules-programmatically): Manage Schedules with the API, SDK, CLI, and MCP.