Set up the AI Bookkeeper
About 15 minutes on n8n Cloud (longer on self-hosted n8n, where you first create your own Google OAuth client). Everything you need to go from download to the first drafts, in order. Ticks are saved in this browser so you can come back later.
Before you start
- n8n (Cloud or self-hosted)
- Google account: Gmail + Sheets
- OpenAI API key
- Your categories and home currency (Config)
1. Pick where it runs
- Log in to your n8n Cloud workspace.
- Workflows → Import from file.
- Pick the file(s) in
workflow/.
- Open your n8n (Docker or npm, v1.x/2.x).
- Workflows → Import from file.
- Same files; nothing else changes.
- Create a Custom GPT or Claude Project.
- Paste
gpt/INSTRUCTIONS.txt. - Upload your sheet or paste rows in.
2. Setup checklist
3. Connect your tools
| Service | Nodes that use it |
|---|---|
| Google Sheets | Append to Expenses, Get Expenses |
| OpenAI | Extract Fields, Write Summary |
| Gmail | Get Emails with Attachments, Label Processed, Email Summary to Me |
In each node, choose Create new credential and sign in (Google uses OAuth; OpenAI takes an API key). n8n stores credentials in your instance, not with us.
Run budget (n8n executions)
n8n Cloud counts one execution each time a schedule fires, even when nothing is new. Runs you start with Execute workflow in the editor don't count. n8n Cloud Starter includes 2,500 a month.
| Workflow | Default schedule | Cron | Executions |
|---|---|---|---|
| Capture | Weekdays 09:00, 13:00, 17:00 | 0 9,13,17 * * 1-5 | 3 a day, 60-69 a month |
| Weekly Summary | Mondays 08:00 | 0 8 * * 1 | 4-5 a month |
This employee at the defaults: about 70 (64-74) a month. All five AI employees on Workforce at their defaults: about 790 a month (724-833 depending on the number of weekdays), about a third of Starter's 2,500.
Schedules run on weekdays in business hours, in the workflow timezone (Workflow → Settings → Timezone) or your n8n instance timezone. To change the interval, edit the cron expression in the Schedule Trigger node, save, and publish the workflow again (n8n only applies a new schedule on publish). For example */15 8-18 * * 1-5 is every 15 minutes on weekdays, about 1,000 a month. Estimate: runs per day × 22 weekdays.
What the statuses mean
| Status | Meaning | Your next step |
|---|---|---|
extracted | Fields extracted and checks passed | Spot-check, then export to your accounting tool |
needs_review | Low confidence, maths mismatch or not an invoice | Open the email and correct the row |
error | See the error column | Fix and remove the processed label to re-run |
Troubleshooting
| Symptom | Fix |
|---|---|
| Nothing found | Adjust `gmail_query` (e.g. add your language: factura, Rechnung, facture) or extend `newer_than` |
| Weekly email empty | `issue_date` missing or not YYYY-MM-DD → the summary falls back to captured_at; check the Expenses headers |
Guardrails
- This is data entry, not tax or accounting advice. Your accountant/gestor files taxes.
- Spot-check totals before exporting. Never pay an invoice based only on extracted data (invoice fraud often arrives by email).
- Financial documents go to your LLM provider. Check this fits your data policy.