n8nとNotionを連携してタスク管理を全自動化する

「毎朝メールを確認してNotionにタスクを手動で登録する」「締め切りが近いタスクをSlackで通知したいのに、いちいち手動でコピペしている」——こんな作業を繰り返していませんか?
タスク管理ツールとしてNotionを活用している方は多いですが、その真価を発揮させるには「データの自動入力」と「自動通知」の仕組みが欠かせません。しかし、Notionのネイティブ機能だけでは定期的な自動化や外部サービスとのリアルタイム連携に限界があります。
そこで今回は、ノーコード自動化ツール「n8n」とNotionを連携させることで、タスクの自動作成・ステータス更新・リマインダー通知まで一気通貫で自動化する方法を解説します。プログラミング不要で構築できるため、エンジニアでない方にも実践していただける内容です。
n8nとNotionを連携する前に知っておくべき基礎知識
n8nとは?
n8n は、ノーコード・ローコードで業務自動化ワークフローを構築できるオープンソースのオートメーションツールです。ZapierやMakeと同カテゴリのツールですが、セルフホスト可能であることと柔軟なカスタマイズ性が大きな特徴です。
200以上のサービスとネイティブ連携しており、もちろんNotionも公式にサポートしています。無料のクラウド版(n8n.cloud)でも月1,000ワークフロー実行まで無料で使えるため、まずは試してみやすい環境が整っています。
Notion APIとは?
Notion API は、Notionのデータベース・ページ・ブロックをプログラムから操作するためのREST APIです。n8nはこのAPIをラップしたNotionノードを提供しており、ドラッグ&ドロップの操作だけでNotionのデータ読み書きが可能になります。
主にできることは以下の通りです:
- データベースのレコード(ページ)作成・更新・削除
- データベースのクエリ(条件付き取得)
- ページ内ブロックの追加・編集
- ユーザー情報の取得
今回のタスク管理自動化では、これらのうち「レコード作成」「レコード更新」「クエリ」の3つを主に活用します。
事前準備:Notion APIキーとデータベースIDの取得
自動化を始める前に、NotionとAPI連携するための準備が必要です。
ステップ1:Notionインテグレーションの作成
- Notion Developers にアクセスし、「New integration」をクリック
- インテグレーション名(例:
n8n-automation)を入力 - 対象のワークスペースを選択
- 「Submit」をクリックすると Internal Integration Secret(APIキー) が発行される
- このキーを安全な場所にコピーしておく(
secret_xxxxxxxx...形式)
ステップ2:対象データベースにインテグレーションを接続
APIキーを取得しただけでは、まだデータベースにアクセスできません。対象のNotionデータベースに対して、作成したインテグレーションに「アクセス許可」を付与する必要があります。
- タスク管理に使うNotionデータベースを開く
- 右上の「…」メニューから「接続」→「接続を追加」を選択
- 先ほど作成したインテグレーション名を検索して追加
ステップ3:データベースIDの確認
データベースのURLを確認すると、以下のような形式になっています:
https://www.notion.so/your-workspace/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?v=yyyy...
URLの ?v= より前の32文字の英数字部分が データベースID です。この値はn8nの設定で使用します。
ワークフロー1:メールからタスクを自動作成する
最初に構築するのは「特定のメールを受信したら、Notionに自動でタスクを追加する」ワークフローです。これにより、依頼メールをいちいちNotionに手入力する手間をゼロにできます。
ノード構成
[Gmail Trigger] → [Function(データ整形)] → [Notion(ページ作成)] → [Slack(通知)]
n8nでのGmailトリガー設定
- n8nのキャンバスで「Add node」→「Gmail Trigger」を選択
- Google OAuth認証を設定(n8nのCredentials画面でGoogleアカウントと連携)
- 「Filters」セクションで以下を設定:
- Label/Mailbox:
INBOX - Search:
subject:【タスク依頼】(件名でフィルタリング)
- Label/Mailbox:
- 「Poll Time」を
Every 5 Minutesに設定
データ整形のFunctionノード
メールの件名・本文からタスク情報を抽出するロジックを記述します。
// Functionノードのコード例
const emailSubject = $input.item.json.subject || "件名なし";
const emailBody = $input.item.json.text || "";
const senderName = $input.item.json.from?.value?.[0]?.name || "不明";
const receivedAt = $input.item.json.date;
// 件名から「【タスク依頼】」を除去してタスク名を抽出
const taskName = emailSubject.replace(/【タスク依頼】\s*/g, "").trim();
// メール本文から締め切り日を正規表現で抽出(例:「期限:2026/05/01」)
const deadlineMatch = emailBody.match(/期限[::](\d{4}\/\d{2}\/\d{2})/);
const deadline = deadlineMatch ? deadlineMatch[1].replace(/\//g, "-") : null;
return [
{
json: {
taskName,
deadline,
requester: senderName,
description: emailBody.substring(0, 500), // 本文の先頭500文字
receivedAt,
status: "未着手"
}
}
];
NotionノードでタスクをDBに追加
- 「Notion」ノードを追加
- 操作を「Create Page」に設定
- 「Database ID」に先ほど取得したIDを入力
- プロパティのマッピングを以下のように設定:
Name(タイトル) → {{ $json.taskName }}
ステータス → {{ $json.status }}
期限 → {{ $json.deadline }}
依頼者 → {{ $json.requester }}
説明 → {{ $json.description }}
Notionデータベースのプロパティ名は事前に日本語で作成しておくことで、そのまま対応できます。
Slackで「タスク追加通知」を送信
タスクが追加されたことをSlackに通知することで、チームメンバーも即座に把握できます。
メッセージ例:
📋 新しいタスクが追加されました
タスク名: {{ $('Notion').item.json.properties.Name.title[0].text.content }}
期限: {{ $json.deadline || "未設定" }}
依頼者: {{ $json.requester }}
これでワークフロー1の完成です。「【タスク依頼】」と件名に入ったメールが届くたびに、自動でNotionにタスクが登録され、Slackにも通知が届くようになります。
ワークフロー2:期限切れタスクを毎朝Slackで通知する
次は「今日が期限のタスクや、期限を過ぎたタスクを毎朝Slackで通知する」ワークフローです。タスクの見落とし防止に大きく貢献します。
ノード構成
[Schedule Trigger(毎朝9時)] → [Notion(DBクエリ)] → [IF(期限フィルタ)] → [Slack(通知)]
Schedule Triggerの設定
- 「Schedule Trigger」ノードを追加
- 「Rule」を
Every Day→At: 09:00に設定 - タイムゾーンを
Asia/Tokyoに指定
NotionのDBクエリ設定
- 「Notion」ノードを追加し、操作を「Get Many」→「Database Pages」に設定
- 「Database ID」を入力
- 「Filter」セクションを展開し、以下の条件を設定:
{
"and": [
{
"property": "ステータス",
"select": {
"does_not_equal": "完了"
}
},
{
"property": "期限",
"date": {
"on_or_before": "{{ $now.toISO() }}"
}
}
]
}
この設定により、「完了していない」かつ「今日以前が期限」のタスクだけを取得できます。
IFノードで件数チェック
取得したタスクが0件のとき(すべてのタスクが期限内)はSlack通知を送らないように、IFノードで分岐させます。
条件: {{ $input.all().length }} > 0
Slackへの通知メッセージ構築
Functionノードを使って、複数タスクをリスト形式のメッセージに整形します。
const tasks = $input.all();
const today = new Date().toLocaleDateString("ja-JP");
let taskList = "";
for (const task of tasks) {
const name = task.json.properties?.Name?.title?.[0]?.text?.content || "不明なタスク";
const deadline = task.json.properties?.期限?.date?.start || "期限なし";
const isOverdue = new Date(deadline) < new Date() ? "🔴 期限超過" : "⚠️ 今日期限";
taskList += `• ${isOverdue} *${name}*(期限: ${deadline})\n`;
}
return [
{
json: {
message: `📅 *${today}のタスクアラート*\n未完了のタスクがあります:\n\n${taskList}\n確認して対応をお願いします。`
}
}
];
この関数ノードの出力をSlackノードに接続し、{{ $json.message }} をメッセージ本文として設定すれば完成です。
ワークフロー3:Notionのステータス変更をトリガーに後続処理を実行する
3つ目のワークフローは「Notionのタスクステータスが『完了』に変わったら、自動で完了通知とアーカイブ処理を行う」という応用的な自動化です。
Notion Webhookを活用する方法(n8n Cloud推奨)
NotionはWebhookをネイティブに送信する機能を持っていないため(2026年4月現在)、n8nのポーリング方式か、Zapier経由のWebhookトリガーを組み合わせる必要があります。ここではn8nのポーリングを使ったアプローチを解説します。
ノード構成
[Schedule Trigger(5分毎)] → [Notion(ステータス=完了でクエリ)] → [IF(前回から変化があるか)] → [Notion(アーカイブプロパティ更新)] → [Slack通知]
「完了」タスクの定期クエリ
Notionノードで以下の条件クエリを設定します:
{
"and": [
{
"property": "ステータス",
"select": {
"equals": "完了"
}
},
{
"property": "通知済み",
"checkbox": {
"equals": false
}
}
]
}
ポイントは「通知済み」チェックボックスプロパティをNotionDBに追加しておき、一度処理したタスクを再通知しないようにする点です。
完了通知後に「通知済み」フラグをONにする
Slack通知の後に、もう一つNotionノードを追加してレコードを更新します。
Notionノード設定:
- 操作: Update Page
- Page ID: {{ $('Notion - 完了タスク取得').item.json.id }}
- プロパティ:
- 通知済み(Checkbox): true
- 完了日(Date): {{ $now.toISO() }}
これにより「完了→通知済みフラグON」のサイクルが完成し、二重通知を防ぎながら確実に処理できます。
n8nとNotion連携でよくあるトラブルと対処法
エラー1:「Could not find database with ID」
データベースIDが間違っているか、インテグレーションへのアクセス許可が付与されていない場合に発生します。
対処法:
- NotionのデータベースURLから正しいIDを再確認する
- データベースの「接続」メニューから、n8nインテグレーションが追加されているか確認する
- データベースが「親ページ」の中にある場合、親ページにもインテグレーションのアクセス許可が必要なことがある
エラー2:プロパティのマッピングがうまくいかない
Notionのプロパティ名が日本語の場合、n8nのノード設定で文字化けや認識エラーが起きることがあります。
対処法:
- プロパティ名を英語に統一するか、Notion APIのレスポンスをn8nのデバッグ画面で確認しながらプロパティキーを正確に入力する
- Functionノードで
console.log(JSON.stringify($input.item.json.properties))を実行してレスポンス構造を確認する
エラー3:Gmailトリガーで同じメールが繰り返し処理される
n8nのトリガーポーリング設定によっては、既に処理したメールを再取得してしまうことがあります。
対処法:
- Gmailトリガーの「Mark as Read」オプションを有効にする
- または、n8nのワークフロー内で静的データ(
$getWorkflowStaticData)を使って「処理済みメールID」を記録し、重複チェックを行う
// 重複チェックのコード例(Functionノード内)
const staticData = $getWorkflowStaticData("global");
const processedIds = staticData.processedEmailIds || [];
const currentId = $input.item.json.id;
if (processedIds.includes(currentId)) {
return []; // 処理済みならスキップ
}
// 処理済みIDとして記録
processedIds.push(currentId);
if (processedIds.length > 1000) processedIds.shift(); // 上限管理
staticData.processedEmailIds = processedIds;
return [$input.item];
応用:Notionフォームと連携してタスクをさらに自動化する
2024年にNotionにフォーム機能が追加されたことで、社内申請や問い合わせをNotionフォームで受け付け、n8nで後続処理を自動化する構成が現実的になりました。
構成例:社内申請フォーム → 承認フロー自動化
[Notionフォーム送信]
↓ (n8n Schedule Triggerで5分毎にポーリング)
[Notion DB クエリ(ステータス=申請中)]
↓
[Slack通知(承認者にDM)]
↓
[Slackインタラクションでボタン回答]
↓
[Notion ページ更新(ステータス=承認済/却下)]
↓
[申請者にメール通知]
この構成を実現するにはSlackのインタラクティブ機能の設定が追加で必要ですが、n8nではSlack Triggerノードでボタン押下イベントを受信できるため、コードなしで承認フローを構築できます。
NotionフォームのDBに送信データが蓄積されるため、申請履歴の管理もNotion上で完結します。これにより、既存のNotionワークスペースを申請管理システムとして拡張できます。
まとめ:n8n×Notionで「管理」から「自動化」へ
今回紹介した3つのワークフローをまとめます:
| ワークフロー | 内容 | 効果 |
|---|---|---|
| ワークフロー1 | メール→Notionタスク自動作成 | 手入力作業をゼロに |
| ワークフロー2 | 毎朝の期限タスク通知 | タスク見落とし防止 |
| ワークフロー3 | 完了タスクの自動通知&アーカイブ | 完了後処理の自動化 |
Notionは「データの置き場所」として優秀ですが、そこに「自動入力」と「自動通知」の仕組みを加えることで、真の業務自動化ハブへと進化します。n8nはそのブリッジ役として最適なツールです。
次のステップとして試してほしいこと:
- まずワークフロー1だけ構築してみる — メール→Notionの自動登録を体験するだけでも、日々の作業負担が大きく減ります
- Notionのデータベース設計を整える — 自動化しやすいDB設計(ステータス・期限・担当者プロパティを標準装備)を意識すると、後から拡張しやすくなります
- チームへの展開 — 一人で使い始めて効果を確認したら、チーム全体のワークスペースに導入することで組織全体の生産性向上につながります
n8nのビジュアルエディタとNotionのフレキシブルなデータベースは、相性抜群の組み合わせです。ぜひ今日から自動化の第一歩を踏み出してみてください。



