New to Kestra?
Use blueprints to kickstart your first workflows.
Generate a weekly CSV report in Python, upload it to a dated Dropbox folder, and notify Slack. Scheduled, idempotent, with retries and failure alerts.
Automate weekly report distribution to Dropbox with Kestra. This blueprint builds a sales report with Python, publishes it to a shared Dropbox folder organized by date, and notifies the team on Slack the moment it lands. It solves the recurring problem of reports buried in inboxes or overwritten in place: every run keeps a clean, dated history in a predictable location, and consumers always know where the latest numbers live. The pipeline is re-run and backfill safe, so reprocessing a given week replaces that week's file instead of failing.
generate_report runs an io.kestra.plugin.scripts.python.Script task on the ghcr.io/kestra-io/pydata container image, builds a sales summary with pandas, stamps it with the run date, and emits sales_report.csv as an outputFiles artifact.upload_report uses io.kestra.plugin.dropbox.files.Upload to push the CSV to {{ inputs.shared_folder }}/<run-date>/sales_report.csv. Upload creates the missing dated parent folder automatically, and mode: OVERWRITE keeps the run idempotent.notify_published posts an io.kestra.plugin.slack.notifications.SlackIncomingWebhook message with the exact Dropbox path so consumers know it landed.errors block fires a second Slack alert if any step fails.monday_morning_report trigger of type io.kestra.plugin.core.trigger.Schedule runs the flow every Monday at 08:00 America/New_York time.OVERWRITE and a date derived from trigger.date ?? execution.startDate.Dropbox stores files but has no scheduler, no retry logic, and no way to chain report generation, upload, and notification into one auditable run. Kestra fills that gap: an event-driven Schedule trigger drives the cadence, retry blocks absorb transient API failures, the errors block guarantees the team hears about failures, and full execution lineage shows exactly which file was produced and where it went. Everything is declarative YAML, version controlled, and re-runnable for any date.
DROPBOX_ACCESS_TOKEN: Dropbox API access token used to upload the report.SLACK_WEBHOOK: Slack incoming webhook URL used by both the success and failure notifications.DROPBOX_ACCESS_TOKEN and SLACK_WEBHOOK secrets to your namespace.shared_folder input to the Dropbox path your team already uses.generate_report with your real query or data source.Schedule for different cadences.