

How to Build Daily Standup Reports with Pipedream
Generate automated daily project reports from Basecamp data and post them 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
Teams that need daily project visibility without manual Basecamp checking
Not ideal for
Teams wanting real-time updates instead of scheduled digests
Sync type
scheduledUse case type
reportingReal-World Example
A 12-person marketing agency uses this to post daily project summaries to #standup every morning at 9 AM. The report shows completed tasks, approaching deadlines, and overdue items from 8 active Basecamp projects. Before automation, the project manager spent 20 minutes each morning pulling this data manually.
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 Pipedream
Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. 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.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Project Name | ||
| Task Title | ||
| Task Status | ||
4 optional fieldsβΈ show
| Due Date | |
| Completed Date | |
| Assignee Name | |
| Task Notes |
Step-by-Step Setup
Workflows > New > Workflow
Create New Workflow
Log into pipedream.com and click the blue 'New' button in the top-right corner. Select 'Workflow' from the dropdown menu. You'll land on the workflow builder with an empty trigger step. Name your workflow 'Daily Standup Reports' in the title field at the top.
- 1Click 'New' button in top-right
- 2Select 'Workflow' from dropdown
- 3Type 'Daily Standup Reports' in workflow name field
- 4Click outside the field to save the name
Trigger > Schedule > Cron scheduler
Add Schedule Trigger
Click on the trigger step and select 'Schedule' from the app list. Choose 'Cron scheduler' as your trigger type. Set the cron expression to '0 9 * * 1-5' to run every weekday at 9 AM. This gives your team consistent morning updates without weekend noise.
- 1Click the empty trigger step
- 2Search for 'Schedule' and select it
- 3Choose 'Cron scheduler' option
- 4Enter '0 9 * * 1-5' in the cron expression field
- 5Click 'Save' to confirm the schedule
Add Step > Basecamp 3 > Get Projects
Connect Basecamp Account
Click the '+' button below your trigger to add a new step. Search for 'Basecamp 3' and select it from the app list. Choose 'Get Projects' as your action to start pulling project data. Click 'Connect Basecamp' and authorize Pipedream to access your account. You'll need admin permissions to see all projects.
- 1Click the '+' button below the trigger
- 2Search 'Basecamp 3' and select it
- 3Choose 'Get Projects' action
- 4Click 'Connect Basecamp' button
- 5Authorize Pipedream in the popup window
Add Step > Basecamp 3 > Get Todosets
Get Tasks for Each Project
Add another Basecamp step by clicking the '+' button. Select 'Get Todosets' to fetch task lists. You'll need to configure this step to loop through each project from step 3. In the Project ID field, reference the previous step using the expression picker. This pulls tasks from all active projects.
- 1Click '+' button to add new step
- 2Search 'Basecamp 3' again and select it
- 3Choose 'Get Todosets' action
- 4Click in Project ID field and select from step 3 data
- 5Test the step to see task lists returned
Add Step > Code > Run Node.js code
Add Node.js Code Step
Click '+' and select 'Code' then 'Run Node.js code'. This step processes all your Basecamp data and formats it for Slack. You'll write code to loop through projects, categorize tasks by status, and identify overdue items. The code step gives you full control over data transformation that Basecamp's API actions can't handle alone.
- 1Click '+' to add another step
- 2Select 'Code' from the app list
- 3Choose 'Run Node.js code' option
- 4Delete the default code in the editor
- 5Paste your data processing code
This Node.js code processes Basecamp data to create organized standup reports. Paste it into your code step and modify the date ranges or project filters as needed.
JavaScript β Code Stepexport default defineComponent({βΈ Show code
export default defineComponent({
async run({ steps, $ }) {
const projects = steps.basecamp_get_projects.$return_value;... expand to see full code
export default defineComponent({
async run({ steps, $ }) {
const projects = steps.basecamp_get_projects.$return_value;
const today = new Date();
const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
const threeDaysOut = new Date(today.getTime() + 3 * 24 * 60 * 60 * 1000);
let completed = [];
let upcoming = [];
let overdue = [];
for (const project of projects) {
try {
const todosets = await $.send.http({
method: 'GET',
url: `https://3.basecampapi.com/${project.account.id}/buckets/${project.id}/todosets.json`,
headers: {
'Authorization': `Bearer ${auths.basecamp_3.oauth_access_token}`,
'User-Agent': 'Pipedream Standup Bot'
}
});
for (const todoset of todosets.data) {
for (const todo of todoset.todos || []) {
const dueDate = todo.due_on ? new Date(todo.due_on + 'T23:59:59Z') : null;
const completedDate = todo.completed_at ? new Date(todo.completed_at) : null;
if (completedDate && completedDate >= yesterday) {
completed.push(`β’ ${project.name}: ${todo.title} (${todo.assignees[0]?.name || 'Unassigned'})`);
} else if (dueDate && dueDate < today && !todo.completed) {
const daysOverdue = Math.floor((today - dueDate) / (1000 * 60 * 60 * 24));
overdue.push(`β’ ${project.name}: ${todo.title} (${todo.assignees[0]?.name || 'Unassigned'}) - ${daysOverdue} days overdue`);
} else if (dueDate && dueDate <= threeDaysOut && dueDate >= today && !todo.completed) {
const dueDateStr = dueDate.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
upcoming.push(`β’ ${project.name}: ${todo.title} (${todo.assignees[0]?.name || 'Unassigned'}) - Due ${dueDateStr}`);
}
}
}
} catch (error) {
console.log(`Error processing project ${project.name}:`, error.message);
}
}
const reportDate = today.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });
let report = `*Daily Standup Report - ${reportDate}*\n\n`;
report += `*Completed Yesterday:*\n`;
report += completed.length > 0 ? completed.slice(0, 10).join('\n') : 'β’ No tasks completed';
report += '\n\n';
report += `*Due This Week:*\n`;
report += upcoming.length > 0 ? upcoming.slice(0, 10).join('\n') : 'β’ No upcoming deadlines';
report += '\n\n';
if (overdue.length > 0) {
report += `*Overdue Items:*\n`;
report += overdue.slice(0, 5).join('\n');
}
return { formatted_report: report, task_counts: { completed: completed.length, upcoming: upcoming.length, overdue: overdue.length } };
}
});Add Step > Slack > Send Message to Channel
Connect Slack Account
Add a Slack step by clicking '+' and searching for Slack. Choose 'Send Message to Channel' as your action. Click 'Connect Slack' and authorize the integration. You'll need to select which workspace to connect and grant permissions for posting messages. Pick the channel where you want daily reports delivered.
- 1Click '+' button for new step
- 2Search 'Slack' and select it
- 3Choose 'Send Message to Channel' action
- 4Click 'Connect Slack' and authorize
- 5Select your target channel from the dropdown
Slack Step > Message Configuration
Format Slack Message
In the message field, reference your Node.js step output to create a formatted report. Use Slack markdown for headers and bullet points. Include project names, completed tasks from yesterday, upcoming deadlines within 3 days, and any overdue items. Structure it like a standup: what's done, what's coming, what's blocked.
- 1Click in the 'Text' message field
- 2Use the expression picker to reference your code step
- 3Format with Slack markdown (* for bullets, ** for bold)
- 4Add header text like '*Daily Standup Report*'
- 5Include sections for completed, upcoming, and overdue
Workflow > Test Button
Test Full Workflow
Click 'Test' in the top-right corner to run your complete workflow. Check each step's output to verify data flows correctly from Basecamp through your code processing to the final Slack message. The test runs immediately regardless of your cron schedule. Fix any errors before deploying.
- 1Click 'Test' button in top-right corner
- 2Watch each step execute in sequence
- 3Check the Slack message was posted correctly
- 4Review the message formatting in your target channel
- 5Make adjustments if needed and test again
Workflow > Deploy Button
Deploy Workflow
Once testing succeeds, click 'Deploy' to activate the scheduled workflow. The deploy button turns your workflow live so it runs automatically at 9 AM weekdays. You can monitor execution history and modify the schedule anytime. Deployed workflows show a green 'Active' status badge.
- 1Click 'Deploy' button next to Test
- 2Confirm deployment in the popup dialog
- 3Verify the status changes to 'Active'
- 4Check the next scheduled run time
- 5Bookmark the workflow for easy access
Scaling Beyond 50+ active projects or 500+ tasks per day+ Records
If your volume exceeds 50+ active projects or 500+ tasks per day records, apply these adjustments.
Implement Project Batching
Process projects in groups of 10 to avoid the 30-second timeout limit. Use multiple workflow runs or async processing patterns.
Cache Project Data
Store project lists in Pipedream's built-in data store and only refresh weekly to reduce API calls during daily runs.
Filter by Recent Activity
Use Basecamp's updated_since parameter to only fetch projects with activity in the last 7 days, drastically reducing processing time.
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 Pipedream for this if you need custom data processing that basic Zapier or Make filters can't handle. The Node.js code step gives you full control over how tasks get categorized and formatted, plus built-in error handling for API failures. You can process complex date logic and task relationships that would require multiple steps in other platforms. Skip Pipedream if you want a simple notification setup β Zapier's Slack integration is faster to configure for basic alerts.
This workflow costs roughly $0 on Pipedream's free tier unless you're processing 20+ projects daily. Each run uses about 15 credits (1 for trigger, 2 for Basecamp calls, 10 for Node.js processing, 2 for Slack). At 22 workdays per month, that's 330 credits total β well under the 10,000 free monthly limit. Make would cost $9/month minimum since you need the Pro plan for scheduling, making Pipedream 9x cheaper for this use case.
Make handles the Basecamp API more elegantly with built-in pagination modules and better error handling for large project lists. Zapier offers more Slack formatting options including rich message blocks and interactive buttons. n8n provides superior debugging with visual data flow inspection between nodes. Power Automate integrates better if you're using Microsoft Project alongside Basecamp. But Pipedream wins for complex task categorization logic that would require 15+ steps in Make or convoluted Zapier formatters.
You'll hit Basecamp's API rate limits quickly if you have 30+ active projects β the workflow processes about 200 requests per run when fetching task details. Slack markdown formatting breaks easily; double-check line breaks and special characters that come from Basecamp task titles. The cron scheduler can drift during daylight saving time changes, posting reports an hour early or late until you manually update the UTC offset.
Ideas for what to build next
- βAdd Weekend Summary β Create a separate Monday morning workflow that summarizes the entire previous week's activity for better context after weekends.
- βProject-Specific Reports β Duplicate this workflow to send targeted reports to different Slack channels based on project teams or departments.
- βSlack Thread Responses β Enhance the workflow to post follow-up messages as thread replies when overdue tasks remain unresolved for multiple days.
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