AutomationFlowsGeneral › Automate Account Research Before a Sales Call by Email

Automate Account Research Before a Sales Call by Email

Automate account research before a sales call by email. Uses n8n-nodes-bouncewatch, emailSend. Scheduled trigger; 10 nodes.

Cron / scheduled trigger★★★★☆ complexity10 nodesN8N Nodes BouncewatchEmail Send
General Trigger: Cron / scheduled Nodes: 10 Complexity: ★★★★☆ Added:

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 →

Download .json
{
  "name": "Automate account research before a sales call by email",
  "nodes": [
    {
      "parameters": {
        "content": "## Automate account research before a sales call by email\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\nWalk into a call knowing what has moved at the account since anyone last looked. This workflow rescans one company, pulls its dated timeline, and emails it to you as a short brief.\n\n### How it works\n\nA morning schedule starts the run. A Settings node holds the company domain and how far back the brief should reach. The Bounce Watch node queues a fresh scan of that company, then polls the scan until it reports finished \u2014 polling is free and it waits for you. Once the scan has landed, the timeline is pulled and the email node sends it. Each line carries the event, its date and, where the date records when we measured a change rather than when it happened, a marker saying so.\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 the company domain into Meeting settings.\n3. Fill in the From and To addresses on the email node and pick your SMTP credential.\n\nA rescan spends credits; polling its status and reading the timeline afterwards is cheap. An empty run means nothing matched the filters, not that those companies were quiet.\n\n### Customization tips\n\nDrive the domain from a calendar entry, a CRM record or a form instead of the Settings node, and the same brief lands for whichever account you are about to meet.",
        "height": 1000,
        "width": 520
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -380,
        -120
      ],
      "id": "sticky-overview",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Point it at a company\n\nOne domain, one lookback window.\nSwap this node for a calendar or CRM feed later.",
        "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": "## Refresh what we hold\n\nQueue a scan, then wait for it.\nPolling the status costs nothing.",
        "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": "## Build and send the brief\n\nThe dated timeline, newest first.\nDates are printed as stamps, not claims.",
        "height": 300,
        "width": 440,
        "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": 7
            }
          ]
        }
      },
      "id": "bw0009-0000-4000-8000-000000000009",
      "name": "Every weekday morning",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "as0010-0000-4000-8000-000000000010",
              "name": "company_domain",
              "type": "string",
              "value": "example.com"
            },
            {
              "id": "as0011-0000-4000-8000-000000000011",
              "name": "lookback_days",
              "type": "number",
              "value": "={{ 90 }}"
            }
          ]
        }
      },
      "id": "bw0012-0000-4000-8000-000000000012",
      "name": "Meeting settings",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        460,
        0
      ],
      "notes": "The company you are meeting, and how far back the brief should reach."
    },
    {
      "parameters": {
        "resource": "company",
        "operation": "refresh",
        "domain": "={{ $json.company_domain }}"
      },
      "id": "bw0013-0000-4000-8000-000000000013",
      "name": "Queue a fresh scan",
      "type": "n8n-nodes-bouncewatch.bounceWatch",
      "typeVersion": 1,
      "position": [
        700,
        0
      ],
      "credentials": {
        "bounceWatchApi": {
          "name": "<your credential>"
        }
      },
      "notes": "Spends credits. Skip this node if a same-day rescan is more than you need."
    },
    {
      "parameters": {
        "resource": "company",
        "operation": "refreshStatus",
        "batchId": "={{ $json.batch_id }}"
      },
      "id": "bw0014-0000-4000-8000-000000000014",
      "name": "Wait for the scan to finish",
      "type": "n8n-nodes-bouncewatch.bounceWatch",
      "typeVersion": 1,
      "position": [
        940,
        0
      ],
      "credentials": {
        "bounceWatchApi": {
          "name": "<your credential>"
        }
      },
      "notes": "Free to call, and it waits rather than returning immediately."
    },
    {
      "parameters": {
        "resource": "signal",
        "operation": "getForCompany",
        "domain": "={{ $('Meeting settings').first().json.company_domain }}",
        "splitSignals": false,
        "filters": {
          "days": "={{ $('Meeting settings').first().json.lookback_days }}",
          "limit": 25
        }
      },
      "id": "bw0015-0000-4000-8000-000000000015",
      "name": "Pull the dated timeline",
      "type": "n8n-nodes-bouncewatch.bounceWatch",
      "typeVersion": 1,
      "position": [
        1180,
        0
      ],
      "credentials": {
        "bounceWatchApi": {
          "name": "<your credential>"
        }
      },
      "notes": "One item per company, with the signals nested, so the email can be built in one pass."
    },
    {
      "parameters": {
        "fromEmail": "",
        "toEmail": "",
        "subject": "=Brief: {{ $json.company.name }}",
        "emailFormat": "text",
        "text": "={{ $json.company.name }} \u00b7 {{ $json.company.country }}{{ $json.company.employees ? \" \u00b7 \" + $json.company.employees + \" people\" : \"\" }}{{ $json.company.funding_stage ? \" \u00b7 \" + $json.company.funding_stage : \"\" }}\n{{ $json.company.profile_url }}\n\nWhat has moved, most recent first:\n\n{{ $json.signals.map(s => \"\u2022 \" + s.label + \" \u2014 \" + s.date + (s.date_is_measurement ? \" (date recorded)\" : \"\") + (s.unconfirmed ? \" (unconfirmed)\" : \"\") + (s.summary ? \"\\n  \" + s.summary : \"\")).join(\"\\n\") }}\n\nDates marked \"date recorded\" are when the change was measured. Lines marked unconfirmed are inference rather than announcement.",
        "options": {}
      },
      "id": "bw0016-0000-4000-8000-000000000016",
      "name": "Send the brief",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2.1,
      "position": [
        1420,
        0
      ],
      "notes": "Fill in From and To, and pick your SMTP credential."
    }
  ],
  "connections": {
    "Every weekday morning": {
      "main": [
        [
          {
            "node": "Meeting settings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Meeting settings": {
      "main": [
        [
          {
            "node": "Queue a fresh scan",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Queue a fresh scan": {
      "main": [
        [
          {
            "node": "Wait for the scan to finish",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for the scan to finish": {
      "main": [
        [
          {
            "node": "Pull the dated timeline",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pull the dated timeline": {
      "main": [
        [
          {
            "node": "Send the brief",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Automate account research before a sales call by email. Uses n8n-nodes-bouncewatch, emailSend. Scheduled trigger; 10 nodes.

Source: https://github.com/bouncewatch/n8n-nodes-bouncewatch/blob/main/templates/automate-account-research-before-a-sales-call-by-email.json — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

General

Perfect for content publishing with organic scheduling patterns, social media automation, API systems that need to avoid rate limiting, or any automation requiring randomised timing control across mul

n8n, Read Write File, Stop And Error +1
General

Complete backup solution that saves both workflows and credentials to local/server disk with optional FTP upload for off-site redundancy.

Read Write File, Email Send, Execute Command +3
General

dev_activity_reporter. Uses dataTable, emailSend. Scheduled trigger; 19 nodes.

Data Table, Email Send
General

This workflow runs daily to monitor newly registered domains matching your brand keyword and to check typosquat variants of your brand domain using DomainKits, then compiles WHOIS/DNS details into a C

N8N Nodes Domainkits, Email Send
General

This n8n workflow automates the secure transfer of files between FTP servers on a scheduled basis, providing enterprise-grade reliability with comprehensive error handling and dual notification system

Ftp, Email Send