Automating unpaid invoice reminders with n8n: what it really costs
An automatic reminder for unpaid invoices fits in a five-node n8n workflow: a scheduled trigger, a read of your invoices, a filter on the due date, an email, and a write-back of the reminder date. The real cost isn't the subscription — €20 a month on the Starter plan — it's the means of paying that subscription from Tunisia, and the few hours of maintenance per quarter that nobody budgets for.
An automatic reminder for unpaid invoices fits in a five-node n8n workflow: a scheduled trigger, a read of your invoices, a filter on the due date, an email, and a write-back of the reminder date. The real cost isn't the subscription — €20 a month on the Starter plan — it's the means of paying that subscription from Tunisia, and the few hours of maintenance per quarter that nobody budgets for.
What the workflow looks like, node by node
The starting point is the Schedule Trigger node. It offers six interval granularities — seconds, minutes, hours, days, weeks, months — or a custom interval in Cron format. Watch the format: the expression accepts six fields, the sixth being seconds and optional (n8n Docs, Schedule Trigger). For reminders, "Days", every 1 day, at 8:00, is plenty.
Three pitfalls of this node are worth knowing before going live, because none of them produces a visible error.
The first is the time zone. The documentation states that the node relies on the workflow's time zone setting, otherwise on the instance's, and that this defaults to America/New York on a self-hosted install. If you don't switch it to Africa/Tunis, your 8 a.m. reminders go out mid-afternoon.
The second is publishing. The documentation is explicit: "make sure that you save and publish the workflow". A workflow that is saved but not published never triggers. Everyone has lost half a day on that one.
The third concerns dates that don't exist. A monthly trigger scheduled on the 30th won't run in February. Never pin a reminder on the 29th, 30th or 31st. Since version 2.36, the "If Execution Is Missed" option lets you catch up on missed runs, which limits the damage without replacing sound scheduling.
Between the trigger and the email, the only node that requires thought is the filter. Not "overdue invoice", but "overdue and unpaid and last reminded more than X days ago". Reminding a customer who paid the day before is the best way to get the automation cancelled by management within a week.
The advertised price
n8n charges €20 a month for the Starter plan, €50 for Pro and €667 for Business, billed annually. The model is unusual and rather favourable: billing is per full workflow execution, not per step. The page puts it this way: "Pay for full executions, not for each step. Unlike other tools that charge per step or user, n8n lets you build freely and only pay when a workflow runs from start to finish." The Starter plan includes 2,500 executions a month (n8n, Pricing).
Let's do the maths, while being clear it's an estimate: a daily reminder uses about 30 executions a month. Even adding five other automations of the same size, you stay far below the cap. For an SME, the Starter plan isn't an entry-level plan — it's the right plan.
The real problem in Tunisia is paying those €20
It's the topic French tutorials never cover, and it's the one that actually blocks projects here.
Paying for a foreign SaaS subscription from Tunisia requires an international technology card. The official factsheet from the Ministry of Communication Technologies sets the annual caps at 1,000 dinars for an individual and 10,000 dinars for a legal entity, and explicitly lists among authorised uses "advertising and subscriptions to foreign websites" and "the purchase of development tools and software licences". The regulatory basis cited is BCT circular to authorised intermediaries no. 2016-9 of 30 December 2016 (MTC, International technology card).
Companies with the "startup" label have a much larger allowance: circular to authorised intermediaries no. 2019-02 of 30 January 2019 raises the annual allowance to 100,000 dinars, against 10,000 dinars for an ordinary resident company, on presentation of a copy of the currently valid ministerial label award decision (BCT circular no. 2019-02).
That's the real trade-off. €20 a month weighs nothing. But an SME that stacks n8n, hosting, a CRM, an ad platform and two software licences burns through its 10,000-dinar cap faster than it expects, and every new subscription then comes out of the advertising budget. That calculation — not a technical preference — is what pushes half of my clients towards self-hosting.
Self-hosting n8n: possible, but read the licence
n8n isn't open-source software in the OSI sense. The repository is published under the Sustainable Use License version 1.0, a so-called fair-code licence. It allows use "for your own internal business purposes or for non-commercial or personal use", modification for your own use, and free non-commercial redistribution. It forbids reselling and providing the software as a hosted service to third parties. Files whose name contains .ee. fall under a separate Enterprise licence, LICENSE_EE.md (n8n, LICENSE.md).
The practical consequence deserves to be said plainly. Hosting an n8n instance for your own workflows: within the licence. Hosting a shared instance and charging your clients for access to n8n: you're outside the SUL, and you need to talk to a lawyer, not a forum. My rule is simple — the instance runs on the client's server, with their credentials, and it belongs to them.
Cron or webhook?
A scheduled trigger queries your data at a fixed time. It's the right choice when the source can't notify you — a Google Sheets file, an accounting export.
As soon as your invoicing software can send notifications, the Webhook node is more accurate and more economical. It accepts the DELETE, GET, HEAD, PATCH, POST and PUT methods, separates a test URL from a production URL, and can require authentication — basic, header-based or JWT. The maximum payload size is 16 MB, adjustable when self-hosting via the N8N_PAYLOAD_SIZE_MAX variable (n8n Docs, Webhook node).
My advice: start with cron. It's easier to debug, it can be replayed by hand, and it doesn't depend on a third-party provider that changes its URLs without warning. Switch to a webhook the day a one-day delay becomes a problem — which, for invoice reminders, almost never happens.
Last updated on .
Sources
Every figure in this article links to a public source, dated the day it was checked.
- [1]Schedule Trigger
n8n Docschecked on
https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/
- [2]
- [3]LICENSE.md — Sustainable Use License v1.0
n8n (dépôt GitHub officiel)checked on
https://github.com/n8n-io/n8n/blob/master/LICENSE.md
- [4]Webhook node
n8n Docschecked on
https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/
- [5]Carte technologique internationale (CTI)
Ministère des Technologies de la communicationchecked on
https://www.mtc.gov.tn/fileadmin/Investisseurs/Carte_technologique_Internationale_CTI_-version_francaise.pdf
- [6]Circulaire aux intermédiaires agréés n° 2019-02 du 30 janvier 2019
Banque Centrale de Tunisiechecked on
https://www.mtc.gov.tn/fileadmin/StartupAct/Cir_2019_02_fr.pdf
Is this exactly what you're working on right now?
The “AI automation” offer details the method, deliverables and timelines for this exact scope.