Intermediate~15 min setupCommunication & Project ManagementVerified April 2026
Slack logo
Basecamp logo

How to Create Basecamp Tasks from Slack Messages with Pipedream

Automatically convert Slack messages marked with reactions into Basecamp tasks with proper assignment and due dates.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Development teams who make project decisions in Slack but track work in Basecamp

Not ideal for

Teams needing bidirectional sync or complex approval workflows before task creation

Sync type

real-time

Use case type

routing

Real-World Example

💡

A 12-person product team discusses feature requests in #product-ideas Slack channel. When someone adds a ✅ reaction to a message, it creates a Basecamp task in the Product Backlog project with the message author assigned. Before automation, the PM spent 45 minutes each morning manually copying action items from Slack into Basecamp.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

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

Skip the setup

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.

Admin access to install apps in your Slack workspace
Write permissions to the target Basecamp project and to-do list
At least one to-do list created in your Basecamp project
Pipedream account with available workflow executions

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Titlecontent
To-do List IDtodolist_id
4 optional fields▸ show
Notesnotes
Due Datedue_on
Assigneeassignee_ids
Completion Statuscompleted

Step-by-Step Setup

1

Pipedream > Workflows > Create Workflow

Create new workflow

Go to pipedream.com and click Create Workflow. You'll see the workflow builder with a trigger step already added. Click on the trigger step to configure it. The trigger panel opens on the right side.

  1. 1Click 'Create Workflow' from the dashboard
  2. 2Click on the default trigger step
  3. 3Select 'Slack' from the app list
  4. 4Choose 'Reaction Added' as the trigger event
What you should see: You should see 'Slack - Reaction Added' as your trigger with a configuration panel on the right.
Common mistake — Don't use 'New Message' trigger - it fires on every message and will burn through credits fast.
2

Trigger Configuration > Connect Account

Connect Slack account

Click Connect Account in the trigger configuration. A popup opens asking for Slack permissions. You'll need to authorize Pipedream to read messages and reactions from your workspace. Choose the workspace where you want to monitor reactions.

  1. 1Click 'Connect Account' button
  2. 2Select your Slack workspace from the dropdown
  3. 3Click 'Allow' to grant permissions
  4. 4Verify the green 'Connected' status appears
What you should see: You should see your Slack workspace name with a green connected indicator.
Common mistake — You need admin permissions in Slack to install the Pipedream app - regular users can't complete this step.
Pipedream settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Pipedream
popup window
Connected
green checkmark
3

Trigger Configuration > Event Configuration

Configure reaction filter

Set up the trigger to only fire on specific reactions. In the Channel field, select the channel you want to monitor. Leave it blank to monitor all channels. In the Reaction field, enter the emoji you want to trigger on - use the emoji name like 'white_check_mark' for ✅.

  1. 1Click the Channel dropdown and select your target channel
  2. 2In the Reaction field, type 'white_check_mark'
  3. 3Click 'Save' to apply the configuration
  4. 4Click 'Test trigger' to verify setup
What you should see: The trigger shows 'Configured' status and displays sample data when tested.
Common mistake — Use emoji names, not actual emoji characters - 'thumbsup' not 👍 or it won't match.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Basecamp
BA
notified
4

Workflow Builder > + Add Step > Basecamp

Add Basecamp connection step

Click the + button below your trigger to add a new step. Search for Basecamp in the app directory and select it. Choose the 'Create To-do' action since Basecamp calls tasks 'to-dos' in their API. This step will create the actual task.

  1. 1Click the + button below the trigger
  2. 2Type 'Basecamp' in the search box
  3. 3Select 'Basecamp' from the results
  4. 4Choose 'Create To-do' action
What you should see: You should see a new Basecamp step added with 'Create To-do' configuration options.
5

Basecamp Step > Connect Account

Connect Basecamp account

Click Connect Account in the Basecamp step. You'll be redirected to Basecamp to authorize access. Sign in with your Basecamp credentials and grant Pipedream permission to create and modify to-dos in your account.

  1. 1Click 'Connect Account' in the Basecamp step
  2. 2Sign in to your Basecamp account when prompted
  3. 3Click 'Yes, I'll allow access' on the authorization page
  4. 4Return to Pipedream to see the connected account
What you should see: Your Basecamp account appears as connected with your account name displayed.
Common mistake — You need write permissions in the Basecamp project where tasks will be created.
6

Basecamp Step > Project Configuration

Select project and to-do list

Choose which Basecamp project and to-do list will receive the new tasks. The Project dropdown loads your available projects. After selecting a project, the To-do List dropdown populates with lists from that project. Pick the list where Slack-generated tasks should appear.

  1. 1Click the Project dropdown and select your target project
  2. 2Wait for the To-do List dropdown to populate
  3. 3Select the appropriate to-do list
  4. 4Verify both selections are saved
What you should see: Both Project and To-do List fields show your selected values.
Common mistake — If to-do lists don't load, refresh the page - Basecamp's API is slow to populate dependent dropdowns.
7

Basecamp Step > To-do Configuration

Map message content to task

Configure how the Slack message becomes a Basecamp task. Click in the Content field and select the message text from the Slack trigger data. For the task title, you can use just the message text or add a prefix like 'From Slack:' to identify the source.

  1. 1Click in the Content field
  2. 2Select 'message.text' from the Slack data dropdown
  3. 3Add a prefix like 'From Slack: ' before the dynamic content
  4. 4Set Due Date if needed using a date picker or formula
What you should see: The Content field shows your prefix text plus the dynamic Slack message reference.
Common mistake — Slack messages can be empty if they only contain attachments - add a fallback like 'See attachment' for these cases.
Slack fields
text
user
channel
ts
thread_ts
available as variables:
1.props.text
1.props.user
1.props.channel
1.props.ts
1.props.thread_ts
8

Workflow Builder > + Add Step > Code

Add duplicate prevention

Add a code step before Basecamp to prevent duplicate tasks. Click + to add a step, then select Code (Node.js). This step will check if a task already exists for this Slack message by storing processed message IDs in Pipedream's built-in data store.

  1. 1Click + between the trigger and Basecamp step
  2. 2Select 'Code (Node.js)' from the options
  3. 3Name the step 'Duplicate Check'
  4. 4Paste the duplicate prevention code
What you should see: A code step appears between Slack and Basecamp with your duplicate check logic.
Common mistake — Place this code step before the Basecamp action or duplicates will still be created while the check runs.
9

Workflow Builder > Deploy

Test the complete workflow

Test your workflow end-to-end by adding the specified reaction to a message in your Slack channel. Go to the Deploy tab and click Deploy to make it live. Then test with a real Slack message to verify the task appears in Basecamp correctly.

  1. 1Click the 'Deploy' button in the top right
  2. 2Go to your Slack channel and add ✅ to any message
  3. 3Return to Pipedream and check the workflow execution log
  4. 4Verify the task appears in your Basecamp project
What you should see: The execution log shows successful completion and a new to-do appears in your Basecamp list.

Add this Node.js code step before the Basecamp action to prevent duplicate tasks when users remove and re-add reactions to the same message.

JavaScript — Code Stepexport default defineComponent({
▸ Show code
export default defineComponent({
  async run({ steps, $ }) {
    const messageKey = `slack_msg_${steps.trigger.event.item.ts}_${steps.trigger.event.item.channel}`;

... expand to see full code

export default defineComponent({
  async run({ steps, $ }) {
    const messageKey = `slack_msg_${steps.trigger.event.item.ts}_${steps.trigger.event.item.channel}`;
    
    // Check if we've already processed this message
    const existing = await $.service.db.get(messageKey);
    if (existing) {
      $.export('skip_reason', 'Task already created for this message');
      return $.flow.exit('Duplicate reaction - task already exists');
    }
    
    // Store this message as processed
    await $.service.db.set(messageKey, {
      processed_at: new Date().toISOString(),
      user: steps.trigger.event.user,
      channel: steps.trigger.event.item.channel
    });
    
    // Clean up old entries (older than 30 days)
    const thirtyDaysAgo = Date.now() - (30 * 24 * 60 * 60 * 1000);
    const allKeys = await $.service.db.keys();
    for (const key of allKeys) {
      if (key.startsWith('slack_msg_')) {
        const data = await $.service.db.get(key);
        if (new Date(data.processed_at).getTime() < thirtyDaysAgo) {
          await $.service.db.delete(key);
        }
      }
    }
    
    return { proceed: true, message_id: messageKey };
  }
});
Pipedream
▶ Deploy & test
executed
Slack
Basecamp
Basecamp
🔔 notification
received

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

VerdictWhy n8n for this workflow

Use Pipedream for this if your team lives in Slack and needs instant task creation without manual delays. The webhook-based trigger fires within 2-3 seconds of adding a reaction, much faster than Zapier's 2-minute polling. The Node.js code steps let you build smart duplicate prevention and message parsing that's impossible with no-code platforms. Skip Pipedream if you need complex approval workflows before task creation - Power Automate handles multi-step approvals better.

Cost

At 100 reactions per month, you'll use about 300 Pipedream credits (trigger + code step + Basecamp action). That's free on their starter plan. Zapier charges $20/month for the same volume with webhook triggers. Make costs $9/month but their Basecamp integration is limited - no assignee mapping and spotty to-do list selection. n8n is free if self-hosted but requires server management.

Tradeoffs

Zapier has better error recovery with automatic retries when Basecamp's API is slow. Make's visual editor makes the workflow logic clearer for non-technical team members. n8n offers more Basecamp fields in their integration, including custom field mapping. Power Automate connects natively with Microsoft teams using similar workflows. But Pipedream's instant webhooks and flexible Node.js scripting make it the best choice when speed and customization matter more than hand-holding.

You'll hit Basecamp's 50 requests per 10-second window if your team adds reactions in bursts - the workflow will fail temporarily. Slack's markdown formatting creates ugly tasks in Basecamp unless you strip it in a code step. Users removing and re-adding reactions will create duplicates without the prevention code. Message threads don't carry context through the API, so threaded discussions lose their structure when converted to tasks.

Ideas for what to build next

  • Add assignee intelligenceUse the reaction user or mention parsing to automatically assign tasks to the right person in Basecamp.
  • Create task templates by channelSet different due dates, assignees, or to-do lists based on which Slack channel the message came from.
  • Build status sync back to SlackPost a thread reply when the Basecamp task is completed to close the loop in Slack conversations.

Related guides

Was this guide helpful?
Slack + Basecamp overviewPipedream profile →