Polling Trigger
Trigger flows automatically by polling external systems for new data or events.
Polling triggers repeatedly check an external system at a fixed interval. When new data or events are detected, they automatically start a new flow execution.
Kestra provides polling triggers for a wide variety of systems, including databases, message queues, cloud storage, and FTP servers.
The polling frequency is controlled by the interval
property. When triggered, the flow has access to the polling results through the trigger
variable, making the retrieved data immediately available for downstream tasks.
Example
For example, the following flow polls a PostgreSQL table every 5 minutes. When new rows are available, it deletes them (to prevent duplicate processing) and logs the retrieved values.
id: jdbc-triggernamespace: company.team
inputs: - id: db_url type: STRING
tasks:- id: update type: io.kestra.plugin.jdbc.postgresql.Query url: "{{ inputs.db_url }}" sql: DELETE * FROM my_table
- id: log type: io.kestra.plugin.core.log.Log message: "{{ trigger.rows }}"
triggers: - id: watch type: io.kestra.plugin.jdbc.postgresql.Trigger url: myurl interval: "PT5M" sql: "SELECT * FROM my_table"
In Enterprise Edition, you can assign polling triggers to a specific Worker Group using the workerGroup.key
property. This allows you to control where the polling is executed.
Enterprise Example
In Enterprise Edition (Kestra 0.24+), the Salesforce Trigger
enables flows to start automatically when new records are created in Salesforce. For example, the flow below sends a Slack notification whenever a new contact is added.
id: salesforce_contact_triggernamespace: company.salestasks: - id: notify_sales_manager type: io.kestra.plugin.notifications.slack.SlackIncomingWebhook url: "{{ secret('SLACK_WEBHOOK_URL') }}" messageText: "New contact created"
triggers: - id: new_contact_trigger type: io.kestra.plugin.ee.salesforce.Trigger interval: "PT5M" connection: username: "{{ secret('SALESFORCE_USERNAME') }}" password: "{{ secret('SALESFORCE_PASSWORD') }}" authEndpoint: "{{ secret('SALESFORCE_AUTH_ENDPOINT') }}" query: "SELECT Id, FirstName, LastName, Email, Phone, Company, CreatedDate FROM Contact WHERE CreatedDate >= LAST_N_MINUTES:5"