Notion(ノーション)に申込や問い合わせを手で写している会社は多いです。フォームの通知メールを開いて、名前と日付をデータベースにコピーし、受付に「入りました」と声をかける。1件1分でも、月に100件あれば1時間半、写し間違いと写し忘れも混ざります。この記事では、ワークフロー自動化ツールのn8nを使って、フォーム・Gmail・kintoneからNotionへ自動で登録する形を、手順付きで書きます。読み終わると、n8nとNotionをつなぐ認証を作り、フォームの申込を体験申込データベースに入れて受付に知らせるワークフローを、自分で1本動かせます。前提は、Notionのワークスペースにデータベースが1つ以上あり、n8nを使える環境(n8nのクラウド版か、自社で立てたn8n)があることです。
例は、このコラムで毎回使っている、スタッフ6名ほどの予約制の小さな料理教室「サンプル料理教室」のワークスペースです。データベースは体験申込・タスク・レッスン予定を使います。
この記事の内容
n8nとは、なぜNotionと組むのか
n8nは、「フォームが送られたら」「メールが届いたら」「毎朝9時に」といったきっかけで、決めた順に処理を流すワークフロー自動化ツールです。画面上でノード(処理の箱)を線でつないで組み、NotionやGmail、Slack、kintoneのREST APIなどへ読み書きします。n8nそのものの始め方は姉妹サイトのn8nコラム(nexly.co.jp/n8n/)にまとめてあります。
Notionと組む理由は3つあります。
1つ目は、Notionの外で起きたことをNotionへ入れたいときです。Notionのオートメーションは「Notionの中で何かが変わったら」動く機能で、ホームページのフォームやGmailの受信をきっかけにはできません。外からNotionへ入れるには、Notion APIを呼ぶ何かが要り、n8nはその役になります。
2つ目は、途中で加工や分岐を入れたいときです。申込経路で担当を振り分ける、同じメールアドレスの申込がすでにあれば新しく作らず更新する、日付を整える、といった処理はNotionだけでは組めません。
3つ目は、Notionから外へ流したいときです。体験申込の「入会したか」が入会に変わったら、別の台帳やkintoneにも入れる。この「外へ」の流れは、Notionのオートメーションのwebhookでn8nを呼び出せば組めます。
逆に、Notionの中だけで完結する繰り返し(毎週の議事録ページを作る、状態が完了になったら日付を入れる)は、n8nを使わずNotionのボタンとオートメーションで足ります。道具を増やすほど、止まったときに見る場所も増えます。
先に決めること
n8nのワークフローは作るのは早いですが、あとで「どっちが正しいデータか分からない」「誰が止まったことに気づくのか」で揉めます。作る前に次の4つを決めます。
1つ目は、そのデータの正をどこに置くかです。フォームの申込なら、Notionの体験申込が正です。月謝と予約は外部の予約システム(reserve.example)が正で、Notionには写しを置くだけにします。kintoneとつなぐ場合は、とくにここを先に決めます。両方を正にすると、片方で直した内容がもう片方で上書きされます。
2つ目は、n8nがNotionのどのページに触れてよいかです。n8nはインテグレーション(Notion APIの接続)を通してNotionに入ります。インテグレーションは、接続を足したページとその下にしか触れません。サンプル料理教室では、体験申込とタスクのデータベースだけに接続し、代表だけの経営メモには接続しません。
3つ目は、n8nの認証を誰の持ち物にするかです。辞めた人のアカウントで作った認証は、その人が抜けると止まります。サンプル料理教室では、代表がインテグレーションを作り、n8nのアカウントも代表の名義にしています。
4つ目は、止まったときに誰に知らせるかです。受付が気づけないと、申込が入っていないことに数日後に気づきます。通知の宛先は代表のアドレス daihyo@sample-cooking.example にしておき、受付には別の流れで毎朝の件数だけ知らせます。
n8nのNotionノードでできること
n8nにはNotionノード(Notionを読み書きする箱)と、Notion Trigger(Notionの変化をきっかけにする箱)があります。2026年10月時点のn8n公式ドキュメントで、Notionノードの操作は次のとおりです。
| 対象(Resource) | 操作(Operation) | サンプル料理教室での使いどころ |
|---|---|---|
| Block | Append After / Get Many / Get Markdown | 申込ページの本文に、フォームの自由記入欄を書き足す |
| Data Source | Get / Search | データベースの中身の定義(データソース)を調べる |
| Database | Get | データベースのプロパティの一覧を確かめる |
| Database Page | Create / Get / Get Many / Update | 体験申込に1件作る、同じメールの申込を探す、状態を更新する |
| Page | Archive / Create / Get Markdown / Search / Update Markdown | 通常のページを作る、不要なページをアーカイブする |
| User | Get / Get Many | タスクの担当に入れる人のIDを調べる |
ふだん使うのは、ほぼ「Database Page」の4つです。データベースの1行は、Notionの中では1枚のページなので、「行を足す」は「Database Page」の「Create」になります。
一覧にない操作は、HTTP RequestノードでNotion APIを直接呼べます。このときも、Notionノード用に作った認証をそのまま使えます。
Notion Triggerのきっかけは「Page added to database」(データベースにページが足された)と「Page updated in database」(データベースのページが更新された)の2つです。Notion側の変化を受けたいときは、この Notion Trigger か、後で書くNotionのオートメーションのwebhookのどちらかを使います。

認証を作る
n8nからNotionに入るには、Notion側でインテグレーションを作り、そのトークンをn8nに登録します。n8nの公式ドキュメントでは、社内用の「API integration token」と、外部に配る用の「OAuth2」の2つが書かれています。1つの会社の中で使うなら、社内用の方で足ります。
Notionでインテグレーションを作る
- Notionのサイドバーの「設定」を開き、「コネクト」のタブを選ぶ
- 「+ 新規コネクション」を押す
- 名前に
n8n連携と入れ、ワークスペース「サンプル料理教室」を選んで保存する - 「コネクト権限の詳細設定」で、コンテンツの読み取り・書き込み・挿入と、ユーザー情報の読み取り(メールアドレスは除く)を有効にして保存する
- 「内部接続トークン」をコピーする
n8nの公式ドキュメントは英語の画面で書かれていて、手順4は「Capabilities」、手順5は「Internal Integration Secret」(Secretsのタブ)と表記されています。
コピーしたトークンは ntn_xxxx のような文字列です(2024年9月より前に作ったものは secret_ で始まり、そのまま使えます)。これを持っていれば、接続したページを誰でも読み書きできます。チャットやメールに貼らず、そのままn8nに入れます。

n8nに登録する
- n8nの左のメニューから認証の一覧(Credentials)を開く
- 新しく作るを押し、「Notion API」を選ぶ
- 「Internal Integration Secret」の欄に、さきほどの内部接続トークンを貼る
- 名前を
Notion サンプル料理教室にして保存する
データベースに接続を足す
インテグレーションを作っただけでは、n8nからは何も見えません。触れてよいページごとに接続を足します。
- Notionで体験申込のデータベースを開く
- 右上の
•••を押す - 「その他」を開き、「コネクション」のグループにある「コネクションを追加」を押す
- 一覧から
n8n連携を選ぶ
タスクのデータベースにも同じ操作をします。接続を足していないページにn8nから触ると、エラーが返ります。n8nで「見つからない」と出たら、まず接続を疑います。

例1:ホームページのフォームの申込を体験申込に入れ、受付に知らせる
サンプル料理教室のホームページ sample-cooking.example には、体験レッスンの申込フォームがあります。今は送信されるとメールが届き、受付が体験申込データベースに手で写しています。これを、送信されたら自動で1行作り、受付に知らせる形にします。
体験申込データベースのプロパティは次のとおりです。
| プロパティ | 種類 | フォームから入れる値 |
|---|---|---|
| 名前 | タイトル | お名前 |
| メール | メール | メールアドレス |
| 電話 | 電話 | 電話番号 |
| 申込日 | 日付 | 送信された日時 |
| 申込経路 | セレクト | ホームページ(固定) |
| 体験日 | 日付 | 希望日 |
| 入会したか | セレクト | 未定(固定) |
| 問い合わせ内容 | テキスト | 自由記入欄 |
手順
- n8nで新しいワークフローを作り、名前を
HPフォーム→体験申込にする - 最初のノードにWebhookノードを置き、HTTP MethodをPOSTにする
- Webhookノードに出るテスト用のURLをコピーする
- ホームページのフォームの送信先(フォームのプラグインのwebhook設定など)に、テスト用のURLを入れる
- n8nでWebhookノードを待ち受けの状態にして、ホームページからテストの申込を1件送る
- n8nにフォームの中身が届いたことを確かめる(
nameemailteldatemessageのような項目名で届く) - 次にNotionノードを置き、ResourceをDatabase Page、OperationをGet Manyにして、体験申込の中からメールが同じ行を探す
- Ifノードを置き、見つかったら更新、見つからなければ新しく作る、に分ける
- 見つからなかった側にNotionノードを置き、ResourceをDatabase Page、OperationをCreate、データベースに体験申込を選ぶ
- プロパティを1つずつ足し、表のとおりにフォームの項目を割り当てる
- 作った行のURLを受け取り、Gmailノードで受付用のアドレスに「体験申込が入りました」とURL付きで送る
- テスト用のURLから本番用のURLに付け替え、ワークフローを本番で動く状態にする(ボタンの表記はn8nの版で違うので、画面右上の切り替えで確かめる)
日付は、Notionが読める形(2026-11-08 や 2026-11-08T19:00:00+09:00)で渡します。フォームが 2026/11/08 のように送ってくる場合は、n8nの式で直します。
{{ $json.body.date.replaceAll('/', '-') }}
申込日には、受け取った時刻を入れます。
{{ $now.setZone('Asia/Tokyo').toISO() }}
受付への通知の本文は、名前・体験日・Notionの行のURLの3つで足ります。受付はURLを押せばNotionの行が開き、そこで電話をかけた記録を残せます。
体験申込が入りました
名前:{{ $('Webhook').item.json.body.name }}
体験日:{{ $('Webhook').item.json.body.date }}
Notion:{{ $json.url }}


この例で気をつけること
同じ人が2回送ってくることがあります。手順7と8で、メールが同じ行を先に探しているのはこのためです。見つかった側では、新しく作らず、体験日と問い合わせ内容だけを更新します。
セレクトの選択肢は、Notion側の表記と1文字でも違うと別の選択肢として扱われます。ホームページ と HP が混ざると、申込経路での集計が割れます。n8nで固定値を入れるときは、Notionの選択肢をコピーして貼ります。
問い合わせ内容のテキストは、1つの塊で2,000字までです。長い自由記入が来る可能性があるなら、n8nで2,000字に切ってから入れるか、本文側にBlockのAppend Afterで書き足します。
Notionの公式のフォームで足りるなら、n8nを使わずにNotionのフォームでデータベースへ直接ためる方が単純です。ホームページの見た目のままフォームを使いたい、送信後に別の処理も挟みたい、という場合にn8nを使います。
例2:Gmailの問い合わせメールをNotionのタスクにする
info@sample-cooking.example には、法人からの出張レッスンの相談や取材の依頼が届きます。受付が読んで「あとで代表に回す」と思ったまま埋もれることがありました。届いたらタスクのデータベースに1行作り、担当と期限を付けます。
タスクのデータベースのプロパティは、名前(タイトル)・担当(ユーザー)・期限(日付)・状態(ステータス)・関連するレッスン(リレーション)に、メール用として「差出人」(メール)と「本文の冒頭」(テキスト)を足しておきます。
- n8nで新しいワークフローを作り、名前を
問い合わせメール→タスクにする - 最初のノードにGmail Triggerを置き、EventをMessage Receivedにする
- Poll Timesで確認の間隔を決める(サンプル料理教室では15分ごと)
- 絞り込みのSearchに
to:info@sample-cooking.example -from:reserve.exampleと入れ、予約システムからの自動メールを外す - Read Statusは「Unread emails only」のままにする
- 次にNotionノードを置き、ResourceをDatabase Page、OperationをCreate、データベースにタスクを選ぶ
- 名前に件名、差出人に送り主のアドレス、本文の冒頭にメール本文の先頭500字を割り当てる
- 状態は「未着手」、期限は受信日の2日後にする
- 担当には受付Bを入れる(ユーザーのIDは、NotionノードのUserのGet Manyで一度調べておく)
- 最後にGmailノードで、そのメールに
Notion登録済みのラベルを付ける
期限の式は次のとおりです。
{{ $now.setZone('Asia/Tokyo').plus({ days: 2 }).toFormat('yyyy-MM-dd') }}
本文の冒頭を500字に切る式です。
{{ ($json.text || '').slice(0, 500) }}
全文をNotionに写す必要はありません。タスクには「何の件か」と「誰からか」があれば動けます。返信はGmailで書くので、タスクの行にGmailで開くための手がかり(件名と差出人)が残っていれば足ります。
ラベルを付けるのは、あとで「どのメールがタスクになったか」をGmailの側から見られるようにするためです。ラベルの無い問い合わせが残っていれば、ワークフローが止まっていたと分かります。


例3:kintoneとNotionを同期するときの注意
会社によっては、顧客や案件の台帳をkintoneに置き、議事録やマニュアルをNotionに置いています。kintoneのレコードをNotionにも出したい、という相談はよくあります。手順を書く前に、先に決めることを書きます。
どちらを正にするかを1つに決める
同期で一番多い事故は、両方で書き換えて、どちらが正しいか分からなくなることです。kintoneで電話番号を直し、同じ日にNotionで住所を直すと、片方の同期がもう片方を古い値で上書きします。片方向にすると、この事故は起きません。
| 形 | 正 | 向き | 向いている場面 |
|---|---|---|---|
| kintoneが正 | kintone | kintone→Notion | 台帳はkintoneで入力し、Notionでは議事録やタスクから参照したい |
| Notionが正 | Notion | Notion→kintone | Notionで受けた申込のうち、入会した人だけをkintoneの会員台帳に送る |
| 両方向 | 項目ごとに分ける | 双方向 | 勧めない。やるなら項目ごとに正を決め、同じ項目を両方で書かない |
サンプル料理教室では、Notionの体験申込が正で、入会が決まった人だけを会員台帳に送る「Notionが正」の形にしています。会員台帳側で直した内容は、Notionに戻しません。
突き合わせのキーを両方に持たせる
kintoneのレコード番号をNotion側の「kintoneのレコード番号」(数値)に、NotionのページIDをkintone側の「NotionのページID」(文字列1行)に入れておきます。2回目からはこのキーで探して更新します。名前やメールアドレスで突き合わせると、表記の揺れで別人として二重に作られます。
n8nでの組み方
kintoneとのやり取りは、n8nのHTTP RequestノードでkintoneのREST APIを呼んで組みます。kintone側のAPIトークンはアプリごとに発行し、必要な権限(レコード閲覧・追加・編集)だけにチェックを入れます。kintone側の変化をきっかけにするなら、kintoneアプリの設定のWebhookにn8nのWebhookノードのURLを入れます。kintone側の操作の詳しい手順は、姉妹サイトのkintoneコラム(nexly.co.jp/kintone/)に書いてあります。
消したときの扱いを決める
片方で消したレコードを、もう片方でも消すかを決めます。自動で消す流れは、間違えたときに戻せません。サンプル料理教室では、Notion側で消しても会員台帳は消さず、受付が月に1回、差分を見て手で直しています。

Notionのオートメーションのwebhookからn8nを動かす
Notionの中の変化をきっかけにn8nを動かすには、データベースのオートメーションに「Webhookを送信」のアクションを足します。2026年10月時点で、webhookのアクションは有料プランだけで使えます。
例として、体験申込の「入会したか」が「入会」に変わったら、n8nを呼び出して会員台帳への登録と代表への通知を行います。
- n8nで新しいワークフローを作り、最初にWebhookノードを置いてHTTP MethodをPOSTにする
- Webhookノードのテスト用のURLをコピーする
- Notionで体験申込のデータベースを開き、データベース上部の稲妻のアイコンを押す
- 「新規オートメーション」を押し、トリガーに「プロパティの編集」を選び、「入会したか」を「設定」「入会」にする
- 「アクションを追加」から「Webhookを送信」を選ぶ
- URLにn8nのテスト用のURLを貼る
- 送るプロパティに、名前・メール・電話・体験日を選ぶ
- 「カスタムヘッダーを追加する」で、キーに
X-Notion-Token、値に自分で決めた長い合言葉を入れる - n8nを待ち受けの状態にして、テストの行の「入会したか」を「入会」に変え、n8nに届いた中身を確かめる
- 届いた形に合わせて後ろのノードを組み、最後に本番用のURLへ付け替える
Notionのwebhookは中身の形がヘルプに細かく書かれていないので、手順9で実物を見てから後ろを組みます。webhookの送り方はPOSTだけで、送れるのはデータベースのプロパティだけです。ページの本文は送れません。1つのオートメーションに足せるwebhookは5つまでです。
手順8の合言葉は、n8nのWebhookノードの認証(Header Auth)に、ヘッダー名 X-Notion-Token と同じ値を登録して照らし合わせるのに使います。URLだけで受けると、URLを知った誰かが偽のデータを送れてしまいます。

応用
申込経路で担当を分けるには、例1のNotionノードの前にSwitchノードを置きます。LINEからの申込は受付A、ホームページからは受付Bを担当に入れる、という分け方です。
毎朝の件数を受付に知らせるには、Schedule Triggerで毎朝8時半に動かし、体験申込から「体験日が今日」の行をGet Manyで取ってきて、件数と名前をGmailで送ります。Notionを開かなくても、その日の体験の人数が分かります。
レッスン予定の申込数を外部の予約システムから写す場合も、同じ考え方です。予約システムが正で、Notionには毎晩1回、申込数だけを上書きします。Notionで申込数を直しても次の夜に戻るので、Notion側の申込数は直さない決まりにします。
ワークフローが増えてきたら、名前の頭に入口を付けます。HPフォーム→体験申込、Gmail→タスク、Notion→会員台帳 のように並べておくと、止まったときにどれを見ればいいかすぐ分かります。
止まったときの気づき方
自動化は、止まったことに気づけないのが一番困ります。気づき方を3つ重ねておきます。
1つ目は、n8nのエラー用のワークフローです。
- n8nで新しいワークフローを作り、名前を
エラー通知にする - 最初のノードにError Triggerを置く
- 次にGmailノードを置き、宛先を daihyo@sample-cooking.example にする
- 本文に、止まったワークフローの名前・エラーの内容・実行の記録のURLを入れて保存する
- 見張りたいワークフローを開き、Options(オプション)の Settings(設定)にある「Error workflow」で
エラー通知を選んで保存する
本文は次のように書きます。
n8nのワークフローが止まりました
ワークフロー:{{ $json.workflow.name }}
止まったノード:{{ $json.execution.lastNodeExecuted }}
内容:{{ $json.execution.error.message }}
実行の記録:{{ $json.execution.url }}
実行の記録のURL(execution.url)は、実行の記録が保存される設定のときだけ入ります。ワークフローの設定で、失敗した実行を保存する設定にしておきます。1つのエラー用ワークフローを、全部のワークフローで使い回せます。条件に合わないデータを止めたいときは、Stop and Errorノードでわざと失敗させれば、同じ通知が届きます。
2つ目は、Notion側の止まり方を知っておくことです。Notionのオートメーションのwebhookは、送り先が失敗すると、オートメーションの横に注意の印が出て、オートメーションが自動で一時停止します。再開は手でやるまで止まったままです。n8nを直したあとに、Notionのオートメーションも再開します。
3つ目は、件数の突き合わせです。月に1回、フォームの送信件数と体験申込の申込経路「ホームページ」の件数、Gmailの Notion登録済み ラベルの数とタスクの件数を比べます。差があれば、どこかで落ちています。


できないことと、その代わり
| やりたいこと | できない・向かない理由 | 代わりの手 |
|---|---|---|
| 大量の行を一気に入れる | Notion APIには回数の上限があり、ビジネス・エンタープライズ以外は1分180回(平均で毎秒3回)まで | 初回の移し込みはCSVのインポートで入れ、n8nは日々の差分だけにする |
| ページの本文をwebhookで送る | Notionのwebhookのアクションはプロパティだけを送る | n8n側でBlockのGet MarkdownやPageのGet Markdownで取り直す |
| 長い文章を1つのテキストに入れる | テキストの1つの塊は2,000字まで | 切って入れるか、本文に分けて書き足す |
| 無料のNotionでwebhookを送る | webhookのアクションは有料プランだけ | n8nのNotion Triggerで「Page updated in database」を使う |
| 承認の流れを厳しく回す | Notionは承認の履歴や差し戻しを固く管理する作りではない | 申請と承認はkintoneやワークフローの専用の道具に置き、Notionには結果だけ写す |
| お客様の予約受付をNotionで受ける | 公開フォームから予約枠の管理までをNotionで固く回すのは向かない | 予約は予約システムに任せ、Notionは社内の管理に使う |
n8nを自社で立てる場合は、サーバーの更新や停止もn8nの止まり方に入ります。サーバーの面倒を見られる人がいなければ、n8nのクラウド版にする方が安全です。
よく詰まるところ
| 症状 | 原因 | 直し方 |
|---|---|---|
| n8nでデータベースが一覧に出ない | インテグレーションの接続をデータベースに足していない | データベースの ••• →「その他」の「コネクションを追加」で接続を足す |
| Createで「プロパティが見つからない」と出る | Notion側でプロパティ名を変えた | n8nのNotionノードを開き直し、プロパティを選び直す |
| 申込経路の集計が割れる | セレクトの選択肢の表記がNotionとn8nでずれている | Notionの選択肢をコピーしてn8nの固定値に貼る |
| 日付が1日ずれる | タイムゾーンを付けずに渡している | setZone('Asia/Tokyo') を通してから入れる |
| 同じ人が2行できる | 先に探さず毎回Createしている | メールでGet Manyしてから、IfでCreateとUpdateに分ける |
| テストでは動くのに本番で届かない | フォームの送信先がテスト用のURLのまま | 本番用のURLに付け替え、ワークフローを本番で動く状態にする |
| 担当が入らない | ユーザーのプロパティに名前を入れている | UserのGet ManyでIDを調べ、IDで入れる |
| 429のエラーが出る | 短い間にNotion APIを呼びすぎた | n8nのノードの再試行を有効にし、間にWaitノードを入れる |
| Notionのオートメーションが動かなくなった | webhookの失敗で自動で一時停止した | n8n側を直してから、オートメーションを手で再開する |
| 辞めた人の作ったワークフローが止まった | 認証がその人のアカウントだった | 認証を代表のインテグレーションで作り直し、各ノードで付け替える |
| 本文の冒頭が途中で切れて保存されない | 2,000字を超えた | 式で slice(0, 2000) 以下に切る |
次にやること
外からNotionを読み書きする仕組みそのものは、「Notion APIの使い方:インテグレーションを作って外からデータを読み書きする」に書いています。n8nを使わずにNotionの中だけで済む繰り返しは「Notionのボタンとオートメーション:繰り返しの作業を自動にする」から先に試すと、道具を増やさずに済みます。申込をNotionで直接受けるなら「Notionのフォーム:申込や問い合わせをデータベースに直接ためる」、受付への通知や予定をSlackやGoogleカレンダーとつなぐなら「NotionとSlack・Googleカレンダー・Teamsの連携:通知と予定をつなぐ」に進みます。