Enabling scheduled deliveries
Emailed scheduled deliveries are available on all Lightdash Cloud plans. To set up Slack, an organization admin will have to add the Slack integration.Creating a scheduled delivery
Only users with admin, developer, editor or interactive viewer roles can create and edit scheduled deliveries. The interactive viewer role can only create and edit their own scheduled deliveries; other roles have edit access over all scheduled deliveries. To create a scheduled delivery, click on the three-dot menu in the top-right corner of your chart or dashboard, then click onscheduled deliveries.


New delivery to open the scheduled delivery configuration. The sidebar splits everything into a Delivery section (when and where it’s sent) and a Content section (what’s inside it and how it’s written), with a live preview and your next few send dates always visible on the right.
Setup
UnderDelivery > Setup, name your delivery, set how often it runs (hourly, daily, weekly, monthly, or a custom Cron expression), and pick a time zone — deliveries follow your project’s default time zone unless you override it here. Add recipients as email addresses or Slack channels; you can target a person in Slack with @persons-name or a channel with #channel-name. The Lightdash app needs to already be a member of any Slack channel you add — see Scheduled deliveries for how to invite it. Google Chat and Microsoft Teams also show up here as destinations. On a self-hosted instance, Microsoft Teams shows only when MICROSOFT_TEAMS_ENABLED is true (see environment variables). A delivery can go to several destinations at once, and a channel or email address can receive any number of deliveries, from the same chart or dashboard or from different ones.

Data & format
UnderContent > Data & format, choose how the content is delivered — Image, CSV, .xlsx, or PDF — and adjust the filters so different recipients can get a different cut of the same chart or dashboard without you having to duplicate it. Row and cell limits for CSV/XLSX exports are covered in Export limits.
In Slack, Image shows the chart or dashboard in the message itself, so a table chart delivered as Image shows its rows without a download; with Also include image as PDF attachment, the PDF goes in the message’s thread. PDF posts the message and then the PDF as a file, which recipients open to view.
Filters
TheFilters block lists the filters already saved on the content: a dashboard’s saved filters, or the filters saved on a chart. Each delivery keeps its own values for them, so one chart can feed several deliveries that each show a different slice. You can change a filter’s operator and value, reset it to the saved value, or remove it so the delivery uses the saved default; you can’t add filters the content doesn’t already have. Removed filters stay listed so you can re-add them later, and filters that no longer exist on the content show up under a notice so you can clear them out.


.xlsx file. A Google Sheets sync is a separate schedule from a delivery and always uses the filters saved on the chart, with no per-sync override. For charts, changing a saved filter needs the same explore access you’d need to run that query yourself; roles that can create deliveries but not explore see the chart’s filters without being able to change them.
Every recipient of a delivery gets the same filter values. The delivery runs as its owner, so user attributes such as ${lightdash.user.email} resolve to the owner, not to each recipient. To send each person their own cut, create one delivery per person with its own filter values.
Relative date filters, such as in the current day, are worked out when the delivery runs, which can be a few minutes after its scheduled time. A delivery scheduled just before midnight can land on the new day and show no data; schedule it earlier, or use in the last 1 completed days to send the previous day.
If the content has required filters or filter requirement groups, you can’t save or send the delivery until the
Filters block satisfies every rule.Attach the file to the delivery
ForCSV and .xlsx deliveries, tick Attach the file to the delivery to send the results file itself rather than only a download link. The checkbox becomes available once the delivery has an email or Slack recipient. Emails get the file as an attachment; Slack channels get the delivery message as usual, with the file posted in its thread, where Slack shows the results as a table. Dashboards deliver one file per chart, or a single workbook when the .xlsx layout is set to one workbook.


Choose which tabs to include
For dashboards with more than one tab, Include all dashboard tabs is ticked by default. Untick it and pick the tabs you want: only tiles on those tabs go into the delivery, whatever the format. Required filters apply only to tiles on the tabs you include.One PDF page per tab
For dashboards that use tabs, a Each tab on its own page (with dashboard and tab title) checkbox appears when the format isPDF, or Image with Also include image as PDF attachment enabled. Turn it on to render each tab as its own PDF page — every page includes the dashboard title and the tab name, and hidden tabs are skipped. Tiles that aren’t assigned to any tab (from dashboards created before tabs existed) render on the first exported tab’s page.
Render width
For dashboard deliveries inImage or PDF format, the Render width menu under the preview sets how wide the dashboard is laid out before Lightdash captures it: Tablet (1000px), Laptop Screen (1400px, the default), External Monitor (1500px), TV Screen (1600px), Large Monitor (1920px), or Ultra-wide Monitor (2560px). Dashboards are responsive, so a different width changes how tiles wrap and how much of the image each tile fills. The size an email client or Slack displays the image at is set by that client, not by this setting. There’s no zoom setting: a wider render width fits more columns but makes text smaller in the image, so pick the narrowest width that fits your widest tile.
To use a width that isn’t in the menu, set it in pixels as customViewportWidth in the delivery’s YAML with content as code: download with lightdash download --include-scheduled-deliveries, edit the file under lightdash/scheduled-deliveries/, then run lightdash upload --scheduled-deliveries <delivery-slug>. Changing Render width in the app afterwards replaces the custom width.
Delivering a data app? Scheduling, recipients, and message options are the same, but what lands in the delivery isn’t: an app doesn’t declare its queries, so Lightdash captures every query the app runs and sends one file per query. Available formats, row limits, and how you pin a filtered cut all differ — see Scheduled deliveries and syncs for data apps.
Message
UnderContent > Message, write the static message that goes out with every delivery. If you’d rather Lightdash write it for you from the data itself, turn on an AI agent instead.
Two switches above the message control what else the delivery carries:
- Include link to Lightdash is on by default and adds links back to the chart or dashboard, such as the Open in Lightdash button in Slack. Turn it off to send the delivery without them.
- Send as plain text sends emails as plain text, with no Lightdash branding, buttons or footer. Your message is the whole body; with no message, the email has a one-line intro naming the chart or dashboard. Attached files, such as a PDF, stay attached, and an image or a file that isn’t attached is listed as a download link. It needs at least one email recipient, and Slack and webhook deliveries aren’t affected.
AI agent
AI-enhanced messages use AI agents. Instead of a static message, Lightdash can write the delivery message from your data on every send — summarizing the results and calling out notable changes or trends, so recipients get the headline before they even open the attachment.
Content > AI agent, toggle on AI-enhanced message and edit the Instructions to tell Lightdash what to focus on. You can optionally pick an AI agent to write the message using that agent’s tools, context, and knowledge instead of a plain summary.
A picked agent starts from the delivered results, with the delivery’s filters applied, and can also query any other explore it has access to. To have the message draw on data outside the delivered content, such as an incident log or refunds, model that data as a table in your dbt project, give the agent access to it, and say in the Instructions what to compare it with.
Editing and deleting your scheduled deliveries
Selecting a scheduled delivery from the list shows its details: schedule and format, next and last run, recipients, and an AI summary preview if you’ve turned one on. From here you can toggle the delivery active or inactive, jump toEdit to change its configuration, run it immediately with Send now, view its run history, or delete it with the trash icon.
Pausing a delivery stops manual runs too: while a delivery is inactive, Send now (and the equivalent API call) still accepts the request, but the delivery itself is skipped until you set it back to active.

Overview of your scheduled deliveries
Users who have an admin role in your project can access an overview of your scheduled deliveries in the project settings. In the scheduled deliveries overview page, you can see a list of all of your scheduled deliveries, their most recent delivery status, and a history of all of the previous scheduled deliveries in your project. To access the overview page, just head to your project settings, then to theSyncs & Scheduled Deliveries tab.

Delivery status
Each scheduled delivery displays a clear status indicator showing its current state:- Completed successfully - All jobs in the delivery completed without errors
- Failed - The delivery encountered an error and did not complete
- Partial failure - Some jobs completed successfully while others failed
- Running - The delivery is currently in progress
- Scheduled - The delivery is queued and waiting to run
Run details
Click on any scheduled delivery run to open the Run Details modal. This shows:- The job configuration including delivery target and schedule
- A list of all sub-jobs with their individual status, timing, and any error details
- For failed jobs, detailed error information to help with troubleshooting

Reassigning scheduled delivery owners
You can transfer ownership of scheduled deliveries to another user in your organization. This is useful when team members change roles or leave the organization. On a project that requires personal warehouse credentials, each delivery queries the warehouse with its owner’s personal credentials. If the owner has none for the project, or their sign-in has expired, the delivery fails, and deliveries owned by a service account always fail. To keep deliveries running, reassign them to one owner who keeps their credentials current.Reassigning a single delivery
- In the scheduled deliveries overview, find the delivery you want to reassign
- Click the three-dot menu next to the delivery
- Select Reassign owner
- Search for and select the new owner from the dropdown
- Click Reassign to confirm

Bulk reassignment
To reassign multiple scheduled deliveries at once:- Use the checkboxes to select the deliveries you want to reassign
- A selection counter will appear showing how many deliveries are selected
- Click the Reassign owner button that appears in the toolbar
- Select the new owner and confirm

Sending to private Slack channels
You must add the Lightdash Slack bot to a private Slack channel before it can post there. To send to a private Slack channel, type the channel name exactly as it appears in Slack into the destination field, then click it to confirm.Sending to Microsoft Teams
You can send Lightdash deliveries directly to Microsoft Teams using incoming webhooks, keeping your team updated with key metrics right inside your Teams channels. The legacy Office 365 Connector webhooks are deprecated. Microsoft now recommends using Power Automate Workflows to create incoming webhooks for Teams.Creating a webhook with Power Automate Workflows
- Go to Power Automate
- Select Templates
- Filter by “webhook”
- Select the Post to a channel when a webhook request is received template

- Select your Microsoft account and target Teams channel
- Once added, click Edit on the workflow
- Select the When a Teams webhook request is received trigger
- Copy the HTTP URL

- Use that HTTP URL in the webhook field in Lightdash
Sending to Google Chat
You can send your Lightdash scheduled deliveries directly to a Google Chat space using an incoming webhook.- In Google Chat, open the space you want to send deliveries to
- Create a webhook for that space and copy its URL
- Paste the webhook URL into the Google Chat destination field in the scheduled deliveries form
send now.
Configuring the default time zone
Project admins can set the default time zone used for scheduled deliveries across the project in theProject settings —> Syncs & Scheduled deliveries.

- my project default time zone is set to UTC
- I have a scheduled delivery set to
Weekly on Monday at 15:00 - I change the project default time zone to
(UTC -5:00) America/New York - my scheduled delivery will now be set to
Weekly on Monday at 10:00
Configuring download link expiration
By default, download links in scheduled deliveries expire after 3 days. Organization admins can change this from Settings → Organization → Exporting.Settings
- Download link expiry (days) — the base expiry that applies to every channel. Accepts 1–365 days.
- Set a different expiry for specific channels — when enabled, you can override the base for individual channels you have set up: Email, Slack, Microsoft Teams, and Google Chat. Leave a channel blank (or click the ✕ in the input) to inherit the base.
How expiry is resolved
For each delivery, Lightdash picks the first value that is set, in this order:PERSISTENT_DOWNLOAD_URL_EXPIRATION_SECONDS* variables on self-hosted instances and ship with sensible defaults on Lightdash Cloud.