Skip to content

Collects as they arrive, acts daily

Chase overdue invoices automatically

Clients with overdue invoices get polite reminders from your email, firmer after 30 days, and finance sees a daily summary in Slack.

Runs
Collects as they arrive, acts daily
Apps
Gmail, Slack
AI
Optional
Access
Gmail gmail.send; Slack chat:write

Send this to your assistant

Create a ClickRuntime automation: give me a link my accounting tool can send invoices to. Every morning, email a reminder for each overdue invoice, use a firmer tone after 30 days, and post a summary to #finance.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

Chasing late payments is one of the most uncomfortable parts of running a small business. Invoices go out, due dates pass and a finance person has to remember who is late, how late, and how firmly to word the nudge. Some clients get reminded three times, others never, and the cash that was supposed to arrive on the first of the month turns up in the middle of the next.

As invoice emails arrive, they are stored. Each day, the ones past due are picked out and a reminder goes from Gmail, with wording that depends on the stage, such as a friendly nudge at 3 days and a firmer note at 14. Finance gets a daily Slack summary of who was reminded.

Freelancers, agencies and small finance teams without a collections tool find it most useful.

What you get out of it

  • Cash arrives sooner

    A prompt, polite reminder is often all a client needs to pay, and collecting invoices a week earlier improves cash flow without any hard conversation. Healthy cash flow also reduces the stress of paying your own bills.

  • Tone matches how late the invoice is

    Early reminders are gentle while later ones are firmer, so long-term clients are not offended and persistent late payers get a clear message. That keeps relationships intact while still protecting your income.

  • No client is forgotten or over-chased

    Stage tracking means every overdue invoice gets the right reminder at the right time, instead of random reminders when someone happens to remember. Consistency alone often shortens average payment time noticeably.

  • Finance sees one daily summary

    A Slack post listing who was reminded gives the team a view of overdue exposure at a glance, which supports decisions about pausing work for a client. Decisions about continuing work can be made with real numbers.

  • Reminders come from your own address

    Messages sent from your Gmail look personal and reach the person who matters, which gets better responses than a generic billing system address. The personal touch tends to get a quick human reply.

How it works

What happens, step by step

  1. Each time an invoice is sent to ClickRuntime, it records the client, email, amount, due date and status.

  2. Every morning it picks out the unpaid invoices that are past their due date.

  3. Each client gets a polite reminder from your Gmail, with a firmer one once the invoice is more than 30 days late.

  4. A summary appears in your #finance Slack channel listing each reminder sent, the amount and how many days late it is.

Before it runs live

  • Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail
  • Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
  • Paste your automation's link into the other app's webhook settings

What you get

RunsCollects as they arrive, acts daily
Chase overdue invoices automaticallytoday, 9:00Succeeded
Slack · #financeSent 2 invoice reminders • Northwind Traders INV-2291: $4,800, 34 days late (firm) • Acme Corp INV-2304: $1,250, 6 days late

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Act only on the items that match your own rules, and skip the rest
  • Change what the AI looks for, or how it writes the result
  • Add another app, for example also send it to Google Sheets
  • Combine it with other Gmail and Slack steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
overdue_invoice_reminder_emails_with_a_slack_summary.pyexample
import base64
from datetime import date
from email.message import EmailMessage
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_event, on_trigger, credentials, state, notify

@on_event
def handle(event):
    inv = event.json or {}
    invoices = state.get("invoices") or {}
    invoices[inv["number"]] = {k: inv.get(k) for k in ("email", "client", "amount", "due_date", "status")}
    state.set("invoices", invoices)
    return {"stored": inv["number"]}

@on_trigger
def run(event):  # every morning
    gmail = build("gmail", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
    invoices, lines = state.get("invoices") or {}, []
    for number, inv in invoices.items():
        late = (date.today() - date.fromisoformat(inv["due_date"])).days
        if inv["status"] == "paid" or late <= 0:
            continue
        firm = late > 30
        msg = EmailMessage()
        msg["To"], msg["Subject"] = inv["email"], f"{'Final reminder' if firm else 'Reminder'}: invoice {number}"
        msg.set_content(f"Hi {inv['client']},\n\nInvoice {number} for {inv['amount']} was due on {inv['due_date']}. "
                        + ("It is now over 30 days overdue. Please pay within 7 days." if firm else
                           "Could you let us know when we can expect payment?") + "\n\nThanks")
        gmail.users().messages().send(userId="me", body={"raw": base64.urlsafe_b64encode(msg.as_bytes()).decode()}).execute()
        lines.append(f"• {inv['client']} {number}: {inv['amount']}, {late} days late{' (firm)' if firm else ''}")
    if lines:
        notify.slack(f"Sent {len(lines)} invoice reminders\n" + "\n".join(lines), channel="#finance")
    return {"reminders": len(lines)}

FAQ

Common questions

How does it know an invoice is overdue?
It stores the invoice's due date when the email arrives and compares it with today each day. Anything past its due date and not marked paid is considered overdue and moves to the next reminder stage.
How do paid invoices stop receiving reminders?
Once an invoice is marked paid in the stored list, it is skipped. You can mark invoices paid by replying to the automation, or by having a payment email update the record when it arrives.
How many reminders will a client get?
That is up to you. A common pattern is three: a friendly one after 3 days, a firmer one at 14 and a final notice at 30. You choose the stages and wording, and the cap prevents endless nagging.
What permissions does it need?
Gmail gmail.send; Slack chat:write. Nothing else in your accounts is used.
Does it need AI?
No, but you can ask for an AI step (for example a summary). It then uses ClickRuntime's built-in AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Chase overdue invoices automatically” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.