Skip to main content
There are several ways to create a schedule for a deployment:
  • Through the Prefect UI
  • With the cron, interval, or rrule parameters if building your deployment with the serve method of the Flow object or the serve utility for managing multiple flows simultaneously
  • If using worker-based deployments
    • When you define a deployment with flow.serve or flow.deploy
    • Through the interactive prefect deploy command
    • With the deployments -> schedules section of the prefect.yaml file

Create schedules in the UI

You can add schedules in the Schedules section of a Deployment page in the UI. To add a schedule select the + Schedule button. Choose Interval or Cron to create a schedule.
What about RRule? The UI does not support creating RRule schedules. However, the UI will display RRule schedules that you’ve created through the command line.
The new schedule appears on the Deployment page where you created it. New scheduled flow runs are visible in the Upcoming tab of the Deployment page. To edit an existing schedule, select Edit from the three-dot menu next to a schedule on a Deployment page.

Create schedules in Python

Specify the schedule when you create a deployment in a Python file with flow.serve(), serve, flow.deploy(), or deploy. Just add the keyword argument cron, interval, or rrule. The serve method below will create a deployment of my_flow with a cron schedule that creates runs every minute of every day:
If using deployments with dynamic infrastructure, the deploy method has the same schedule-based parameters. When my_flow is served with this interval schedule, it will run every 10 minutes beginning at midnight on January, 1, 2026 in the America/Chicago timezone:
Keyword arguments for schedules are also accepted by the to_deployment method that converts a flow to a deployment.

Create schedules with the CLI

You can create a schedule through the interactive prefect deploy command. You will be prompted to choose which type of schedule to create. You can also create schedules for existing deployments using the prefect deployment schedule create command. This command accepts a deployment name in the format <flow-name>/<deployment-name> and allows you to specify schedule details directly without going through the interactive flow.
By default prefect deployment schedule create adds additional schedules to your deployment. Use the --replace flag to remove old schedules and update with the new one.
Examples: Create a cron schedule that runs every day at 9 AM:
Create an interval schedule that runs every 30 minutes:
Create a schedule with a specific timezone:
Replace all existing schedules with a new one:

Create schedules in YAML

If you save the prefect.yaml file from the prefect deploy command, you will see it has a schedules section for your deployment. Alternatively, you can create a prefect.yaml file from a recipe or from scratch and add a schedules section to it.

Renaming schedule slugs

If you need to rename a schedule’s slug, use the replaces field to indicate which existing schedule should be updated:
When you run prefect deploy:
  • The existing schedule with slug “morning-emails” will be updated
  • Its slug will change to “daily-team-digest”
  • No new schedule is created, and no orphaned schedule remains
After a successful deploy, you can remove the replaces field from your YAML - it becomes a no-op once the old slug no longer exists.
If replaces points to a slug that doesn’t exist, the schedule will be created normally and a warning will be logged.
Two schedules cannot have replaces pointing to the same slug. This will result in a validation error.

Create schedules with Terraform

Associate parameters with schedules

Using any of the above methods to create a schedule, you can bind parameters to your schedules. For example, say you have a flow that sends an email. Every day at 8:00 AM you want to send a message to one recipient, and at 8:05 AM you want to send a different message to another recipient. Instead of creating independent deployments with different default parameters and schedules, you can bind parameters to the schedules themselves:

Schedule parameters in Python

Whether using .serve or .deploy, you can pass parameters to your deployment schedules:
send_email_flow.py
Note that our flow has a default message parameter, but we’ve overridden it for the second schedule. This deployment will schedule runs that:
  • Send “Stop goofing off!” to Jim at 8:00 AM every day
  • Send “Stop goofing off! You’re assistant to the regional manager!” to Dwight at 8:05 AM every day
Use the same pattern to bind parameters to any schedule type in prefect.schedules. You can provide one schedule via the schedule kwarg or multiple schedules via schedules.

Schedule parameters in prefect.yaml

You can also provide parameters to schedules in your prefect.yaml file.
prefect.yaml

See also