Skip to main content
Open-source automation — cloud or self-hosted
B
n

Bolsivo + n8n

Use Bolsivo's outgoing webhooks as n8n triggers. Build visual workflows that connect your lead pipeline to Google Sheets, Slack, Jobber, any REST API, or your own internal systems — with copy-paste JSON templates to get started in minutes.

Open source

Run n8n on your own server for full control — or use n8n Cloud for a managed option.

Visual + code

Build flows visually or write JavaScript/Python in custom nodes. No limits on logic.

Self-hosted option

Keep all your data on-premise. Perfect for teams with compliance requirements.

Before you start

  • Bolsivo Scale plan — webhooks are a Scale feature
  • n8n account: n8n Cloud (n8n.io) or self-hosted instance accessible from the internet
  • Access to Bolsivo Settings → Integrations → Webhooks

Setup guide

4 steps to your first workflow

Takes about 10 minutes start to finish.

01

Create a Webhook node in n8n

  1. 1Open your n8n dashboard → click "+ New Workflow".
  2. 2Click "+ Add node" → search "Webhook" → select the built-in Webhook node.
  3. 3Set HTTP Method to POST. Set Path to something memorable like "bolsivo-qualified".
  4. 4Set Response Mode to "Immediately" (returns 200 OK without waiting for downstream nodes).
  5. 5Click "Listen for Test Event" — n8n shows you the webhook URL to copy.
02

Register the URL in Bolsivo

  1. 1In Bolsivo → Settings → Integrations → Webhooks → "+ Add Webhook".
  2. 2Paste the n8n webhook URL into the "Target URL" field.
  3. 3Select the events you want to receive (lead.qualified, lead.status_changed, etc.).
  4. 4Optionally set a secret — Bolsivo signs each request with X-Bolsivo-Signature (SHA-256).
  5. 5Click "Save". Bolsivo sends a test payload immediately.
Note: Webhooks require Scale plan in Bolsivo.
03

Receive the test payload in n8n

  1. 1Switch back to n8n — you should see the test payload appear in the Webhook node output.
  2. 2Click on the node to inspect the JSON structure (business_name, city, score, etc.).
  3. 3Click "Stop Listening" once you have captured the test payload.
04

Add action nodes and activate

  1. 1Add downstream nodes: Google Sheets, Slack, HTTP Request (for Jobber), or any n8n connector.
  2. 2Reference Bolsivo fields using n8n's expression syntax: {{ $json.data.business_name }}.
  3. 3Test each node individually with the sample payload.
  4. 4Click "Save" → toggle the workflow to "Active" in the top-right corner.

Template library

3 ready-to-import JSON workflows

Copy the JSON below → in n8n click the menu (⋯) in the top-right → Import from JSON → paste → Save. Then replace the placeholder values with your own credentials.

lead.qualified

Bolsivo → Google Sheets: Log qualified leads

Every time a lead scores ≥ 60 in Bolsivo, append a row to a Google Sheet with business name, city, score, and offer.

n8n workflow JSON — paste into n8n → Import
{
  "name": "Bolsivo → Google Sheets (Qualified Leads)",
  "nodes": [
    {
      "name": "Bolsivo Webhook",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "bolsivo-qualified",
        "responseMode": "onReceived",
        "httpMethod": "POST"
      },
      "position": [240, 300]
    },
    {
      "name": "Append to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "append",
        "sheetId": "YOUR_SHEET_ID",
        "range": "Sheet1!A:E",
        "values": {
          "values": [
            [
              "={{$json.data.business_name}}",
              "={{$json.data.city}}",
              "={{$json.data.score}}",
              "={{$json.data.recommended_offer}}",
              "={{$json.timestamp}}"
            ]
          ]
        }
      },
      "position": [460, 300]
    }
  ],
  "connections": {
    "Bolsivo Webhook": {
      "main": [[ { "node": "Append to Sheet", "type": "main", "index": 0 } ]]
    }
  }
}
lead.qualified

Bolsivo → Slack: Instant lead notification

Post a Slack message to your #sales channel the moment a lead qualifies — includes name, city, score, and AI recommendation.

n8n workflow JSON — paste into n8n → Import
{
  "name": "Bolsivo → Slack (Lead Qualified)",
  "nodes": [
    {
      "name": "Bolsivo Webhook",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "bolsivo-qualified",
        "responseMode": "onReceived",
        "httpMethod": "POST"
      },
      "position": [240, 300]
    },
    {
      "name": "Slack Notification",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "operation": "postMessage",
        "channel": "#sales",
        "text": "🏆 *New qualified lead!*\n*Business:* {{$json.data.business_name}} ({{$json.data.city}})\n*AI Score:* {{$json.data.score}}/100\n*Recommended offer:* {{$json.data.recommended_offer}}"
      },
      "position": [460, 300]
    }
  ],
  "connections": {
    "Bolsivo Webhook": {
      "main": [[ { "node": "Slack Notification", "type": "main", "index": 0 } ]]
    }
  }
}
lead.status_changed

Bolsivo → Jobber: Auto-create client on deal close

When a lead moves to closed_won in Bolsivo, automatically create a new client in Jobber via the Jobber REST API.

n8n workflow JSON — paste into n8n → Import
{
  "name": "Bolsivo → Jobber (Closed Won)",
  "nodes": [
    {
      "name": "Bolsivo Webhook",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "bolsivo-status",
        "responseMode": "onReceived",
        "httpMethod": "POST"
      },
      "position": [240, 300]
    },
    {
      "name": "Filter: Closed Won Only",
      "type": "n8n-nodes-base.if",
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.data.new_status}}",
              "operation": "equal",
              "value2": "closed_won"
            }
          ]
        }
      },
      "position": [460, 300]
    },
    {
      "name": "Create Jobber Client",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "POST",
        "url": "https://api.getjobber.com/api/graphql",
        "authentication": "headerAuth",
        "headerParameters": {
          "parameters": [
            { "name": "Authorization", "value": "Bearer YOUR_JOBBER_TOKEN" },
            { "name": "Content-Type",  "value": "application/json" }
          ]
        },
        "body": {
          "query": "mutation { clientCreate(input: { companyName: \"{{$json.data.business_name}}\" }) { client { id } } }"
        }
      },
      "position": [700, 240]
    }
  ],
  "connections": {
    "Bolsivo Webhook":      { "main": [[ { "node": "Filter: Closed Won Only", "type": "main", "index": 0 } ]] },
    "Filter: Closed Won Only": { "main": [[ { "node": "Create Jobber Client", "type": "main", "index": 0 } ]] }
  }
}

n8n expression reference for Bolsivo payloads

What you want
n8n expression
Business name
{{ $json.data.business_name }}
City
{{ $json.data.city }}
Lead score
{{ $json.data.score }}
Recommended offer
{{ $json.data.recommended_offer }}
Lead ID
{{ $json.data.lead_id }}
Event type
{{ $json.event }}
Timestamp (ISO 8601)
{{ $json.timestamp }}
Old status (status_changed)
{{ $json.data.old_status }}
New status (status_changed)
{{ $json.data.new_status }}
Invoice amount (invoice.paid)
{{ $json.data.amount_usd }}

Verifying the HMAC signature in n8n

Add a "Function" node after the Webhook node and paste the snippet below to verify that requests really came from Bolsivo:

const crypto = require('crypto');
const secret = 'YOUR_WEBHOOK_SECRET';
const sig = $input.item.headers['x-bolsivo-signature'];
const expected = 'sha256=' + crypto
  .createHmac('sha256', secret)
  .update(JSON.stringify($input.item.body))
  .digest('hex');

if (sig !== expected) {
  throw new Error('Invalid webhook signature');
}
return $input.item;

Related

Start automating your pipeline

Enable webhooks in Bolsivo Scale, import a JSON template into n8n, and connect your leads to Jobber, Slack, or any tool your team uses — today.