Workflows block library

Understand the building blocks that power workflows.

This is your comprehensive guide to understanding and leveraging the building blocks that power workflows. Workflows gives your team complete control and flexibility to build out virtually any go-to-market process you need, right inside Attio.

We’ll break down the various triggers and actions that you can use to automate your processes. At the heart of workflows are two primary components: trigger blocks that initiate the workflow, and action blocks that execute specific tasks. For a step by step walkthrough to set up workflows, use this guide.

Reference the Attio glossary to understand the feature terms used in these block descriptions.

Trigger blocks

Trigger blocks are the starting point of any workflow. They determine when a specific workflow should be initiated and what data will be passed to subsequent blocks. Here is an overview of the available trigger blocks.

Record triggers

Record command

Adds a button to records that you can manually click to run the workflow. Select an object input, and the command button will be available for all records of that object. To trigger it, you’ll click the Run workflow button on a record page, or you can also manually bulk enroll records in the workflow by selecting them in a table view of an all records page such as the Companies or People page or in a list, and clicking Run workflow.

Record created

Triggers every time a new record is created for a specific object. Select the object for the input.

Record updated

Triggers every time a record is updated for a specific object. Note this will not trigger whenever the attribute’s value is set during record creation. Select the object for the input, and optionally select an attribute if you only want it to trigger when that specific attribute is updated. If no attribute is selected, it will run every time any attribute on any record of that object is updated. (Note that this is only for object attributes, not list attributes. Learn the difference here. To trigger when any list attribute is updated, see the List entry updated trigger.)


Each records trigger provides the following as variable inputs you can use in subsequent blocks:

  • The record’s data

  • Who performed the trigger

  • When the trigger happened

  • The record's new and previous values (only for the Record updated block when an attribute is selected)

Lists triggers

List entry command

Adds a button to list entries that you can manually click to run the workflow. Select a list input. To trigger it, you’ll select the checkbox for the entry or entries in the list that you want to enroll in the workflow, click Run workflow, and then select the workflow.

List entry updated

Triggers every time an entry within a list is modified. Note this will not trigger whenever the attribute’s value is set during list entry creation. Select the list, and optionally select an attribute if you only want it to trigger when that specific attribute is updated. If no attribute is selected, it will run every time any entry in the list is updated. (Note that this trigger only monitors list attributes, not object attributes. Learn the difference here. To trigger when any object attribute is updated, see the Record updated trigger.)

Record added to list

Triggers every time a new record is added to a specific list. Select a list input.


Each lists trigger provides the following as variable inputs you can use in subsequent blocks:

  • The entry’s data

  • Who performed the trigger

  • When the trigger happened

  • The entry's new and previous values (only for the List entry updated block when an attribute is selected)

Data triggers

Attribute updated

Triggers whenever a specific attribute on a list or object is modified. Select the object or list containing the attribute, then select the attribute. Note this will also trigger whenever the attribute’s value is set during record or list entry creation.

This trigger provides the following as variable inputs you can use in subsequent blocks:

  • The parent record’s data for object attributes or the entry’s data for list attributes

  • The attribute’s new and previous values

  • Who performed the trigger

  • When the trigger happened

⁠The Attribute updated trigger will also happen when the specified attribute is given a value while creating a record or adding a record to a list. Compared to the Record updated and List entry updated blocks, Attribute updated may be preferable for status monitoring, notifications, and formula workflows.

Tasks triggers

Task created

Triggers when a new task is created. It provides the following as variable inputs you can use in subsequent blocks:

  • The task’s data

  • Who performed the trigger

  • When the trigger happened

Utilities triggers

Manual run

This is a manual trigger, meaning it allows you to start the workflow on demand by clicking the Trigger workflow button on that specific workflow's page. Using a manual trigger is a great way to test a workflow as you are building it. It provides the following as variable inputs you can use in subsequent blocks:

  • Who performed the trigger

  • When the trigger happened

Recurring schedule

Triggers on a defined schedule. Select the frequency with which you want the workflow to run: daily, weekly, or monthly, or select the advanced option to provide a Cron expression for a more complex frequency. Select a timezone, and also select the following, according to the frequency selected:

  • Daily: Designate the time of day the workflow should trigger

  • Weekly: Select the day(s) of the week you want the workflow to trigger, and designate the time of day

  • Monthly: Select the day(s) of the month you want the workflow to trigger, and designate the time of day

This trigger provides the following as variable inputs you can use in subsequent blocks:

  • When the trigger happened

Webhook received

Send application requests to a provided URL to trigger the workflow. This trigger provides the following as variable inputs you can use in subsequent blocks:

  • Webhook Payload Body

  • When the trigger happened

Action blocks

Once a workflow is triggered, the action blocks dictate what operations or processes should take place, and what data, if any, will be passed to subsequent blocks. Here is an overview of the available action blocks.

Records actions

Create or update record

Checks for and updates a record if it already exists, or creates a new record if it does not exist yet. Provides the created or updated record’s data as variable inputs you can use in subsequent blocks.

Inputs:

  • Object: Select the object of the records you want to create or update.

  • Matching attribute: Select a unique attribute, e.g., Domain for Companies, Email for People, or ID for Users or Workspaces. This will be used to check whether a record with a matching value already exists. If it does, the matching record will be updated. If it doesn't exist yet, a new record will be created.

  • Object attributes (optional): Optionally, designate the values that should be assigned to other object attributes. You can use variables to bring in dynamic values from previous workflow block steps.

  • Overwrite multi-select values (optional): When unchecked (default setting), any multi-select attributes listed above will have the new values added to the existing values, rather than replacing the existing values. Check the box if you want to instead replace existing values for multi-select attributes.

Create record

Creates a new record. Keep in mind, if the record may already exist, you may want to use “Create or update record” instead. Provides the created record’s data as variables you can use in subsequent blocks.

Inputs:

  • Object: Select the object of the records you want to create.

  • Object attributes (optional): Optionally, designate the values that should be assigned to other object attributes. You can use variables to bring in dynamic values from previous workflow block steps.

Find records

Finds records that match filter conditions so that you can use those records in subsequent blocks.

Inputs:

  • Object: Select the object of the records you want to find.

  • Condition: Set the filter(s) that will return the records you want to find. Learn how to set filter conditions or groups.

  • Limit: Designate the maximum number of records to find. Currently, there is a maximum limit of 100 records that you can find at once. Setting a limit is required.

Provides the following as variable inputs you can use in subsequent blocks:

  • Matching Records: The records found that met the filter conditions.

  • Number of matches: The number of records found that met the filter conditions.

Update record

Updates an existing record’s attribute values.

Inputs:

  • Object: Select the object of the records you want to update.

  • Record: Select the record you want to update. Either manually select a specific record if you want to update the same record each time the workflow runs, or use a variable to select a record involved in a previous workflow block that you want to update.

  • Attributes to update: Check the box next to each object attribute you want to update for the record. Then designate for those attributes what the value should update to. Manually select a value if it should always update to the same value each time the workflow runs, or use a variable to update to a dynamic value based on previous workflow blocks each time the workflow runs.

Lists actions

Add record to list

Adds a record to a specific list. Provides the created list entry’s data as variable inputs for subsequent blocks.

Inputs:

  • List: Select the list where the record should be added.

  • Record: Select the record you want to update. Either manually select a specific record if you want to add the same record to the list each time the workflow runs, or use a variable to select a record involved in a previous workflow block that you want to add to the list.

  • List attributes (optional): Optionally, designate the values that should be assigned to the entry’s list attributes. You can use variables to bring in dynamic values from previous workflow block steps.

Delete list entry

Deletes a specific entry from a list.

Inputs:

  • List: Select the list the entry is in that you want to delete.

  • Entry: Select the list entry you want to delete. Use a variable if you want to select an entry involved in a previous workflow block that you want to delete. Note that you must select an entry specifically, not a record, for this block to run successfully.

Find list entries

Finds list entries that match filter conditions so that you can use those entries in later blocks.

Inputs:

  • List: Select the list containing the entries you want to find.

  • Condition: Set the filter(s) that will return the list entries you want to find. Learn how to set filter conditions or groups.

  • Limit: Designate the maximum number of entries to find. Currently, there is a maximum limit of 100 entries that you can find at once. Setting a limit is required.

Provides the following as variable inputs you can use in subsequent blocks:

  • Matching list entries: The list entries found that met the filter conditions.

  • Number of matches: The number of list entries found that met the filter conditions.

Update list entry

Modifies a specific entry within a list.

Inputs:

  • List: Select the list the entry is in that you want to update.

  • Entry: Select the list entry you want to update. Use a variable if you want to select an entry involved in a previous workflow block that you want to update. Note that you must select an entry specifically, not a record, for this block to run successfully.

  • Attributes to update: Check the box next to any list attributes you want to update for the entry. Then designate for those attributes what the value should update to. Manually select a value if it should always update to the same value each time the workflow runs, or use a variable to update to a dynamic value based on previous workflow blocks each time the workflow runs.

Tasks actions

Complete task

Marks a specified task as complete.

Input:

  • Task: Use a variable to select the task from a previous workflow block that you want to mark as completed.

Create task

Creates a new task. Provides the created task’s data as variable inputs for subsequent blocks.

Input:

  • Task: Input the text for the task. Optionally, you can use variables to mention data points from previous workflow blocks.

  • Due (optional): Select a date manually if the tasks created should always have the same due date, or use a variable to reference a date from a previous workflow block. If empty, the task will not have a due date.

  • Linked records (optional): Manually select a record if the task should always be linked with the same record, or use a variable to link tasks to dynamic records used in previous workflow blocks. If empty, the task will not be linked to any records.

  • Assignees (optional): Manually select a user if the task should always be assigned to the same person, or use a variable to assign the task to a dynamic user referenced in a previous workflow block. When the workflow runs, the person assigned the task will be notified that the workflow assigned a task to them. If empty, the task will not be assigned to anyone.

Calculations actions

Adjust time

Modifies a given time, either referencing an attribute used prior in the workflow via a variable or a manually set timestamp, by a defined amount. Provides the adjusted time as a variable input for subsequent blocks.

Inputs:

  • Timestamp: Either add a manual timestamp to be used each time the workflow runs, or use a variable to use a dynamic timestamp from a previous workflow block.

  • Offset: Designate the number of units the timestamp should be offset by.

  • Unit: Select the unit for how long the timestamp should be offset - either Days, Hours, Minutes, Months, Seconds, Weeks, or Years.

For example, if you want to create a task that is due five days after a list entry enters a specific stage, you could set up the following:

  1. List entry updated (trigger): Select the list and the status attribute

  2. Filter: Select the stage which, when an entry moves into it, should trigger the task creation

  3. Adjust time: Provide the timestamp of when the entry was updated, and offset it by 5 days

  4. Create task: Provide the adjusted timestamp for the Due input

Aggregate values

Aggregates a list of numerical values using a specified aggregation method. Provides the aggregated value as a variable input for subsequent blocks. Supports sum, average, min, and max.

Inputs:

  • Values: Use a variable to select the numerical attribute you want to aggregate.

  • Type: Select the type of aggregation you want to do: sum, average, min, or max.

For example, this block would aggregate the sum of the deal values for all deals associated with a record:

Formula

Executes a specified mathematical formula. Provides the formula’s result as a variable input for subsequent blocks. Supports +, -, /, and *.

Inputs:

  • Formula: Type the mathematical formula, using variables to provide the values you want to use in your calculation.

As an example, you could use a variable to input a "Quantity purchased” attribute, times a “Price” attribute, to result in the total price of all items.

Follow the Formula block with an Update list entry or Update record block to save the Result in an attribute.

Random number

Generates a random number between a minimum and a maximum. Provides the random number as a variable input for subsequent blocks.

Inputs:

  • Minimum: Designate a number or use a variable to provide the minimum value your random number should be.

  • Maximum: Designate a number or use a variable to provide the maximum value your random number should be.

One example of a use case for this block is randomly assigning things to team members. For example, if you had two Sales team members and want to route half of new leads to each member, you could generate a random number between 0 and 1, follow it by an If / else block, and when the number is over 0.5 assign to one team member, and when it’s under 0.5 assign to the other team member. If one team member should have more leads assigned than the other, you can adjust the If / else block’s condition numbers accordingly.

Conditions actions

Note: When a conditions action is the last block executed in a run, the conditions block will not cost a credit (though the prior blocks that ran will be charged credits). This will happen when the run matches a condition that has no deeper path associated with it. See Workflows billing for more information.

Filter

Applies a specific filter based on set conditions. The workflow run will only continue if the conditions are met. If the conditions are not met, the run will stop.

Inputs:

  • Condition: Set the filter(s) that must be true for the workflow to continue.

Learn how to set filter conditions or groups.

If/else

Creates Is true and Is false output paths and routes the run based on conditional logic.

Inputs:

  • Condition: Set the filter(s) which, when true, will cause the workflow to continue on the Is true path, and when false causes it to continue on the Is false path.

Learn how to set filter conditions or groups. Once you have set your filter conditions, you can select the next block for the Is true and Is false paths.

Switch

Like If/else blocks, you can route the run based on conditional logic, but you can have several paths instead of just two.

Inputs:

  • Condition: Set filter(s) that must be true for the workflow to follow each path.

Learn how to set filter conditions or groups. Once you have set your filter conditions, you can select the next block for each separate path.

Note: In cases where multiple paths are true, paths will be evaluated in order (Condition 1, Condition 2, Condition 3, Default, etc.), and the first condition that returns 'true' will be the only one executed.

Set filter conditions or groups

First click Add filter, select the attribute you want to filter by based on previous blocks, then select the conditions for your filter (is, is not, contains, etc.). If applicable, select the value of the attribute to filter by.

Click the + to add additional conditions, or select the ⋮ icon next to a condition and choose Convert to advanced filter. To combine and nest your filters with ‘and/or’ modifiers, click on the ⋮ icon to the right of a filter followed by Convert to group. You can then add more filters and toggle And/Or for advanced filtering. ⁠

To remove a filter or condition, select the ⋮ icon to the right of it, then click Delete condition or Delete filter.

Delays actions

Delay

Pauses the workflow run for a specified duration.

Inputs:

  • Delay: Designate the amount of time the workflow should wait before continuing to the next step. Enter a manual number or use a variable to bring in a dynamic numeric value from a previous step. Choose a unit: Seconds, Minutes, Hours, Days, or Weeks.

Delay until

Pauses the workflow until a specific date and time.

Inputs:

  • Delay until: Designate the date and time when the workflow should continue to the next step. Select a manual date and time if it should always be the same, or use a variable to bring in a dynamic timestamp value from a previous step.

Agents actions

Research record

Deploys an AI Agent to answer questions based on research it performs across the web.

For a video walkthrough of the research record block, see Attio Academy.

Inputs:

  • Record: Select the record you to research, using a variable if you want to provide a record from a previous block.

  • Questions: Enter a question you’d like answered by the agent. You can add additional questions by clicking the + Add question button and remove questions by clicking the trash can icon next to a given question.

Follow this block with another action block to use or save the tags.

Note: The agent may not be able to reliably reference some websites such as LinkedIn that are private or require a login.

Save Agent block outputs

Keep in mind for all Agent actions, using the blocks by themselves will not save the responses anywhere. You must add a block after an Agent block to tell the workflow what you want to do with the text returned.

You can use the answers received directly in a Condition block or any other block that accepts text as a variable (e.g. Prompt Completion).

If you’d like to store an answer, you’ll need to create a text type attribute within your Object settings first. Then, after the Agent block, follow with an Update record block to save the text in the attribute you’ve created, using a variable to bring in the response from the Agent block as the attribute value.

AI actions

Classify record

Uses AI to summarize the a record into a set of tags based on all its attributes.

Inputs:

  • Record: Select the record you want AI to classify, using a variable if you want to provide a record from a previous block.

  • Tags: Add the tags AI should choose between when classifying the record. Type a tag and press ⏎ Enter or the return key to add each one.

  • Allow multiple tags (optional): When checked, this means AI can select more than one tag for each record. When not checked, AI can only choose one tag for each record.

Follow this block with another action block to use or save the tags.

Classify text

Uses AI to classify input text into a set of tags.

Inputs:

  • Input: Provide the text you want AI to classify, using a variable if you want to bring in text from a previous block.

  • Tags: Provide the tags AI should choose between when classifying the text. Type a tag and press ⏎ Enter or the return key to add each one.

  • Allow multiple tags (optional): When checked, this means AI can select more than one tag for each record. When not checked, AI can only choose one tag for each record.

Follow this block with another action block to use or save the tags.

Prompt completion

Uses AI to generate text based on a definable prompt. Provides the result as a variable input for subsequent blocks.

Inputs:

  • Prompt: Type in an explanation of what you want AI to generate text about. You can reference variables within the prompt input to explain what they are and how they should be used.

Follow this block with another action block to use or save the text.

Summarize record

Uses AI to provide a written text summary of the attributes for a record.

Inputs:

  • Record: Select the record you want AI to summarize, using a variable if you want to provide a record from a previous block.

  • Guidance: Type an explanation of what you want AI to summarize for the record, using variables if there are any specific attributes you want it to mention.

Follow this block with another action block to use or save the text.

Save AI block outputs

Keep in mind for all AI actions, using the blocks by themselves will not save the tags or text anywhere. You must add a block after an AI block to tell the workflow what you want to do with the tags or text generated.

To save tags or text in an attribute, create the attribute first:

  • For Classify record and Classify text blocks, create a select or multi-select type attribute with the exact same tags as you provide in the block

  • For Prompt completion and Summarize record blocks, create a text type attribute to store the text generated

After the AI block, follow with an Update record block to save the tags or text in the attribute you’ve created, using a variable to bring in the tags or text from the AI block as the attribute value.

Workspace actions

Broadcast message

Sends a popup notification to people in your workspace.

Inputs:

  • Style: Choose a style to convey the sentiment of the message you are broadcasting. Error shows a red error icon, Neutral shows a grey informational icon, Success shows a green checkmark icon, and Warning shows a yellow caution icon alongside the message.

  • Target: Select which users should see the message.

  • Title: Give the message a title.

  • Description (optional): Type the actual content of the message you are broadcasting.

  • Duration in seconds: Designate how long the message should remain visible.

Optionally, insert variables for title, description, and duration in seconds to include dynamic values from previous block outputs.

Celebration

Initiates a celebratory action with a confetti animation for people in your workspace.

Inputs:

  • Type: Choose between Confetti, Cannons, and Fireworks animations. Select an option to see a preview of what the animation looks like.

  • Target: Select which users should see the animation.

Round robin

Selects a user from a defined set of users each time the workflow runs, cycling through the users in order so that each user is selected once before starting over at the start of the list. Provides the chosen user as a variable input for subsequent blocks.

Inputs:

  • Users: Select which users should be options for the round robin.

Utilities actions

Loop

When you need to take the same action(s) on a list of multiple items, for example all Team members of a Company, a Loop block allows you to run through a set of block actions for each item.

Inputs:

  • Iterable: Use a variable to select the list of things to iterate over. You can either select an attribute that allows for multiple values, or any attribute of objects linked by multi-reference attributes.

  • Limit (optional): Designate the maximum number of iterations to run, meaning how many values the loop should cycle through before stopping. If left blank, it will loop over every value.

Click Select block under First step to select the first block you want to run in the loop. Add additional loop steps from the canvas.

Navigating loops on the canvas:

  • The dotted rectangle attached to a Loop block borders around the steps that will be iterated on within the loop.

  • Add steps within the loop border that should happen with each iteration.

  • Add steps after the loop border that should happen after all loop iterations have been completed.

You can use the following as variables in action blocks within a loop:

  • Current item: The item the loop is currently iterating over

  • Item position: The numerical position of the current item in the list of items the loop will iterate over

  • Number of items: The total number of items the loop will iterate over

Parse JSON

Use this block to parse and extract structured data from a JSON string. Create a field for each data point you want to extract. You can then use the fields holding extracted data as variable inputs for subsequent blocks.

Inputs:

  • Raw JSON string: Provide the JSON string you want to extract data from. Optionally, use a variable to bring in text from a previous workflow block, such as an HTTP request block response.

  • Path: For each field, provide a property path evaluated against the provided raw JSON to extract a value.

  • Output Type: For each field, select the expected data type of the parsed value. This must match what is evaluated at the end of the path, or it will fail (e.g. name.first Number will fail).

  • Alias (optional): For each field, provide a helpful name to identify the field in the workflow.

When providing a Path for each field, use the same syntax you would use to traverse the object in JavaScript. For example:

  • To access something on the root of the object, provide the key name, i.e. emails.

  • To access something in a nested object, provide all the keys to traverse, i.e. name.first.

  • To access an element in an array, use [] along with the index emails[0].

Note: A path that evaluates to nothing will return an empty value (it will not fail).

Send HTTP request

Makes an HTTP request, with support for DELETE, GET, HEAD, PATCH, POST, and PUT methods. Provides the response status code and body as variable inputs for subsequent blocks. This allows you to send data to or kick off a process in another system from an Attio workflow.

Inputs:

  • Method: Designate the method you want to use.

  • URL: Provide URL to which Attio will send the request using any combination of hard-coded text and variable inputs from prior steps.

  • Headers (optional): Provide values for the headers that the receiving system requires, using any combination of hard-coded text and variable inputs from prior steps. Custom headers are also supported, though these headers are not, and we may also block other headers as needed to maintain platform security.

  • Content-Type header (optional): Specify the format of your body using any combination of hard-coded text and variable inputs from prior steps.

  • Body (optional): Construct a body in the appropriate format required by the receiving system using any combination of hard-coded text and variable inputs from prior steps. For example, a JSON body may look something like this:

Third-party blocks

Workflows aren't limited to just our native blocks. With third-party integrations, other apps can create both trigger and action blocks.

To utilize these blocks, you'll need to connect your Attio workspace to the corresponding third-party apps. We support Slack, Outreach, Mailchimp, Mixmax, and Typeform.