はじめに
前回は、Geminiを使ってGAS × NetSuite連携を強化する方法を紹介しました。
今回は少し視点を変えて、経理業務でよくある「請求書どこいった問題」に挑戦します。
メールで届く請求書。
Slackで送られてくるPDF。
Google Driveに保存されたファイル。
月末になると、それらを探して、金額や振込期限を確認して、管理表に転記する。
ひとつひとつは小さな作業ですが、毎月繰り返すとなるとなかなか面倒です。
そこで今回は、Claude CodeでGASの実装を進めながら、Googleフォーム/Gmail、Google Drive、Gemini API、Notion APIを組み合わせて、請求書PDFをAIで読み取り、Notionの請求書管理DBへ自動登録する仕組みを作ってみます。
CFO、突然の襲来
ある日のこと。新人コンサルタントTくんが、いつものように業務改善ネタを探していると、CFOから声をかけられました。
Tくん、ちょっといい?
はい、なんでしょう?
月末になるとさ、請求書を探すのが地味に大変なんだよね。
メールとかSlackとかでバラバラに請求書をもらって、月末に振込のために探して……って、めっちゃ面倒じゃない?
たしかに、ちょっとした宝探しみたいになっていますね。
それ、Googleフォームか専用メールに請求書PDFを送ってもらったら、AIが自動でPDFを読んで、Notionの請求書管理DBに登録してくれるようにできない?
請求元、請求日、支払期限、税込金額、品目、振込先あたりを自動で入れてほしい。できれば、追加の月額ツール費用はかけずに。よろしく!
また突然の無茶振りが来ました。
今回のミッション
今回のミッションは、次の3つです。
- 請求書PDFの受け取り口を一本化する
Googleフォーム、または専用Gmailアドレスで請求書PDFを受け取れるようにします。 - PDFの中身をAIで読み取る
Gemini APIを使って、請求書PDFから必要な情報を抽出します。 - Notionの請求書管理DBに自動登録する
抽出した情報をNotion API経由でデータベースに登録し、手入力を減らします。
ゴールは、「請求書PDFを送るだけで、Notionの台帳に必要情報が入っている」状態です。
Claude Codeに実装を相談する
まずはClaude Codeに相談してみます。
Claude Code、助けて!
Google Driveに保存された請求書PDFをGASで取得して、PDFの中から請求元、請求日、支払期限、税込金額、品目、振込先を抽出したいです。その内容はNotionの請求書管理DBにとうろくしたい。GASの構成とコードを作ってください。
Claude Codeから返ってきた方針は、だいたい次のようなものでした。

- Googleフォーム、またはGmailでPDFを受け取る
- PDFをGoogle Driveの指定フォルダに保存する
- GASでPDFファイルをBlobとして取得する
- PDFをBase64形式に変換してGemini APIへ送る
- 必要項目をJSON形式で返すように指示する
- 返ってきたJSONをGASでパースする
- Notion APIのプロパティ形式に変換する
- Notionの請求書管理DBに新規ページを作成する
つまり、ポイントは「PDFを読む部分」と「Notionに書き込む部分」をGASでつなぐことです。
PDF読み取り用のプロンプトを考える
実装はClaude Codeで進めますが、PDFの中身を読み取る役割はGemini APIが担当します。
請求書PDFから情報を取り出すには、Gemini APIに対して「何を、どんな形式で返してほしいか」を明確に伝える必要があります。
たとえば、次のようなプロンプトにします。
以下の請求書PDFを読み取り、次の項目を抽出してください。
- 請求元名
- 請求日
- 支払期限
- 税込合計金額
- 品目
- 振込先銀行名
- 支店名
- 口座種別
- 口座番号
- 口座名義
出力は必ずJSON形式にしてください。
日付は YYYY-MM-DD 形式にしてください。
金額は数値のみで出力してください。
不明な項目は null にしてください。
ここで大事なのは、「いい感じに読み取って」ではなく、Notionに登録しやすい形で返してもらうことです。
Geminiの出力段階でJSONにしておくと、GAS側でNotion APIに渡す処理がかなり楽になります。
Notion側のDBを用意する
次に、Notion側に請求書管理DBを用意します。
たとえば、以下のようなプロパティを作ります。
| プロパティ名 | 種類 | 用途 |
|---|---|---|
| 請求元 | タイトル | 請求書の発行元 |
| 請求日 | 日付 | 請求書に記載された日付 |
| 支払期限 | 日付 | 振込期限 |
| 税込合計金額 | 数値 | 支払金額 |
| 品目 | テキスト | 請求内容の概要 |
| 振込先 | テキスト | 銀行名、支店名、口座番号など |
| PDFリンク | URL | Google Drive上のPDFリンク |
| PDF読込済 | チェックボックス | AI解析が完了したかどうか |
| 確認ステータス | ステータス | 未確認/確認済/振込済など |
ポイントは、AIが読み取った結果をそのまま信じて完了にしないことです。
PDF読込済は自動でONにしてもよいですが、最終的な振込前確認は人間が行う前提にしておくと安全です。
GASでPDFを取得し、Geminiに送る
GoogleフォームからアップロードされたPDFは、Google Driveの指定フォルダに保存されます。
GASでは、そのPDFを取得してGeminiに送ります。イメージとしては、次のような処理です。
const file = DriveApp.getFileById(fileId);
const blob = file.getBlob();
const base64 = Utilities.base64Encode(blob.getBytes());
このBase64化したPDFデータとプロンプトをGemini APIに渡します。
期待する返却結果は、たとえば次のようなJSONです。
{
"vendor_name": "株式会社サンプル",
"invoice_date": "2026-05-01",
"due_date": "2026-05-31",
"total_amount": 110000,
"items": "システム保守費用 1式",
"bank_name": "サンプル銀行",
"branch_name": "東京支店",
"account_type": "普通",
"account_number": "1234567",
"account_holder": "カ)サンプル"
}
この形で返ってくれば、あとはNotion APIに渡すだけです。
なお、請求書は社外秘情報を含むことが多いため、Google Driveのファイルをむやみに公開設定にしないことも重要です。
Notion APIに登録する
Geminiから返ってきたJSONを、Notion APIの形式に変換します。
たとえば、
vendor_name→ 請求元invoice_date→ 請求日due_date→ 支払期限total_amount→ 税込合計金額items→ 品目- 銀行情報 → 振込先
- PDFのURL → PDFリンク
- 読み取り完了 → PDF読込済
という対応にします。
ここまでできれば、Notionの請求書管理DBに新しいレコードが自動で作成されます。
つまずきポイント
実際に作ってみると、いくつか注意点があります。
1. 請求書PDFの形式がバラバラ
請求書は会社ごとにレイアウトが違います。
「合計」「税込合計」「ご請求金額」など、表記もさまざまです。
そのため、Geminiへのプロンプトでは、表記ゆれを前提にしておく必要があります。
2. 振込先情報の抽出は確認が必要
銀行名、支店名、口座番号、口座名義は、間違えると実害が出やすい項目です。
AIで抽出できるとしても、振込前には人間が確認する運用にしておくのが安全です。
3. APIやGASの制限
Gemini APIには利用制限があります。
また、GASにも実行時間や通信量の制限があります。
大量の請求書や重いPDFを処理する場合は、処理を分割したり、有料利用や待機処理を検討したりする必要があります。
4. 品目が長すぎる場合
品目が非常に多い請求書の場合、すべての明細をNotionのテキストプロパティに入れると長くなりすぎることがあります。
その場合は、主要品目だけを入れる、詳細はPDFリンクを参照する、明細用の別DBを作るなど、運用に合わせた調整が必要です。
最終テスト
いよいよテストです。
テスト用の請求書PDFをGoogleフォームから送信すると、Google Driveの指定フォルダにPDFが保存されました。
フォーム送信をトリガーにGASが起動します。
GASがPDFを取得し、Gemini APIに送信。
GeminiがPDFを読み取り、JSON形式で請求書情報を返します。
そして、Notionの請求書管理DBを開いてみると……

請求元、請求日、支払期限、税込合計金額、品目、PDFリンクが自動で登録されていました。

PDF読込済のチェックもONになっています。
おお、できました。
これで、月末にメールやSlackを掘り返して請求書を探す時間をかなり減らせそうです。
CFOへ報告
CFO、できました。
どうなった?
Googleフォーム、または専用Gmailに請求書PDFを送ると、Google Driveに保存されます。そのPDFをGASが取得して、Gemini APIで読み取り、Notionの請求書管理DBに自動登録します。
つまり、PDFを送るだけで台帳に入る?
はい。請求元、請求日、支払期限、税込金額、品目、PDFリンクなどが自動で入ります。
いいね、Notionに一元管理できてるってことね。振込先も読める?
読めます。ただし、振込先は間違えると危ないので、振込前に人間が確認する運用にしています。
ちなみに、追加の月額ツール費用は?
無料です!既存のGoogle Workspace環境とGemini APIの無料枠を活用すれば、まずは追加の専用SaaSなしで始められます。
ただし、処理件数が増える場合はAPI利用量や制限の確認が必要です。
なるほど。じゃあ次は、振込済みステータスの管理と、月次レポートも自動化できる?
また新しい無茶振りが来ました。
今回のまとめ
今回は、Googleフォーム/Gmail、Google Drive、Gemini API、Notion APIを組み合わせて、請求書PDFをAIで読み取り、Notionの請求書管理DBへ自動登録する仕組みを作りました。
請求書を探す、金額や期限を確認する、台帳に転記する。こうした毎月の手間は、AIとGASを組み合わせることで大きく減らせます。
ただし、振込先など重要な情報は人間が確認する前提で運用するのが安全です。
Alea Technologyでは、NetSuite、Google Workspace、GAS、AIを活用した業務効率化・システム連携のご相談を承っています。お気軽にお問い合わせください。
(本記事はフィクションです)