Document mode and exports are the same idea
A dashboard in layout_mode: document is designed to be read top to bottom, like a report. It renders in a fixed layout that maps cleanly to a printed or PDF page. Exports take that layout and deliver it on a schedule — without anyone having to open the UI.
The combination of document dashboards and scheduled exports replaces the manual "screenshot and paste into slide" workflow. You define the report once and it lands wherever it needs to go, with fresh data, on time.
Where export definitions live
Exports are YAML files inside content/exports/ in your workspace:
<workspace_slug>/
content/
exports/
sales_daily_pdf.yml
fulfillment_weekly_pdf.yml
Each file defines one export job: which dashboard, which schedule, which parameters, and where to deliver the output.
Working example
id: ec_business_daily_pdf
enabled: true
dashboard_id: ec_business_overview
schedule:
cron: "0 8 * * *"
timezone: "America/New_York"
params:
cutoff_date: "{{today}}"
destination:
type: local_folder
folder: "."
filename: "business-overview-{{today}}.pdf"
policy:
on_missed_run: skip
max_retries: 2
timeout_seconds: 180
Field by field:
id: unique identifier for this export job.enabled: set tofalseto pause without deleting.dashboard_id: must match theidof a published dashboard. Document layout mode is required for PDF exports.schedule.cron: standard five-field cron expression.0 8 * * *runs every day at 08:00.schedule.timezone: IANA timezone name. The cron expression is evaluated in this timezone.params: dashboard filter values injected at render time. These match theparamfield defined in the dashboard'sfiltersblock.destination.type:local_foldersaves the PDF to the specified folder on the export engine host.destination.filename: supports template variables.{{today}}expands to the current date in ISO format.policy.on_missed_run:skipskips missed runs silently. Usebackfillif you need missed runs to execute on recovery.policy.timeout_seconds: if the PDF render takes longer than this, the job is marked as failed.
Template variables
Both params values and destination.filename support these template variables:
{{today}}— today's date in the export timezone (ISO format: YYYY-MM-DD).{{yesterday}}— yesterday's date in the export timezone.
This keeps export filenames and dashboard filter values in sync without manual configuration:
params:
cutoff_date: "{{today}}"
destination:
filename: "sales-report-{{today}}.pdf"
Cron schedule examples
0 8 * * *— every day at 08:000 8 * * 1— every Monday at 08:000 8 1 * *— first day of every month at 08:000 6,18 * * *— twice daily at 06:00 and 18:00
Always set a timezone. A cron without a timezone runs in UTC, which will produce off-by-one dates when using {{today}} if your users are in a different timezone.
Push and verify exports
Export definitions are pushed with the rest of workspace content:
looky validate
looky diff
looky push
After push, the export engine picks up the new job on its next scheduling cycle. To verify the job is registered, check the workspace status in the UI or run looky list exports.