The Upload Receipt action sends a receipt image, HEIC, or PDF through ExpenseBot's signed upload pipeline and queues extraction. It returns a Submission ID, not a finished expense — reading the outcome is a separate step.
The shape of the workflow
Trigger → Upload Receipt → Delay → Get Receipt Processing Result → Paths. That order is binding. Upload Receipt returns as soon as the file is queued, not when it has been read, so a Zap that skips the delay and the result check will report "still processing" as a failure and quietly lose receipts.
The four mappings that decide whether it works
| Field | Map this | Not this |
|---|---|---|
| Receipt File | The actual file object from the trigger, or a directly downloadable file URL | A link to a preview or sharing page, or the attachment's name |
| File Name | The original name including its extension — receipt.heic, invoice.pdf | A name with the extension stripped, or a generated label |
| MIME Type | The true type from the source step: image/jpeg, image/heic, image/png, application/pdf | A guess, or one type hardcoded for a trigger that produces several |
| Source Event ID | The trigger's stable unique identifier — the Gmail message ID, the Drive file ID, the form submission ID | A timestamp or a random value |
Two optional fields: Note takes short receipt context such as a business purpose — do not paste the source email or chat message into it. Client, Project, or Trip Group selects an existing ExpenseBot group from a dropdown. The action never creates a group; create it in ExpenseBot first.
What comes back
Upload Receipt returns a Submission ID, a status, a Spreadsheet URL, a Review Expenses URL, and Safe Retry Replayed. Keep the Submission ID — the next step needs that exact value, and it is a different value from the Source Event ID you supplied.
The most common failure
A file error on this step is almost always the Receipt File mapping. Zapier happily hands you a share link where you expected a file, and a share link is a web page, not a receipt. If the step errors, check that mapping before anything else.
Related
- Monitor receipt processing and route the outcome
- Prevent duplicate expenses with Source Event IDs
- Troubleshoot the ExpenseBot Zapier integration
- Connect ExpenseBot to Zapier · Zapier REST API reference
- Building the same thing on Make instead? Gmail receipt capture recipe · Drive receipt capture recipe · Slack receipt capture recipe
