---
title: "Gmail payment rails audit written to a Google Sheet"
kind: "Kit"
category: "Finance & accounting"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/b5b512a8-141f-4e30-a165-1dd2a14234ff"
updated: "2026-11-12"
---

# Gmail payment rails audit written to a Google Sheet

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow that searches your Gmail once for receipts from seven payment rails, such as PayPal, Apple, Google Play and Klarna. It reads each amount and card ending and writes one row per message to a Google Sheet, with no AI.

Gmail payment rails audit written to a Google Sheet is an n8n workflow in the Finance \& accounting category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-12. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow shows how your money leaves your inbox. You run it by hand. It sets a start date and runs seven Gmail searches at once, one for each payment rail: PayPal, Apple, Google Play, Google Pay, Stripe or Paddle, SEPA direct debit and Klarna. A Code step reads the amount, the currency and the last four card digits from each message and marks it verified or uncertain. Each message becomes a row in a Google Sheet. It uses no AI, downloads no attachment and changes nothing in your mailbox. Twelve nodes run it, beside four sticky notes.

### Who it suits

Freelancers and small business owners who pay for tools through several rails and want to see them side by side before they cancel anything. Skip it if you need exact totals. It only reads a message’s subject and snippet.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Freelance | Solo professionals | Find every subscription across PayPal, Apple and Google | A designer sorts the sheet by rail and spots two forgotten plans. |
| Small business | Owners | Review the tools a business pays for before the year ends | An owner checks which rail pays for the software stack. |
| Software | Indie developers | Separate store fees from tool costs | A developer checks the Stripe and Paddle rows next to the Google Play rows. |
| Personal finance | Households | Review direct debits and card-linked payments | A household lists its SEPA and Klarna messages in one place. |

You need to know n8n’s settings: import a file, add two credentials, set a date and name a sheet.

### Where to use it

Any n8n that can reach Gmail and Google Sheets will run it.

- n8n Cloud: import the file and run it by hand
- Your own n8n server: the same file and steps
- Google Sheets: one tab called \`rails\`, which can start empty

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Setup is two credentials, one sheet id and a date.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| Gmail | An OAuth2 credential for the mailbox to search |
| Google Sheets | An OAuth2 credential and a sheet with a tab called \`rails\` |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add a Gmail credential and select it in the seven nodes whose names start with `Gmail`.
3. Add a Google Sheets credential and select it in `Append sheet`. Replace `<YOUR_SHEET_ID>` with your sheet’s id.
4. In `Set window`, set `WINDOW_AFTER` to the date to search from, written as `YYYY/MM/DD`.
5. Choose Execute workflow and open your sheet.

### How to use it

Run it once and read the `rails` tab. Sort by rail, then read the `evidence` column before you cancel anything. Run it again later with a new start date.

What to change for a different result

| To change | Where |
| --- | --- |
| The start date | \`WINDOW\_AFTER\` in \`Set window\` |
| What each rail searches for | The \`q\` search in each Gmail node |
| How many messages each rail returns | The limit in each Gmail node |
| What counts as evidence | The code in \`Classify rails\` |

### Example

Your PayPal search finds a receipt for a monthly tool.

```text
rail: PayPal | amount: € 12,50 | currency: EUR | last4: 4242 | evidence: VERIFIED
```

The row also holds the subject as the merchant, the date of the message, the sender and a short snippet. A Google Pay “card added” notice gets the evidence UNCERTAIN, because it is not a charge.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This one searches, waits for every search, labels each message and writes rows. Run it once with a short date range to see the columns.

**For experts.** Seven searches feed one Merge node with seven inputs, and one Code step does the reading.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Gmail PayPal\` and six more | Search one rail each | Each has the limit 200 and always passes an item on |
| \`Wait for all rails\` | Merge with seven inputs | It waits for every search, even an empty one |
| \`Classify rails\` | Builds one row per message | It reads \`Subject\`, \`From\` and \`internalDate\` |
| \`Append sheet\` | Appends the rows | Append Row, because an empty tab has no column to match on |

### Good to know

The sheet shows what Gmail knows, which is not the same as your bank statement.

- Fixes: the original asked for 200 messages with an option the Gmail node lacks, so it returned 50. It also read lowercase keys that the simplified output does not use, and it used a sheet operation that needs a matching column. This copy repairs all three
- Window: the start date 2025/08/01 was meant as about 13 months and now covers about 15, so set your own
- Language: the search words are English and Dutch, so change them to the words your senders use
- Amounts: found only in the subject or snippet, in euros or dollars, and never converted
- Repeat runs: each run adds the rows again, so clear the tab first
- Blind spots: rent, health and phone plans often send no email
- Not run: Mindket did not run it against Gmail or Google Sheets
- Credentials: the JSON holds none

## README

```markdown
# Gmail payment rails audit written to a Google Sheet

An n8n workflow that maps how money leaves your inbox. In one run it searches your Gmail for receipts and payment notices
from seven payment rails: PayPal, Apple, Google Play, Google Pay, Stripe or Paddle, SEPA direct debit and Klarna. A Code
step reads the amount and the last four card digits from each message and marks it as verified or uncertain. Every message
becomes a row in a Google Sheet. It uses no AI model, downloads no attachment and changes nothing in your mailbox.

## What is inside

- `workflow.json`: the workflow as n8n exports it, sixteen nodes. Four are sticky notes. It holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The seven Gmail nodes asked for 200 messages with an option called `maxResults`, which the Gmail node does not have. With
  no limit set, the node returns 50. Each node now has the limit 200.
- `Classify rails` read the keys `subject`, `from` and `date`. The simplified Gmail output names them `Subject` and
  `From`, and gives the date as `internalDate` in milliseconds. The code now reads both spellings and turns the
  milliseconds into a date, so the merchant, sender and last charge columns are filled.
- `Append sheet` used Append or Update Row, which needs a column to match on and stops without one. It now uses Append
  Row, which is what the sticky notes describe.
- The sheet id, which was the placeholder `REPLACE_SHEET_ID`, is now `<YOUR_SHEET_ID>`. The credential ids, which were
  `REPLACE`, are gone.
- The main sticky note has a shorter title, and its setup lines no longer mention `REPLACE`.

## Before you start

- A Gmail account you can connect to n8n with OAuth2.
- A Google account for a Google Sheets OAuth2 credential, and a Google Sheet with a tab called `rails`. The tab can be
  empty: n8n writes the column names from the first run.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add a Gmail OAuth2 credential and select it in the seven nodes whose names start with `Gmail`.
3. Add a Google Sheets OAuth2 credential and select it in `Append sheet`. Replace `<YOUR_SHEET_ID>` with your sheet's id,
   the part of its address between `/d/` and `/edit`.
4. Open `Set window` and set `WINDOW_AFTER` to the date you want to search from, written as `YYYY/MM/DD`.
5. Choose Execute workflow and open your sheet.
6. Read the `evidence` column before you cancel anything.

## How a run goes

1. `When clicking ‘Execute workflow’` starts the run, and `Set window` holds the start date.
2. Seven Gmail nodes search in parallel, each for one rail. A rail's search combines the sender or the subject with words
   such as receipt, invoice, payment, abonnement or incasso. Each returns up to its limit, and none downloads an
   attachment. A search with no result still passes an empty item on.
3. `Wait for all rails` is a Merge node with seven inputs. It waits for every search to finish.
4. `Classify rails` skips the empty items and builds one row for each message. A row holds the rail, the merchant (the
   subject), the amount, the currency, the date, the last four card digits, the evidence, a note, the sender and a snippet.
5. `Append sheet` adds the rows to the `rails` tab.

## Change the result

- The rails and their search words: the `q` search in each Gmail node. Add a Gmail node and a line in the `rails` list in
  `Classify rails` for a new rail, and raise the inputs of `Wait for all rails`.
- The start date: `WINDOW_AFTER` in `Set window`.
- How many messages each rail returns: the limit in each Gmail node, at most 500.
- What counts as evidence: the code in `Classify rails`.

## Good to know

- The start date `2025/08/01` in the original copy was meant as a window of about 13 months. On 12 November 2026 it covers
  about 15. Set it to the date you want.
- The search words are English and Dutch, as in the original copy. Change them to the words your senders use.
- An amount is found only when it appears in the subject or in the snippet, in euros or dollars. Nothing is converted.
- A message is marked VERIFIED when it has an amount and UNCERTAIN when it has none. A "card added" notice is never a
  charge.
- Each run adds the rows again. Running it twice doubles them, so clear the tab or change the start date first.
- Household direct debits, such as rent or a phone plan, often send no email. A missing row is not proof that there is
  no payment.
- The workflow reads only the metadata and the snippet of each message. It writes no label and sends no mail.
- Mindket did not run this workflow against Gmail or Google Sheets. These notes follow n8n's published node code, read on
  12 November 2026, and the Code step was run on sample messages on a local computer.
```

## What is in it

3 files, 20 KB, downloaded as a zip.

```text
NOTICE.md  618 B
README.md  5 KB
workflow.json  15 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 12 steps, starting by hand
- AI: No step calls an AI model
- Sign-ins: Signs in to: Gmail and Google Sheets
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 6 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/b5b512a8-141f-4e30-a165-1dd2a14234ff)
- [Its page on Mindket](https://mindket.com/p/b5b512a8-141f-4e30-a165-1dd2a14234ff)
