# Asana

Create, find and update tasks and subtasks in Asana, comment on them, move them between projects and sections, tag them, attach files, and manage projects, sections, tags and users.

## Connect Asana

1. In the sidebar, open **Connections** and press **Add connection**.
2. Type `asana` and choose **Asana**.
3. Press **Sign in with Asana**, then choose your account in Asana’s window and allow access.

Sign in with Asana, or paste a personal access token (Asana › My settings › Apps › Developer console › Create new token). A token acts as the person who made it, in the workspaces they belong to.

**What if it says “Asana sign-in isn’t set up here”?**

Signing in with Asana needs a Asana app on this installation, and it has none yet.

**On Cloud:** The sheet says “It’s set up once for everyone who uses this service, not by an organization.”

**Self-hosted:** An admin of the installation sees **Set up Asana sign-in** instead, and sets it up once for everyone. Everyone else sees who to ask.

1. Create an app in Asana’s developer settings ([Asana’s guide](https://app.asana.com/0/my-apps)).
2. In GoRunner, copy the **Redirect address to add in Asana’s developer settings**, and add it to the app.
3. Paste the **Client ID** and **Client secret**, then press **Save and sign in**.

[Set up a sign-in app](https://docs.gorunner.io/self-host/oauth-apps#other-providers)

**Can I use my own Asana app?**

Yes. In the sheet, open **Use your own Asana app** and paste its **Client ID** and **Client secret**. Add the redirect address it shows to your app first. The connection then signs in through your app instead of the installation’s.

[Connections](https://docs.gorunner.io/build/connections) says how to sign in again, rename or delete it. In a product that embeds GoRunner, **Add connection** can be missing: then [your provider makes connections](https://docs.gorunner.io/embed/customer-connections) for you.

## Start a workflow

Add a trigger and choose **Asana**. The trigger uses the same connection as the steps.

### On Asana Event

Fires when Asana delivers events for the project, task, team or workspace below. Publishing the workflow registers an Asana webhook; unpublishing removes it. Every delivery is verified (X-Hook-Signature) and an unsigned or wrongly signed one is refused. Asana sends events in batches: the events of one delivery that match start one run, all of them under events, the first one's fields at the top. Asana's retry of a delivery starts no second run. Asana removes a webhook it could not deliver to for 24 hours; publish again to restore it.

- **Watch · Required**: What to watch. A team or workspace delivers only project, goal, portfolio and membership events (Asana's rule). Options: A project (its tasks, subtasks, comments, sections), A task (it, its subtasks and comments), A team (its projects, goals, portfolios and members), A workspace (its projects, goals, portfolios and members). Default: A project (its tasks, subtasks, comments, sections).
- **Workspace · Optional**: The workspace to watch, or the one to choose the project or team from.
- **Project · Required**: The project to watch. Shows when **Watch** is **A project (its tasks, subtasks, comments, sections)**.
- **Task · Required**: The task's id, or its link in Asana. Shows when **Watch** is **A task (it, its subtasks and comments)**.
- **Team · Required**: The team to watch. Shows when **Watch** is **A team (its projects, goals, portfolios and members)**.
- **On Changes To · Optional**: Which records' events start the workflow. Empty: every event of a project or task. A team or workspace takes Projects, Goals, Portfolios, Team members and Workspace members only, and needs at least one. Options: Tasks and subtasks, Comments and activity, Sections, Attachments, Projects, Tags, Team members, Workspace members, Project members, Goals, Portfolios.
- **Events · Optional**: Which kinds of event start the workflow. Empty: all of them. Added and removed are a record put into or taken out of another (a task into a project or section). Options: Added, Changed, Removed, Deleted, Restored.
- **Changed Fields · Optional**: Only changes to these fields count as Changed, comma-separated (Asana's field names). Empty: a change to any field. Shows when **Watch** is **A project (its tasks, subtasks, comments, sections)** or **A task (it, its subtasks and comments)**.

A later step can use its data, such as `{{trigger.action}}`, `{{trigger.change}}`, `{{trigger.count}}` and 5 more. See [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Do things in Asana

Add an **Asana** step, choose a **Resource**, then an **Operation**. Choose a row to see its fields.

- [Task](https://docs.gorunner.io/apps/asana#fields-f-task): Create · Get · Get Many · Update · Delete · Move to Section · Search
- [Subtask](https://docs.gorunner.io/apps/asana#fields-f-subtask): Create · Get Many
- [Task Comment](https://docs.gorunner.io/apps/asana#fields-f-taskcomment): Add · Get Many · Remove
- [Task Tag](https://docs.gorunner.io/apps/asana#fields-f-tasktag): Add · Remove
- [Task Project](https://docs.gorunner.io/apps/asana#fields-f-taskproject): Add · Remove
- [Project](https://docs.gorunner.io/apps/asana#fields-f-project): Create · Get · Get Many · Update · Delete
- [Section](https://docs.gorunner.io/apps/asana#fields-f-section): Create · Get Many
- [Tag](https://docs.gorunner.io/apps/asana#fields-f-tag): Create · Get Many
- [Attachment](https://docs.gorunner.io/apps/asana#fields-f-attachment): Upload · Get · Get Many · Delete
- [User](https://docs.gorunner.io/apps/asana#fields-f-user): Get · Get Many

Later steps read a step’s output by its name: see [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Limits

- A reply from Asana can be up to 16 MB (a file download can have its own limit). A larger one fails the step; it is never cut short.
- When Asana says to slow down (429), the step waits as long as it asks, if the step’s time allows. Otherwise it fails and says when to try again.

Not in your list? See [When an app isn’t here](https://docs.gorunner.io/apps/when-an-app-isnt-here#q-not-in-list).

## For developers

In the API, which calls apps pieces, Asana is `pieceId: "asana"` with `actionId: "asana"`, set by `resource` and an `operation_…` field, such as `operation_attachment`. Its trigger is `asanatrigger` / `asana_event`. [Get an app](https://docs.gorunner.io/api/apps/get-app) returns every field.

It can change something outside the run (`writes_external`). See [How versions and side effects work](https://docs.gorunner.io/apps#q-versions).

### Asana › Task

### Create

- **Workspace · Optional**: The workspace: where a new task goes (unless it goes into Projects), the workspace to search, or the one an Assignee filter looks in.
- **Name · Required**: The task's name.
- **Projects · Optional**: Projects to put the task in: ids or links, separated by commas. With projects, the Workspace may be left empty.
- **Notes · Optional**: The task's description, as plain text.
- **Assignee · Optional**: Who does it: "me", an email address, or a user id.
- **Due On · Optional**: The due date (YYYY-MM-DD). Set this or Due At, not both.
- **Due At · Optional**: The due date and time (ISO 8601 with a zone, such as 2026-11-07T17:00:00Z).
- **Start On · Optional**: The start date (YYYY-MM-DD). Asana needs a due date with it, later than the start.
- **Custom Fields · Optional**: Custom field values by custom field id, such as {"1201234567890555": "High", "1201234567890556": 3}. An enum takes the option's id.
- **More Fields · Optional**: Any other task property Asana takes, such as {"html_notes": "\<body>…\</body>", "resource_subtype": "milestone", "liked": true}.
- **Tags · Optional**: Tag ids to put on the task, separated by commas.
- **Followers · Optional**: Who follows the task: "me", email addresses or user ids, separated by commas.

### Get

- **Task · Required**: The task's id, or its link in Asana.
- **Fields · Optional**: The properties to return, comma-separated (Asana's opt_fields), such as name,assignee.name,due_on,custom_fields. Empty returns the whole record.

### Get Many

- **Workspace · Optional**: The workspace: where a new task goes (unless it goes into Projects), the workspace to search, or the one an Assignee filter looks in.
- **Project · Optional**: Tasks in this project.
- **Section · Optional**: Tasks in this section of the project.
- **Assignee · Optional**: Tasks assigned to "me", an email address or a user id, in the Workspace. Set a Project, a Section, or an Assignee with a Workspace.
- **Completed Since · Optional**: Keep incomplete tasks and those completed since this time (ISO 8601). "now" keeps incomplete tasks only.
- **Modified Since · Optional**: Only tasks changed since this time (ISO 8601).
- **Return All · Optional**: Read every task, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many tasks to return (1–2000). Default: 50. Shows when **Return All** is off.
- **Fields · Optional**: The properties to return, comma-separated (Asana's opt_fields), such as name,assignee.name,due_on,custom_fields. Empty returns: name, resource_subtype, completed, completed_at, assignee.name, due_on, due_at, start_on, notes, permalink_url, created_at, modified_at, parent.name, projects.name, tags.name.

### Update

- **Task · Required**: The task's id, or its link in Asana.
- **Name · Optional**: A new name. Empty keeps the name.
- **Completed · Optional**: Mark the task complete or incomplete. Options: Leave as is, Mark complete, Mark incomplete. Default: Leave as is.
- **Notes · Optional**: The task's description, as plain text.
- **Assignee · Optional**: Who does it: "me", an email address, or a user id.
- **Due On · Optional**: The due date (YYYY-MM-DD). Set this or Due At, not both.
- **Due At · Optional**: The due date and time (ISO 8601 with a zone, such as 2026-11-07T17:00:00Z).
- **Start On · Optional**: The start date (YYYY-MM-DD). Asana needs a due date with it, later than the start.
- **Custom Fields · Optional**: Custom field values by custom field id, such as {"1201234567890555": "High", "1201234567890556": 3}. An enum takes the option's id.
- **More Fields · Optional**: Any other task property Asana takes, such as {"html_notes": "\<body>…\</body>", "resource_subtype": "milestone", "liked": true}.

### Delete

- **Task · Required**: The task's id, or its link in Asana.

### Move to Section

- **Task · Required**: The task's id, or its link in Asana.
- **Project · Optional**: The project whose sections to choose from (it is not sent: the section belongs to it).
- **Section · Required**: The section to move the task to. It goes to the top of the section and leaves the project's other sections.

### Search

- **Workspace · Optional**: The workspace: where a new task goes (unless it goes into Projects), the workspace to search, or the one an Assignee filter looks in.
- **Search Text · Optional**: Words in the task's name or description. Search needs a premium Asana workspace.
- **Completed · Optional**: Completed tasks, incomplete ones, or both. Options: Either, Yes, No. Default: Either.
- **Assignee · Optional**: Assigned to any of these: "me" or user ids, separated by commas.
- **In Projects · Optional**: In any of these projects: ids or links, separated by commas.
- **In Sections · Optional**: In any of these sections: ids, separated by commas.
- **Tagged · Optional**: With any of these tags: ids, separated by commas.
- **Subtasks · Optional**: Subtasks only, top-level tasks only, or both. Options: Either, Yes, No. Default: Either.
- **Due After · Optional**: Due after this date (YYYY-MM-DD).
- **Due Before · Optional**: Due before this date (YYYY-MM-DD).
- **More Filters · Optional**: Any other filter of Asana's task search, by its name, such as {"modified_at.after": "2026-11-01T00:00:00Z", "custom_fields.1201234567890555.value": "High"}.
- **Sort By · Optional**: The order of the results. Options: Last modified, Created, Due date, Completed, Likes, Best match. Default: Last modified.
- **Oldest First · Optional**: Ascending order. Off puts the newest (or highest) first. Off by default.
- **Limit · Optional**: How many tasks to return (1–100). Asana's search returns at most 100 per search, with no next page: narrow the filters to find more. Default: 50.
- **Fields · Optional**: The properties to return, comma-separated (Asana's opt_fields), such as name,assignee.name,due_on,custom_fields. Empty returns: name, resource_subtype, completed, completed_at, assignee.name, due_on, due_at, start_on, notes, permalink_url, created_at, modified_at, parent.name, projects.name, tags.name.

### Asana › Subtask

### Create

- **Parent Task · Required**: The task's id, or its link in Asana.
- **Name · Required**: The subtask's name.
- **Notes · Optional**: The task's description, as plain text.
- **Assignee · Optional**: Who does it: "me", an email address, or a user id.
- **Due On · Optional**: The due date (YYYY-MM-DD). Set this or Due At, not both.
- **Due At · Optional**: The due date and time (ISO 8601 with a zone, such as 2026-11-07T17:00:00Z).
- **Start On · Optional**: The start date (YYYY-MM-DD). Asana needs a due date with it, later than the start.
- **Custom Fields · Optional**: Custom field values by custom field id, such as {"1201234567890555": "High", "1201234567890556": 3}. An enum takes the option's id.
- **More Fields · Optional**: Any other task property Asana takes, such as {"html_notes": "\<body>…\</body>", "resource_subtype": "milestone", "liked": true}.

### Get Many

- **Parent Task · Required**: The task's id, or its link in Asana.
- **Return All · Optional**: Read every subtask, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many subtasks to return (1–2000). Default: 50. Shows when **Return All** is off.
- **Fields · Optional**: The properties to return, comma-separated (Asana's opt_fields), such as name,assignee.name,due_on,custom_fields. Empty returns: name, resource_subtype, completed, completed_at, assignee.name, due_on, due_at, start_on, notes, permalink_url, created_at, modified_at, parent.name, projects.name, tags.name.

### Asana › Task Comment

### Add

- **Task · Required**: The task's id, or its link in Asana.
- **HTML · Optional**: Write the comment in Asana's rich text HTML (\<b>, \<i>, \<a href>, \<ul>, @-mentions as \<a data-asana-gid>) instead of plain text. Off by default.
- **Text · Required**: The comment. As HTML, it is wrapped in \<body> when it does not start with it.
- **Pin · Optional**: Pin the comment to the top of the task. Off by default.

### Get Many

- **Task · Required**: The task's id, or its link in Asana.
- **Include Activity · Optional**: Also return Asana's activity entries (assigned, moved, due date changed). Off returns comments only. Off by default.
- **Newest First · Optional**: Newest first. Off lists them oldest first, as the task shows them. Off by default.
- **Return All · Optional**: Read every comment, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many comments to return (1–2000). Default: 50. Shows when **Return All** is off.

### Remove

- **Comment · Required**: The comment's id (the gid of its story). Only its author can delete it.

### Asana › Task Tag

### Add and Remove

- **Task · Required**: The task's id, or its link in Asana.
- **Workspace · Optional**: The workspace whose tags to choose from (it is not sent).
- **Tag · Required**: The tag.

### Asana › Task Project

### Add

- **Task · Required**: The task's id, or its link in Asana.
- **Workspace · Optional**: The workspace whose projects to choose from (it is not sent).
- **Project · Required**: The project.
- **Section · Optional**: Put the task in this section of the project (at its end, unless a position is set).
- **Insert After · Optional**: Place the task right after this task of the project (its id). Set this or Insert Before, not both.
- **Insert Before · Optional**: Place the task right before this task of the project (its id).

### Remove

- **Task · Required**: The task's id, or its link in Asana.
- **Workspace · Optional**: The workspace whose projects to choose from (it is not sent).
- **Project · Required**: The project.

### Asana › Project

### Create

- **Workspace · Required**: The workspace the project is in.
- **Team · Optional**: The team the project belongs to. Asana requires one in an organization (a company workspace); a personal workspace has no teams.
- **Name · Required**: The project's name.
- **Notes · Optional**: The project's description, as plain text.
- **Color · Optional**: The project's color. Empty leaves it as it is. Options: Dark pink to No color (19 options).
- **Due On · Optional**: The due date (YYYY-MM-DD).
- **Start On · Optional**: The start date (YYYY-MM-DD). Asana needs a due date with it.
- **Privacy · Optional**: Who can find the project. Empty leaves Asana's default (or the current setting). Options: Everyone in the workspace, Only members.
- **Default View · Optional**: The view the project opens in. Options: List, Board, Calendar, Timeline.
- **Owner · Optional**: The project's owner: "me", an email address or a user id.
- **More Fields · Optional**: Any other project property Asana takes, such as {"html_notes": "\<body>…\</body>", "custom_fields": {"1201234567890555": "High"}}.

### Get

- **Workspace · Optional**: The workspace whose projects to choose from (it is not sent).
- **Project · Required**: The project.
- **Fields · Optional**: The properties to return, comma-separated (Asana's opt_fields), such as name,assignee.name,due_on,custom_fields. Empty returns the whole record.

### Get Many

- **Workspace · Required**: The workspace the project is in.
- **Archived · Optional**: Which projects to list. Options: Active projects, Archived projects, Both. Default: Active projects.
- **Return All · Optional**: Read every project, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many projects to return (1–2000). Default: 50. Shows when **Return All** is off.
- **Fields · Optional**: The properties to return, comma-separated (Asana's opt_fields), such as name,assignee.name,due_on,custom_fields. Empty returns: name, archived, color, notes, owner.name, team.name, workspace.name, due_on, start_on, privacy_setting, permalink_url, created_at, modified_at.

### Update

- **Workspace · Optional**: The workspace whose projects to choose from (it is not sent).
- **Project · Required**: The project.
- **Name · Optional**: A new name. Empty keeps the name.
- **Notes · Optional**: The project's description, as plain text.
- **Color · Optional**: The project's color. Empty leaves it as it is. Options: Dark pink to No color (19 options).
- **Due On · Optional**: The due date (YYYY-MM-DD).
- **Start On · Optional**: The start date (YYYY-MM-DD). Asana needs a due date with it.
- **Privacy · Optional**: Who can find the project. Empty leaves Asana's default (or the current setting). Options: Everyone in the workspace, Only members.
- **Default View · Optional**: The view the project opens in. Options: List, Board, Calendar, Timeline.
- **Owner · Optional**: The project's owner: "me", an email address or a user id.
- **Archived · Optional**: Archive the project, or bring it back. Options: Leave as is, Archive, Restore from archive. Default: Leave as is.
- **More Fields · Optional**: Any other project property Asana takes, such as {"html_notes": "\<body>…\</body>", "custom_fields": {"1201234567890555": "High"}}.

### Delete

- **Workspace · Optional**: The workspace whose projects to choose from (it is not sent).
- **Project · Required**: The project.

### Asana › Section

### Create

- **Workspace · Optional**: The workspace whose projects to choose from (it is not sent).
- **Project · Required**: The project.
- **Name · Required**: The new section's name. It is added at the end of the project.

### Get Many

- **Workspace · Optional**: The workspace whose projects to choose from (it is not sent).
- **Project · Required**: The project.
- **Return All · Optional**: Read every section, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many sections to return (1–2000). Default: 100. Shows when **Return All** is off.

### Asana › Tag

### Create

- **Workspace · Required**: The workspace.
- **Name · Required**: The tag's name.
- **Color · Optional**: The tag's color. Options: Dark pink to No color (19 options).

### Get Many

- **Workspace · Required**: The workspace.
- **Return All · Optional**: Read every tag, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many tags to return (1–2000). Default: 50. Shows when **Return All** is off.

### Asana › Attachment

### Upload

- **Task · Required**: The task's id, or its link in Asana.
- **Attach · Optional**: Upload a file (up to 100 MB, Asana's limit), or attach a link to something elsewhere. Options: A file, A link. Default: A file.
- **File · Required**: Upload a file, or switch to an expression to use one from an earlier step (such as {{steps.download.result}}). Up to 100 MB. Shows when **Attach** is **A file**.
- **URL · Required**: The address to attach (https://…). Shows when **Attach** is **A link**.
- **Name · Optional**: The attachment's name in Asana. Empty uses the file's name (for a link, its address).

### Get and Delete

- **Attachment · Required**: The attachment's id.

### Get Many

- **Task · Required**: The task's id, or its link in Asana.
- **Return All · Optional**: Read every attachment, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many attachments to return (1–2000). Default: 50. Shows when **Return All** is off.

### Asana › User

### Get

- **User · Required**: "me" (the connected user), an email address, or a user id.

### Get Many

- **Workspace · Required**: The workspace whose people to list.
- **Return All · Optional**: Read every user, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many users to return (1–2000). Default: 50. Shows when **Return All** is off.

Source: https://docs.gorunner.io/apps/asana
