Reports
A report combines a SQL query, a cron schedule, an output format, and one or more delivery channels. DataRunner runs the query on schedule and delivers the output automatically — no infrastructure required.
- Read
- 6 min
- Sections
- 6
- Formats
- CSV · Excel · PDF
Creating a report
Go to Reports → New report. The report wizard has four steps:
- Query — select an existing saved query or write one inline
- Schedule — set a cron expression and timezone
- Output — choose CSV, Excel (XLSX), or PDF format
- Delivery — configure one or more channels (email, Slack, S3, webhook)
Save the report and DataRunner schedules it immediately. The first run fires at the next matching cron time. You can also trigger a manual run at any time from the report detail page.
Cron schedules
DataRunner uses standard 5-field cron syntax: minute hour day-of-month month day-of-week. The schedule editor has a visual builder if you're not familiar with cron expressions.
| Expression | Meaning |
|---|---|
| 0 8 * * 1-5 | Every weekday at 8:00 AM |
| 0 9 * * 1 | Every Monday at 9:00 AM |
| */15 * * * * | Every 15 minutes |
| 0 0 1 * * | First day of each month at midnight |
| 0 9 1-7 * 1 | First Monday of each month at 9:00 AM |
| 0 */6 * * * | Every 6 hours |
| 30 17 * * 5 | Every Friday at 5:30 PM |
Schedules run in the timezone you specify. DataRunner converts to UTC internally. If you change the timezone on an existing report, the next run fires at the next matching time in the new timezone.
Output formats
CSV
Standard comma-separated values, UTF-8 encoded. Column headers come from the query's SELECT column aliases. Null values are exported as empty strings. You can configure the delimiter (comma, tab, pipe, semicolon) in the report settings.
Excel (XLSX)
A formatted Excel workbook with one sheet. Features:
- Column headers in row 1 with bold formatting
- Auto-width columns based on content
- Data types preserved (numbers as numbers, dates as date cells)
- Configurable sheet name (defaults to the report name)
A paginated PDF with:
- Report title as the page header
- Full result table with alternating row shading
- Page numbers and generation timestamp in the footer
- Configurable page size (A4 or Letter) and orientation (portrait or landscape)
PDF output is best for reports with fewer than ~1,000 rows. For large datasets, CSV or Excel is more practical.
Delivery channels
A report can have multiple delivery channels. DataRunner sends to all of them on every run. Configure channels on the Delivery tab of the report detail page.
Send to any email addresses with a custom subject line and body. Attach the report file. Configure SMTP or a transactional API (SendGrid, Mailgun, etc.) in Settings → Email. Use broadcast lists to define reusable recipient groups.
Post a message or file to any Slack channel or DM. Configure a Slack integration in Settings → Channels. Customize the message body with the report name, run time, and row count using template variables.
Upload the report file to any S3-compatible bucket. Configure the bucket, region, and credentials in Settings → Channels. The file path supports template variables: {{report_name}}, {{date}}, {{time}}.
POST a JSON payload to any HTTP endpoint after each run. Configure custom headers and an auth token. The request body includes the report name, run timestamp, row count, and a download URL for the output file (valid for 24 hours).
Run history
Every report has a Run history tab showing all past executions. For each run:
- Timestamp and trigger type (scheduled or manual)
- Duration (query execution time + delivery time)
- Row count of the result set
- Status per delivery channel (delivered, failed, pending)
- Download link for the output file
- Full error message if the run failed