当事務所では、毎月メールで届く案内を確認し、発行元のウェブサイトへログインして、請求書や領収書のPDFを取得しています。
2026年9月、このうちエッサム、ストレージサービス、ベルテクノスの3社について、メールの確認からPDFの保存までを自動化しました。
- 税理士・会計事務所向けサービスを提供するエッサム
- 書類などの保管を依頼しているストレージサービス
- クラウドPBX等を提供するベルテクノス
3社とも、請求内容が確定するとメールが届き、ウェブサイトからPDFを取得する点は共通しています。
一方、メールの記載内容、ウェブサイトの画面構成、支払日の決め方、請求書の選び方はそれぞれ異なりました。
今回は、3社の違いにどのように対応し、共通する処理を一つの仕組みとしてまとめたのかを紹介します。
前回の記事では、Power Automate DesktopからPythonとPlaywrightへ移行した経緯や、人とChatGPTの役割分担を紹介しています。
「税理士事務所がChatGPTで請求書取得を自動化した実録|人とAIの役割分担も紹介」もあわせてご覧ください。
メールには請求書が添付されていない
今回対象にした3社では、メールに請求書や領収書のPDFが直接添付されているわけではありません。
請求内容が確定したことを知らせるメールが届き、その後、発行元のウェブサイトへログインしてPDFを取得する仕組みです。
そのため、単にメールの添付ファイルを保存するだけでは処理を完了できません。
次の一連の処理が必要になります。
- 対象となるメールが届いているか確認する
- メールから請求対象月などを判定する
- 発行元のウェブサイトへアクセスする
- 対象となる請求情報を探す
- 請求金額や支払日を確認する
- PDFをダウンロードする
- 統一した形式のファイル名を付ける
- 所定のフォルダへ保存する
- 処理結果を記録する
今回は、メールの確認にGmail API、ブラウザーの操作にPlaywright、処理全体の管理にPythonを使用しました。
Gmail APIで対象メールを確認する
Gmail APIは、プログラムからGmailの情報を利用するためにGoogleが提供している仕組みです。
今回は、あらかじめ指定した送信元や件名に該当するメールが届いているかを、Pythonから確認するために使用しました。
対象メールが見つかると、メールの送信日や本文から、請求対象月など、その後の処理に必要な情報を取得します。
すべてのメールを無条件に処理するのではなく、送信元や件名などの条件を設定し、対象となる通知だけを探す仕組みにしました。
また、Gmailについては、メールを送信・削除する権限ではなく、今回の処理に必要な読み取り用の権限を利用しています。
PDFの取得にはPlaywrightを使用する
対象メールを確認した後は、Playwrightを使って発行元のウェブサイトを操作します。
人が操作する場合には、ブラウザーを開き、ログインして請求情報の画面へ進み、該当するPDFのボタンを押します。
Playwrightを使用すると、この一連のブラウザー操作をPythonから実行できます。
今回紹介する3社の仕組みを最初に作成した段階では、最初に人が各ウェブサイトへログインし、そのログイン状態をPlaywright用のファイルとして保存しました。
次回以降は、保存したログイン状態を各社のプログラムから読み込んで利用します。
ただし、その後カード会社の利用明細取得へ対象を広げる過程で、ブラウザーと認証情報の管理方法を見直しました。
認証方法も途中で見直した
エッサム、ストレージサービス、ベルテクノスの自動化を最初に作成した段階では、各社ごとにログイン状態やログイン情報を保存していました。
最初に人が対象のウェブサイトへログインし、その状態をPlaywrightから再利用する方法です。ログイン状態が無効になった場合には、人が改めてログインして保存内容を更新する必要がありました。
その後、ビューカード、三井住友カード、三菱UFJニコスへ対象を広げる過程で、ブラウザーと認証情報の管理方法を見直しました。
新しい構成では、自動化専用の共通Chromeプロファイルを用意しました。このプロファイルには、各ウェブサイトのCookie、ログインセッション、サイト設定などが保存されます。
さらに、サービスごとに異なるIDやパスワードを共通の仕組みで暗号化して保存し、再ログインが必要になった場合に、それぞれのプログラムから参照できるようにしました。
共通Chromeプロファイルと認証情報の役割は異なります。
- 共通Chromeプロファイルは、ブラウザーのログイン状態を引き継ぐ
- 共通の認証情報管理は、再ログインが必要な場合にIDやパスワードを提供する
- 二段階認証や追加の本人確認は、人が対応する
認証情報を一つの場所で管理するといっても、同じIDやパスワードを複数のサービスで使い回すわけではありません。
サービスごとに異なる認証情報を、共通の形式と仕組みで管理します。
また、暗号化した認証情報と、それを復号するために必要な情報は分けて管理する設計としました。
既存の3社については、一度にすべてを書き換えるのではなく、動作している仕組みを残しながら、段階的に共通方式へ移行する方針としました。
このように、今回の自動化は最初から完成した共通基盤があったわけではありません。取得先を追加する過程で、ブラウザー、認証情報、実行方法を順番に共通化していきました。
共通Chromeプロファイル方式とは
Chromeのプロファイルには、ウェブサイトのCookie、ログイン中であることを示す情報、サイトごとの設定などが保存されます。
普段Chromeを使用していると、ブラウザーを閉じて再度開いても、ウェブサイトへログインした状態が維持されていることがあります。これは、ログインに必要な情報の一部がChromeのプロファイルに保存されているためです。
共通Chromeプロファイル方式では、自動化専用のChromeプロファイルを用意し、複数のプログラムからその同じプロファイルを使用します。
今回の構成では、通常のウェブ閲覧に使用するChromeプロファイルとは別に、経理自動化専用のプロファイルを作成しました。
基本的な流れは次のとおりです。
- 経理自動化専用のChromeプロファイルを用意する
- 対象サイトのログイン状態や設定を専用プロファイルへ保存する
- 各社の自動化プログラムが同じプロファイルを使ってChromeを起動する
- ログイン状態が有効であれば、そのまま請求書や利用明細の画面へ進む
- ログアウトしていれば、保存している認証情報を利用して再ログインする
- 二段階認証や追加確認が必要な場合は、人が対応する
当初の方法と共通Chromeプロファイル方式の違いは、次のとおりです。
| 項目 | 各社別のログイン状態ファイル | 共通Chromeプロファイル |
|---|---|---|
| 管理単位 | サービスごと | 自動化用ブラウザー全体 |
| ログイン状態 | 各社のファイルに保存 | 共通プロファイルに保存 |
| 対象追加時 | 新しい認証状態ファイルを作成 | 同じプロファイルで対象サイトを利用 |
| ブラウザー設定 | 処理ごとに作成 | 複数の処理で共用 |
| 管理方法 | サービスごとに分かりやすい | 対象が増えた場合にまとめやすい |
共通Chromeプロファイルを使用すると、対象となるウェブサイトが増えても、自動化用のブラウザー環境をまとめて管理しやすくなります。
ただし、同じプロファイルを複数のプログラムが同時に開くと、競合して正常に起動できないことがあります。
そのため、当事務所の仕組みでは、各社の処理を同時に実行するのではなく、共通の実行プログラムから順番に起動する構成にしています。
また、共通プロファイルには複数サイトのログイン状態が保存されるため、保管場所へのアクセス制限も重要です。
当事務所では、通常業務で使用するブラウザーとは分け、自動化専用の環境として管理しています。
エッサムは対象月から請求書を探す
エッサムは、税理士・会計事務所向けの商品やサービスを提供している会社です。
当事務所では、請求金額が確定したことを知らせるメールを受信した後、ゆりかご倶楽部の請求書ダウンロードサービスから請求書PDFを取得しています。
自動化では、次の順序で処理します。
- エッサムからの請求案内メールを探す
- メール本文から請求対象月を判定する
- ゆりかご倶楽部の請求書一覧を開く
- 対象月の請求書を探す
- 請求金額を取得する
- 請求書PDFをダウンロードする
- 支払日、会社名、金額を含むファイル名で保存する
エッサムの支払日は翌月5日としているため、請求対象月から保存時の支払日を計算します。
これにより、PDFを開かなくても、ファイル名から支払日、発行元、金額を確認できるようにしました。
ストレージサービスは対象月の行を特定する
ストレージサービスは、当事務所が書類などの保管を依頼している会社です。
もともと、この請求書を取得する処理にはPower Automate Desktopを使用していました。
しかし、請求一覧の表から請求金額を取得する部分が正常に動かなくなり、ChatGPTと相談しながらフローの修正を試みました。
画面上では正しい金額が表示されていても、PADで指定した表の位置からは別の数値が取得されることがありました。
どのセルを取得しているのかを確認し、画面の設定を修正して試す作業を繰り返しました。
最終的にPADのフローは修正できましたが、相当の時間がかかりました。
そこで、同じ処理をPythonとPlaywrightでも作成して比較しました。
Python版では、請求案内メールから対象月を判定し、請求一覧の中からその月に一致する行を探します。その行から請求金額とPDFへのリンクを取得する構成にしました。
処理の流れは次のとおりです。
- 請求が確定したことを知らせるメールを探す
- メールの日付や本文から請求対象月を判定する
- 請求一覧を開く
- 対象月に一致する行を探す
- その行から請求金額を取得する
- 同じ行にあるPDFをダウンロードする
- 支払日、会社名、金額を含むファイル名で保存する
支払日は請求対象月の翌月23日を基準とし、土曜日、日曜日、祝日などに当たる場合は、実際の支払日に合わせて調整する仕組みとしました。
結果として、ChatGPTと一緒に既存のPADフローを修正するよりも、PythonとPlaywrightで同じ処理を作り直す方が短い時間で完成しました。
この経験が、その後の請求書取得についてPythonを中心に構築するきっかけになりました。
ベルテクノスは支払期限を利用する
ベルテクノスは、クラウドPBX等を提供する会社です。
請求内容の案内メールを受信した後、電子請求書サービスへログインして、領収書または請求関係書類を取得します。
ベルテクノスでは、ウェブサイト上に表示される支払期限を、保存時のファイル名に利用しました。
処理の流れは次のとおりです。
- 請求内容を知らせるメールを探す
- 電子請求書サービスへアクセスする
- 請求情報の一覧を開く
- 対象となる最新の請求情報を確認する
- 支払期限と請求金額を取得する
- PDFをダウンロードする
- 支払期限、会社名、金額を含むファイル名で保存する
開発中には、ログイン後に画面上のメニューを押して請求情報へ移動する処理が安定しないことがありました。
そこで、ログインできていることを確認した後、請求情報の画面へ直接移動する方法に変更しました。
人が操作するときにはメニューを順番に押す方が自然でも、自動処理では、目的の画面へ直接移動する方が安定する場合があります。
ファイル名を「支払日・発行元・金額」で統一した
3社のPDFは、共通して次の考え方でファイル名を付けました。
支払日_発行元_金額.pdf
ファイル名を見るだけで、次の情報を確認できます。
- いつ支払うものか
- どの会社から発行されたものか
- 金額はいくらか
発行元が付けた元のファイル名をそのまま使用すると、複数社のPDFを同じフォルダで管理したときに、内容を判別しにくいことがあります。
保存時に名称を統一しておくことで、その後の会計処理や支払確認にも利用しやすくなります。
なお、記事では仕組みを紹介することを目的としているため、当事務所が実際に使用している保存先の完全なパスは掲載しません。
二重保存を防止する
定期的にプログラムを動かす場合、同じメールやPDFを何度も処理しないための仕組みが必要です。
今回は、主に次の2段階で重複を防止しています。
- すでに処理したメールを記録する
- 同じ条件のファイルが保存されていないか確認する
対象のメールが見つかっても、対応するPDFがすでに保存されている場合は、再度ダウンロードしません。
また、メールを見つけた時点ではなく、PDFの取得と保存に成功した後で処理済みとして記録するようにしました。
先にメールだけを処理済みにすると、途中でウェブサイトの操作に失敗した場合に、次回の実行でそのメールが対象にならず、PDFを取得できないままになる可能性があるためです。
3社を一つの操作で実行できるようにした
当初は、発行元ごとにプログラムを作成していました。
その後、3社の処理を順番に呼び出す共通の実行プログラムを作成しました。
これにより、利用者が3つのプログラムを個別に起動しなくても、一つの操作で次の処理を実行できます。
- エッサムの請求書確認
- ストレージサービスの請求書確認
- ベルテクノスの請求情報確認
- 各処理の成功またはエラーの集計
- 実行結果のログへの記録
1社でエラーが発生した場合でも、どの処理で問題が起きたのかを確認できるようにしました。
完成後はWindowsのタスクスケジューラから実行し、対象となるメールが届いていればPDFを取得します。
対象メールが届いていない場合や、すでに取得済みの場合は、何も保存せずに処理を終了します。
自動化後も人による確認は必要
請求書の取得を自動化しても、人の確認が不要になるわけではありません。
当事務所では、取得結果について次の点を確認します。
- 対象月が正しいか
- 支払日が正しいか
- 請求金額が正しいか
- PDFが正常に開けるか
- 保存先とファイル名が正しいか
- エラーが記録されていないか
また、ウェブサイトの仕様変更やログイン状態の有効期限によって、プログラムが動かなくなる可能性もあります。
自動化は、確認作業をなくすものではなく、毎月繰り返していた取得操作を減らし、人が確認や判断へ集中するための仕組みとして運用しています。
まとめ
今回は、エッサム、ストレージサービス、ベルテクノスの3社について、Gmailの通知をきっかけに請求書や領収書を取得する仕組みを作りました。
3社に共通していたのは、次の流れです。
- Gmail APIで対象メールを確認する
- メールから対象月などを判定する
- Playwrightで発行元のウェブサイトを操作する
- 対象となるPDFを取得する
- 支払日、発行元、金額を含むファイル名で保存する
- 処理済みメールと保存済みファイルを確認して重複を防止する
- 実行結果をログへ記録する
一方、対象月の探し方、請求金額を取得する場所、支払日の決め方などは、発行元ごとに異なりました。
また、取得先をカード会社へ広げる過程で、各社別に管理していたログイン状態から、共通Chromeプロファイルと共通の認証情報管理を利用する方式へ、設計を段階的に変更しました。
最初から完成形を作ったのではなく、実際に対象を追加しながら、共通化した方がよい部分と、会社ごとに分けるべき部分を整理していったことも、今回の自動化で得られた経験です。
次回は、ビューカード、三井住友カード、三菱UFJニコスから、カード利用明細のPDFを自動取得した方法を紹介します。
※本記事は、2026年9月に当事務所で行った自動化の事例を紹介するものです。ウェブサイトの仕様、認証方法、画面構成、利用条件は変更されることがあります。自動化を行う場合は、各サービスの最新の利用規約や画面を確認し、認証情報や取得データを適切に管理してください。
新星パートナーズ会計事務所
代表・税理士 井河 伸郎
税務・会計に関する記事は、専門家の立場から内容を確認しています。
本記事は、一般的な情報の提供を目的としています。個別の取引や税務上の取扱いについては、契約内容や事実関係によって判断が異なる場合があります。また、掲載内容は記事作成時点の情報に基づいています。最新の情報は、各サービスの公式サイトや関係機関の公表資料をご確認ください。

