AutomationFlowsAI & RAG › Automate Abm Research to Outreach with Octave, Ai, and Instantly.ai

Automate Abm Research to Outreach with Octave, Ai, and Instantly.ai

ByNalin @nalinkrishnan on n8n.io

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Webhook trigger★★★★☆ complexityAI-powered19 nodesAgentAnthropic ChatN8N Nodes OctavehqHTTP Request
AI & RAG Trigger: Webhook Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #7621 — we link there as the canonical source.

This workflow follows the Agent → HTTP Request recipe pattern — see all workflows that pair these two integrations.

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": "Complete account-based outreach automation with Octave context engine",
  "tags": [],
  "nodes": [
    {
      "id": "sticky-note-main",
      "name": "Sticky Note - Main Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        600,
        -750
      ],
      "parameters": {
        "color": 1,
        "width": 450,
        "height": 520,
        "content": "\ud83c\udfaf COMPLETE ACCOUNT-BASED OUTREACH PIPELINE\n\nFOR: Revenue teams, ABM professionals, growth\noperators ready for integrated, context-aware GTM.\n\nSOLVES: Disconnected tools that lose context at\neach step. Octave centralizes typically fragmented\ncontext (ICP, personas, value props) so all agents\noperate from the same unified market understanding.\n\nWORKS:\n1. Webhook receives account data\n2. External research gathers context\n3. Company qualification filters accounts\n4. Prospector finds relevant contacts\n5. Split contacts for individual processing\n6. Generate contextualized sequences\n7. Deploy to email campaigns\n\nSETUP: Account input + external data source +\nOctave agents (qualify, prospect, sequence) +\nemail platform credentials\n\nCUSTOMIZE: Replace research source, configure\nqualification criteria, set prospecting personas,\nadjust runtime context integration."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-note-webhook",
      "name": "Sticky Note - Account Input",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        40,
        -150
      ],
      "parameters": {
        "color": 2,
        "width": 180,
        "height": 100,
        "content": "\ud83d\ude80 ACCOUNT INPUT\nWebhook for accounts.\nReplace with your source."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-note-research",
      "name": "Sticky Note - Context Research",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        -150
      ],
      "parameters": {
        "color": 4,
        "width": 180,
        "height": 100,
        "content": "\ud83d\udd0d CONTEXT RESEARCH\nExternal data gathering.\nReplace with data source."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-note-qualify",
      "name": "Sticky Note - Company Qualification",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        -150
      ],
      "parameters": {
        "color": 5,
        "width": 180,
        "height": 100,
        "content": "\ud83c\udfe2 COMPANY QUALIFICATION\nProduct + Segment fit.\nConfigure agent ID."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-note-filter",
      "name": "Sticky Note - Filter",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        840,
        -150
      ],
      "parameters": {
        "color": 3,
        "width": 180,
        "height": 100,
        "content": "\ud83d\udd0d FILTER\nRemoves low scores.\nAdjust threshold."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-note-prospector",
      "name": "Sticky Note - Prospector",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        -150
      ],
      "parameters": {
        "color": 6,
        "width": 180,
        "height": 100,
        "content": "\ud83d\udc65 PROSPECTOR\nFind relevant contacts.\nConfigure personas."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-note-split",
      "name": "Sticky Note - Split Contacts",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1240,
        -150
      ],
      "parameters": {
        "color": 2,
        "width": 180,
        "height": 100,
        "content": "\ud83d\udccb SPLIT CONTACTS\nIndividual processing.\nHandles multiple contacts."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-note-sequence",
      "name": "Sticky Note - Sequence Generation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1440,
        -150
      ],
      "parameters": {
        "color": 4,
        "width": 180,
        "height": 100,
        "content": "\u26a1 RUNTIME SEQUENCES\nContext + personalization.\nConfigure agent ID."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-note-deploy",
      "name": "Sticky Note - Campaign Deploy",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1640,
        -150
      ],
      "parameters": {
        "color": 5,
        "width": 180,
        "height": 100,
        "content": "\ud83d\udce7 CAMPAIGN DEPLOY\nAutomated outreach.\nUpdate platform & ID."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-note-llm",
      "name": "Sticky Note - LLM Model",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        140,
        -300
      ],
      "parameters": {
        "color": 3,
        "width": 180,
        "height": 100,
        "content": "\ud83e\udde0 LLM MODEL\nContext processing.\nOptional for testing."
      },
      "typeVersion": 1
    },
    {
      "id": "14bf51ef-8396-41e5-955d-47c6e1098ae6",
      "name": "Account Data Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        120,
        0
      ],
      "parameters": {
        "path": "your-webhook-path-here",
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "531d7403-6ea3-4ff9-82a5-43ca23058519",
      "name": "Research External Context",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        320,
        0
      ],
      "parameters": {
        "text": "=Output the name of an open role that {{ $json.body.companyDomain }} is hiring for. If you can't find a role they are hiring for, make up a basic one that would make sense for them to hire for. Normalize the job title to something that would be used in an internal email (i.e \"software engineer\" instead of \"Sr. Software Engineer II\"). Output just the name of the role and nothing else, with no pretext or posttext. Do NOT make any justification if you can't find a role, just give a dummy role and nothing else. No \"I wasn't able to find...\" BS.",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "57ef7b44-6c4f-4712-9ca3-32681ca974a7",
      "name": "LLM Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        220,
        200
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "your-llm-model",
          "cachedResultName": "Your LLM Model"
        },
        "options": {}
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "6a3a0248-24fc-4060-9525-3a40b5b5fcfe",
      "name": "Qualify Company with Octave",
      "type": "n8n-nodes-octavehq.octave",
      "position": [
        720,
        0
      ],
      "parameters": {
        "agentOId": "your-octave-company-qualification-agent-id",
        "operation": "qualifyCompany",
        "companyName": "={{ $('Account Data Webhook').item.json.body.companyName }}",
        "companyDomain": "={{ $('Account Data Webhook').item.json.body.companyDomain }}",
        "runtimeContext": ""
      },
      "credentials": {
        "octaveApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "779f6a70-90e7-4f5d-b5a1-706001d4bf86",
      "name": "Filter Qualified Companies",
      "type": "n8n-nodes-base.filter",
      "position": [
        920,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a28bb3f4-fb9c-4fb8-985e-9a4cd45be865",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.score }}",
              "rightValue": 1
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f93081d6-d31f-4367-b80c-db3657d9c71d",
      "name": "Discover Relevant Contacts",
      "type": "n8n-nodes-octavehq.octave",
      "position": [
        1120,
        0
      ],
      "parameters": {
        "agentOId": "your-octave-prospector-agent-id",
        "operation": "runProspector",
        "companyDomain": "={{ $json.company.domain }}"
      },
      "credentials": {
        "octaveApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "afd4f2df-07d8-4176-9dbd-023ca62999f8",
      "name": "Split Contacts for Processing",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1320,
        0
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "contacts"
      },
      "typeVersion": 1
    },
    {
      "id": "87d07490-c82e-4d6c-9f71-b2e543925949",
      "name": "Generate Contextualized Sequences",
      "type": "n8n-nodes-octavehq.octave",
      "position": [
        1520,
        0
      ],
      "parameters": {
        "agentOId": "your-octave-sequence-agent-id",
        "jobTitle": "={{ $json.contact.title }}",
        "firstName": "={{ $json.contact.firstName }}",
        "operation": "runSequence",
        "companyName": "={{ $json.contact.companyName }}",
        "companyDomain": "={{ $json.contact.companyDomain }}",
        "linkedInProfile": "={{ $json.contact.profileUrl }}",
        "runtimeContextStep1": "=they are hiring a {{ $('Research External Context').item.json.output }}",
        "runtimeInstructionsStep1": "mention the role they're hiring for and tie it into why you are reaching out"
      },
      "credentials": {
        "octaveApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "90e13ffe-5012-42bb-b9eb-0e4574abd5fc",
      "name": "Deploy to Email Campaign",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1720,
        0
      ],
      "parameters": {
        "url": "https://api.instantly.ai/api/v2/leads",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "campaign",
              "value": "your-campaign-id-here"
            },
            {
              "name": "email",
              "value": "={{ $('Split Contacts for Processing').item.json.contact.email || 'demo_' + $('Split Contacts for Processing').item.json.contact.slug + '@example.com' }}"
            },
            {
              "name": "first_name",
              "value": "={{ $('Split Contacts for Processing').item.json.contact.firstName }}"
            },
            {
              "name": "last_name",
              "value": "={{ $('Split Contacts for Processing').item.json.contact.lastName }}"
            },
            {
              "name": "company_name",
              "value": "={{ $('Split Contacts for Processing').item.json.contact.companyName }}"
            },
            {
              "name": "custom_variables",
              "value": "={{ { \"email1\": $json.emails[0].email || \"\", \"subject1\": $json.emails[0].subject || \"\", \"email2\": $json.emails[1].email || \"\", \"subject2\": $json.emails[1].subject || \"\", \"email3\": $json.emails[2].email || \"\", \"subject3\": $json.emails[2].subject || \"\" } }}"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "LLM Model": {
      "ai_languageModel": [
        [
          {
            "node": "Research External Context",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Account Data Webhook": {
      "main": [
        [
          {
            "node": "Research External Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Research External Context": {
      "main": [
        [
          {
            "node": "Qualify Company with Octave",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Discover Relevant Contacts": {
      "main": [
        [
          {
            "node": "Split Contacts for Processing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Qualified Companies": {
      "main": [
        [
          {
            "node": "Discover Relevant Contacts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Qualify Company with Octave": {
      "main": [
        [
          {
            "node": "Filter Qualified Companies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Contacts for Processing": {
      "main": [
        [
          {
            "node": "Generate Contextualized Sequences",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Contextualized Sequences": {
      "main": [
        [
          {
            "node": "Deploy to Email Campaign",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

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

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Source: https://n8n.io/workflows/7621/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Agent, Anthropic Chat, N8N Nodes Octavehq +1
AI & RAG

⏺ 🚀 How it works

Agent, Anthropic Chat, Output Parser Structured +6
AI & RAG

Lead Pipeline v3.0. Uses httpRequest, agent, lmChatAnthropic, toolThink. Webhook trigger; 77 nodes.

HTTP Request, Agent, Anthropic Chat +4
AI & RAG

What if AI didn't just write content—but actually thought about how to write it? This n8n workflow revolutionizes content creation by deploying multiple specialized AI agents that handle every aspect

Tool Http Request, Anthropic Chat, Airtable +7
AI & RAG

Fully automates your service order pipeline from incoming booking to supplier confirmation — with built-in SLA enforcement and automatic escalation if a supplier goes silent. 📥 Receives orders via web

HTTP Request, Google Sheets, Agent +4