[AI 記帳] Make + OpenAI 自動化記帳
既然可以用帳務信件自動化,就把所有信件丟給 AI 自動記帳吧!
上週做了匯豐銀行刷卡明細自動化,看到小朱的留言有點啟發。原本我是用正規表達式把信件內容的日期、卡號、金額、類型抓出來,但其實根本可以交給 AI。更有甚者,其實不光是匯豐刷卡記錄,可以 把想得到的帳都丟給 AI 呀。
就來著手試試看吧!
規劃
今天想要嘗試的方式是:
- 收集消費通知的 emails
- 全部丟給 openai,請他整理成我要的格式
- 傳到一個 google sheet 用公式整理
刷卡通知 emails
同一筆消費有可能有兩種通知,一種是商家寄來的,一種是刷卡通知。比如說搭了 Uber,你會收到 Uber 寄來的行程記錄,也會收到刷卡通知。我們會希望以 「信用卡消費通知」 為主,再用商家寄來的通知輔助。因為刷卡才是流程的最上游,可以捕捉到所有的交易。
我最常用的是匯豐,上篇文章有說明過抓資料的方式。今天繼續把其他刷卡記錄也串進來。我第二常用的是國泰,因為我家樓下是全聯,可以直接掃個條碼就登記會員+付款並且發票自動歸戶,只是他只支援國泰,所以我去全聯、或是剛好國泰優惠比較多的時候也會使用。而國泰信用卡如果消費通知有商家資訊(想要記帳的資料都有),就可以直接抓。這種狀況就可以全部自動。國泰不愧是做的最好的一家。
另外幾張卡:
- 富邦信用卡:有信件通知(教學),信件沒有寫商家資訊,但因為我也只用來刷 Costco,所以一樣可以全部自動(富邦刷卡通知都當做 Costco)。
- Crypto.com:有消費通知信,但只有金額。也納入這次範圍,類別就先留空。
有些無法的卡(串不進來):
- 玉山:沒有 Email 通知(或是我沒找到),但我超少刷,跳過。
- 星展:Email 通知介面不知為何無法啟用,連客服都懶得問,星展是垃圾。因為是之前花旗 PCHome 卡轉過來的,目前只有用在 PChome。那就抓 PCHome 記錄就好?可是 PCHome 的信件沒有我們需要的金額資訊,只好放棄。反正我也很少刷。
- 中國信託:有每日通知(每日消費成交回報),一天一封。單筆消費的只能透過 Line 和 App 推撥。這張我也很少刷,跳過。
要注意是「一封信一筆消費」還是「一封信多筆消費」,比如說,國泰和中信雖然有刷卡消費的通知信,但他是「一天一封彙整」,就需要另外處理,有可能一封裡面有很多信件。 這個後面會說。 本篇沒篇幅了,下次再補充。
消費通知 emails
但可惜的是我最常用的匯豐信用卡沒有在消費通知 email 提供商家名稱,這樣記帳還是無法知道分類。因此,我這邊的作法是另外把常用的服務的消費通知也抓出來,然後在 Google Sheet 裡面用公式自動對帳。很多服務都有 Email 通知服務,要記得一一去打開。
實際作法:
- 先看過去一個月常消費的信用卡或是商家,全部列出來
- 我最常消費的有 Uber、Apple、Stripe 等等
Google Sheet 格式準備
我需要有這兩個 Google Sheet:
- 刷卡記錄:列出所有信用卡的紀錄
- 消費記錄:比如 Uber、Apple、Stripe 等等
欄位目前簡單規劃如下:
- 日期
- 商家
- 明細
- 金額
- 分類
- 付款方式
- 貨幣
本文最後有 Google Sheet 範本歡迎取用。
接下來就開始用 AI 自動化吧!
第一步:找出消費通知 emails
先在信箱裡看有多少 low hanging fruit 吧!搜尋 invoice
看看。有趣的是 Gmail 會自動把有 receipt
或 發票
的信也找出來呢!
但光是這樣搜尋,會包含太多亂七八糟或重複的資訊,比如說,Uber Eats 可能會有訂單通知,以及發票開立通知。所以還是需要整理一下。
以下是我自己常用的服務,我們先抓這些服務的消費通知。因為每個人語系不同,建議還是在自己的信箱實測。
Uber & Uber Eats
可以先找到一封 Uber 的信,然後選「Filter messages like these」,Gmail 會建議一個 search query。
基本上會是 from:(noreply@uber.com)
。但因為還會混著其他行銷信,像這樣:
我們沒有想要抓「Hana,我們想瞭解您的看法」這封信,所以還是建議加上 subject 篩選。而且因為可能是搭車、也可能是訂單,在 Gmail 需要用 OR 來連結。
如:from:(noreply@uber.com) {subject:(透過 Uber Eats 系統送出的訂單) OR subject:(在 Uber 平台上搭乘的行程)}
。
這樣就可以乾淨的只有 Uber 搭車和點餐的紀錄。
Apple
因為我有訂閱一些 App,所以不時會收到 Apple 的帳單,所以也希望可以自動抓這部份。用剛剛一樣的方式,先找到一封信 filter messages like this,然後加上 subject 規則。Apple 的 invoice 有兩種標題,但都是 your invoice
開頭,目前檢查過沒有混入其他的。
所以可以用這串from:(no_reply@email.apple.com) subject:(Your invoice)
。
Stripe 交易
我自己買很多國外 SaaS 服務都是用 Stripe 支付,因此可以從這邊抓到一些。用一樣的方式之後,發現規則比較複雜。不一定都是來自@stripe.com
,也會有像是invoice+statements@make.com
的,看來他們有通知信 whitelabel 的功能,沒關係,我們都加上去。
最後 Search query 是 {from:(invoice+statements) OR from:(@stripe.com)} AND subject:(receipt)
。
整合在一起
因為我們需要一次把上面的信件篩選,我們需要用 OR 把它們都接在一起,然後每一組都要用大括號包起來。因為用了大括號,必須把運算元也加上去。
如下:
{from:(noreply@uber.com) AND {subject:(透過 Uber Eats 系統送出的訂單) OR subject:(在 Uber 平台上搭乘的行程)}}
OR
{from:(no_reply@email.apple.com) AND subject:(Your invoice)}
OR
{{from:(invoice+statements) OR from:(@stripe.com)} AND subject:(receipt)}
如果對於 search query 想要更多變化,可以參考 Google 官方教學。
把這一串先丟到 Gmail 搜尋看看,看有沒有怪怪的。沒有的話就可以進行下一步。
刷卡記錄 emails
因為本篇改用 Make 進行自動化(下面會說原因),並且改用 AI 擷取資料,順便把其他信用卡也一併納進來了。
Search query 找法類似,這邊直接提供可以抓到包含上面消費記錄,以及刷卡記錄的,信用卡包含匯豐、國泰、富邦以及 crypto.com。
{from:(noreply@uber.com) AND {subject:(透過 Uber Eats 系統送出的訂單) OR subject:(在 Uber 平台上搭乘的行程)}}
OR
{from:(no_reply@email.apple.com) AND subject:(Your invoice)}
OR
{{from:(invoice+statements) OR from:(@stripe.com)} AND subject:(receipt)}
OR
{from:(bot@heroku.com) AND subject:([billing] Heroku Invoice)}
OR
{from:(noreply@messaging.hsbc.com.tw) AND subject:(匯豐(台灣) "刷卡消費通知”)}
OR
{from:(hello@crypto.com) AND subject:(purchase complete)}
OR
{from:(@taipeifubon.com.tw) AND subject:(富邦 即時消費通知)}
OR
{from:(service@pxbillrc01.cathaybk.com.tw) AND subject:(國泰世華銀行消費彙整通知)}
你可以試試看這個 search query,不過每個人的通知和語系設定不同,還是需要調整成自己要的需求噢!
要注意的是,刷卡記錄和上面的消費記錄是要去到不同的 Google Sheet 的哦!現在只是先一起抓到自動化流程。
第二步:丟給 AI 整理成流水帳(使用 Make)
上週其實是用 n8n,但今天收到這封信。
看了一下方案,最便宜也要 22 歐元,不付費就會被刪掉 感覺情緒勒索,所以決定不升級 n8n,回去用之前用過的 Make。
Make 免費版可以每個月執行 1,000 次,付費最便宜的方案一個月 10 元左右,可以執行 10,000 次,感覺大方多了。所以這次使用 Make。
抓 gmail 信件
登入後建立一個 scenario,然後我們的 trigger 是 gmail。設定方式如下圖。這邊是用剛才的 search query 先在自己的信箱找出那些信。
測試過程中,可以在「Choose where to start」選擇測試時想要抓的資料,比如說可以抓最近兩天的資料。這個是每次點 Run 之前都要調整的。另外上圖有個「Maximum nunmber of results」也可以在測試時調整,比如說我想抓 8/21 的資料,但我不想從 8/21 一路抓到最新的,就可以把這邊數字調小一些。
丟給 openai
抓完資料之後,再開一個 ChatGPT,我們要選的是「Transfrom Text to Structured Data」。
Model 建議選最便宜的 gpt-4o-mini
即可。這邊假設大家都有 openai 的 API 了,沒有的話可以去看官方文件(注意,這不是免費的,要用就要錢,有訂閱 ChatGPT 也一樣)。
接下來 Text to Parse 我們選前一個步驟信件的 Text content,這是純文字版本的信件,可以節省一些 token。Prompt 的部份也簡單描述背景即可,這對 openai 來說是非常單純的任務。
再往下可以定義資料格式,一樣用描述的即可。平常怎麼和 ChatGPT 溝通,這邊用一樣的方式。
自動傳到 google sheet
接下來再建立一個 google sheet 事件的「Add a Row」這邊很好理解就快速帶過了。完成後試跑,就會看到帳都自己記起來了,很過癮!
第三步:在 Google Sheet 整理
整理了一份簡單的 Google Sheet,可以快速把帳整理好。像是這樣
主要是:
- 用 AI 自動抓 Gmail 信件存到 raw sheets
- 在「對帳表」把對照刷卡記錄和消費記錄
- 在「總帳」看自動整理過的消費記錄
這邊還沒有處理到匯率的問題,可以之後再加上去。
Google Sheet 連結:[Sample] 用 AI 自動記帳
結語
我每週對帳的工作通常會去對每張信用卡的紀錄以及銀行帳戶。如果帳戶很多的話真的是滿瑣碎的。並且,crypto 的部份就更複雜。這邊先不展開。
有個小心得是,雖然可以自動一大部分,但 目前還是很難全部自動 ,目前弄了一早上,其實還是有些難的地方。比如說昨天 Uber Eats 刷卡後沒送到,後來退掉了,Uber 還送我 30 元,所以下一筆變成 Uber 訂單金額和刷卡金額不同。或是有時會扣紅利點數也會有這個問題。這部份要自動化加上一個回沖的紀錄是可以,但有點麻煩,可能有點 over engineering 了,所以先不管。
我的結論是在自動化之後,還是會需要手動的檢查有沒有問題。另外這次還是用我比較熟悉的 Open AI,大家都知道他不是完全不會出錯的,所以事後的檢查是必要的。
不過今天這個自動化基本 Cover 我九成的對帳工作了。還是需要手動的地方剩下:
- 沒有 Email 的、現金支付的就無法抓(也許可以從發票?)
- 水電網路這種直接扣網路銀行帳戶也沒有(也許去申請電子帳單?)
- 幫公司代墊的要手動剃除(這...還想不到如何做)
原本對帳其實也沒很久,通常一小時內結束。但今天花了一整天還沒完成 XXXD,只能期待之後可以縮短到五分鐘啦!