---
title: Workflow Actions
description: Learn about the actions available in Twenty workflows.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';

## About Actions

Actions define what happens after a trigger fires. You can chain multiple actions together to build complex automations.

<Tip>
- Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
- Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
- Give each action a descriptive name for easier maintenance
</Tip>

## Record Actions
<img src="/images/user-guide/workflows/workflow_actions.png" style={{width:'100%'}}/>

### Create a Record
Adds a new record to a selected object.

**Configuration**:
- Select the target object
- Fill out the required and optional fields
- Use data from previous steps or input values manually to populate fields

**Output**: The newly created record data is available for use in subsequent steps.

### Update Record
Modifies an existing record in a selected object.
<img src="/images/user-guide/workflows/update_record.png" style={{width:'100%'}}/>

**Configuration**:
- Select the target object
- Choose the specific record to update.
  - You can either choose a fixed record, using the drop down menu displaying all available records.
  - Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
- Select fields to modify and enter new values

**Output**: The updated record data is available for use in subsequent steps.


### Delete Record
Removes a record from a selected object.

**Configuration**:
- Select the target object
- Choose the specific record to delete

**Output**: The deleted record data remains available for use in subsequent steps.

### Search Records
Finds records within a selected object using filter conditions.

**Configuration**:
- Select the object to search
- Set filter criteria to narrow results
- Configure sorting and limits

**Output**: Returns matching records that can be used in subsequent steps.

<Note>
**Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
</Note>

**Best Practice**: Use [branches](/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
### Upsert Record
Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.

<img src="/images/user-guide/workflows/upsert_double_identifier.png" style={{width:'100%'}}/>

**Configuration**:
- Select the target object
- Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
- Fill out the field values. Do not forget to populate at least one of the unique identifiers.
<Note>
**Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
</Note>
<img src="/images/user-guide/workflows/upsert_simple_identifier.png" style={{width:'100%'}}/>
- Use data from previous steps to populate fields

**How it works**:
1. Searches for a record matching your criteria
2. If found → updates the existing record
3. If not found → creates a new record

**Output**: The created or updated record data is available for use in subsequent steps.

## Flow Actions

### Iterator
**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.

**Configuration**:
- Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
- Define the actions to perform on each record in the loop.
<Note>
- You can add several actions within an iterator.
- When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
</Note>

- Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.

<VimeoEmbed videoId="1146577247" title="Video demonstration" />


### Filter
Filters records based on specified conditions, allowing only records that meet the criteria to pass through.

**Configuration**:
- Select the record to filter
- Define filter conditions and criteria
- Configure which records should pass through to subsequent steps
<Note>
1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
</Note>

### Delay
Pauses workflow execution for a specified duration or until a specific date/time.

**Delay Types**:

| Type | Description |
|------|-------------|
| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
| **Scheduled Date** | Wait until a specific date and time |

**Configuration for Duration**:
- Set days, hours, minutes, and/or seconds
- Combine multiple units (e.g., 2 days and 4 hours)

**Configuration for Scheduled Date**:
- Select a date and time
- Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)

**Use cases**:
- Wait 24 hours before sending a follow-up email
- Pause until an opportunity's close date
- Schedule actions for business hours

<Note>
The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
</Note>

**Limits & Credits**:
- **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
- **1 credit consumed** when the Delay node executes, regardless of duration
- **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay

## Communication Actions

### Send Email
Sends an email from your workflow. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
Not suited for newsletters (which require richer formatting) or automated email sequences.

**Prerequisites**: Add an email account in Settings → Accounts

**Configuration**:
- Select the sender email account
<Note>
You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
</Note>

For all the following steps, you can reference variables from previous steps for personalization.

- Enter recipient email address.
<Note>
Only one recipient is possible at the moment.
</Note>
- Set subject line.
- Compose message body. You can format links, create numbered list, bullet point lists, add attachments.
<Note>
Adding HTML signatures is not possible at the moment.
</Note>

### Form
Prompts a form during workflow execution to collect user input. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
<Warning>
**Forms are designed for manual triggers only**. For workflows with other triggers (Record Created, Updated, etc.), forms are only accessible via the workflow run interface, which is not the expected user experience. A notifications center will be released in 2026 to properly support forms in automated workflows.
</Warning>
**Configuration**:
- Configure the fields that users will be asked to fill. For each field, choose
  - a type among text, number, date, a given record, a select field. Select fields from all objects are available.
  - a label
  - a default value under `Placeholder` (optional)
- Edit the form title

**Output**: Form responses are available for use in subsequent steps.

**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.

**How to fill the form**:
- Trigger your manual workflow from the command menu `Cmd K`
- Fill the form that is displayed in the side panel and click `Submit`.
<Note>
The fields cannot be made mandatory.
</Note>

<VimeoEmbed videoId="1147277989" title="Video demonstration" />



## Integration Actions

### Code
Runs custom JavaScript within your workflow.

**Configuration**:
- Access variables from previous steps. You can edit the variables names dynamically.
<VimeoEmbed videoId="1147281795" title="Video demonstration" />
- Write JavaScript code in the editor
- Return variables for use in subsequent steps
- Test code directly in the step

<Note>
If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the logic function.
</Note>

<Tip>
**Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
</Tip>

<Tip>
Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
</Tip>

### HTTP Request
Sends a request to an external API as part of your workflow.
<img src="/images/user-guide/workflows/http_action.png" style={{width:'100%'}}/>


**Configuration**:
- Enter the API endpoint URL. Using parameters from previous steps is possible.
- Select HTTP method (GET, POST, PUT, PATCH, DELETE)
- Add required headers and values
- Provide sample response for structure preview

## AI Actions

### AI Agent - Coming Soon
Runs an AI agent within your workflow to perform intelligent tasks.

**Configuration**:
- **Agent**: Select an existing AI agent or use the default agent
- **Prompt**: Write the instruction for the AI agent
- Reference variables from previous steps in the prompt

**What AI Agents can do**:
- Analyze and summarize data
- Classify or categorize records
- Generate text content
- Make decisions based on data
- Interact with your CRM data using tools

**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.

<Note>
AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/user-guide/workflows/capabilities/workflow-credits) for details.
</Note>

<Note>
AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/user-guide/permissions-access/capabilities/permissions) for details.
</Note>
