> ## Documentation Index
> Fetch the complete documentation index at: https://cubed3-docs-cub-4190.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Scheduled Refreshes

> Scheduled refreshes are available on Premium and Enterprise plans.

<Info>
  Scheduled refreshes are available on [Premium and Enterprise plans](https://cube.dev/pricing).
  <br />Users need at least the [Explorer][ref-roles] role and Edit or Manage permission
  on the workbook to set up scheduled refreshes. Anyone who can view the dashboard
  can open the sidebar to see its schedules and [subscribe to
  notifications](#subscribing-to-notifications).
</Info>

Scheduled refreshes allow you to automatically refresh published dashboards on a
recurring schedule. When a scheduled refresh runs, the dashboard widgets are
queried in the background, refreshing Cube's in-memory cache. This warms up
dashboards so they load instantly when users open them, eliminating wait times.

You can also attach [notifications][ref-notifications] to scheduled refreshes to
send email or Slack messages with a dashboard screenshot after each refresh.

## Accessing scheduled refreshes

From the Dashboard Builder, click the calendar icon in the toolbar to open the
scheduled refreshes sidebar. From this sidebar, you can create new schedules,
modify existing ones, or remove schedules you no longer need.

The same calendar icon is also available on a published dashboard, so you can
reach the sidebar without opening the builder. What you can do there depends on
your permission on the workbook:

* **Edit** or **Manage** — the full sidebar: create, edit, run, and delete
  schedules.
* **View only** — a read-only list of the configured schedules, where you can
  [subscribe or unsubscribe](#subscribing-to-notifications) yourself from each
  schedule's email notifications.

To see the scheduled refreshes of every dashboard in the deployment in one
place, use the [Scheduled refreshes](#viewing-all-scheduled-refreshes) tab of
the **Scheduled** page.

<Warning>
  The dashboard must be published before schedules can be created.
</Warning>

## Creating a schedule

Click **New scheduled refresh** in the sidebar footer. A dialog opens
with the following configuration options.

<h3 id="frequency">
  Schedule
</h3>

Pick how often the refresh runs with the **Schedule** select:

| Option | Description |
| - | - |
| Hourly | Runs every hour at the specified minute |
| Daily | Runs once a day at the specified time |
| Weekly | Runs on a chosen day of the week at the specified time |
| Monthly | Runs on a chosen day of the month at the specified time |
| Custom | Accepts a cron expression (5-part: minute hour day month weekday) |

Time is specified in 12-hour format with an AM/PM selector. For Hourly
schedules, only the minute field is shown.

### Timezone

Select from common timezones including UTC, US timezones, London, Paris, Berlin,
Tokyo, Shanghai, Singapore, and Sydney. Defaults to your browser's timezone if
it matches a common one, otherwise UTC.

### Notifications

You can optionally attach [notifications][ref-notifications] to a scheduled
refresh. Click **Add notification** to expand the notification
configuration. See the [Notifications][ref-notifications] page for details.

Click **Save** to create or update the schedule.

## Managing schedules

The sidebar lists all existing schedules with the following information:

* **Status indicator** — current state: not run yet, last run succeeded, last
  run failed, or currently running with phase details.
* **Schedule description** — human-readable text like "At 09:00 AM".
* **Enable/disable toggle** — turn schedules on or off without deleting them.
* **Next run time** — shows the next scheduled execution, or "Disabled" if the
  schedule is off.
* **Notification channel** — when a [notification][ref-notifications] is
  configured, the card shows its delivery channel, for example "Notification:
  Email" or "Notification: Slack (#channel)".

### Actions

| Action | Description |
| - | - |
| Run now | Manually trigger the schedule immediately |
| Edit | Open the form dialog to modify the schedule |
| Duplicate | Create a new schedule pre-filled from this one (see [Duplicating a schedule](#duplicating-a-schedule)) |
| Delete | Remove the schedule permanently |

## Viewing all scheduled refreshes

The sidebar shows the schedules of one dashboard. To see every scheduled refresh
in the deployment, open **Scheduled** in the deployment sidebar and select the
**Scheduled refreshes** tab of the **Scheduled tasks and refreshes** page. The
tab has its own URL, so you can bookmark it or reload it and land on the same
tab. The page's other tab lists [Scheduled Tasks][ref-scheduled-tasks]; if you
can use only one of the two, the page shows it without tabs.

The tab is available to users with the Explorer, Developer, or Admin
[role][ref-roles]. Users with the Viewer role don't see it; they reach a
dashboard's schedules from the calendar icon on the published dashboard.

The list includes a scheduled refresh only if you can open its workbook,
including workbooks you don't own. A schedule on a workbook you have no access
to is not listed, even when that workbook sits in a folder you can see. Admins
see every scheduled refresh in the deployment. Each row shows:

* **Enable/disable toggle** — the untitled first column; turns the schedule on or
  off.
* **Dashboard** — the dashboard's title. Click it to open the dashboard in the
  Dashboard Builder.
* **Schedule** — the human-readable schedule, like "At 09:00 AM".
* **Next run** — the next scheduled execution, or "Disabled" if the schedule is
  off.
* **Notifications** — the delivery channel, for example "Notification: Email",
  or "—" when no notification is configured. A Slack notification shows its
  channel name only on rows you can edit; other rows show "Notification: Slack".
* **Subscribe** — the [subscribe toggle](#subscribing-to-notifications) for
  schedules you can only view.

Use the search box above the list to find a schedule by its dashboard title or
its schedule text.

What a row offers depends on your permission on its workbook:

* **Edit** or **Manage**, whether set on the workbook or inherited from its
  [folder][ref-sharing] — the enable/disable toggle and a ⋯ menu, always shown,
  with **Run now**, **Edit schedule**, **Duplicate schedule**, and **Delete**.
  **Delete** asks for confirmation first. Admins get these controls on every
  row.
* **View only** — no toggle and no ⋯ menu. If the schedule sends email
  notifications, the **Subscribe** column holds a toggle to subscribe or
  unsubscribe yourself. A schedule that posts to Slack has no toggle.

**Edit schedule** and **Duplicate schedule** open the same dialog as the
sidebar, pre-filled from the schedule and tied to its dashboard. **Save as
copy** is available only in the sidebar's edit dialog.

If an enabled schedule could not be registered to run automatically, its
**Next run** column shows "Couldn't schedule" instead of a time. On a row you
can edit, click **Retry** next to it to register the schedule again.

### Creating a schedule from the list

Click **New scheduled refresh** above the list. The dialog described in
[Creating a schedule](#creating-a-schedule) opens with an extra first field,
**Dashboard**, which lists the published dashboards you can edit. Select one,
set the schedule, and click **Save**; the new schedule appears in the list
under that dashboard's title.

## Duplicating a schedule

To create a new schedule based on an existing one — for example, to send the
same dashboard to another Slack channel or a different set of recipients without
re-entering the **Schedule**, timezone, and notification settings — you can
duplicate it. There are two ways:

* **From the sidebar** — click the duplicate (copy) icon on a schedule card. The
  form dialog opens pre-filled with its **Schedule**, timezone, and
  notification configuration. Adjust anything you need, then click **Save** to
  create the new schedule. On the
  [Scheduled refreshes](#viewing-all-scheduled-refreshes) tab, choose
  **Duplicate schedule** from the row's ⋯ menu instead.
* **From the sidebar's edit dialog** — while editing a schedule, click **Save as
  copy** in the dialog footer. This creates a new schedule from the current form
  values, including any unsaved changes, instead of updating the original.

Duplicates are independent schedules: the original is left unchanged, and the
copy keeps the source schedule's enabled or disabled state.

## Subscribing to notifications

If a schedule sends [email notifications][ref-notifications], anyone who can view
the dashboard can subscribe to it themselves — an editor does not have to add
them as a recipient. Open the scheduled refreshes sidebar from the published
dashboard and use the toggle on a schedule to subscribe or unsubscribe. The
same toggle appears in the **Subscribe** column of the
[Scheduled refreshes](#viewing-all-scheduled-refreshes) tab.

The toggle covers **every** way that schedule could reach you, in one click. If
you were added individually, unsubscribing removes you from its recipients. If
you are reached through a [user group][ref-user-groups] — or several — it also
records you as an exception to each of those groups on this schedule, so the
group keeps notifying everyone else but stops emailing you. Subscribing reverses
both: it clears those exceptions and adds you back as a recipient in your own
right. The change takes effect on the next run.

<Info>
  Unsubscribing affects only this schedule. It does not remove you from the user
  group, and it does not change any other schedule that group receives.
</Info>

The toggle appears only for schedules that send email — those with
notifications enabled and the email delivery channel. A schedule delivers to
either individual inboxes or a Slack channel, not both, so a schedule that posts
to Slack (or that has notifications turned off) has nothing to subscribe to. If an
editor switches a schedule to Slack, its individual subscriptions are cancelled
and any group exceptions it held are cleared; if it is later switched back to
email, everyone starts from the group's full membership again and can subscribe
or unsubscribe afresh.

Every notification email also includes a one-click **Unsubscribe** link in its
footer, so a recipient can stop receiving a schedule's emails without signing in
to Cube. It behaves exactly like the toggle, covering both a direct recipient row
and any [user group][ref-user-groups] delivering to you. This works for any
recipient, including those added directly by an editor and embed users who have
no Cube account of their own.

## Run phases

When a scheduled refresh runs, it progresses through these phases:

1. Initializing
2. Fetching credentials
3. Refreshing dashboard
4. Generating screenshot (if notifications are configured)
5. Generating AI summary (if the notification has [AI summary][ref-ai-summary]
   turned on)
6. Sending notifications (if notifications are configured)

The sidebar shows real-time status updates during execution.

[ref-ai-summary]: /docs/explore-analyze/notifications#ai-summary

[ref-roles]: /admin/users-and-permissions/roles-and-permissions

[ref-scheduled-tasks]: /docs/explore-analyze/scheduled-tasks

[ref-sharing]: /docs/organize-content/sharing#permission-inheritance

[ref-notifications]: /docs/explore-analyze/notifications

[ref-user-groups]: /admin/users-and-permissions/user-groups
