

How to Send Basecamp Updates to Slack with n8n
Automatically post Basecamp project updates, milestones, and task completions to designated Slack channels using n8n webhooks.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams that live in Slack but use Basecamp for project management and need real-time updates without constant app switching
Not ideal for
Teams already using Basecamp's built-in Slack integration or those needing two-way sync functionality
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person marketing agency uses this to notify their #projects channel whenever Basecamp milestones are completed or new to-dos are added. Before automation, project managers manually updated Slack 4-5 times daily, causing 2-hour delays in status updates and missed deadlines.
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 | ||
| Event Type | ||
| Task Title | ||
| Project Name | ||
| Slack Channel | ||
3 optional fields▸ show
| Assignee Name | |
| Due Date | |
| Basecamp URL |
Step-by-Step Setup
Workflows > + New Workflow
Create new n8n workflow
Log into your n8n instance and create a new workflow. Name it 'Basecamp to Slack Updates' so you can find it later. This workflow will receive webhook data from Basecamp and format it for Slack.
- 1Click the + New Workflow button
- 2Click the pencil icon next to 'My workflow'
- 3Type 'Basecamp to Slack Updates'
- 4Press Enter to save the name
Node Menu > Trigger > Webhook
Add Webhook trigger node
Add a Webhook node as your trigger. This creates a unique URL that Basecamp will send updates to. Copy the webhook URL from the node settings - you'll need this for Basecamp configuration.
- 1Click the + button on the canvas
- 2Search for 'Webhook' in the node list
- 3Click on Webhook under Trigger nodes
- 4Click 'Execute Node' to generate the webhook URL
- 5Copy the Production URL to your clipboard
Basecamp Project > Settings > Webhooks
Configure Basecamp webhook
In Basecamp, go to your project settings and add the webhook URL. Choose which events trigger notifications: to-do completions, milestone updates, and message posts work best for team updates.
- 1Open your Basecamp project
- 2Click the gear icon in the top right
- 3Select 'Set up webhooks'
- 4Paste your n8n webhook URL
- 5Check 'Todo completed', 'Milestone completed', and 'Message created'
- 6Click 'Add webhook'
Node Menu > Logic > IF
Add conditional logic for event types
Add an IF node to handle different Basecamp event types. Each event (todo completion, milestone, message) needs different formatting for Slack. This prevents irrelevant notifications from cluttering your channels.
- 1Click the + button after the Webhook node
- 2Search for 'IF' and select it
- 3Set Condition to 'String'
- 4Set Value 1 to '{{ $json.kind }}'
- 5Set Operation to 'Equal'
- 6Set Value 2 to 'Todo'
Node Menu > Data Transformation > Function
Format todo completion messages
Add a Function node on the 'true' path to format todo completions. Extract the task name, assignee, and project from Basecamp's webhook data. Create a Slack-friendly message with proper formatting.
- 1Connect a Function node to the IF node's 'true' output
- 2Name it 'Format Todo Message'
- 3Add the code from the Pro Tip section
- 4Set the Language to JavaScript
- 5Click 'Execute Node' to test
Node Menu > Communication > Slack
Add Slack node for todos
Connect a Slack node to send the formatted todo messages. Configure it to use the channel and text from your Function node output. Set up authentication with a Slack bot token that has chat:write permissions.
- 1Add a Slack node after the Function node
- 2Choose 'Send Message' as the operation
- 3Click 'Create New' for credentials
- 4Paste your Slack Bot Token
- 5Set Channel to '{{ $json.channel }}'
- 6Set Text to '{{ $json.text }}'
Node Menu > Logic > IF
Handle milestone events
Add another IF node on the 'false' path to check for milestone events. Milestones need different formatting since they include due dates and completion percentages rather than just task names.
- 1Connect an IF node to the first IF node's 'false' output
- 2Set Condition to 'String'
- 3Set Value 1 to '{{ $json.kind }}'
- 4Set Operation to 'Equal'
- 5Set Value 2 to 'Schedule Entry'
Node Menu > Data Transformation > Function
Format milestone messages
Add a Function node to format milestone notifications with project name, milestone title, and due date. Include relevant team members using @mentions if they're assigned to the milestone.
- 1Connect a Function node to the milestone IF node's 'true' output
- 2Name it 'Format Milestone Message'
- 3Set up milestone-specific formatting code
- 4Include due date and assignee extraction
- 5Test with sample milestone data
Node Menu > Communication > Slack
Add second Slack node for milestones
Connect another Slack node for milestone messages. Use the same bot credentials but consider posting to a different channel if your team separates task updates from milestone announcements.
- 1Add a Slack node after the milestone Function node
- 2Select your existing Slack credentials
- 3Choose 'Send Message' operation
- 4Set Channel to your milestones channel
- 5Set Text to the formatted milestone message
Basecamp > Any Project > Todo List
Test with real Basecamp data
Complete a test todo in Basecamp and check that your Slack channel receives the notification. The message should include task name, who completed it, and which project it belongs to.
- 1Go to any Basecamp project with webhook enabled
- 2Mark a todo as complete
- 3Check your Slack channel for the notification
- 4Verify the message format and channel
- 5Check n8n execution log for any errors
Workflow > Save & Activate
Activate workflow for production
Save and activate your workflow in n8n. The webhook will now receive all configured Basecamp events and route them to appropriate Slack channels. Monitor the first few executions to catch any formatting issues.
- 1Click the 'Save' button in the top right
- 2Toggle the workflow to 'Active' status
- 3Check that the webhook URL is still valid
- 4Test with one more Basecamp action
- 5Monitor executions for the first hour
This JavaScript code handles todo completion formatting and extracts nested data from Basecamp's webhook payload. Paste it in the 'Format Todo Message' Function node to properly format Slack messages.
JavaScript — Code Node// Extract todo completion data from Basecamp webhook▸ Show code
// Extract todo completion data from Basecamp webhook const webhookData = $input.first().json; const todoTitle = webhookData.subject || 'Unknown task';
... expand to see full code
// Extract todo completion data from Basecamp webhook
const webhookData = $input.first().json;
const todoTitle = webhookData.subject || 'Unknown task';
const creatorName = webhookData.creator?.name || 'Someone';
const projectName = webhookData.bucket?.name || 'Unknown project';
const basecampUrl = webhookData.app_url || '';
// Determine Slack channel based on project name
let slackChannel = '#general';
if (projectName.toLowerCase().includes('marketing')) {
slackChannel = '#marketing-updates';
} else if (projectName.toLowerCase().includes('dev')) {
slackChannel = '#dev-updates';
} else if (projectName.toLowerCase().includes('client')) {
slackChannel = '#client-projects';
}
// Format Slack message with emoji and formatting
const slackText = `✅ *${todoTitle}* completed by ${creatorName} in ${projectName}`;
const fullMessage = basecampUrl ? `${slackText}\n<${basecampUrl}|View in Basecamp>` : slackText;
// Return formatted data for Slack node
return {
json: {
channel: slackChannel,
text: fullMessage,
username: 'Basecamp Bot',
icon_emoji: ':white_check_mark:'
}
};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 you need custom message formatting or complex routing logic between Basecamp projects and Slack channels. The Function nodes let you extract nested data from Basecamp webhooks and create rich Slack messages with links and emojis. n8n handles webhook authentication better than Zapier's simplified approach. Skip n8n if you just want basic notifications - Basecamp's native Slack integration covers simple project updates.
Webhook executions cost 1 execution per Basecamp event. A 10-person team completing 50 tasks and 5 milestones weekly burns through 220 executions monthly. That's free on n8n Cloud's starter plan. Zapier charges $20/month for the same volume since webhooks count as premium triggers.
Zapier offers pre-built Basecamp to Slack templates that work in 3 clicks, while n8n requires custom webhook setup. Make has cleaner conditional logic for handling different event types. Power Automate integrates better with Microsoft Teams if that's your chat platform. But n8n wins on webhook reliability - it doesn't timeout on slow Basecamp API responses like Zapier does.
You'll hit Basecamp's webhook retry logic if your n8n instance goes down - missed notifications don't replay automatically. Basecamp sends different JSON structures for todos versus milestones, so test each event type separately. Slack's API returns cryptic errors when your bot lacks channel permissions, and n8n doesn't surface the real issue clearly.
Ideas for what to build next
- →Add digest notifications — Create a scheduled workflow that sends daily or weekly summaries of project progress instead of individual task updates.
- →Include file attachments — Extend the workflow to notify when documents or images are uploaded to Basecamp projects, with direct links to files.
- →Filter by priority — Add logic to only notify about high-priority tasks or milestones, reducing notification noise for routine updates.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup