

How to Build Daily Standup Reports from Basecamp to Slack with n8n
Generate automated daily project status reports from Basecamp tasks and post formatted summaries to Slack channels.
Steps and UI details are based on platform versions at time of writing ā check each platform for the latest interface.
Best for
Remote teams running daily standups who want automated project status without manual Basecamp checking
Not ideal for
Teams needing real-time task updates or complex cross-project reporting across multiple tools
Sync type
scheduledUse case type
reportingReal-World Example
A 12-person marketing agency runs this at 9 AM daily to post client project status to #standup. Before automation, the project manager spent 15 minutes each morning manually checking Basecamp and typing status updates. Now the team sees completed tasks, today's deadlines, and overdue items automatically formatted in Slack.
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 | ||
| Project Name | ||
| Task Status | ||
| Project Status | ||
4 optional fieldsāø show
| Due Date | |
| Completed At | |
| Assignee Name | |
| Task Notes |
Step-by-Step Setup
Workflows > + Create Workflow
Create new workflow in n8n
Log into your n8n instance and create a new workflow. Click the + icon in the top left to start fresh. Name it 'Basecamp Daily Standup' so you can find it later. The canvas opens with a trigger node already placed.
- 1Click the + icon in the top navigation bar
- 2Select 'Blank Workflow' from the template options
- 3Click the workflow name at the top and rename to 'Basecamp Daily Standup'
- 4Save the workflow with Ctrl+S or the Save button
Canvas > Start Node > Replace with Schedule Trigger
Configure schedule trigger
Click on the Start node and replace it with a Schedule trigger. Set it to run Monday through Friday at 9:00 AM in your team's timezone. This fires the workflow automatically each weekday morning to generate fresh reports.
- 1Click the Start node to select it
- 2Press Delete to remove it
- 3Click the + button and search for 'Schedule Trigger'
- 4Set Trigger Interval to 'Days'
- 5Set Hour to 9 and Minutes to 0
- 6Under 'Weekdays Only', toggle to enabled
Canvas > + > Basecamp 3
Add Basecamp credentials
Add a new Basecamp node and configure your API credentials. You'll need your Basecamp account ID and a personal access token from your Basecamp account settings. n8n stores these securely for reuse across workflows.
- 1Click the + after the Schedule Trigger
- 2Search for 'Basecamp 3' and select it
- 3Click 'Create New Credential' next to the Credential field
- 4Enter your Basecamp Account ID (found in your Basecamp URL)
- 5Paste your Personal Access Token from Basecamp Settings
- 6Click 'Save' to store the credential
Basecamp Node > Operation Settings
Fetch projects from Basecamp
Configure the Basecamp node to retrieve all active projects. Set the Operation to 'Get All' and Resource to 'Project'. This pulls the complete project list so you can filter for specific ones in the next step.
- 1Set Resource dropdown to 'Project'
- 2Set Operation dropdown to 'Get All'
- 3Leave all other fields at default values
- 4Click 'Execute Node' to test the connection
Canvas > + > Function
Filter for active projects
Add a Function node to filter out archived projects and focus on active ones. This reduces API calls and keeps reports relevant. The code checks each project's status field and only passes through active projects to the next step.
- 1Add a Function node after the Basecamp node
- 2Name it 'Filter Active Projects'
- 3Paste the filtering code in the JavaScript Code field
- 4Click 'Execute Node' to test the filtering
Canvas > + > Basecamp 3
Get tasks for each project
Add another Basecamp node to fetch to-dos for each active project. Set it to loop through projects using the 'Execute Once for Each Item' setting. This creates separate API calls per project to gather all task data.
- 1Add a new Basecamp 3 node
- 2Use the existing credential from the dropdown
- 3Set Resource to 'To-do'
- 4Set Operation to 'Get All'
- 5Set Project ID to use expression: {{$json.id}}
- 6Enable 'Execute Once for Each Item' in node settings
Canvas > + > Function
Process task data
Add a Function node to categorize tasks into completed yesterday, due today, and overdue buckets. This node also formats the data for clean Slack presentation and counts items in each category for the summary.
- 1Add a Function node after the to-do fetching
- 2Name it 'Categorize Tasks'
- 3Paste the task processing JavaScript code
- 4Set the node to process all items together (not per item)
- 5Test with 'Execute Node' button
Canvas > + > Function
Format Slack message
Create another Function node that builds the formatted Slack message with task summaries. It creates sections for each category, uses Slack markdown formatting, and handles empty categories gracefully with appropriate fallback text.
- 1Add a Function node named 'Format Slack Message'
- 2Input the message formatting JavaScript code
- 3Use Slack markdown syntax for bold headers and bullet points
- 4Include task counts in the header line
- 5Test the formatting with sample data
Canvas > + > Slack
Connect Slack credentials
Add a Slack node and configure it with a bot token that has chat:write permissions to your target channel. Create the bot in your Slack workspace and invite it to the standup channel before testing the workflow.
- 1Add a Slack node to the canvas
- 2Create new credential with your bot token
- 3Set Resource to 'Message'
- 4Set Operation to 'Post'
- 5Select or enter your target channel name
- 6Set Text field to use the formatted message expression
Workflow Controls > Execute Workflow
Test complete workflow
Run the entire workflow from start to finish using the 'Execute Workflow' button. Check each node's output to verify data flows correctly and the final Slack message appears in your channel with proper formatting and current task data.
- 1Click 'Execute Workflow' button in the top toolbar
- 2Watch each node execute in sequence
- 3Check your Slack channel for the posted message
- 4Verify task counts and formatting look correct
- 5Save the workflow after successful test
Workflow Header > Active Toggle
Activate automation
Enable the workflow to run automatically by toggling the Active switch. The schedule trigger will now fire every weekday morning at 9 AM. Monitor the execution history for the first week to ensure consistent operation and adjust timing if needed.
- 1Click the inactive toggle switch in the workflow header
- 2Confirm activation in the dialog that appears
- 3Check the 'Executions' tab to monitor automatic runs
- 4Set up error notifications if desired
- 5Document the workflow for your team
Add this JavaScript to the 'Categorize Tasks' Function node to handle timezone-aware date comparisons and group tasks by project priority. Paste it in the 'JavaScript Code' field replacing the default function.
JavaScript ā Code Nodeconst today = new Date().toISOString().split('T')[0];āø Show code
const today = new Date().toISOString().split('T')[0];
const yesterday = new Date(Date.now() - 86400000).toISOString().split('T')[0];
const completedYesterday = [];... expand to see full code
const today = new Date().toISOString().split('T')[0];
const yesterday = new Date(Date.now() - 86400000).toISOString().split('T')[0];
const completedYesterday = [];
const dueToday = [];
const overdue = [];
// Process all items from all projects
for (const projectData of $input.all()) {
const projectName = projectData.json.name;
const todos = projectData.json.todos || [];
for (const task of todos) {
const taskObj = {
title: task.content || task.title || 'Untitled Task',
project: projectName,
assignee: task.assignee?.name || 'Unassigned',
url: task.app_url
};
// Check completion status with timezone handling
if (task.completed) {
const completedDate = task.completed_at?.split('T')[0];
if (completedDate === yesterday) {
completedYesterday.push(taskObj);
}
} else if (task.due_on) {
// Handle overdue and due today
if (task.due_on === today) {
dueToday.push(taskObj);
} else if (task.due_on < today) {
taskObj.dueDate = task.due_on;
overdue.push(taskObj);
}
}
}
}
// Sort overdue by date (oldest first)
overdue.sort((a, b) => a.dueDate?.localeCompare(b.dueDate));
return [{
json: {
completedYesterday,
dueToday,
overdue,
reportDate: today
}
}];Scaling Beyond 10+ active projects or 500+ tasks per day+ Records
If your volume exceeds 10+ active projects or 500+ tasks per day records, apply these adjustments.
Batch API calls by project priority
Fetch high-priority projects first and add delays between calls to avoid rate limits. Use Basecamp's pagination for projects with 100+ tasks.
Cache project data between runs
Store project metadata in n8n's built-in storage to reduce API calls. Only fetch task updates rather than complete project data each morning.
Split reports by team or department
Create separate workflows for different project groups to parallel process and reduce individual execution time from minutes to seconds.
Implement smart truncation
Limit each report section to top 20 items and add summary counts. Link to Basecamp filtered views for complete task lists in busy periods.
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 want full control over the report formatting and data processing logic. The Function nodes let you build complex task categorization that Zapier can't match, and you can customize the Slack message format exactly how your team wants it. Pick Make instead if you need visual debugging - dragging data through Make's modules is clearer when the workflow breaks.
n8n costs roughly $0.02 per execution at 22 node operations per run. At daily reports (22 executions/month), that's $0.44/month on n8n Cloud's starter plan. Make charges per operation at 22 ops/day = 660/month, hitting the $10.59 tier. Zapier's 2-step version costs more at 60 tasks/month on the $29.99 plan since each project requires separate API calls.
Make handles Basecamp's date formatting better with built-in parseDate functions, while n8n requires manual JavaScript date parsing. Zapier offers cleaner Slack formatting templates that don't need custom code. Power Automate connects better if you're already using Microsoft project tools. But n8n wins on the task categorization logic - the Function nodes process complex due date comparisons and overdue calculations that other platforms struggle with in their no-code builders.
You'll hit issues with Basecamp's API rate limiting after about 15 active projects since each needs separate to-do list calls. The personal access tokens expire annually with no renewal warning, breaking the workflow silently. Slack's 4000 character message limit cuts off reports during busy periods unless you add truncation logic to the formatting code.
Ideas for what to build next
- āAdd weekend digest version ā Create a Friday afternoon workflow that summarizes the full week's completed tasks and upcoming Monday priorities.
- āInclude project health metrics ā Extend the report to show project completion percentages and tasks added/completed ratios for better project tracking.
- āAdd Slack thread replies ā Configure the workflow to post follow-up messages in threads when projects have blocking issues or high overdue counts.
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