← Back to blog

n8n Expense Tracker: An Editorial Exercise in Capture and Review

Build a test-mode n8n expense tracker with a form, Google Drive receipts, a shared Google Sheet and synthetic records to compare.

A tray holds receipts and currency tokens while a hand moves one receipt toward a separate review tray.

Checked against the cited sources on .

Editorial exercise: define your n8n expense tracker

Build an n8n expense tracker that captures synthetic expenses, uploads dummy receipts to Google Drive and records amounts and currencies in a shared Google Sheet. Route explicitly uncertain entries to a named reviewer, then compare the log with an independent reference tab. This is an editorial exercise: the proposed workflow has not been executed or validated.

Use only the Form Trigger Test URL. Credential setup, production deployment, OCR, currency conversion, automated approvals and bank reconciliation are outside scope. This exercise does not establish accounting, tax or regulatory compliance, transaction safety, duplicate prevention or reliable recovery from partial failures.

We think a useful finance practice project should make uncertainty visible before it tries to automate more decisions.

Sources: n8n-docs/docs/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger.md at main · n8n-io/n8n-docs · GitHub

Prepare the workspace and synthetic inputs

You need an existing n8n workspace, configured Google Drive and Google Sheets credentials, a practice-only Drive folder, and a spreadsheet shared with you and a designated reviewer. Prepare dummy receipt files. The supplied documentation is undated and does not establish compatibility with every installed release; check your available operations before starting.

Use these suggested log columns: expense_id, amount, currency, receipt_file_id, review_required, review_owner and review_status. Keep amounts and currencies separate, and never combine different currencies into one spending total. These fields and the review policy are editorial design choices.

Create an independent reference tab containing only expense_id, amount and currency. The following synthetic fixture deliberately includes matching, changed, missing and extra records. All currencies here are EUR; supply one dummy receipt per submitted expense.

Suggested synthetic fixture; amounts are exercise inputs, not measured results.
Expense IDReference amountSubmit amountUncertain?
EXP-0112.5012.50No
EXP-028.009.00Yes
EXP-035.00Do not submitNot applicable
EXP-04Absent7.00No

Sources: n8n-docs/docs/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/file-operations.md at main · n8n-io/n8n-docs · GitHub, n8n-docs/docs/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/sheet-operations.md at main · n8n-io/n8n-docs · GitHub

Build the capture and manual-review path

A slip, receipt folder and flagged ledger represent the n8n expense tracker capture and review path.
The objects represent submission, receipt storage and a reviewable spreadsheet record.

Form Trigger supports File and Number elements and passes submitted data into the workflow. Google Drive documents uploading a binary input to a chosen folder, while Google Sheets supports Append Row with manual column mapping. Follow this suggested build sequence.

  1. Create form fields for expense_id, numeric amount, currency, receipt upload and an explicit uncertainty choice.
  2. Select Execute Workflow and submit through the Test URL; inspect the output to find the receipt's actual binary field.
  3. Configure Google Drive Upload with your credentials, that binary field and the practice folder.
  4. Preserve the submitted expense values alongside the returned file identifier for the row-writing paths.
  5. Manually map each expense value, receipt_file_id and review field into Google Sheets Append Row.

Use If comparisons for the explicit uncertainty choice. On the uncertain branch, set review_required to true, review_owner to your designated person's name and review_status to pending before appending the row. On the other branch, use false, a blank owner and not_requested. These are suggested labels, not a validated financial policy.

Have the reviewer inspect pending entries and update their status manually in the sheet. Check receipt access separately: sharing the spreadsheet does not establish receipt access. Google Drive supports adding permissions for specific users or groups.

Sources: n8n-docs/docs/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger.md at main · n8n-io/n8n-docs · GitHub, n8n-docs/docs/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/file-operations.md at main · n8n-io/n8n-docs · GitHub, n8n-docs/docs/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/sheet-operations.md at main · n8n-io/n8n-docs · GitHub, n8n-docs/docs/integrations/builtin/core-nodes/n8n-nodes-base.if.md at main · n8n-io/n8n-docs · GitHub

Compare your n8n spending tracker with the reference

Two stacks of expense slips show matching, changed and unmatched records in the log and reference.
Paired and unmatched slips illustrate the synthetic comparison cases.

Read both tabs using Google Sheets Get Row(s), without filters. Prepare both comparison inputs with only expense_id, amount and currency, using matching field types. Exclude receipt identifiers and review metadata so they do not create irrelevant differences.

The supplied repository implementation declares Compare Datasets node versions 1, 2, 2.1, 2.2 and 2.3, matching fields and four comparison outputs.

For this suggested solution, connect the practice log as input A and the reference as input B, matching on expense_id. The fixture should yield EXP-01 as Same, EXP-02 as Different, EXP-03 as In B only and EXP-04 as In A only. Explain each discrepancy before correcting it and rerunning the comparison.

Sources: n8n-docs/docs/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/sheet-operations.md at main · n8n-io/n8n-docs · GitHub, n8n/packages/nodes-base/nodes/CompareDatasets/CompareDatasets.node.ts at master · n8n-io/n8n · GitHub

Check completion and diagnose mismatches

Your n8n expense tracker is complete for this exercise only when you observe the checks below. Reset the practice log between full capture runs.

If a check fails, inspect the submitted binary field and upload destination first, then the manual column mappings. Check receipt permissions as the reviewer. For comparison mismatches, inspect matching identifiers and field types on both inputs.

Sources: n8n-docs/docs/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger.md at main · n8n-io/n8n-docs · GitHub, n8n-docs/docs/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/file-operations.md at main · n8n-io/n8n-docs · GitHub, n8n-docs/docs/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/sheet-operations.md at main · n8n-io/n8n-docs · GitHub, n8n/packages/nodes-base/nodes/CompareDatasets/CompareDatasets.node.ts at master · n8n-io/n8n · GitHub

Reflect before reusing an n8n expense tracker template

Treat this design as a practice specification when assessing an n8n expense tracker template. Suggested reflection questions: Who takes over when a reviewer is absent? Who should access receipts? How would duplicate submissions and an upload followed by a failed append be handled?

In our view, a team should settle ownership and recovery rules before connecting a practice workflow to real financial information.

Put this into practice

Hands-on n8n challenges

Pick a challenge and build a working workflow in your own n8n environment, with five progressive tips per challenge.

Try a hands-on challenge

For your team

Custom n8n training programs for one team or department, run on your own n8n instance with your own tools and data.

Training for your team

n8n skills assessment

A free quiz of about 20 minutes: 30 questions in 10 skill areas and a level from Beginner to Expert. On AI Adoption Score, another project by the author of this site.

Get your n8n level