Skip to content

Every 15 minutes

Get a Slack ping when a Wave invoice is paid

Within a quarter of an hour of an invoice turning paid, you see the customer and amount in Slack.

Runs
Every 15 minutes
Apps
Wave
AI
Not needed
Access
full access token

Send this to your assistant

Create a ClickRuntime automation: every 15 minutes, check my Wave invoices and post to #payments in Slack whenever one changes to paid, with the customer, invoice number and amount.

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

A freelance designer or a two-person bookkeeping shop invoices through Wave and then keeps refreshing the Invoices page to see whether a client has paid. Payment can land through a card, a bank transfer or a manual entry, and Wave does not push a message to the team when the status flips to Paid. Work waits on money that already arrived, or a reminder goes out to a client who settled the bill yesterday.

Every fifteen minutes the automation queries your Wave invoices with their status, compares each one with the status it stored last time, and posts a message whenever an invoice has changed to Paid. The post names the invoice number, the customer and the amount so you can act on it without opening Wave.

It suits owner-operators who start the next phase of a project only after a deposit clears, and bookkeepers who watch several small clients.

What you get out of it

  • Start work the hour the deposit lands

    Many projects begin only after the first invoice is paid. A message within fifteen minutes of the status change lets you schedule the kickoff the same day instead of discovering the payment two days later and losing momentum.

  • No awkward reminders to paying clients

    Chasing a client who already paid is embarrassing and costs goodwill. Seeing Paid status in your feed means your follow-up list only contains invoices that are genuinely outstanding, so every reminder you send is justified.

  • Cash position without logging in

    Each notice carries the amount, so a quick scroll of the channel tells you roughly how much came in this week. That is useful when deciding whether to pay a contractor, buy software or wait until next Friday.

  • Shared visibility for a small team

    A partner or assistant who does not have access to Wave still sees which invoices were settled, so nobody has to interrupt the owner to ask whether the Henderson invoice is paid before they release the files.

  • A dated record of payments

    The channel history shows when each invoice flipped to Paid. When a client disputes timing or an accountant asks for dates, you have the answer without digging through Wave reports or bank statements.

How it works

What happens, step by step

  1. Every 15 minutes ClickRuntime checks the status of your Wave invoices.

  2. It compares each status with what it saw last time, so it only reacts to invoices that have just turned paid.

  3. For each newly paid invoice, your Slack channel gets the invoice number, customer and amount.

Before it runs live

  • Connect Wave

What you get

RunsEvery 15 minutes
Get a Slack ping when a Wave invoice is paidtoday, 9:00Succeeded
Slack · #paymentsPaid: invoice 1087 from Northwind Traders, 1250.00 USD

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
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Wave 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.
invoice_paid_alert_wave.pyexample
from clickruntime import on_trigger, credentials, http, notify, state, report_fetched

BUSINESS_ID = "your-wave-business-id"

def wave(query, variables=None):
    token = credentials.connection("wave", "work")
    resp = http.post("https://gql.waveapps.com/graphql/public", headers={"Authorization": f"Bearer {token}"},
                     json={"query": query, "variables": {"biz": BUSINESS_ID, **(variables or {})}})
    return resp.json()["data"]["business"]

QUERY = """query($biz: ID!) { business(id: $biz) { invoices(status: PAID, sort: [MODIFIED_AT_DESC], pageSize: 50) {
  edges { node { id invoiceNumber customer { name } total { value currency { code } } } } } } }"""

@on_trigger
def run(event):
    paid = [e["node"] for e in wave(QUERY)["invoices"]["edges"]]
    seen = state.get("paid_ids")
    new = [i for i in paid if seen is not None and i["id"] not in seen]
    report_fetched(len(new))
    if seen is not None and not new:
        return {"posted": 0}
    for inv in new:
        notify.slack(f"Paid: invoice {inv['invoiceNumber']} from {inv['customer']['name']}, "
                     f"{inv['total']['value']} {inv['total']['currency']['code']}", channel="#payments")
    state.set("paid_ids", [i["id"] for i in paid])
    return {"posted": len(new)}

FAQ

Common questions

Does it catch invoices marked as paid manually in Wave?
Yes. The check compares invoice status, so any invoice that becomes Paid is reported whether the money arrived through Wave Payments or a person recorded the payment by hand. The message does not say which method was used, only that the status changed.
Will I be alerted about partial payments?
Partial payments leave the invoice in a partially paid state rather than Paid, so they would not trigger this message. Ask for the check to include that partial status if you want to hear about deposits that cover only part of the bill.
Does the first run flood the channel with old paid invoices?
No. The first run stores the current statuses as a baseline without posting anything. After that, only invoices that changed to Paid since the previous check are announced, so your history of already-settled invoices stays out of the channel entirely.
What permissions does it need?
full access token. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's 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 “Get a Slack ping when a Wave invoice is paid” from your assistant

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