Back to Alchemy
Alchemy RecipeIntermediatestack

Build a freelancer business dashboard for invoicing, payment tracking, and automated payment chasing with reminders

You're three weeks into a project with a client. The work is done, the invoice sent. Two weeks later, you're still waiting for payment. You send a polite reminder. Nothing. Another week passes. Now you're chasing them down with emails that take fifteen minutes each to compose, searching your files for the original invoice details, wondering if they actually received it. Meanwhile, you have four other invoices in various stages of lateness, and you're tracking them all in a spreadsheet that you update manually when you remember to check your inbox. This is the freelancer's tax on cash flow. You're not just managing projects; you're running an unpaid collections department out of your email client. The irony is sharp: your business can't grow if you're spending hours each week on payment follow-up that adds no value and generates no revenue. The solution isn't a new accounting app. You don't need another dashboard to log into. What you need is a system that watches your unpaid invoices, spots the ones approaching their due date, and sends intelligent, contextual reminders to your clients without you lifting a finger. When that reminder lands, it should feel personal, not automated. And when a payment does come in, the system should update your records and adjust your follow-up schedule accordingly. This workflow combines a productivity app with reminder and nested AI chat capabilities, an email delivery service, and a summarisation tool to create a fully automated payment-chasing system. It requires some initial setup, but once running, it cuts manual work from hours per week to almost zero. For more on this, see Freelancer invoice automation: generate, send, and chase .... For more on this, see Developer cost tracking dashboard: Monitor AI assistant s....

The Automated Workflow

The core logic is straightforward: monitor unpaid invoices, trigger reminders at the right moment, and send emails that sound like they came from a real person who knows your business. You'll use n8n as your orchestration layer. It's more flexible than Zapier for this particular workflow and doesn't require intermediate tools to do the heavy lifting. Here's the data flow: 1. Your productivity app (one with reminder and nested AI chat functionality) holds your invoice records: client name, amount, invoice date, due date, payment status.

  1. n8n polls this data daily, identifies invoices that are now 3 days overdue and haven't been chased yet.

  2. For each overdue invoice, n8n queries Claude Opus 4.6 to generate a personalised reminder email based on the invoice details and your business context.

  3. The email is sent via Emailit's REST API.

  4. The productivity app is updated to log that a reminder has been sent, preventing duplicate emails. Let's build this step by step.

Setting up your productivity app as the source of truth

Your invoices live in your productivity app. Each invoice record should include at minimum: client name, invoice number, amount, due date, payment status (unpaid, paid, overdue). You can add optional fields like project description or service type; these help the AI generate more contextual emails.

Creating the n8n workflow

Start by adding a Schedule Trigger node set to run daily at 9 AM. This is your heartbeat.

Schedule Trigger
├─ Interval: Daily
├─ Time: 09:00
└─ Timezone: Europe/London

Next, add a node that connects to your productivity app via its API. Most productivity apps expose a REST endpoint or have native n8n connectors. Query for all unpaid invoices where the due date is in the past and where no reminder has been sent in the last 7 days. The query might look like this:

GET /api/invoices?filter=status:unpaid&filter=dueDate:<today&filter=lastReminder:>7daysAgo

(Adjust the endpoint syntax to match your actual app's API documentation.) Add a Filter node to ensure you're only processing invoices that are genuinely overdue. Add a second condition to exclude any invoice marked as "disputed" or "payment pending" to avoid chasing clients who are actively resolving the issue. Now add an AI Chat node. This is where the magic happens. You'll use Claude Opus 4.6, which has good understanding of tone and context. Configure it like this:

Model: Claude Opus 4.6
System Prompt: You are an email copywriter for a freelancer's invoice reminders. Write friendly, professional reminder emails that sound personal, not automated. Include the invoice number, amount, and due date. Keep tone professional but warm. Do not be aggressive or threatening. End with a clear call to action (e.g. "Please let me know if you need a copy of the invoice or have any questions"). User Message Template:
Client name: {clientName}
Invoice number: {invoiceNumber}
Amount: {amount}
Due date: {dueDate}
Days overdue: {daysOverdue}
Project/service: {projectDescription} Write a reminder email for this overdue invoice. Do not include a subject line, only the email body.

Wire the filter output into this AI Chat node. The node will generate a custom email body for each invoice. Add a second AI Chat node (or configure the first one to output both) to generate the email subject line. The subject should be straightforward and not sound like spam:

System Prompt: You are an email subject line writer. Generate a single, clear subject line for a payment reminder email. It should be professional and include the invoice number. Do not use urgency language like "URGENT" or "ACTION REQUIRED". Keep it under 50 characters. User Message Template:
Invoice number: {invoiceNumber}
Amount: {amount}
Client: {clientName}
Days overdue: {daysOverdue} Generate only the subject line, nothing else.

Now add an Emailit node. Configure it to use Emailit's REST API endpoint:

[POST](/tools/post) /v1/send
Content-Type: application/json
Authorization: Bearer YOUR_EMAILIT_API_KEY { "to": "{clientEmail}", "from": "invoices@yourname.com", "subject": "{generatedSubjectLine}", "html": "<p>{generatedEmailBody}</p><p>Thank you,<br/>Your Name</p>", "replyTo": "you@yourname.com"
}

Finally, add an Update node that writes back to your productivity app, marking that a reminder has been sent for this invoice and recording the timestamp:

PATCH /api/invoices/{invoiceNumber}
{ "lastReminder": "{currentTimestamp}", "reminderCount": "{reminderCount + 1}"
}

Set the workflow to run daily. That's your entire system. From here on, it operates without manual intervention.

Optional: add a second reminder layer

If you want to be more aggressive, add another workflow that triggers 10 days after the first reminder. This one uses the same structure but with a slightly firmer tone in the Claude prompt. You might also include Smmry to analyse any previous email conversations with the client (if you've logged them) to avoid sounding repetitive.

The Manual Alternative

Not everyone wants their payment follow-up fully automated. Some freelancers prefer to send reminders manually but want the time-saving convenience of pre-written, personalised templates. Set up the same n8n workflow, but stop after the Claude nodes. Instead of sending via Emailit automatically, have n8n drop the generated email into a dedicated Slack channel or send it to you as a summary email with a "send" button link. You review the tone, add any personal context, and send it yourself. This gives you control without sacrificing the intelligence of the AI-generated copy.

Pro Tips

Template burnout

If you send many reminders, Claude will eventually generate emails that repeat the same phrasing.

Mitigate this by varying the system prompt. Create three versions: friendly, formal, and direct. Have n8n pick one at random based on how many times a particular invoice has been reminded.

Rate limiting and costs

Claude Opus 4.6 isn't the cheapest model for high-volume tasks, but for a freelancer chasing 5-20 invoices per month, the cost is negligible. If you're sending more than 100 reminders per month, switch to Claude Sonnet 4.6 or Claude Haiku 4.5 for better value.

Webhook fallback

If your productivity app doesn't have a reliable polling API, set up a webhook instead. When you mark an invoice as unpaid in the app, it fires a webhook to n8n that triggers the workflow immediately instead of waiting for the daily schedule. This keeps your payments fresher.

Payment reconciliation

Set up a separate workflow that monitors your bank account or payment processor API. When a payment comes in, it automatically matches the amount to an invoice in your productivity app and marks it as paid. This prevents the system from sending reminders for invoices that were actually paid but not yet recorded.

Client preference tracking

Add a field to your client records: "preferred reminder frequency" (weekly, bi-weekly, monthly). Have n8n respect this and skip reminders for clients who've asked not to be contacted repeatedly. This keeps relationships intact.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
n8nFree or Self-Hosted£0–30Free tier supports ~3,000 tasks/month; self-hosted is one-time cost. Pro plan at £30/month if you need hosting.
EmailitStandard£25–50Depends on email volume; ~10,000 emails/month included in base plan.
Claude API (via Anthropic)Pay-as-you-go£2–5Opus 4.6 costs ~£0.30 per 1M input tokens. ~10 reminders at ~200 tokens each = ~£0.60/month.
Smmry (optional)Free or Pro£0–15Free tier includes basic summarisation. Pro adds API access. Only needed if you're analysing email threads.
Your productivity appExisting planAlready payingNo additional cost; assumes you're already using it.
Total£27–100Highly dependent on email volume and whether you self-host n8n.