> For the complete documentation index, see [llms.txt](https://docs.baas.sh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.baas.sh/baas-console/automations/triggers/cron.md).

# Cron

Run an automation on a schedule with a standard CRON expression and a timezone.

A cron trigger runs your automation on a schedule. In this guide, a rewards automation distributes weekly tokens every Monday at 07:00, Paris time.

## Set up the schedule

{% stepper %}
{% step %}

### Pick the Cron type

On the **Pipeline** tab, open the [trigger configuration](/baas-console/automations/triggers.md) and pick **Cron**.
{% endstep %}

{% step %}

### Write the expression

Fill in the **CRON expression** field with the standard five fields: `minute hour day month day-of-week`. In our example, the weekly rewards run every Monday at 07:00: `0 7 * * 1`.
{% endstep %}

{% step %}

### Pick the timezone

Choose a **Timezone** for the schedule. It defaults to **UTC**, with a list of common alternatives: Europe/Paris, Europe/London, America/New\_York, America/Los\_Angeles, Asia/Tokyo, Asia/Shanghai, and Australia/Sydney. In our example, pick Europe/Paris.

Click **Save**: the schedule starts right away, as long as the automation is [**Active**](/baas-console/automations/manage-an-automation.md).
{% endstep %}
{% endstepper %}

## Expression format

| Field        | Allowed values                                    |
| ------------ | ------------------------------------------------- |
| Minute       | `0-59`                                            |
| Hour         | `0-23`                                            |
| Day of month | `1-31`                                            |
| Month        | `1-12` or `JAN-DEC`                               |
| Day of week  | `0-7` (both `0` and `7` mean Sunday) or `SUN-SAT` |

Lists (`,`), ranges (`-`), and steps (`*/n`) are supported. The finest granularity is one minute.

* A step only follows `*` or a range: `*/15`, `1-30/5`.
* A step cannot exceed the field's highest value.
* A range must go from a smaller value to a strictly larger one, so `5-1` is refused.

To learn more about the format, see Google Cloud's guide to [cron job schedules](https://docs.cloud.google.com/scheduler/docs/configuring/cron-job-schedules).

## Common schedules

| Expression     | Runs                               |
| -------------- | ---------------------------------- |
| `* * * * *`    | Every minute                       |
| `*/15 * * * *` | Every 15 minutes                   |
| `0 * * * *`    | Every hour, on the hour            |
| `0 7 * * *`    | Every day at 07:00                 |
| `0 7 * * 1`    | Every Monday at 07:00              |
| `0 0 1 * *`    | On the 1st of every month at 00:00 |

## How scheduled runs behave

* Each scheduled tick produces exactly one run, visible in the [Runs tab](/baas-console/automations/runs-and-logs.md).
* Changing the expression or timezone applies to future runs.

{% hint style="info" %}
**A tick carries only its own time.** `{{trigger.scheduledAt}}` holds the time the tick was due, as an ISO 8601 timestamp in UTC, whatever timezone the schedule uses. A retried delivery carries the same value. Everything else comes from the actions themselves; in the rewards example, the [transaction action](/baas-console/automations/actions/transaction.md) holds the recipients and amounts.
{% endhint %}

## Next

* [Runs and logs](/baas-console/automations/runs-and-logs.md): watch the schedule tick, run by run.
* [Triggers](/baas-console/automations/triggers.md): back to the section overview.
