週次Slackセールスレポート(Airtable版)

中級

これはCRM分野の自動化ワークフローで、14個のノードを含みます。主にCode, Merge, Slack, Airtable, ScheduleTriggerなどのノードを使用。 Airtable を使って Slack に動のなセールスパイプライン指標を生成

前提条件
  • Slack Bot Token または Webhook URL
  • Airtable API Key

カテゴリー

ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "id": "53Zi0qKV30N2PZq9",
  "meta": {
    "instanceId": "e854ccd1d846d48f876ea4ce7613a148e39ed800c748cb59061b490defde7afd",
    "templateCredsSetupCompleted": true
  },
  "name": "Weekly Slack Sales Report (Airtable Edition)",
  "tags": [],
  "nodes": [
    {
      "id": "2488c731-3008-4f49-b7a6-e7ef45007927",
      "name": "付箋",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        -272
      ],
      "parameters": {
        "width": 448,
        "height": 672,
        "content": "## 📩 Weekly Slack Sales Report Automation\n\nSends a weekly pipeline summary to Slack with real sales metrics like open deals, top deal, win rate, weighted pipeline, and total revenue closed.\n\n👤 Who It’s For\n\nSales managers, founders, and revenue teams who want automatic visibility into deal momentum without checking the CRM.\n\n⚙️ How to Set Up\n\t1.\tConnect Airtable and Slack accounts.\n\t2.\tDuplicate this workflow in n8n.\n\t3.\tSet Airtable table + Slack channel in the respective nodes.\n\t4.\tSchedule to run weekly (or trigger manually).\n\n✅ Requirements\n\t•\tAirtable sales pipeline table (with “Status” and “Value” fields)\n\t•\tSlack workspace with webhook or token access\n\t•\tn8n cloud or self-hosted instance\n\n🎨 How to Customize\n\t•\tChange the Slack formatting to match your brand voice\n\t•\tAdd fields like “Deal Owner” or “Close Date” if needed\n\t•\tModify weighting in Code node if your pipeline uses different stages\n\n**Need Help?**\n\nJoin the [Discord](https://discord.com/invite/XPKeKXeB7d) or ask in the [Forum](https://community.n8n.io/)."
      },
      "typeVersion": 1
    },
    {
      "id": "9cd0f108-3e28-4039-a8a3-b9bf37a28e53",
      "name": "付箋1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        -608
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 304,
        "content": "Workflow Breakdown\n\t1.\tSearch Airtable for deals marked “Won”\n\t2.\tSearch Airtable again for all other open deals\n\t3.\tMerge results into one array\n\t4.\tSplit & summarize in Code Node 1: format Slack message with open/won stats\n\t5.\tDeeper metrics in Code Node 2: weighted pipeline, total revenue\n\t6.\tSend final message to Slack"
      },
      "typeVersion": 1
    },
    {
      "id": "3d418639-c107-4ee7-b461-6a492f835c92",
      "name": "スケジュールトリガー",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        144,
        112
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6a5fed72-ce8f-41bf-9f26-be81c5011394",
      "name": "未完了案件を検索",
      "type": "n8n-nodes-base.airtable",
      "position": [
        656,
        -80
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appGid2SnQKDjgdhy",
          "cachedResultUrl": "https://airtable.com/appGid2SnQKDjgdhy",
          "cachedResultName": "Airtable to Slack Weekly Report"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblQq0yUYA7dIZxUr",
          "cachedResultUrl": "https://airtable.com/appGid2SnQKDjgdhy/tblQq0yUYA7dIZxUr",
          "cachedResultName": "Deals"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "=OR(\n  {Status} = \"Qualified\",\n  {Status} = \"Proposal Sent\",\n  {Status} = \"Negotiation\"\n)"
      },
      "typeVersion": 2.1
    },
    {
      "id": "a52e60df-e378-40c0-be0a-c3512661b452",
      "name": "受注案件を検索",
      "type": "n8n-nodes-base.airtable",
      "position": [
        656,
        432
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appGid2SnQKDjgdhy",
          "cachedResultUrl": "https://airtable.com/appGid2SnQKDjgdhy",
          "cachedResultName": "Airtable to Slack Weekly Report"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblQq0yUYA7dIZxUr",
          "cachedResultUrl": "https://airtable.com/appGid2SnQKDjgdhy/tblQq0yUYA7dIZxUr",
          "cachedResultName": "Deals"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "={Status} = \"Won\""
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "TYjnodYUe5IcQGV2",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "49091bc3-1815-407f-bb1e-79a3c0413171",
      "name": "案件を統合",
      "type": "n8n-nodes-base.merge",
      "position": [
        1088,
        112
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "179a3e43-8f0e-4f93-ad58-8f5a8f8b07db",
      "name": "Slack メッセージ要約",
      "type": "n8n-nodes-base.code",
      "position": [
        1296,
        112
      ],
      "parameters": {
        "jsCode": "// Split input: open deals and closed deals\nconst openDeals = items.filter(item => item.json['Status'] !== 'Won' && item.json['Status'] !== 'Lost');\nconst closedDeals = items.filter(item => item.json['Status'] === 'Won');\n\n// Metrics\nconst pipelineValue = openDeals.reduce((sum, d) => sum + Number(d.json['Value'] || 0), 0);\nconst topDeal = openDeals.sort((a, b) => b.json['Value'] - a.json['Value'])[0];\nconst winRate = closedDeals.length + openDeals.length > 0\n  ? (closedDeals.length / (closedDeals.length + openDeals.length)) * 100\n  : 0;\n\n// Format\nreturn [\n  {\n    json: {\n      openDeals,\n      closedDeals,\n      summary: `📊 *Weekly Pipeline Report*`,\n      value: `• Open Deals: *${openDeals.length}*  \n• Pipeline Value: *£${pipelineValue.toLocaleString()}*  \n• Top Deal: *${topDeal?.json['Deal Name']}* – £${topDeal?.json['Value']}  \n• Win Rate: *${winRate.toFixed(1)}%*`\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "7b1c11c7-43ea-4825-94f0-286c8e89a453",
      "name": "詳細メトリクス",
      "type": "n8n-nodes-base.code",
      "position": [
        1504,
        112
      ],
      "parameters": {
        "jsCode": "const openDeals = items[0].json.openDeals;\nconst closedDeals = items[0].json.closedDeals;\n\n// Extract field helper\nconst getField = (record, field) => record.json?.[field] ?? null;\n\nconst totalPipeline = openDeals.reduce((sum, record) => {\n  return sum + (parseFloat(getField(record, 'Value')) || 0);\n}, 0);\n\nconst weightedPipeline = openDeals.reduce((sum, record) => {\n  const stage = getField(record, 'Stage');\n  const value = parseFloat(getField(record, 'Value')) || 0;\n\n  const stageWeights = {\n    'Qualified': 0.2,\n    'Proposal Sent': 0.4,\n    'Negotiation': 0.6,\n    'Won': 1,\n    'Lost': 0\n  };\n\n  const weight = stageWeights[stage] || 0.2;\n  return sum + (value * weight);\n}, 0);\n\nconst totalClosed = closedDeals.reduce((sum, record) => {\n  return sum + (parseFloat(getField(record, 'Value')) || 0);\n}, 0);\n\nconst winRate = openDeals.length + closedDeals.length > 0\n  ? ((closedDeals.length / (openDeals.length + closedDeals.length)) * 100).toFixed(1)\n  : 'N/A';\n\nreturn [\n  {\n    json: {\n      totalPipeline: `£${totalPipeline.toLocaleString()}`,\n      weightedPipeline: `£${weightedPipeline.toLocaleString()}`,\n      totalClosed: `£${totalClosed.toLocaleString()}`,\n      winRate: `${winRate}%`,\n      openDealsCount: openDeals.length,\n      closedDealsCount: closedDeals.length\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "a3740fd8-0e24-4581-a156-006ffe33b40b",
      "name": "Slack メッセージ",
      "type": "n8n-nodes-base.slack",
      "position": [
        1904,
        112
      ],
      "webhookId": "8c2a1c87-c10d-4c14-b4c9-c31474da3b95",
      "parameters": {
        "text": "=📊 *Weekly Sales Report*  • 🧮 *Total Pipeline:* {{ $json.totalPipeline }} • ⚖️ *Weighted Pipeline:* {{ $json.weightedPipeline }} • 🏆 *Total Closed (All Time):* {{ $json.totalClosed }} • 📈 *Win Rate:* {{ $json.winRate }}  • 🔄 *Open Deals:* {{ $json.openDealsCount }} • ✅ *Closed Deals:* {{ $json.closedDealsCount }}  _This report was generated automatically using n8n._",
        "user": {
          "__rl": true,
          "mode": "list",
          "value": "U096VCG525P",
          "cachedResultName": "james"
        },
        "select": "user",
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "edcCpymx9IvKgibG",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "8349a72d-1430-42d3-adde-06a577cb9f3c",
      "name": "付箋3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        496,
        224
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Search Open Deals\n[Read more about Airtable node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/)\n\nThis node fetches all remaining records in the pipeline that are still active (i.e. any Status that isn’t “Won”). These open deals are used to compute total pipeline value, top open deal, and other forward-looking metrics.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9df9bf18-cc92-4711-b0a8-1b6c7bf94574",
      "name": "付箋4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        496,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Search Won Deals\n[Read more about the Airtable node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/)\n\nThis node queries the Airtable deal table for all records where Status is set to “Won”. It returns only the successfully closed deals so the report can calculate win rate and total closed revenue.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "593619f0-bd06-436c-9203-096a6eef52b5",
      "name": "付箋5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Send Slack Message\n[Read more about the Slack node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/)\n\nThis node takes the formatted message and posts it to the designated Slack channel. It uses the output from both code nodes to send a single message with all the key sales metrics, helping the team stay aligned on pipeline status.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0c21cce2-a383-424c-9018-9c04b37b3fd7",
      "name": "付箋6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 688,
        "height": 416,
        "content": "## Process & Format Metrics\n[Read more about the Code node](https://www.google.com/search?client=safari&rls=en&q=code+node+n8n&ie=UTF-8&oe=UTF-8)\n\n[Read more about the Merge node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/)\n\nMerges both datasets, splits open vs won deals, calculates total pipeline, weighted pipeline based on stage probabilities, top deal, closed revenue, and win rate, then formats everything into a clean message for Slack.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "aebcfa3e-9587-403e-b4f7-0e9c7088fbc5",
      "name": "付箋7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Schedule Trigger\n[Read more about Calendly Credentials](https://docs.n8n.io/integrations/builtin/credentials/calendly/)\n\nTriggers the workflow on a recurring schedule. You can set it to run as often as you like.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "268480a9-a2d7-414d-8efc-d0c716dbbfdb",
  "connections": {
    "49091bc3-1815-407f-bb1e-79a3c0413171": {
      "main": [
        [
          {
            "node": "179a3e43-8f0e-4f93-ad58-8f5a8f8b07db",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7b1c11c7-43ea-4825-94f0-286c8e89a453": {
      "main": [
        [
          {
            "node": "a3740fd8-0e24-4581-a156-006ffe33b40b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3d418639-c107-4ee7-b461-6a492f835c92": {
      "main": [
        [
          {
            "node": "6a5fed72-ce8f-41bf-9f26-be81c5011394",
            "type": "main",
            "index": 0
          },
          {
            "node": "a52e60df-e378-40c0-be0a-c3512661b452",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a52e60df-e378-40c0-be0a-c3512661b452": {
      "main": [
        [
          {
            "node": "49091bc3-1815-407f-bb1e-79a3c0413171",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "6a5fed72-ce8f-41bf-9f26-be81c5011394": {
      "main": [
        [
          {
            "node": "49091bc3-1815-407f-bb1e-79a3c0413171",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "179a3e43-8f0e-4f93-ad58-8f5a8f8b07db": {
      "main": [
        [
          {
            "node": "7b1c11c7-43ea-4825-94f0-286c8e89a453",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

中級 - 顧客管理

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

関連ワークフロー

001_ Slack用AI駆動ニュースインサイトワークフロー
NewsAPIとGPT-4洞察を使った毎日のビジネスニュースサマリー(Slackへ送信)
Set
Code
Merge
+
Set
Code
Merge
17 ノードJames Carter
市場調査
GoHighLevel から顧客の续约リマインドを自動のに Gmail と Slack へ送信
GoHighLevelからGmail、Slack、Google Sheetsへ顧客更新の自動リマインダーを送信
If
Code
Gmail
+
If
Code
Gmail
19 ノードRahul Joshi
顧客管理
OpenAI・Ahrefsを活用したマルチプラットフォーム連携による自動コンテンツマーケティングインテリジェンス
OpenAI、Ahrefs、マルチプラットフォーム統合を使用した自動コンテンツマーケティングスマート
If
Set
Code
+
If
Set
Code
21 ノードNikan Noorafkan
市場調査
Slack 上にユーザーに通知しながら、AI を使って LinkedIn への貢献を作成する
AIを使ってLinkedInでの貢献を作成し、Slackでユーザーに通知する
Set
Code
Html
+
Set
Code
Html
33 ノードDarryn
人工知能
GoHighLevelから非アクティブ取引をSlackとシートへ自動クローズ
GoHighLevel 内の非アクティブな取引を Slack と Sheets へ自動のに削除
Code
Slack
Filter
+
Code
Slack
Filter
15 ノードRahul Joshi
顧客管理
セールスパイプライン自動化ダッシュボード
HubSpot CRM、ScrapeGraphAI、Google Sheets ダッシュボードを使って販売パイプラインを自動化
If
Code
Slack
+
If
Code
Slack
22 ノードvinci-king-01
顧客管理
ワークフロー情報
難易度
中級
ノード数14
カテゴリー1
ノードタイプ6
難易度説明

経験者向け、6-15ノードの中程度の複雑さのワークフロー

作成者
James Carter

James Carter

@arioloop

Automation engineer | 10+ years streamlining Sales & Marketing. Use my link to book an initial consultation for custom n8n work.

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34