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:
- Open Schedules from the sidebar, then click New schedule. The Create Schedule panel opens.
- Select Flow or Agent, then select the Flow or Agent that you want to run.
- Under Input Source, choose what the run receives. For the options, see Choose an input source.
- 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_nowand_schedule. - Under Timing, select One-time or Recurring, then set the date and time or the recurrence. For the options, see Set the timing.
- 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.
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.
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 is set.
The following table lists the fields that you can reference from _now:
_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:
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:
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:
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:
Replace the following:
YOUR_API_KEY: your Runtype API keyYOUR_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:
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.
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.
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.
- 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: Set up automated batch workflows with Schedules.
- What are Flows?: Understand the workflows that you automate.
- What are Records?: Understand the data that your Schedule processes.
- What are Logs?: Troubleshoot scheduled runs.
- Managing Schedules programmatically: Manage Schedules with the API, SDK, CLI, and MCP.