Back to Alchemy
Alchemy RecipeBeginnerautomation

Freelancer invoice automation with payment tracking and late-payment chase sequences

Most freelancers have a spreadsheet somewhere. Some have several. One tracks what they've invoiced; another records who's paid; a third reminds them to chase the overdue accounts. By the time a payment is actually late, they've already spent more time chasing it than they spent earning it. The cash flow suffers, the admin grows, and the work itself gets neglected. The good news is that this entire process can be automated with minimal setup. An invoice doesn't need a human to remember it exists. A payment doesn't need a human to nudge it along. And a late payment certainly doesn't need a human to send polite, escalating reminder emails. Wire together a handful of tools that already exist, and you've got a system that works while you sleep. This is where Alchemy comes in. Instead of jumping between apps and sending emails by hand, you'll build a workflow that automatically creates reminders for unpaid invoices, generates personalised chase emails through AI, and sends them via your chosen email provider. Everything triggers off a single event: an invoice that hasn't been paid by its due date.

The Automated Workflow

You'll want to pick an orchestration tool that handles scheduled checks well. Zapier works fine for simple cases, but n8n or Make give you more control over timing and conditional logic without bumping costs as you scale. For this workflow, we'll use n8n because it's cheap to self-host and the scheduling features are straightforward. The flow works like this: every morning, n8n checks your productivity app (Notion, Airtable, or similar) for invoices with a due date that's passed. For each unpaid invoice, it pulls the client's name, invoice amount, and days overdue. It then feeds that data into ChatGPT Writer to generate a personalised email. The email is sent via Emailit, which handles the transactional side cleanly. Finally, a follow-up reminder gets added to your productivity app so you know which invoices have been chased.

Setting up the n8n workflow

Start by creating a new workflow in n8n. Your first node is a Cron trigger that runs daily at 08:00 UTC (or whenever you prefer).

Cron: 0 8 * * * (every day at 08:00)

Next, add a node that queries your data source. If you're using Airtable, connect your Airtable account and filter for records where the "Due Date" is in the past and "Status" is not "Paid".

Airtable Query:
- Table: Invoices
- Filter: AND({Due Date} < today(), {Status} != "Paid")
- Fields: Client Name, Invoice Amount, Invoice Number, Days Overdue

The Days Overdue field is useful for escalation logic later. If an invoice is 30+ days overdue, you might send a firmer message than if it's 5 days over. Now add a code node to calculate the number of days overdue for each invoice, if your data source doesn't already provide it.

javascript
// Calculate days overdue for each invoice
return items.map(item => { const dueDate = new Date(item.json.dueDate); const today = new Date(); const daysOverdue = Math.floor((today - dueDate) / (1000 * 60 * 60 * 24)); return { ...item.json, daysOverdue: daysOverdue };
});

Next, add a ChatGPT Writer node. This generates the email body based on the invoice details. ChatGPT Writer works as a plugin or API integration depending on your setup; n8n can call it via OpenAI's API using GPT-4o mini for cost efficiency.

Prompt:
"Write a professional but friendly payment reminder email. Client name: {{clientName}}
Invoice amount: {{invoiceAmount}}
Invoice number: {{invoiceNumber}}
Days overdue: {{daysOverdue}} If days overdue is less than 10, keep the tone light and assume it's an oversight. If 10-20 days, be a bit more direct. If over 20 days, escalate slightly but remain professional. Keep it to 150 words maximum."

The node will return the generated email text in output.text. Store this in a variable for the next step.

Set variable: emailBody = {{$node["ChatGPT"].data.text}}

Now add an Emailit node to send the email. You'll need an Emailit account and API key.

Emailit Node Configuration:
- To: {{clientEmail}}
- From: yourbusiness@yourdomain.com
- Subject: Payment Reminder: Invoice {{invoiceNumber}}
- Body: {{emailBody}}
- Authenticate using: API Key

After the email is sent, update your data source to record that a reminder was sent. Add an Airtable Update node.

Airtable Update:
- Table: Invoices
- Record ID: {{invoiceId}}
- Fields to Update: - Last Reminder Sent: {{now}} - Reminder Count: {{reminderCount + 1}} - Status: "Reminder Sent"

Finally, add an optional Payman AI node if you want to automate micro-payments or refunds to clients (if relevant to your workflow). For most freelancers, this step is skipped, but Payman can simplify cross-border payments if you work with payment processing.

Data flow summary

Data moves through the workflow like this: Cron trigger fires; Airtable query returns unpaid, overdue invoices; code node enriches the data; ChatGPT generates the email; Emailit sends it; Airtable is updated to track that a reminder was sent. No manual steps, no copy-pasting, no forgetting.

Setting up a nested reminder sequence

For more sophisticated workflows, use your productivity app's built-in reminder features alongside the orchestration tool. For example, in Notion or Airtable, add a "Last Reminder Sent" timestamp. Then in n8n, add a conditional branch: if the last reminder was sent more than 7 days ago and the invoice is still unpaid, send another reminder.

Conditional Logic:
- If (today - lastReminderSent > 7 days) AND (status != "Paid") - Then: Send escalated reminder - Else: Skip this invoice

This creates a natural escalation without bombarding clients with emails.

The Manual Alternative

If you prefer more control over each email, you can skip ChatGPT Writer and draft templates yourself. Replace the ChatGPT node with a simple data look-up that selects from pre-written email templates based on days overdue. Store templates in Airtable or a Google Sheet, and n8n references them directly.

Template Selection:
- If daysOverdue < 10: Use template "gentle_reminder"
- If daysOverdue < 20: Use template "firm_reminder"
- If daysOverdue >= 20: Use template "escalation_notice"

You'll type these once and reuse them. It's slightly more work to set up, but you have full control over tone and wording. For many freelancers, this is the better choice if client relationships are delicate or communication style matters.

Pro Tips

1. Handle invalid or missing email addresses gracefully.

Before sending, add a validation node that checks whether the client email is present and formatted correctly. If it's missing, skip that record and log it for manual review.

javascript
if (!item.json.clientEmail || !item.json.clientEmail.includes('@')) { return null; // Skip this record
}
return item;

2. Respect email rate limits.

Emailit has rate limits depending on your plan. If you're sending 50 reminders in one morning, spread them out. Add a delay node between each send to avoid hitting the limit.

Node: Wait
- Amount: 2
- Unit: seconds
(This pauses 2 seconds between each email)

3. Track which reminders actually worked.

Log successful sends to a Slack channel or a "Sent Reminders" table. This helps you spot patterns; if a client never responds to email reminders, you know to try a phone call instead.

4. Use Claude Opus 4.6 for client-facing communication if tone is critical.

Claude Opus 4.6 is better at matching brand voice than GPT-4o mini. If your client communication is a brand differentiator, the extra cost is worth it. For generic reminders, GPT-4o mini is fine.

5. Avoid re-sending the same email immediately.

Add a check to your logic: if a reminder was sent in the last 3 days, don't send another one today. This is handled in the conditional logic step.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
n8nCloud (or self-hosted free)£0–25Cloud pricing scales with workflows; self-hosting is free but requires a server
AirtablePro£12–20Free tier works but lacks some API features; Pro is recommended
ChatGPT Writer / OpenAI APIPay-as-you-go£5–15GPT-4o mini costs roughly £0.15 per 1M tokens; 100 emails per month is minimal
EmailitBasic +£15–30Includes 10,000 emails/month; higher tiers for volume senders
Payman AIOptional£0–20Only needed if automating payments; otherwise skip
Productivity app (Notion, Airtable)Varies£10–80You likely already use one; count only incremental cost