はじめに
日々こんなこと思いませんか?
- 領収書の整理めんどくさい
- Gmailに埋もれて後から探せない
- 月別・日別で自動整理したい
そこで今回は、
Gmailに届いた領収書を自動で判別し、Google Driveに日付ごとに整理して保存する仕組み
をn8nで構築しました。
完成イメージ
以下のような構成で自動保存されます
親フォルダ
└── 2026
└── 04
└── 17
└── 領収書.pdf
メールが来るたびに
- 年フォルダ自動作成
- 月フォルダ自動作成
- 日フォルダ自動作成
- ファイル保存
まで全部自動です。
ワークフロー全体像
大きく分けると以下の4つの機能で構成されています。
① Gmailから添付ファイルを取得 & 領収書判定
まずはGmailから添付ファイルを取得します。
- 添付ファイルを自動取得
- ファイル名をチェック
- 「領収書」が含まれているか判定
ポイント
Codeノードでこんな処理をしています
matched: fileName.includes('領収書')
これにより
- true → 処理続行
- false → 無視
というシンプルで強力なフィルタになります。
② 日付情報の生成(フォルダ構造のベース)
次に現在日時からフォルダ名を生成します。
- 年:2026
- 月:04
- 日:17
const year = String(now.getFullYear());
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
ポイント
-
padStart(2, '0')で 04 のような形式に - この値をそのままフォルダ名として利用
③ Google Driveのフォルダ自動生成ロジック
ここが今回の特徴です。
▼処理フロー
- フォルダを検索
- 存在するかチェック
- なければ作成
- IDを次に引き継ぐ
これを
- 年フォルダ
- 月フォルダ
- 日フォルダ
の3階層で繰り返しています。
▼構造イメージ
Search → If → Create → Merge
▼重要ポイント
■ alwaysOutputData = true
検索ノードでこれをONにすることで
- 見つからなくても処理が止まらない
■ Ifノードで存在判定
$json.id があるかどうか
■ Mergeノードの役割
- 既存フォルダ or 新規フォルダ
- どちらでも同じ形で次に渡す
これで分岐を吸収しています。
④ ファイルアップロード処理
最後に、生成した「日フォルダ」にファイルを保存します。
folderId: {{ 最終フォルダID }}
ポイント
- binaryデータをそのままアップロード
- ファイル名は元のメールから引き継ぎ
この構成の良いところ
① 完全自動
メールが来るだけで整理完了
② スケーラブル
年が変わっても勝手にフォルダ増える
③ 汎用性が高い
「領収書」以外にも応用可能
例:
- 請求書
- 契約書
- 納品書
改善アイデア
使ってみて下記の改善点思いつきました。
■ OCR連携
→ 金額・日付・店舗を自動抽出
■ スプレッドシート連携
→ 経費一覧を自動生成
■ Slack通知
→ 保存時に通知
まとめ
今回作ったのは
「メール → 判定 → フォルダ生成 → 保存」までを完全自動化する仕組み
n8nの強みである
- 分岐(If)
- データ加工(Code)
- 外部連携(Google Drive)
をフル活用した実用的なワークフローです。
おわりに
こういう「日常のちょっとした面倒」を自動化するとかなり快適になります。
n8nは本当に強力なので、
- 経費管理
- タスク管理
- 情報収集
いろんな用途に応用できます。
