{
  "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
          }
        ]
      ]
    }
  }
}