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

How to Set Up Emergency Issue Escalation with n8n

Automatically send urgent Basecamp messages to specific Slack channels or DM project managers when high-priority items are posted.

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 instant alerts when critical issues are posted in Basecamp projects

Not ideal for

Teams that prefer email notifications or check Basecamp regularly throughout the day

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 25-person software agency uses this to alert their #emergencies Slack channel whenever a client posts a message containing 'urgent' or 'down' in Basecamp. Before automation, project managers checked Basecamp every 30 minutes and critical client issues sat unnoticed for hours. Now urgent messages trigger immediate Slack notifications with the client name and issue details.

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 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.

Admin access to Basecamp account with API token creation permissions
Slack workspace admin rights to create incoming webhooks
Running n8n instance accessible via public URL for webhook delivery
Basecamp projects you want to monitor identified by their project IDs

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Message Content
Project Name
Message Author
Message URL
Timestamp
Project ID
Message ID

Step-by-Step Setup

1

Launchpad > Account Settings > Integrations

Enable Basecamp webhooks

Log into your Basecamp account and navigate to the Launchpad. Click on your account settings in the top right dropdown. Find the 'Integrations' section and enable webhook support for your account. This creates the foundation for real-time notifications.

  1. 1Click your avatar in the top right corner
  2. 2Select 'Account & Setup' from dropdown
  3. 3Navigate to 'Integrations' tab
  4. 4Toggle 'Enable webhooks' to ON
What you should see: You should see 'Webhooks enabled' with a green checkmark next to it.
Common mistake — Webhook access requires admin permissions on your Basecamp account.
2

Account Settings > My Info > API Access

Create Basecamp API token

Navigate to the 'My Info' section in Basecamp settings. Scroll down to find 'API Access' and click 'Create new token'. Give it a descriptive name like 'n8n Emergency Alerts' and copy the generated token immediately. You won't be able to see it again.

  1. 1Click 'Create new token' button
  2. 2Enter name: 'n8n Emergency Alerts'
  3. 3Click 'Create token'
  4. 4Copy the token string immediately
What you should see: A long alphanumeric token appears that starts with 'BAhbB' or similar.
Common mistake — Store this token securely - Basecamp shows it only once after creation.
3

Slack Workspace > Settings > Configure Apps > Incoming Webhooks

Set up Slack webhook URL

In Slack, go to your workspace settings and create a new incoming webhook. Choose the channel where emergency alerts should appear. Copy the webhook URL that Slack generates. This URL will receive the formatted emergency notifications from n8n.

  1. 1Navigate to slack.com/apps and search 'Incoming Webhooks'
  2. 2Click 'Add to Slack' button
  3. 3Select your target channel from dropdown
  4. 4Click 'Add Incoming Webhooks integration'
  5. 5Copy the webhook URL
What you should see: You get a webhook URL starting with 'https://hooks.slack.com/services/'.
Common mistake — Copy the webhook URL carefully — it expires if you regenerate it, and any scenarios using the old URL will silently stop working.
4

Workflows > + > Webhook

Create new n8n workflow

Open n8n and create a fresh workflow. Add a Webhook node as your trigger by clicking the plus button and searching for 'Webhook'. Configure it to listen for POST requests from Basecamp. Set the path to something memorable like '/basecamp-emergency'.

  1. 1Click the '+' button to add first node
  2. 2Search and select 'Webhook' node
  3. 3Set HTTP Method to 'POST'
  4. 4Set Path to '/basecamp-emergency'
  5. 5Click 'Copy URL' to get your webhook endpoint
What you should see: The webhook node shows a URL like 'https://your-n8n.com/webhook/basecamp-emergency'.
Common mistake — Don't activate the workflow yet - you need to configure Basecamp first.
5

Nodes > Logic > If

Add message filtering logic

Connect an 'If' node after your webhook to filter for emergency keywords. Configure it to check if the message content contains words like 'urgent', 'emergency', 'down', or 'critical'. This prevents every Basecamp message from triggering alerts.

  1. 1Click '+' after the webhook node
  2. 2Select 'If' from the Logic section
  3. 3Set Condition to 'String' → 'Contains'
  4. 4Set Value 1 to '{{ $json.content }}'
  5. 5Set Value 2 to 'urgent,emergency,down,critical'
What you should see: The If node shows two output paths: 'true' and 'false'.
Common mistake — Case sensitivity matters - add both 'URGENT' and 'urgent' if needed.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Basecamp
BA
notified
6

Credentials > + > Basecamp 3

Configure Basecamp credentials in n8n

Add a Basecamp node and configure authentication using your API token. You'll need your Basecamp account ID and the API token you created earlier. n8n will verify the connection and show available projects.

  1. 1Click on 'Credentials' in left sidebar
  2. 2Click '+ Add Credential' button
  3. 3Select 'Basecamp 3' from the list
  4. 4Enter your Account ID and API Token
  5. 5Click 'Test' to verify connection
What you should see: Credential test shows 'Connection successful' with green checkmark.
Common mistake — Your Account ID is the number in your Basecamp URL, not your username.
7

Nodes > Apps > Basecamp 3

Add Basecamp data enrichment

Connect a Basecamp node to the 'true' path of your If statement. Configure it to fetch additional project details like project name and participant information. This gives you context about who posted the urgent message and which project it affects.

  1. 1Connect Basecamp node to 'true' output of If node
  2. 2Set Resource to 'Message'
  3. 3Set Operation to 'Get'
  4. 4Set Project ID to '{{ $json.project_id }}'
  5. 5Set Message ID to '{{ $json.id }}'
What you should see: The node preview shows project name, creator info, and full message content.
8

Nodes > Data > Function

Format Slack notification

Add a Function node to format your alert message. Create a rich Slack message with the project name, author, message preview, and direct links back to Basecamp. Include urgency indicators like emoji and color coding.

  1. 1Add Function node after Basecamp node
  2. 2Paste the formatting code in JavaScript mode
  3. 3Configure message template with project details
  4. 4Add Basecamp URL for click-through
What you should see: The Function node outputs formatted JSON with Slack attachment structure.
Common mistake — Test your message format before going live - Slack is picky about JSON structure.
9

Nodes > Network > HTTP Request

Connect Slack notification

Add an HTTP Request node to send the formatted message to your Slack webhook. Configure it to POST the JSON payload to your Slack webhook URL. Set the content type to application/json.

  1. 1Add HTTP Request node after Function node
  2. 2Set Method to 'POST'
  3. 3Set URL to your Slack webhook URL
  4. 4Set Body to '{{ $json.payload }}'
  5. 5Add header: Content-Type: application/json
What you should see: Test execution shows HTTP 200 response and message appears in Slack.
Common mistake — Slack webhooks have rate limits - don't send more than 1 message per second.
10

External API Call

Register webhook with Basecamp

Use Basecamp's API or a tool like Postman to register your n8n webhook URL. You'll POST to the Basecamp webhooks endpoint with your project IDs and the n8n webhook URL. This tells Basecamp where to send message notifications.

  1. 1Open Postman or similar API client
  2. 2POST to https://3.basecampapi.com/YOUR_ACCOUNT/webhooks.json
  3. 3Include Authorization header with your token
  4. 4Send JSON body with payload_url and project filters
What you should see: Basecamp returns webhook ID and confirms subscription to message events.
Common mistake — Each webhook registration costs against your API rate limit.
11

Workflow > Activate Toggle

Test and activate workflow

Activate your n8n workflow and test it by posting a message with 'urgent' in a monitored Basecamp project. Check that the Slack notification appears with proper formatting and clickable links back to Basecamp.

  1. 1Click the 'Inactive' toggle to activate workflow
  2. 2Go to Basecamp and post test message with 'urgent'
  3. 3Check Slack channel for notification
  4. 4Verify Basecamp link works in Slack message
What you should see: Slack receives formatted alert within 10-15 seconds of Basecamp post.
Common mistake — Start with a test project before adding all your active projects.

This JavaScript code goes in your Function node to format rich Slack messages with proper emergency styling and handle HTML content from Basecamp.

JavaScript — Code Nodeconst message = $input.all()[0].json;
▸ Show code
const message = $input.all()[0].json;
const basecampData = $input.all()[1].json;
// Strip HTML and extract plain text

... expand to see full code

const message = $input.all()[0].json;
const basecampData = $input.all()[1].json;

// Strip HTML and extract plain text
const cleanContent = message.content.replace(/<[^>]*>/g, '').trim();

// Determine urgency level based on keywords
const urgencyKeywords = {
  critical: ['down', 'outage', 'critical', 'broken'],
  high: ['urgent', 'emergency', 'asap', 'immediately'],
  medium: ['important', 'priority', 'soon']
};

let urgencyLevel = 'medium';
let alertEmoji = '⚠️';
let messageColor = '#ff9500';

const lowerContent = cleanContent.toLowerCase();

if (urgencyKeywords.critical.some(keyword => lowerContent.includes(keyword))) {
  urgencyLevel = 'critical';
  alertEmoji = '🚨';
  messageColor = '#ff3333';
} else if (urgencyKeywords.high.some(keyword => lowerContent.includes(keyword))) {
  urgencyLevel = 'high';
  alertEmoji = '🔥';
  messageColor = '#ff6600';
}

// Build Basecamp URL
const basecampUrl = `https://3.basecamp.com/${basecampData.account_id}/buckets/${message.project_id}/messages/${message.id}`;

// Format timestamp
const timestamp = new Date(message.created_at).toLocaleTimeString('en-US', {
  hour: 'numeric',
  minute: '2-digit',
  hour12: true
});

// Create rich Slack payload
const payload = {
  text: `${alertEmoji} ${urgencyLevel.toUpperCase()} MESSAGE`,
  attachments: [{
    color: messageColor,
    fields: [
      {
        title: 'Project',
        value: basecampData.name,
        short: true
      },
      {
        title: 'Posted by',
        value: message.creator.name,
        short: true
      },
      {
        title: 'Message',
        value: cleanContent.substring(0, 200) + (cleanContent.length > 200 ? '...' : ''),
        short: false
      }
    ],
    actions: [{
      type: 'button',
      text: 'View in Basecamp',
      url: basecampUrl
    }],
    ts: Math.floor(new Date(message.created_at).getTime() / 1000)
  }]
};

return { payload };
n8n
▶ Run once
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 n8n for this if you need custom keyword detection beyond simple text matching or want to enrich alerts with additional Basecamp project data. The Function nodes let you build sophisticated urgency scoring based on message patterns, author roles, or project types. Skip n8n if you just want basic keyword alerts - Zapier handles simple Basecamp-to-Slack notifications in 3 clicks.

Cost

Running 50 emergency alerts per month costs nothing on n8n's free tier since each execution uses 2-3 operations maximum. Zapier burns through 100-150 tasks for the same volume due to multi-step enrichment, pushing you to their $20/month plan. Make handles this cheaper at high volume but lacks Basecamp's native webhook support.

Tradeoffs

Zapier wins on setup speed with pre-built Basecamp triggers that handle webhook registration automatically. Make offers better Slack formatting tools with visual message builders. Power Automate integrates better if you're already using Microsoft Teams instead of Slack. Pipedream matches n8n's flexibility but requires more JavaScript knowledge for message parsing. n8n strikes the right balance of power and usability for teams that want custom logic without complex coding.

You'll hit Basecamp's webhook delivery retries after your n8n instance restarts - they give up after 48 hours of failed attempts. Message content sometimes includes HTML formatting that breaks keyword detection unless you strip tags first. Slack's webhook rate limits kick in around 1 message per second, so batch multiple urgent messages if your team posts rapidly during incidents.

Ideas for what to build next

  • Add SMS escalationConnect Twilio to send text messages for critical issues when Slack notifications go unread for 5+ minutes.
  • Create digest notificationsBuild a daily summary workflow that reports escalation frequency and response times to project managers.
  • Integrate with ticketingAutomatically create support tickets in your helpdesk when customer-related emergencies are detected in Basecamp.

Related guides

Was this guide helpful?
Slack + Basecamp overviewn8n profile →