Docs / Build Workflow

Scheduled Exports

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 to false to pause without deleting.
  • dashboard_id: must match the id of 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 the param field defined in the dashboard's filters block.
  • destination.type: local_folder saves 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: skip skips missed runs silently. Use backfill if 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:00
  • 0 8 * * 1 — every Monday at 08:00
  • 0 8 1 * * — first day of every month at 08:00
  • 0 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.