Unpaid invoices are money sitting in limbo. For most freelancers, chasing payment becomes a second job: checking spreadsheets, drafting reminder emails, following up with clients who go silent, then doing it all again two weeks later. The irony is that you're losing billable hours trying to collect money that's already been earned. This friction doesn't just cost time; it costs cash flow, mood, and momentum on actual client work. The good news is that invoice tracking and payment reminders don't require manual intervention. With the right workflow, you can set a rule once: "If an invoice hasn't been paid after 14 days, send an automated reminder. If it hits 30 days, escalate." The system checks, sends, and logs everything. You get notified only when action is truly needed. In this post, we'll build a fully automated invoice chasing system using a productivity app with reminders and nested AI chats, an email service, a payment automation layer, and one of several orchestration platforms. By the end, you'll have a workflow that tracks overdue invoices, generates personalised reminder emails, and can even trigger payment requests through AI agents.
The Automated Workflow
The architecture here has four moving parts: invoice storage and tracking, time-based triggers, intelligent email generation, and optional payment initiation. We'll use n8n as the orchestration layer because it offers reliable webhooks, strong conditional logic, and no execution limits on simple workflows like this one. Here's the flow: 1. Invoice data lives in your productivity app (Notion, Airtable, or similar). Each record has client name, amount, invoice date, and payment status.
-
n8n checks this data on a schedule (daily at 09:00 UTC, say) and identifies invoices that are overdue by 14, 30, and 60 days.
-
For each overdue invoice, n8n calls the productivity app's AI chat layer to generate a personalised reminder email tailored to the client relationship and payment history.
-
The generated email is sent via Emailit's REST API, which handles delivery, bounces, and open tracking.
-
If payment is still outstanding at 60 days, n8n notifies Payman AI to initiate an AI-powered payment request, which can include invoice details and gentle payment instructions.
-
All actions are logged back to your invoice tracker, so you have a complete audit trail.
Setting up the trigger in n8n
Create a scheduled workflow that runs daily. Add an "HTTP Request" node with the following configuration to pull invoices from your productivity app:
GET /api/invoices?filter=unpaid&sortBy=invoice_date
Headers: Authorization: Bearer YOUR_API_KEY Content-Type: application/json
This endpoint should return a JSON array of unpaid invoices. The structure might look like:
json
[ { "id": "inv_12345", "clientName": "Acme Corp", "clientEmail": "ap@acme.com", "amount": 2500, "currency": "GBP", "invoiceDate": "2026-01-15", "daysOverdue": 28, "lastReminderSent": "2026-02-10" }
]
Calculating overdue thresholds
Next, add a "Function" node to calculate days overdue and filter by threshold:
javascript
const invoices = $input.all();
const now = new Date(); const filtered = invoices.map(inv => { const invoiceDate = new Date(inv.invoiceDate); const daysOverdue = Math.floor((now - invoiceDate) / (1000 * 60 * 60 * 24)); return { ...inv, daysOverdue, reminderLevel: daysOverdue >= 60 ? 'final' : daysOverdue >= 30 ? 'second' : daysOverdue >= 14 ? 'first' : null };
}); // Return only invoices needing a reminder
return filtered.filter(inv => inv.reminderLevel !== null);
Generating personalised emails with AI
For each overdue invoice, call your productivity app's AI chat endpoint to generate a reminder email. This is where the workflow gets intelligent. Instead of sending a generic template, the AI understands context: how many reminders have been sent, whether the client has a history of late payment, the invoice amount, and the relationship tone. Add an "HTTP Request" node configured like this:
POST /api/ai-chat
Headers: Authorization: Bearer YOUR_API_KEY Content-Type: application/json Body:
{ "threadId": "reminder_{{$node.input.data.id}}", "messages": [ { "role": "user", "content": "Generate a professional but friendly payment reminder email for {{$node.input.data.clientName}}. Invoice ID: {{$node.input.data.id}}, Amount: {{$node.input.data.amount}} {{$node.input.data.currency}}, {{$node.input.data.daysOverdue}} days overdue. This is reminder level: {{$node.input.data.reminderLevel}}. Keep it under 150 words. Output as plain text, no markdown." } ]
}
The productivity app will return the generated email body in the response. The beauty here is that the AI can read previous reminder emails from the thread and adjust tone accordingly. A first reminder is polite; a third is firmer.
Sending emails via Emailit
Once the email is generated, pass it to Emailit using its REST API:
POST https://api.emailit.io/v1/send
Headers: Authorization: Bearer YOUR_EMAILIT_API_KEY Content-Type: application/json Body:
{ "to": "{{$node.input.data.clientEmail}}", "from": "invoices@yourcompany.com", "subject": "Payment Reminder: Invoice {{$node.input.data.id}} ({{$node.input.data.daysOverdue}} days overdue)", "text": "{{$node.generateEmail.data.response}}", "tags": ["invoice-reminder", "{{$node.input.data.reminderLevel}}"], "trackOpens": true, "trackClicks": true
}
Emailit will handle delivery and bounce management automatically. If an email bounces, you can set up a webhook to alert you.
Escalating to payment automation
At the 60-day mark, invoke Payman AI to initiate an AI-powered payment request. This is optional but powerful if you work with clients who respond better to automated systems:
POST https://api.payman.ai/v1/request
Headers: Authorization: Bearer YOUR_PAYMAN_API_KEY Content-Type: application/json Body:
{ "recipientEmail": "{{$node.input.data.clientEmail}}", "recipientName": "{{$node.input.data.clientName}}", "amount": {{$node.input.data.amount}}, "currency": "{{$node.input.data.currency}}", "invoiceId": "{{$node.input.data.id}}", "message": "Final payment request for overdue invoice. Please settle within 48 hours.", "paymentMethods": ["bank_transfer", "card"], "expiresIn": 86400
}
Payman will send a structured payment request with direct payment options, removing friction from the client's side.
Logging actions back
Finally, update your invoice record to log that a reminder was sent:
PATCH /api/invoices/{{$node.input.data.id}}
Body:
{ "lastReminderSent": "{{now}}", "reminderCount": {{$node.input.data.reminderCount + 1}}, "reminderLevel": "{{$node.input.data.reminderLevel}}"
}
This prevents duplicate reminders and creates an audit trail.
The Manual Alternative
If you prefer human judgment at each step, use Zapier instead of n8n. Set up a Zap that sends you a digest email each morning listing overdue invoices. You then write and send reminders manually, but Zapier still logs them. This gives you control over tone and timing whilst removing the data-checking overhead. Alternatively, many accounting platforms like Xero and FreshBooks have built-in payment reminder features. These are simpler than custom workflows but less flexible and can't customise emails with client context.
Pro Tips
Prevent duplicate reminders.
Always check the lastReminderSent timestamp before firing an email.
Add a conditional node that only proceeds if the last reminder was sent more than 7 days ago. This stops clients receiving the same message twice in quick succession.
Monitor delivery rates.
Emailit and Payman both provide webhook callbacks when emails are opened or payment requests are accepted. Wire these into your productivity app so you know which reminders actually landed. A hard bounce means the client email is wrong; update it immediately.
Respect rate limits.
If you have hundreds of invoices, don't send all reminders in one go. n8n lets you add delays between API calls. Insert a "Wait" node with 500ms between each email to avoid hitting rate limits on Emailit (typically 10 requests per second for standard plans).
Customise escalation timing.
Not all clients need the same sequence. Add a client record field for "reminder interval" so premium accounts get reminders at 21 days instead of 14, or contractors skip the 60-day Payman step entirely.
Cost optimisation.
Payman AI charges per request, not by outcome. Only invoke it for invoices above a threshold, say £500, to avoid paying for low-value escalations. Similarly, use Emailit's "text" body rather than HTML templates to stay under higher usage tiers.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| n8n | Cloud Pro (or self-hosted free) | £30 (or £0) | Pros: reliable scheduling, conditional logic. Self-hosted: requires devops effort but no recurring cost. |
| Productivity App (Airtable/Notion) | Plus or Pro tier | £10–£20 | Need API access for automation. Airtable Plus is £10/user. |
| Emailit | Growth (1,000–10,000 emails/month) | £15–£40 | Per-email transactional rates or flat monthly allowance. Tracking adds £5–£10. |
| Payman AI | Pay-as-you-go | £0.10–£0.50 per request | Only charge when invoked at 60 days. High-volume accounts can negotiate annual deals. |
| Total (lean setup) | £55–£100 | Covers most freelancers with 50–200 invoices/month. |