n8n template

Verified Bank Statement Import

Statements go into Google Sheets only after code proves they add up to the cent. Overlapping statements never create duplicates.

$39 one-time, USD

Secure checkout by Paddle, our merchant of record. Taxes are calculated at checkout. 14-day refund.

If it doesn't add up, it doesn't go in.

Most statement importers trust whatever the AI read. This one makes the AI's output prove itself first: the statement's own opening and closing balances have to agree with every transaction before a single row is written.

The balance proof

Integer cents, never floating point. When one sign is wrong, the email names the row. When the statement prints running balances, it finds the first one that breaks.

// opening + every transaction must equal closing, to the cent
const sum = txs.reduce((a, t) => a + t.cents, 0);
diffCents = opening + sum - closing;
if (diffCents !== 0) {
  problems.push('... off by ' + money(diffCents));
  // one sign error shows up as exactly twice one amount
  const flipped = txs.find(t =>
    Math.abs(diffCents) === Math.abs(2 * t.cents));
}

No duplicates, ever

Import the mid-month export, then the full month: only the new rows are added. Two identical coffees on one day stay two rows.

// same day, same amount, same text: still two rows
const base = [account, t.date, t.cents, norm(t.description)].join('|');
seenInStatement[base] = (seenInStatement[base] ?? 0) + 1;
const fingerprint = base + '|' + seenInStatement[base];
if (existing.has(fingerprint)) { skipped++; continue; }

What happens to each statement

  1. Drop it in DrivePDF or CSV, into a folder you choose.
  2. AI reads itBalances and every transaction come back as structured data.
  3. Code checks itOpening + transactions must equal closing, to the cent.
  4. Refused, or importedA mismatch writes nothing and emails you the difference.
  5. Categorized and loggedYour own rules set categories. Every import is logged.
n8n, self-hosted or Cloud A Google Drive folder A Google Sheet OpenAI or any compatible API Gmail for alerts

Questions

What exactly do I get?

One n8n workflow file (JSON, 17 nodes) with setup notes pinned inside it, plus the three-tab sheet layout it expects. It runs in your own n8n; no subscription or hosted service.

Which banks does it work with?

Any bank whose statement shows an opening and a closing balance, as PDF text or CSV. Scanned image-only PDFs need an OCR step first.

Is my bank data sent anywhere?

The statement text goes to the AI provider you configure (OpenAI or a compatible one, including self-hosted models) and to your own Google Sheet. Nothing is sent to us.

Is this accounting or financial advice?

No. It's a data-import tool: it copies what your statement says, checks that it adds up, and files it where you tell it to.

What if it doesn't work for me?

Email hello@hundredships.com for help, or ask for a full refund within 14 days.