The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "Send customer risk signals from Bounce Watch to Slack",
"nodes": [
{
"parameters": {
"content": "## Send customer risk signals from Bounce Watch to Slack\n\nBounce Watch tells you what just happened at a company and when \u2014 funding, senior hires, new offices, customer wins and partnerships, each carrying its own date. What the API covers: bouncewatch.com/products/data-enrichment-api\n\nChurn is rarely a surprise to the customer. Layoffs, a founder leaving, a pivot \u2014 the account team usually finds out after the renewal conversation has already gone badly. This workflow puts those signals in front of them first.\n\n### How it works\n\nA daily schedule starts the run. A Settings node holds your customer domains as a list. The Bounce Watch node searches the risk category \u2014 shutdown, layoffs, a senior departure, a pivot \u2014 across the index, and a filter keeps only the companies on your list. What is left is posted to Slack, one message per customer, with each signal marked when it is a rumour rather than an announcement.\n\n### Setup\n\n1. Get an API key at bouncewatch.com/register/api. It is free, no card, and every new account starts with 2,500 credits. Paste it into the Bounce Watch credential.\n2. Put your customer domains into Customer list.\n3. Pick your Slack credential and choose the channel on the last node.\n\nSome risk signals are inference rather than announcement. They are labelled in the message, and they are not grounds for an account review on their own. An empty run means nothing matched the filters, not that those companies were quiet.\n\n### Customization tips\n\nFor a long customer list, watch the accounts instead and use the Bounce Watch trigger \u2014 a watchlist scales further than a filter. Narrow the search to specific signal keys if layoffs are the only thing you want to hear about.",
"height": 1020,
"width": 520
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-380,
-120
],
"id": "sticky-overview",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## Your customers\n\nDomains live in one Settings node.\nPaste the list you already keep.",
"height": 300,
"width": 440,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
150,
-170
],
"id": "sticky-section-1",
"name": "Section 1"
},
{
"parameters": {
"content": "## Risk signals\n\nShutdowns, layoffs, departures, pivots.\nOnly your customers get through.",
"height": 300,
"width": 440,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
630,
-170
],
"id": "sticky-section-2",
"name": "Section 2"
},
{
"parameters": {
"content": "## Tell the account team\n\nOne message per customer.\nRumours are labelled as rumours.",
"height": 300,
"width": 200,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1110,
-170
],
"id": "sticky-section-3",
"name": "Section 3"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "days",
"triggerAtHour": 8
}
]
}
},
"id": "bw0091-0000-4000-8000-000000000091",
"name": "Every morning",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
220,
0
]
},
{
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "as0092-0000-4000-8000-000000000092",
"name": "customer_domains",
"type": "array",
"value": "={{ [\"customer-one.com\", \"customer-two.com\", \"customer-three.com\"] }}"
},
{
"id": "as0093-0000-4000-8000-000000000093",
"name": "lookback_days",
"type": "number",
"value": "={{ 7 }}"
}
]
}
},
"id": "bw0094-0000-4000-8000-000000000094",
"name": "Customer list",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
460,
0
],
"notes": "Replace these with your own customer domains."
},
{
"parameters": {
"resource": "signal",
"operation": "search",
"splitSignals": true,
"filters": {
"categories": "risk",
"days": "={{ $json.lookback_days }}",
"limit": 100,
"sort": "most_recent"
}
},
"id": "bw0095-0000-4000-8000-000000000095",
"name": "Risk signals across the index",
"type": "n8n-nodes-bouncewatch.bounceWatch",
"typeVersion": 1,
"position": [
700,
0
],
"credentials": {
"bounceWatchApi": {
"name": "<your credential>"
}
},
"notes": "Shutdowns, layoffs, senior departures and pivots."
},
{
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "as0096-0000-4000-8000-000000000096",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $('Customer list').first().json.customer_domains.includes($json.company.domain) }}",
"rightValue": ""
}
]
}
},
"id": "bw0097-0000-4000-8000-000000000097",
"name": "Only your customers",
"type": "n8n-nodes-base.filter",
"typeVersion": 2.2,
"position": [
940,
0
],
"notes": "For a long customer list, watch the accounts instead \u2014 a watchlist scales further than a filter."
},
{
"parameters": {
"select": "channel",
"channelId": {
"__rl": true,
"value": "",
"mode": "name",
"cachedResultName": ""
},
"text": "=\u26a0\ufe0f *{{ $json.company.name }}*\n{{ $json.signals.map(s => \"\u2022 \" + s.label + \" \u2014 \" + s.date + (s.date_is_measurement ? \" (date recorded)\" : \"\") + (s.unconfirmed ? \" \u2014 rumour, not an announcement\" : \"\") + (s.summary ? \"\\n \" + s.summary : \"\")).join(\"\\n\") }}\n{{ $json.company.profile_url }}",
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"id": "bw0098-0000-4000-8000-000000000098",
"name": "Alert the account team",
"type": "n8n-nodes-base.slack",
"typeVersion": 2.2,
"position": [
1180,
0
],
"notes": "Pick your channel here."
}
],
"connections": {
"Every morning": {
"main": [
[
{
"node": "Customer list",
"type": "main",
"index": 0
}
]
]
},
"Customer list": {
"main": [
[
{
"node": "Risk signals across the index",
"type": "main",
"index": 0
}
]
]
},
"Risk signals across the index": {
"main": [
[
{
"node": "Only your customers",
"type": "main",
"index": 0
}
]
]
},
"Only your customers": {
"main": [
[
{
"node": "Alert the account team",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"meta": {
"templateCredsSetupCompleted": false
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
bounceWatchApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Send customer risk signals from Bounce Watch to Slack. Uses n8n-nodes-bouncewatch, slack. Scheduled trigger; 9 nodes.
Source: https://github.com/bouncewatch/n8n-nodes-bouncewatch/blob/main/templates/send-customer-risk-signals-from-bounce-watch-to-slack.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Send a weekly Bounce Watch watchlist report to Slack. Uses n8n-nodes-bouncewatch, slack. Scheduled trigger; 7 nodes.
This workflow fully automates your team's daily standup process using Slack for communication, Notion for structured data storage, and Redis for real-time session management.
debug. Uses httpRequest, slack, redis, mailgun. Scheduled trigger; 60 nodes.
Seller Follow-Up Engine (Enhanced). Uses httpRequest, slack. Scheduled trigger; 44 nodes.
This workflow is an automated employee time tracking and reporting system that monitors weekly work hours via TMetric, then delivers personalized summaries directly to each team member on Slack. It co