New to Kestra?
Use blueprints to kickstart your first workflows.
Post a daily Pipedrive pipeline digest to Slack with Kestra. List open deals, sum their value in Python, and deliver total value and deal count.
The most useful pipeline report is the one nobody has to remember to run. This blueprint lists open deals with io.kestra.plugin.pipedrive.deals.List, hands the raw records to a short Python step through an environment variable, and computes the two numbers a morning channel actually reads: total open pipeline value and deal count. The scalars come back through Kestra's outputs protocol and land in Slack before standup.
list_open_deals (io.kestra.plugin.pipedrive.deals.List, fetchType: FETCH, status: open) pulls up to 100 open deals into the execution as {{ outputs.list_open_deals.deals }}.summarize_pipeline (io.kestra.plugin.scripts.python.Script on the Process task runner, so no container pull is needed) receives the deal records as JSON in the DEALS_JSON environment variable, sums the value field, and counts deals per status.total_value, deal_count, and open_count through the ::{"outputs": {...}}:: protocol, making them addressable as {{ outputs.summarize_pipeline.vars.* }}.notify interpolates the scalars into a one-line Slack digest.errors block posts a Discord alert when the digest fails, so a silent morning is an incident, not an ambiguity, and a disabled-by-default Schedule trigger runs the flow each weekday at 07:00.A digest like this usually lives in a notebook someone runs when they remember, or a paid dashboard nobody opens. Kestra turns it into a scheduled, observable flow: the CRM call, the computation, and the delivery are one execution with history, retries, and a failure alert. The Python stays small because the orchestration is not its job.
Process task runner.PIPEDRIVE_API_TOKEN: Pipedrive API token.SLACK_WEBHOOK_URL: Slack incoming webhook URL.DISCORD_WEBHOOK_URL: Discord incoming webhook URL.disabled: false on the daily trigger and adjust the cron to your standup time.stageId or per owner in the Python step and add the extra scalars to the payload.pipelineId or ownerId and run one digest per team, each with its own webhook.nextCursor output into repeated list calls before summarizing.