Approve invoices, pay on Friday
This n8n workflow is for small teams that approve supplier invoices by email and want a record of who agreed to what. An approver confirms each amount, a second person signs off anything over your spending limit, and every Friday the workflow emails you the approved invoices to pay. It uses Gmail and Google Sheets and needs no AI key.
Coming soonNot on sale yet
The question
this build answers
How do I get supplier invoices approved by email, with a second sign-off over a limit and a list of what to pay each week?
Run this n8n workflow with a Google Sheet. An invoice comes in through a form page or a Gmail label. Each approver gets an email with their own link, and only the button on the page saves a decision. Above your limit for that currency, a second person from a different list has to sign off. Every Friday you get one email of approved unpaid invoices with totals per currency. By default it moves no money.
From the first trigger
to the finished job.
The working version, step by step.
An invoice comes in
Someone fills in the form page the workflow serves, and the invoice becomes one row in your Invoices tab. A bad amount or a missing currency is refused, and the reason goes to the Errors tab, at most one row a minute for refused posts. Emails under your Gmail label are logged as rows marked needs amount. It reads no attachments, so someone types the amount before any approver is asked.
The approver gets a link
Each approver gets an email with their own link. Opening it only shows the invoice and a form, because mail scanners open links before people do. Only the button saves a decision, and the link works once. A likely duplicate needs the approver to tick a box before it can be approved.
A second sign-off over your limit
Above your spending limit for that currency, a second person from a different list has to sign off, and it cannot be the first approver. The limit is tested on the larger of the invoice amount and the amount typed. A rejection needs a reason, which is emailed to the address typed on the form.
Reminders, then escalation
Every morning it reminds and then escalates stale approvals, with caps you set.
The Friday pay run
Every Friday you get one email of the approved unpaid invoices by due date, with totals per currency and a mark-paid link for each.
Not on sale yet
Invoice Approval and Weekly Pay Run for n8n
n8n is still reviewing this template for its own library. It goes on sale here once its test is on record. The zip holds one workflow file to import into your own n8n and a README with every setting.
Coming soonWhat we have run, and what we have not
Every Code node branch runs offline, 366 checks in all. On the file in the zip we ran ten live checks on a test Google Sheet and in Stripe test mode, with made-up data. They cover the optional payment path and two approvers pressing at once, which gave one winner three times out of three.
In those runs every email went to a Slack test channel. We have not run a real email approval, the reminder emails or the alert email on this file. Earlier builds ran the form, the approval, the second sign-off and the pay run with real Gmail and a real Google Sheet, and we have not repeated those on this file.
What you need
n8n 1.x or 2.x on an address your approvers can reach from outside, so the links open. A Google account with Gmail and Google Sheets. Slack is optional, and the optional Stripe mode needs a Stripe account of your own.
It starts in preview mode. Send one invoice through the form, read the Log tab, then change the mode to live.
It moves no money by default
By default the workflow pays nobody. It tells you what to pay and records that you paid it. An optional Stripe mode can send a Connect transfer. That mode is only for a business whose payees are Stripe connected accounts, which you list yourself on a Suppliers tab. It does not pay an ordinary supplier's bank account.
Limits worth knowing
The invoice form is public, so anyone with its address can send an invoice, up to a daily cap. A form post can never choose who gets paid.
Google Sheets is not a database lock. Two people pressing at the same moment are settled by a claim line on the Log tab.
It reads invoice emails by pattern, in English, from the email text only. It never opens a PDF.
The duplicate check catches the same supplier with the same invoice number, or the same supplier, amount and currency inside a window. It flags, it does not prove.
Forwarding an approval email forwards the link.
The fit matters.
Who should not build this
If you want invoices read off PDFs automatically, this does not do it. Every amount is typed or confirmed by an approver.
If you need payments sent to ordinary bank accounts, this does not do that.
If your approvers cannot reach your n8n address from where they read email, the links will not open.
Yours to keep
What lands
on your desk.
- One n8n workflow file to import into your own n8n
- A README with the sheet tabs, every setting, the limits, and what was and was not tested
A few useful
answers.
Can I buy it today?
You cannot buy it yet. It goes on sale here once its test is on record.
Does it pay suppliers?
It pays nobody by default. It tells you what to pay and records that you paid it. The optional Stripe mode only pays Stripe connected accounts that you list yourself on a Suppliers tab.
Does it read PDF invoices?
It reads no attachments, so it does not read a PDF. An invoice from Gmail waits until someone types the amount.
What do I need to run it?
n8n 1.x or 2.x on an address approvers can reach, and a Google account with Gmail and Google Sheets. Slack and Stripe are optional.
Make this work for you
Your tools.
Your working version.
Ask for a build to fit
Quoted to your job
Tell us what your version needs to do. One line is enough to start.
Start a brief


