Back to Alchemy
Alchemy RecipeBeginnerautomation

Build a freelancer business dashboard for invoicing, payments and late-payment chasing

You send an invoice on the 15th. By the 45th, you're checking your bank account obsessively. By day 60, you're drafting your third reminder email. By day 90, you've lost both the money and the will to follow up. This pattern repeats across ten clients, and suddenly you've got thousands of pounds sitting in accounts that aren't yours, chasing them taking up as much time as the actual work. The core problem isn't laziness. It's friction. Most freelancers track invoices in spreadsheets or scattered emails, set phone reminders for follow-ups, manually write each chase email, and cross their fingers. When a client finally pays, there's no automated confirmation or update to your records. When they don't respond, you're back to square one. You're doing administrative work that machines could handle in seconds. What if your invoices sent themselves payment reminders at the right intervals, payment notifications automatically updated your records, and overdue chase emails drafted themselves? You'd reclaim weeks every year and probably collect faster too.

The Automated Workflow

We'll use n8n as the orchestration backbone because it handles scheduled triggers, conditional logic, and API calls without vendor lock-in. The workflow will track invoice due dates, send automated reminders at day 14 and day 30 past due, generate personalised chase emails, and record payment confirmations.

Setting up the core trigger.

In n8n, create a new workflow with a Cron trigger that runs daily at 9am. This checks whether any invoices need action.

Trigger type: Cron
Expression: 0 9 * * *
Timezone: Europe/London

This fires every morning and loads a database of your active invoices. You'll store this data in a simple structure: invoice ID, client name, amount, issue date, due date, status (unpaid/pending/paid), email address, and last reminder sent date.

Fetching invoice data.

Connect your trigger to an n8n HTTP Request node that pulls invoice data from a source. If you're using a spreadsheet (Google Sheets or Airtable), use their REST APIs. If you have invoicing software, check whether it has webhooks or an API. For Airtable:

Method: GET
URL: https://api.airtable.com/v0/YOUR_BASE_ID/Invoices?filterByFormula={Status}='Unpaid'
Headers: Authorization: Bearer YOUR_AIRTABLE_TOKEN Content-Type: application/json

The response returns all unpaid invoices. n8n will loop through each one in the next step.

Calculating days overdue.

Use an n8n Function node to calculate whether each invoice is due for a reminder. This logic is simple: compare today's date against the due date, then check the "last reminder sent" field.

javascript
const daysOverdue = Math.floor( (new Date() - new Date(item.json.dueDate)) / (1000 * 60 * 60 * 24)
); const lastReminderDaysAgo = item.json.lastReminderDate ? Math.floor( (new Date() - new Date(item.json.lastReminderDate)) / (1000 * 60 * 60 * 24) ) : 999; const shouldRemind = (daysOverdue === 14 && lastReminderDaysAgo > 7) || (daysOverdue === 30 && lastReminderDaysAgo > 20); return { ...item.json, shouldRemind, daysOverdue };

This ensures you don't send duplicate reminders within a week of the previous one.

Generating personalised emails with ChatGPT.

For invoices that should trigger a reminder, pass the invoice details to GPT-4o via the OpenAI API. ChatGPT Writer can draft these, but for full automation, call the API directly.

POST https://api.openai.com/v1/chat/completions { "model": "gpt-4o", "messages": [ { "role": "user", "content": "Write a professional but friendly payment reminder email for a freelancer. Client name: {{clientName}}, invoice amount: £{{amount}}, due date: {{dueDate}}, days overdue: {{daysOverdue}}. Keep it to 3 sentences. Do not include a subject line." } ], "temperature": 0.7, "max_tokens": 150
}

n8n receives the generated email body and you can append your standard closing and signature.

Sending emails via SMTP or API.

Route the generated email through your email provider. If you use Gmail or Outlook, use their SMTP settings via n8n's Email node. For more control, use SendGrid or Mailgun. Gmail example:

SMTP Host: smtp.gmail.com
Port: 587
Username: your-email@gmail.com
Password: your-app-specific-password
Recipient: {{clientEmail}}
Subject: Payment Reminder: Invoice #{{invoiceID}} ({{daysOverdue}} days overdue)
Body: {{generatedEmailBody}}

Recording the reminder and updating status.

After the email sends successfully, update your invoice record to log the reminder date. This prevents duplicate sends.

Method: PATCH
URL: https://api.airtable.com/v0/YOUR_BASE_ID/Invoices/{{invoiceRecID}}
Headers: Authorization: Bearer YOUR_AIRTABLE_TOKEN Content-Type: application/json Body:
{ "fields": { "lastReminderDate": "{{now}}", "reminderCount": {{reminderCount + 1}} }
}

Handling payment confirmations.

Create a separate n8n workflow triggered by a webhook. When a payment arrives in your bank account or payment processor (Stripe, PayPal, Wise), it sends a webhook to n8n. n8n matches the payment amount and client to the unpaid invoice, then updates the status to "Paid". Webhook endpoint setup in n8n:

POST /webhook/payment-received Expected payload:
{ "amount": 500.00, "reference": "Invoice-1234", "timestamp": "2026-03-15T14:32:00Z"
}

Match this against your Airtable invoices table and mark as paid:

Method: PATCH
URL: https://api.airtable.com/v0/YOUR_BASE_ID/Invoices/{{recordID}} Body:
{ "fields": { "status": "Paid", "paidDate": "{{paymentTimestamp}}" }
}

Optional: Payman AI for split invoices.

If you work on shared projects and need to pay collaborators from client invoices, use Payman AI. It can automatically initiate payments to team members once you mark an invoice as paid. Configure it as a final step in your payment confirmation workflow.

The Manual Alternative

If you prefer human control at each step, use your productivity app (Notion, Monday.com, or Asana) with built-in reminders. Set up a view showing overdue invoices, and add a manual reminder task that fires at day 14 and day 30. You draft each email yourself in ChatGPT Writer (paste the invoice details, ask for a template, copy the result into your email client). Update each invoice status manually when payment arrives. This takes 15 to 20 minutes per day but lets you personalise each message. Trade-off: slower and more labour, but you maintain full control.

Pro Tips

Error handling and rate limits.

ChatGPT's API has rate limits.

If you have more than 50 invoices, batch your email generation requests across the day rather than sending them all at once. Add retry logic in n8n: if the API call fails, wait 60 seconds and try again, up to 3 times. For email delivery, test with one client first before rolling out to all of them.

Cost-effective model choice.

Use GPT-4o mini instead of GPT-4o for email generation. It's cheaper and perfectly adequate for straightforward reminder templates. Reserve GPT-4o for complex scenarios like negotiating payment plans or writing legally careful collection emails.

Avoid double-sends.

The "last reminder sent" field is crucial. If your Cron job runs twice in one day or n8n retries a failed workflow, you'll send duplicate emails without it. Always check this field before sending.

Customise by days overdue.

Vary your reminder tone based on how late payment is. At 14 days overdue, a friendly "just checking in" works. At 45 days overdue, a firmer tone is appropriate. Update your GPT prompt to reflect this.

Track cash flow impact.

Add a dashboard view showing total unpaid invoice value, average days to payment, and payment receipt rate. This helps you spot clients who consistently pay late and renegotiate payment terms or require upfront deposits.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
n8nCloud Professional£40Includes 10,000 executions; most freelancers stay well under this
OpenAI API (GPT-4o mini)Pay-as-you-go£2–5~£0.00015 per email generated at scale; 50 emails per month = ~£0.01
AirtablePlus£20Supports API calls and automation; 5GB storage
Gmail SMTPFree or Workspace£0–60Free if using personal account; Workspace recommended for business
Payman AIFree tier available£0–customFree up to 10 transactions; custom pricing for higher volume
Total£62–125Covers 50+ invoices monthly with full automation