Integrations
Use apps in workflows
Add an App action block from the designer's Apps section, pick the connection and the action, fill its fields with variables, and what a run with an app costs.
Guide3 min readUpdated 31 October 2026
An App action block runs one action of a connected app in a workflow: post to Slack, add a HubSpot contact, append a row to a Google Sheet, open a Linear issue. Its fields take the usual variables, so it can use the run's input and earlier blocks' outputs.
Before you start
- A workflow open in the designer. See Build your first workflow.
- The app connected, or a minute to connect it: the designer links you there and back.
Steps
- 1
Find the Apps section
Open Blocks in the designer. Apps, right after the AI blocks, lists the actions of the apps you've connected, under each app's name. Below them, Connect … takes you to another app's connect page and back to the workflow once it's connected. Search blocks finds apps and actions too.
- 2
Add the action
Drag an action onto the canvas or click it. It becomes an App action block named after the action, such as "Post a message", using your first working connection of that app. Action in its settings switches to another action; the apps you've connected are listed first.
- 3
Choose the connection
Under Connection, check which account the block uses. One that failed its last test is flagged in the designer's to-fix list as a warning; test it on the Integrations page.
- 4
Fill in the fields
Each action has its own fields; the designer's to fix list names any required one that's empty. Text fields take variables:
{{input.email}},{{steps.<id>.output}},{{last.output}}. Numbers and true/false are read from the text, JSON fields take JSON, and a list field also takesa, b, c. - 5
Test and publish
Run a Test run. It really calls the app, so use a test channel or record. Check the block's output on the Run tab, then Publish.
{ "type": "integration", "data": { "action": "slack.post_message", "connection_id": "…", "params": { "channel": "#sales", "text": "New lead: {{input.name}} ({{input.email}})" } }}You're done when
A test run shows the block succeeded with the app's answer as its output, and the message, row or record is in the app.
How the block runs
- Each field is filled in with its variables, then the action runs with the connection's credentials, with 20 seconds to finish.
- The block's output is the app's answer as JSON, so later blocks can use it with
{{steps.<id>.output}}, or one value of it with{{steps.<id>.output.<key>}}. - If the app refuses the call or doesn't finish within 20 seconds, the block fails with the reason in plain words, such as "Slack refused: this connection isn't allowed to do that. Check the key's permissions or scopes.", and the run stops.
- The run log shows the app, the action, the connection's name and the filled-in fields, never the credentials.
- If the connection was deleted, the run fails with "That app connection doesn't exist any more. Connect the app again and choose it."
Credits
A live run that contains an App action block costs 1 credit when it starts, like a run with an HTTP, Webhook, Slack or Email block. Test runs don't pay it. The app's own call costs no credits.
Templates that use apps
Daily digest to Slack, New lead to HubSpot and Slack, Support message to a Linear issue, Form to Google Sheets, Order status with Shopify and Weekly report email start with App action blocks in place. See Start from a template or Ask AI.
Still stuck?
Email us with what you tried and any request id. A person replies.