This is a builder recipe: a Gmail message with a receipt attached arrives, the automation platform hands the raw file to ExpenseBot, and you get back the exact processing outcome rather than a guess.
The workflow shape
- Trigger — your platform's Gmail trigger, watching a label, a search query,
or new attachments. Scope it narrowly (a
receiptslabel beats "all mail"). - Get the raw file — pass the actual attachment object or a downloadable file URL. A preview or share page is not a file and will not process. Keep the filename with its extension and the true MIME type.
- Upload Receipt — ExpenseBot's signed receipt pipeline accepts images and PDFs. The step returns a submission ID.
- Delay — receipt extraction is not instant. Give it a short wait before asking for the result.
- Get Receipt Processing Result — pass back the exact submission ID from
step 3. The result is a terminal state, not a progress bar:
added,duplicate,skipped,errored, orunknown. - Route on the result — a path or filter per outcome. See success notification and Action Needed routing for the two branches.
Why the delay-then-poll shape
Uploading and reading are separate steps on purpose. The upload returns immediately so your scenario does not sit blocking on extraction; the result step tells you what actually happened to that specific file. Writes are retry-safe — replaying the same action creates exactly one spreadsheet row, verified in live QA — so a re-run after a platform timeout does not duplicate the expense.
The division of labour
ExpenseBot supplies structured expense data and Gmail receipt capture to Make workflows — extraction, duplicate detection, review, and the spreadsheet record. Make handles external triggers, routing, reminders, and notifications.
The boundary
This recipe reads attachments that your automation platform is authorized to see. It is not the same thing as ExpenseBot's own Gmail receipt scan, which is separately authorized, user-triggered, and reports a terminal status of its own. Changes preview and ask before anything is saved; do not design a scenario that assumes unattended, unconfirmed writes.
Where to build it
- Choose the right connection for your AI
- Connect ExpenseBot to Zapier's MCP Client — beta, usable today
- Does ExpenseBot work with Make.com? — native app submitted and in review
- Review what landed: Review expenses
