

How to Create Basecamp Tasks from Slack Messages with n8n
Convert Slack messages into Basecamp tasks with assigned users and due dates so action items don't get lost in chat.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams that discuss project work in Slack but track tasks in Basecamp and need a quick way to convert decisions into actionable items.
Not ideal for
Teams wanting automatic task creation from every message — this works better as an on-demand slash command workflow.
Sync type
manualUse case type
routingReal-World Example
A 12-person marketing agency uses this when clients request changes in their dedicated Slack channels. The account manager types '/task Fix homepage banner copy @sarah due:friday' and it creates a proper Basecamp task in the client's project with Sarah assigned. Before this, 30% of client requests mentioned in Slack never made it to the project tracker.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into n8n
Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured — you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Task Title | content | |
| Project ID | project_id | |
| Todo List ID | todolist_id | |
3 optional fields▸ show
| Assignee | assignee_ids |
| Due Date | due_on |
| Notes | notes |
Step-by-Step Setup
Workflows > + Create Workflow
Create new n8n workflow
Open n8n and create a blank workflow. You'll build a manual trigger that processes Slack slash commands. The workflow will parse message content, extract task details, and create the Basecamp task with proper assignment.
- 1Click '+ Create Workflow' from the main dashboard
- 2Select 'Start from scratch' option
- 3Name your workflow 'Slack to Basecamp Tasks'
Node > Webhook
Add Slack slash command webhook
Replace the manual trigger with a Webhook node to receive Slack slash commands. Configure it to accept POST requests and extract the command text, user info, and channel details that Slack sends when someone uses your custom slash command.
- 1Delete the manual trigger node
- 2Click the '+' button and search for 'Webhook'
- 3Set HTTP Method to 'POST'
- 4Set Path to 'slack-task'
Node > Code
Parse slash command text
Add a Code node to extract task title, assignee, and due date from the Slack command text. Users will type commands like '/task Update website @john due:tomorrow' and your code needs to parse each component reliably.
- 1Add a Code node after the Webhook
- 2Set the language to JavaScript
- 3Name it 'Parse Task Details'
Node > Basecamp
Connect to Basecamp
Add a Basecamp node and configure authentication. You'll need a Basecamp account with API access and the specific project ID where tasks should be created. The node will handle the API authentication and task creation.
- 1Add a Basecamp node after the Code node
- 2Click 'Create New Credential' for Basecamp
- 3Enter your Basecamp account URL and API token
- 4Select 'Create Task' as the operation
Basecamp Node > Parameters
Map task fields
Configure the Basecamp node to use the parsed data from your Code node. Map the task title, assignee, due date, and notes field. Set up the project ID and todo list dynamically if you want to support multiple projects.
- 1Set Content field to {{ $node['Parse Task Details'].json.title }}
- 2Set Due Date to {{ $node['Parse Task Details'].json.dueDate }}
- 3Set Assignee to {{ $node['Parse Task Details'].json.assigneeId }}
- 4Set Notes to include original Slack message context
Node > Respond to Webhook
Add Slack response
Add a Respond to Webhook node to send confirmation back to Slack. This prevents the 'command failed' error message and lets users know the task was created successfully with a link to view it in Basecamp.
- 1Add 'Respond to Webhook' node after Basecamp
- 2Set Response Code to 200
- 3Set Response Body to JSON format
- 4Include task confirmation message
Node Settings > On Error
Handle parsing errors
Add error handling for malformed slash commands. Connect an OnError route from the Code node to send helpful usage instructions back to Slack when users don't follow the expected command format.
- 1Click on the Parse Task Details Code node
- 2Go to Settings tab
- 3Set 'On Error' to 'Continue With Default Value'
- 4Add another Respond to Webhook node for error cases
Slack Admin > Slash Commands
Create Slack slash command
Go to your Slack workspace settings and create a custom slash command that points to your n8n webhook. Configure the command name, description, and usage hint that users will see when typing the command.
- 1Go to api.slack.com and create a new app
- 2Navigate to Slash Commands and click Create New Command
- 3Set command to '/task' and paste your webhook URL
- 4Set description to 'Create Basecamp task from message'
Slack Channel > /task command
Test the complete workflow
Run a test command in Slack to verify the entire flow works. Try different command formats including edge cases like missing assignees or invalid due dates to make sure your error handling works properly.
- 1Go to any Slack channel and type '/task Test task @username due:tomorrow'
- 2Check n8n execution log for the webhook trigger
- 3Verify the task appears in Basecamp with correct details
- 4Test error case with malformed command
This Code node handles parsing the slash command text and converting Slack usernames to Basecamp user IDs. Paste it in the 'Parse Task Details' Code node to extract all task components reliably.
JavaScript — Code Nodeconst commandText = $input.first().body.text || '';▸ Show code
const commandText = $input.first().body.text || ''; const channelId = $input.first().body.channel_id; const userId = $input.first().body.user_id;
... expand to see full code
const commandText = $input.first().body.text || '';
const channelId = $input.first().body.channel_id;
const userId = $input.first().body.user_id;
// User mapping - update with your actual IDs
const slackToBasecamp = {
'sarah': 12345,
'john': 12346,
'mike': 12347
};
// Channel to project mapping
const channelProjects = {
'C1234567': { projectId: 98765, todolistId: 11111 }, // client-acme
'C7654321': { projectId: 98766, todolistId: 11112 } // client-beta
};
// Parse task components
const titleMatch = commandText.match(/^([^@]+?)(?:\s+@|\s+due:|$)/);
const assigneeMatch = commandText.match(/@(\w+)/);
const dueDateMatch = commandText.match(/due:(\w+)/);
if (!titleMatch) {
throw new Error('Task title is required');
}
const title = titleMatch[1].trim();
const assigneeSlackName = assigneeMatch ? assigneeMatch[1] : null;
const dueDateText = dueDateMatch ? dueDateMatch[1] : null;
// Convert due date
let dueDate = null;
if (dueDateText) {
const today = new Date();
switch(dueDateText.toLowerCase()) {
case 'today':
dueDate = today.toISOString().split('T')[0];
break;
case 'tomorrow':
today.setDate(today.getDate() + 1);
dueDate = today.toISOString().split('T')[0];
break;
case 'friday':
const friday = new Date();
friday.setDate(friday.getDate() + (5 - friday.getDay()));
dueDate = friday.toISOString().split('T')[0];
break;
}
}
// Get project info
const projectInfo = channelProjects[channelId] || channelProjects['C1234567']; // default
return {
title: title,
assigneeId: assigneeSlackName ? slackToBasecamp[assigneeSlackName] : null,
dueDate: dueDate,
projectId: projectInfo.projectId,
todolistId: projectInfo.todolistId,
originalCommand: commandText,
slackUser: userId
};Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use n8n for this if your team regularly discusses tasks in Slack but needs them tracked in Basecamp. The Code node gives you complete control over parsing natural language commands and mapping users between systems. n8n's webhook handling is reliable for Slack's 3-second response requirement. Skip this approach if you want automatic task creation from every message — you'd be better off with a scheduled workflow that scans for keywords.
This costs almost nothing to run. Each slash command execution uses 3-4 n8n operations (webhook, code, basecamp, response). At 50 tasks created per month, you're looking at 200 operations total. That's well within n8n's self-hosted free tier or costs $2/month on n8n Cloud's starter plan.
Zapier handles Slack slash commands better with built-in parsing for common patterns like @mentions and dates. Make's text parsing functions are more robust than writing custom JavaScript. Power Automate integrates better with Microsoft teams using similar slash patterns. But n8n wins because you can implement complex user mapping logic and multi-project routing that the other platforms make difficult without premium features.
You'll discover that Slack usernames don't match Basecamp usernames, requiring manual ID mapping. Users will ignore your command format and type natural language, breaking your parsing logic regularly. Basecamp's todo list requirement means you can't just create tasks at the project level — you need to map channels to specific lists, not just projects.
Ideas for what to build next
- →Add task status sync — Set up a reverse sync so when Basecamp tasks are completed, it posts a notification back to the original Slack channel.
- →Support task editing — Create additional slash commands like /edit-task and /delete-task that can modify existing Basecamp tasks from Slack.
- →Add project templates — Build shortcuts like /task-bug or /task-feature that automatically set task templates and categories in Basecamp.
Related guides
How to Create Notion Tasks from Slack with Pipedream
~15 min setup
How to Create Notion Tasks from Slack with Power Automate
~15 min setup
How to Create Notion Tasks from Slack with n8n
~20 min setup
How to Create Notion Tasks from Slack Messages with Zapier
~8 min setup
How to Create Notion Tasks from Slack Messages with Make
~12 min setup
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup