If your team tracks work in Asana, you're probably spending time on status updates that should be automatic: copying task details into Slack, logging completed work to a spreadsheet, creating follow-up tasks from form submissions, or reminding assignees about overdue items. The n8n Asana node connects your projects to your full automation stack—no custom scripts, no per-task Zapier billing, and no Asana API boilerplate.
This guide covers every Asana node operation, the six most common gotchas, three production-ready workflow patterns, and a free downloadable JSON you can import directly into n8n.
What the n8n Asana Node Can Do
The Asana node wraps the Asana REST API. Here's what you can read, create, and update:
Tasks
- Create Task: add a new task to a project with name, notes, due date, assignee, and custom fields
- Update Task: change name, notes, due date, assignee, completion status, or custom fields
- Get Task / Get All Tasks: fetch by GID or list tasks in a project/section with filters
- Delete Task: remove a task permanently
- Move Task: move a task to a different section within a project
- Search Task: full-text search across a workspace
Task Relationships
- Add / Remove Subtask: attach or detach subtasks from a parent
- Get Subtasks: list all subtasks of a task
- Add / Remove Followers: manage task followers
- Set / Unset Parent Task: change task hierarchy
Projects
- Create Project: new project in a workspace or team
- Get Project / Get All Projects: fetch metadata or list projects with filters
- Update Project: rename, change owner, set color/icon, archive
Sections
- Create Section: add a column/section to a project
- Get Sections: list all sections in a project
- Move Section: reorder sections
Users
- Get User / Get All Users: fetch user profiles and workspace memberships
Tags
- Create Tag / Get Tags: add tags and list all workspace tags
- Add / Remove Tag from Task: apply or remove tags
Attachments
- Upload Attachment: attach a file to a task (binary input from workflow)
Authentication
The Asana node supports two auth methods:
Personal Access Token (PAT) — simplest. Generate at app.asana.com → Profile → Apps → Personal Access Tokens. Scoped to your user account. Best for personal automations or testing.
OAuth2 — required for workflows acting on behalf of other users. Set up an Asana app at app.asana.com/0/my-apps, add n8n's callback URL (https://[your-n8n-domain]/rest/oauth2-credential/callback), and use the Client ID/Secret. Better for team or multi-user setups.
6 Common Gotchas
1. GIDs not names. The Asana API identifies everything by GID (a long numeric string), not by name. When you fetch a project list and want to use the result in a subsequent node, always map the .gid field—not .name. Use a "Get All Projects" call in a preceding node and reference {{ $json.gid }} in downstream nodes.
2. Workspace vs. Team projects. Projects in Asana belong to either a workspace or a team (a subset of the workspace). When creating tasks or projects, make sure you're passing the right resource type. If your Asana is organized into Teams, you'll usually want the team GID, not the workspace GID.
3. Custom fields require the field GID and enum option GID. You can't set a custom field by name—you need both the custom field's GID and, for dropdown fields, the enum option GID. Use the Asana "Get All Custom Fields" endpoint to map names to GIDs, then store them as static values in your workflow.
4. Rate limits are aggressive under burst. Asana's API allows 1,500 requests per minute per token, but bursts that hit many tasks quickly can trigger 429s. Use the "Split In Batches" node with a 1–2 second delay when processing more than ~50 tasks in a loop.
5. Pagination is automatic but "Get All" can be slow on large projects. The n8n Asana node handles pagination internally, but very large projects (1,000+ tasks) will take multiple API calls. For scheduled workflows that monitor a project, filter by modified_since to reduce the result set.
6. Completed tasks are excluded by default. The "Get All Tasks" operation excludes completed tasks unless you explicitly set completed_since: now (which returns all) or filter by completed: true. This surprises teams doing retrospective processing.
3 Production-Ready Patterns
Pattern 1: Form Submission → Asana Task + Slack Notification
Use case: A Typeform or n8n Form Trigger captures client requests; each submission becomes an Asana task with the right project, section, and assignee, then posts a Slack message to the team channel.
Flow:
- Trigger: Typeform Trigger (or n8n Form Trigger) fires on new submission
-
Asana node (Create Task): Name = form field "request_title", Notes = "request_details", Project = your client requests project GID, Assignee = account manager GID, Due Date =
{{ $now.plus(3, 'days').toISO() }} - Asana node (Move Task): Move to "New Requests" section
- Slack node (Send Message): Post to #client-requests: "New task created: [task name] — [Asana task URL]"
Why it works: Eliminates manual task creation, ensures every request lands in the right project/section with a due date, and gives instant Slack visibility.
Pattern 2: Overdue Task Digest → Email Report
Use case: Every morning at 8 AM, scan a project for overdue open tasks and email a digest to the project manager.
Flow:
- Trigger: Schedule Trigger (daily, 8 AM)
-
Asana node (Get All Tasks): Project = your project GID,
completed: false -
Code node (JS): Filter
itemswhere$json.due_on < today's date stringand$json.completed === false - IF node: If filtered list is empty → stop (No Operation node); else continue
- Code node: Build HTML table from overdue tasks (name, assignee, due date, URL)
- Gmail / Send Email node: Send digest to PM email
Why it works: Project managers get actionable visibility without manually opening Asana. Runs zero-cost every day.
Pattern 3: GitHub Issue → Asana Task Sync
Use case: When a GitHub issue is labeled "needs-design," automatically create an Asana task in the Design team project, assign it to the design lead, and post the task URL back as a GitHub comment.
Flow:
-
Trigger: GitHub Trigger (issue labeled event) or Schedule Trigger polling issues with label
needs-design -
IF node: Check
$json.action === 'labeled' && $json.label.name === 'needs-design' -
Asana node (Create Task): Name = "Design needed: [issue title]", Notes = issue body + GitHub URL, Project = Design team project GID, Assignee = design lead GID, Due Date =
{{ $now.plus(5, 'days').toISO() }} - GitHub node (Create Comment): Post on the issue: "Asana task created: [asana task URL]"
Why it works: Keeps design work tracked in Asana (where the design team lives) without requiring engineers to learn Asana or designers to monitor GitHub.
Free Workflow JSON
Here's a minimal "Form → Asana Task → Slack" workflow JSON you can import directly into n8n (File → Import from JSON):
{
"name": "Form to Asana Task + Slack",
"nodes": [
{
"parameters": {
"formTitle": "New Request",
"formFields": {
"values": [
{ "fieldLabel": "Request Title", "fieldType": "text", "requiredField": true },
{ "fieldLabel": "Details", "fieldType": "textarea" }
]
},
"options": {}
},
"name": "Form Trigger",
"type": "n8n-nodes-base.formTrigger",
"typeVersion": 2,
"position": [240, 300]
},
{
"parameters": {
"operation": "create",
"workspace": "YOUR_WORKSPACE_GID",
"taskName": "={{ $json['Request Title'] }}",
"otherProperties": {
"notes": "={{ $json['Details'] }}",
"projects": ["YOUR_PROJECT_GID"],
"due_on": "={{ $now.plus(3, 'days').toFormat('yyyy-MM-dd') }}"
}
},
"name": "Create Asana Task",
"type": "n8n-nodes-base.asana",
"typeVersion": 1,
"position": [460, 300]
},
{
"parameters": {
"channel": "#requests",
"text": "=New task: {{ $json.name }} — {{ $json.permalink_url }}"
},
"name": "Slack Notify",
"type": "n8n-nodes-base.slack",
"typeVersion": 2.2,
"position": [680, 300]
}
],
"connections": {
"Form Trigger": { "main": [[{ "node": "Create Asana Task", "type": "main", "index": 0 }]] },
"Create Asana Task": { "main": [[{ "node": "Slack Notify", "type": "main", "index": 0 }]] }
}
}
Replace YOUR_WORKSPACE_GID and YOUR_PROJECT_GID with your actual Asana GIDs (find them in the Asana URL or via a "Get All Projects" call in n8n).
The n8n Asana Node vs. Zapier / Make
| n8n | Zapier | Make | |
|---|---|---|---|
| Pricing | Self-hosted free / Cloud from $20/mo | Per-task (gets expensive fast) | Per-operation |
| Custom field support | Yes (GID-based) | Limited | Yes |
| Multi-step workflows | Unlimited | 2-step on free | Yes |
| Code node for logic | Yes | No | Limited |
| Self-hosted option | Yes | No | No |
If you're running more than a few hundred Asana operations per month, n8n's flat pricing wins decisively.
What's Next
- Combine with the Gmail node to create tasks from starred emails automatically
- Use the Google Sheets node to bulk-import tasks from a spreadsheet at project kickoff
- Add the Slack node to post daily digest reports of upcoming due tasks
- Pair with the HTTP Request node to call Asana's advanced API endpoints not yet in the node (e.g., portfolios, goals)
Related Articles
- n8n Google Sheets Node: Read, Write, and Automate Spreadsheets
- n8n Slack Node: Send Messages, Create Channels, and Manage Workflows
- n8n HTTP Request Node: Advanced Patterns, Auth, and Error Handling
Get the Free n8n Workflow Starter Pack
If you want a pre-built workflow that syncs Asana with your CRM, sends overdue task digests, or creates tasks from form submissions—grab the n8n Workflow Starter Pack for $29: pirateprentice.gumroad.com/l/sxcoe. It includes 10 production-ready JSON workflows, setup guides, and lifetime updates.
Free gift: Join the n8n Integration Checklist email for weekly automation tips, framework patterns, and new node deep-dives:
Subscribe to the free n8n Integration Checklist
Questions? Drop them in the comments—I read every one.
Top comments (0)