How much time do you spend each month crafting invoices, hunting down clients for payment confirmations, and sending "friendly reminders" to those who've gone quiet? For most freelancers, the answer is probably weeks of billable hours converted into administrative drudgery. You finish a project, hand over the deliverables, then enter a second, unpaid job: invoice generation, delivery, follow-up, and payment chasing. This workflow is uniquely painful because it's repetitive yet requires minor customisation for each client. You can't just use a template; you need to adjust amounts, dates, descriptions, and payment terms. Then you send it via email, wait for silence, send a reminder, wait again, and eventually escalate. Meanwhile, your actual work sits uncompensated whilst you play accounts department. The good news is that this entire process can be automated. You can wire together an AI writing assistant, a persistent reminder system, and a transactional email service so that invoices are generated on schedule, sent automatically, tracked, and chased without you lifting a finger.
The Automated Workflow
The strategy here is to build a workflow that triggers on a schedule, uses AI to generate invoice text based on your project data, sends the invoice via email, and then sets up automatic follow-ups at intervals you define. We'll use n8n as the orchestration layer because it handles both scheduled triggers and conditional logic well, plays nicely with email services, and lets us call out to Claude for content generation. Here's what the workflow looks like: 1. Scheduled trigger fires on a day you choose (e.g. last day of the month).
-
Query or fetch your project data (from a spreadsheet, database, or even a simple JSON payload).
-
Call Claude via API to generate professional invoice text and calculate totals.
-
Format the invoice as HTML and send via Emailit.
-
Log the send in your productivity app (for visibility) and set a reminder to follow up in 7 days if payment hasn't arrived.
Setting up n8n and the trigger
First, create a new workflow in n8n and add a cron trigger that fires on your preferred schedule:
Cron expression: 0 9 28 * *
(9 AM on the 28th of every month)
Fetching project data
Add an HTTP Request node to pull your project details. If you're using a Google Sheet, use the Sheets API. If you have a simple database, query it directly. For this example, assume you have a JSON endpoint that returns unpaid projects:
GET /api/projects?status=unpaid
Response: [ { "client_name": "Acme Corp", "project_name": "Website Redesign", "hours": 40, "hourly_rate": 75, "due_date": "2026-04-15", "client_email": "accounts@acme.com" }, { "client_name": "Beta Ltd", "project_name": "Copywriting Overhaul", "hours": 20, "hourly_rate": 85, "due_date": "2026-04-20", "client_email": "finance@beta.ltd" }
]
Generating invoice text with Claude
Use the Claude API node in n8n to build your invoice. Create a prompt that feeds in the project data and asks Claude to generate professional invoice language:
system: "You are a professional invoicing assistant. Generate clear, formal invoice text. Include invoice number, date, due date, itemised breakdown, total, and payment instructions. Be concise and professional." user: "Generate an invoice for the following project:
Client: {{$node.HTTP_Request.json.client_name}}
Project: {{$node.HTTP_Request.json.project_name}}
Hours: {{$node.HTTP_Request.json.hours}}
Rate: ${{$node.HTTP_Request.json.hourly_rate}}/hour
Due: {{$node.HTTP_Request.json.due_date}}
Invoice number: INV-2026-{{$now.getTime()}}"
Use Claude Opus 4.6 for this task. It's reliable for structured output and handles the professional tone well without padding. Call the Claude API endpoint:
[POST](/tools/post) https://api.anthropic.com/v1/messages
Content-Type: application/json
Authorization: Bearer YOUR_ANTHROPIC_KEY { "model": "claude-opus-4.6", "max_tokens": 1024, "messages": [ { "role": "user", "content": "Generate an invoice..." } ]
}
Converting to HTML and sending via Emailit
In n8n, use a Function node to wrap Claude's output in basic HTML:
javascript
const invoiceText = $node.Claude_Request.json.content[0].text;
const html = `
<html> <body style="font-family: Arial, sans-serif; max-width: 600px;"> <h1>Invoice</h1> ${invoiceText} <p>Please remit payment to [your payment details].</p> </body>
</html>
`;
return [{html: html}];
Then add an Emailit node. Configure it to use your Emailit API key and send to the client's email address:
POST https://api.emailit.io/v1/send
Content-Type: application/json
Authorization: Bearer YOUR_EMAILIT_KEY { "to": "{{$node.HTTP_Request.json.client_email}}", "subject": "Invoice: {{$node.HTTP_Request.json.project_name}}", "html": "{{$node.Function_Node.json.html}}", "from": "invoices@yourname.com"
}
Logging and setting reminders
Add a second HTTP node to log the invoice send to your productivity app (e.g. one with a REST API for task creation). Then use the app's reminder feature directly to schedule a follow-up notification for 7 days out. Alternatively, create a second workflow triggered by webhook that fires 7 days after the first invoice send, then sends a payment reminder email using the same Emailit setup.
Handling late payments
For accounts overdue by 14 days, create a conditional branch in your main workflow:
IF invoice_sent_date + 14 days < TODAY THEN send follow-up reminder email AND add task to your productivity app to manually chase the client
ENDIF
The Manual Alternative
If you prefer more control or want to preview each invoice before sending, modify the workflow to stop before the Emailit step. Instead, have n8n generate the invoice and save it to a folder, send you a notification in your productivity app with a link to review, and require your approval before the email goes out. This adds a manual gate but gives you confidence that every invoice is correct before it leaves your desk. Alternatively, use HyperWrite to help you draft invoice reminders on the fly when you spot a late payment. It's faster than writing from scratch and ensures consistent, professional tone across all your communications.
Pro Tips
Rate limits and batching
Emailit and Claude both have rate limits.
If you're invoicing hundreds of clients at once, batch the API calls. In n8n, use the Split in Batches node to process 10 invoices at a time with a 1-second delay between batches.
Cost saving with model choice
Claude Opus 4.6 is powerful but pricier. If your invoices are simple and templates work, consider using Claude Haiku 4.5 instead. It's faster and costs less but is still capable enough for invoice generation. Test both and measure latency; you might find Haiku is sufficient.
Error handling for failed sends
If Emailit fails to send an email (bad address, rate limit), the workflow should not silently fail. Add error catching to the Emailit node so that failed sends are logged to a spreadsheet or database. Check that spreadsheet weekly and manually resend from your email client.
Audit trail
Log every invoice sent, along with the exact text sent and the timestamp, to a Google Sheet or database. This protects you if there's a dispute about what was invoiced or when.
Currency and tax
If you invoice internationally or need to add tax, feed that into your Claude prompt. For example: "This is a US-based invoice with 6% sales tax" or "This is a UK invoice; include VAT if applicable." Claude will calculate accordingly.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| n8n | Pro (cloud-hosted) | $30 | Covers up to 100k workflow executions; well within freelancer needs |
| Claude API (Anthropic) | Pay-as-you-go | $2–5 | ~$0.003 per 1k input tokens, ~$0.015 per 1k output tokens; invoice generation is cheap |
| Emailit | Starter or Standard | $29–79 | Depends on email volume; Starter is 5k/month, Standard is 50k/month |
| Productivity app | Varies | £5–15 | Depends on your choice; assumption is a low-tier plan for reminders and task logging |
| Total | £70–130 | One-time setup, then recurring automation |