n8nでHubSpotとNotionを同期するには?
CRMデータをHubSpotに、プロジェクトの文脈をNotionに保管しているチームにとって、両ツールを手作業で同期し続けるのは大きな時間の負担です。このガイドでは、n8nで両者をつなぐ自動化ワークフローの作り方を解説します。案件の更新はNotionに反映され、ミーティングノートはコピー&ペーストなしでHubSpotに書き戻されます。カスタムコードは不要で、n8nに標準搭載されたノードと少しの設定だけで実現できます。
寄稿者
SaaS Hackers
結論:n8nを使えば、HubSpotとNotionを同期できます。CRMのイベント(新規コンタクト、案件の更新、受注など)をトリガーに、構造化データをNotionのデータベースへ書き込み、逆方向の同期も可能なワークフローを自動化して構築します。セットアップは1時間もかからず、カスタムコードも不要です。n8nに標準搭載されたHubSpotノードとNotionノードだけで完結します。
HubSpotにはCRMデータがあり、Notionにはチームの知見があります。両者が分断されたままだと、アカウントマネージャーは案件の詳細をミーティングノートにコピー&ペーストすることになり、運用チームは他の場所にすでにある情報を探し回ることになります。
このチュートリアルでは、n8nを使ってHubSpotとNotionの双方向同期を構築する手順を、アカウントレコードとノートを対象に具体的に紹介します。最後まで進めれば、両ツールを自動で同期し続けるワークフローが完成します。機能が半分程度しか使えないネイティブ連携に料金を払う必要もありません。
始める前に必要なもの
構築を始める前に、次の3つを用意してください。
- n8nのインスタンス(セルフホストでもn8n Cloudでも可)
- HubSpotアカウント(APIアクセスが有効なもの。有料プランまたはデベロッパーサンドボックス)
- Notionワークスペース(アカウントまたはコンタクト用のデータベースが1つ以上あるもの)
n8nで両ツールの認証情報も作成する必要があります。HubSpotではOAuth2またはプライベートアプリのトークンを使用し、Notionでは特定のワークスペースに紐づくインテグレーションシークレットを使用します。
n8nでHubSpotの認証情報を設定する
- HubSpotアカウントで、設定 > インテグレーション > プライベートアプリへ移動します
- 新しいプライベートアプリを作成し、次のスコープを付与します
crm.objects.contacts.read,crm.objects.deals.read、およびcrm.objects.companies.read(データを書き戻す場合は書き込みスコープも追加してください) - アクセストークンをコピーします
- n8nで、Credentials > New > HubSpot APIへ進み、トークンを貼り付けます
n8nでNotionの認証情報を設定する
- notion.so/my-integrationsにアクセスし、新しいインテグレーションを作成します
- 名前(例:「n8n Sync」)を付け、接続したいワークスペースを選択します
- インテグレーションシークレットをコピーします
- n8nで、Credentials > New > Notion APIへ進み、シークレットを貼り付けます
- Notionに戻り、同期したいデータベースを開いて、共有 > 名前でインテグレーションを招待をクリックします
ワークフロー1:HubSpotからNotionへ(アカウント同期)
このワークフローは、HubSpotで企業レコードが作成または更新されるたびに実行され、そのデータをNotionのデータベースに書き込みます。
ステップ1:HubSpotトリガーノードを追加する
- n8nで新しいワークフローを作成します
- 開始点としてHubSpot Triggerノードを追加します
- イベントを次のように設定します
company.creationまたはcompany.propertyChange新規レコードのみ、更新のみ、または両方のどれを対象にするかによって選びます - 上で設定した認証情報で認証します
公開Webhook URLのないセルフホスト環境では、代わりにHubSpotノードをポーリングモードで使用し、スケジュールトリガーを設定します(多くのチームでは15分ごとが適切です)。このワークフローを軸に、より広いレポーティング基盤を設計する場合は、アトリビューションや流入元の計測も考えておくと役立ちます。特にCRMの動きとあわせてAIツールからのトラフィックを計測したい場合は重要です。
ステップ2:HubSpotノードを追加して企業データの全項目を取得する
トリガーが渡すのは企業IDだけです。レコード全体を取得するには、2つ目のノードが必要です。
- トリガーの後にHubSpotノードを追加します
- Resourceを次のように設定します
CompanyOperationを次のように設定しますGet - 式を使って、トリガーの出力から企業IDをマッピングします:
{{ $json.objectId }} - 必要なプロパティを選択します。企業名、ドメイン、オーナー、案件ステージ、年間売上、チームで使っているカスタムフィールドなどです
ステップ3:Notionノードを追加してページを作成または更新する
- Notionノードを追加します
- Resourceを次のように設定します
Database PageOperationを次のように設定しますCreate - アカウント用のデータベースを選択します
- HubSpotのフィールドをNotionのプロパティにマッピングします:
| HubSpotのフィールド | Notionのプロパティ |
|---|---|
| name | Name(タイトル) |
| domain | Website(URL) |
| hubspot_owner_id | Owner(テキストまたはリレーション) |
| annualrevenue | ARR(数値) |
| hs_lastmodifieddate | Last Updated(日付) |
新規作成ではなく更新を行う場合は、先にページがすでに存在するかを確認する必要があります。作成ステップの前にNotionノードをもう1つ追加し、次のように設定します Search Notionのプロパティとして保存したドメインまたはHubSpotの企業IDでフィルターをかけます。結果が返ってきた場合は、次の操作に切り替えます Update 返されたページIDを使って実行します。
ステップ4:IFノードを追加して作成と更新の分岐を処理する
- 検索と書き込みの間にIFノードを追加します
- 条件:
{{ $json.results.length }}次より大きい0 - Trueの分岐:Notionの更新ノードに接続します
- Falseの分岐:Notionの作成ノードに接続します
これにより、ページの重複を防ぎ、Notionのデータベースをきれいに保てます。
ワークフロー2:NotionからHubSpotへ(ノートとミーティング要約)
このワークフローは、Notionのミーティングノート用データベースに新しいページが追加されたときに実行され、該当するHubSpotの企業レコードにノートやエンゲージメントを書き戻します。
ステップ1:スケジュールトリガーを追加する
Notionはアウトバウンドのウェブフックをネイティブにサポートしていないため、n8nがスケジュールに従ってデータベースをポーリングします。
- Schedule Triggerノードを追加します
- 10分または15分ごとに実行するよう設定します
- これがワークフローの起点になります
ステップ2:Notionデータベースから新しいページを取得する
- Notionノードを追加します
- Resourceを次のように設定します
DatabaseOperationを次のように設定しますGet Many - ミーティングノート用のデータベースを選択します
- フィルターを追加します:
Created Time次より後{{ $now.minus(15, 'minutes').toISO() }}
これにより、ポーリング間隔に合わせて、直近15分以内に作成されたページだけが取得されます。
ステップ3:NotionからHubSpotの企業IDを抽出する
これを機能させるには、Notionのミーティングノートのテンプレートに、HubSpotの企業IDを保存するプロパティが必要です。次を追加してください Number または Text 「HubSpot ID」というプロパティをNotionのテンプレートに追加し、チームの標準的なノート作成プロセスに組み込みます。
n8nでマッピングします: {{ $json.properties['HubSpot ID'].number }}
ステップ4:HubSpotでエンゲージメントを作成する
- HTTP Requestノードを追加します(HubSpotのネイティブノードはすべてのエンゲージメントタイプに対応していないため、ここではAPIを直接使用します)
- Method:
POST - URL:
https://api.hubapi.com/engagements/v1/engagements - 認証:HubSpotのプライベートアプリのトークンを使ったHeader Auth
- ボディ(JSON):
{
"engagement": {
"active": true,
"type": "NOTE"
},
"associations": {
"companyIds": ["{{ $json.properties['HubSpot ID'].number }}"]
},
"metadata": {
"body": "{{ $json.properties.Name.title[0].plain_text }}\n\n{{ $json.properties.Summary.rich_text[0].plain_text }}"
}
}これにより、HubSpotのアクティビティタイムラインに、正しい企業に紐づいたノートが作成されます。ページタイトルと、Notionから取得した要約フィールドが含まれます。
エラーへの対処と重複同期の防止
双方向同期は、決まったパターンで壊れます。よくある問題を防ぐ方法を紹介します。
無限ループを防ぐ: n8nがHubSpotにレコードを書き込むと、HubSpotがn8nにウェブフックを返し、n8nがNotionへの書き込みを試み、それをまたポーリングすることになります。ワークフローで作成したすべてのレコードにメタデータのプロパティ(例: synced_by_n8n: true)を追加し、各ワークフローの冒頭にIFノードを置いて、そのフラグが付いたレコードをスキップするようにします。
欠損フィールドを適切に処理する: n8nの次のノードを使います: IF および Set 任意のプロパティに対して、フォールバック値を定義します。HubSpotで次の値がnullの場合、 annualrevenue 次の値に設定します: 0 Notionに渡す前にこの処理を行い、ワークフローが失敗しないようにします。
失敗をNotionのエラー用データベースに記録する:n8nでエラーワークフロー(Settings > Error Workflow)を追加し、失敗した実行を専用のNotionページに書き込みます。これにより、n8nを直接監視しなくても、チームが状況を把握できます。この同期がより大きな収益基盤の一部になる場合は、ワークフローのガバナンス、アトリビューション、CRMプロセス設計を専門とするB2B SaaSのマーケティングオペレーション支援エージェンシーのサポートも検討するとよいでしょう。
このセットアップの構築とテストの方法
このワークフローは、n8n Cloud(v1.x)上で、HubSpotのデベロッパーサンドボックスと、Accounts、Meeting Notes、Sync Errorsの3つのデータベースを持つNotionワークスペースを使って構築、テストしました。双方向同期は、50件のテストレコードで重複なく動作し、12件のミーティングノートをエンゲージメントとしてHubSpotに正しく書き戻しました。
ここで紹介したセットアップは、高額なミドルウェアを使わずにGTMスタックを連携させたいB2B SaaSチーム向けに、SaaS HackersがCRM自動化ワークフローを構築する際に用いているパターンと同じです。
よくある質問
n8nはカスタムコードなしで、HubSpotとNotionのネイティブ連携に対応していますか?
はい。n8nにはHubSpotとNotionの両方の標準ノードが搭載されています。ノードエディターだけで、コードを書かずに同期ワークフローを構築できます。HubSpotの高度なエンゲージメントタイプ(ノートなど)では、HubSpot APIを直接指定するHTTP Requestノードが必要になる場合がありますが、独自のスクリプトは不要です。
HubSpotとNotionの一方向同期と双方向同期の違いは何ですか?
一方向同期は、データを一方向、通常はHubSpotからNotionへ送ります。双方向同期は、両ツールの変更を読み取り、もう一方に書き戻します。双方向にすると、Notionのアカウントレコードを最新に保ち、ミーティングノートや更新内容をHubSpotのアクティビティタイムラインに戻せるため、両ツールが同じ状況を反映します。
n8nによるHubSpotとNotionの同期は、どのくらいの頻度で更新されますか?
トリガーの設定によって異なります。HubSpotのウェブフックは、レコードの変更から数秒以内というほぼリアルタイムで発火します。Notionはアウトバウンドのウェブフックをサポートしていないため、ポーリングに頼ります。多くのチームにとって、10〜15分のポーリング間隔が現実的な初期設定です。NotionからHubSpotへの更新をより速くしたい場合は、Notion APIと連携したフォームや、Notionテンプレート内の手動トリガーボタンの利用を検討してください。
このHubSpotとNotionの同期は無料で運用できますか?
n8nのセルフホスト版は無料のオープンソースです。n8n Cloudには、実行回数に制限のある無料プランがあります。HubSpotのプライベートアプリAPIは、無料プランを含むすべてのプランで利用できます。NotionのAPIもすべてのプランで利用できます。費用がかかるのは、n8nを自社でホスティングする場合はそのホスティング費用、そうでない場合はn8n Cloudのサブスクリプション料金のみです。
同期が途中で失敗した場合はどうなりますか?
n8nは、すべての実行について入力、出力、エラー状態をログに記録します。失敗した実行は、実行ログから直接確認できます。上で説明したように、失敗をNotionのエラー用データベースに書き込むエラーワークフローを追加しておくと、そのたびにn8nにログインしなくても、チームが同期の不具合をより早く見つけて修正できます。
寄稿者
SaaS Hackers


