Hourly
Post new Wave customers to Slack
When a customer is added in Wave, their details appear in Slack within the hour.
- Runs
- Hourly
- Apps
- Wave
- AI
- Not needed
- Access
- full access token
Send this to your assistant
Create a ClickRuntime automation: every hour, look for customers added in Wave since the last check and post each one's name and email to #sales in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
In Wave a customer record can appear from several directions: you add one while drafting an invoice, a bookkeeper imports a list, or an online payment form creates one. Nobody else on the team hears about it. The person handling onboarding emails, contracts or the welcome call only finds out when the customer writes in asking why nothing has happened since they agreed to work together.
Once an hour the automation queries your Wave customers, compares their IDs with the list it remembers, and posts each new customer to Slack with the name and email address. It records the new IDs afterward so each customer is announced one time only, even if you edit the record later.
This is a good fit for agencies and consultancies where a new customer in the books should trigger a human follow-up, such as a welcome message or a kickoff call.
What you get out of it
Onboarding starts when the record exists
A Slack message the same hour a customer is added means the welcome email or call is scheduled right away, which keeps the first impression prompt for someone who has just agreed to pay you for your work.
Sales and delivery stay in sync
The person who closed the deal often creates the customer record, and the person who delivers the work never sees it. The channel closes that gap without a separate handoff message that somebody has to remember to write.
Catches records created by import
When a bookkeeper imports twenty customers from a spreadsheet, each one appears in the feed. You can spot duplicates or typos in names right away rather than at invoice time, when correcting them is more awkward.
Early check on data quality
Seeing name and email in the post makes mistakes visible: a missing email address, a company entered as a person. Fixing it before the first invoice avoids bounced invoice emails and a delayed payment.
A simple log of customer growth
Scrolling the channel shows how many customers were added each month, a rough growth signal that does not need a report, a spreadsheet or someone to count records inside Wave.
How it works
What happens, step by step
Every hour ClickRuntime checks your customer list in Wave.
It compares the list with the customers it has already seen, so each one is posted only once.
Each new customer's name and email goes to your Slack channel.
Before it runs live
- Connect Wave
What you get
Build your own
Need it to work differently?
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
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) { customers(page: 1, pageSize: 50, sort: [CREATED_AT_DESC]) {
edges { node { id name email createdAt } } } } }"""
@on_trigger
def run(event):
customers = [e["node"] for e in wave(QUERY)["customers"]["edges"]]
seen = state.get("customer_ids")
new = [c for c in customers if seen is not None and c["id"] not in seen]
report_fetched(len(new))
if seen is not None and not new:
return {"posted": 0}
for c in new:
notify.slack(f"New Wave customer: {c['name']} ({c.get('email') or 'no email'})", channel="#sales")
state.set("customer_ids", list(set(seen or []) | {c["id"] for c in customers}))
return {"posted": len(new)}FAQ
Common questions
How does it avoid announcing my existing customers?
Is a customer imported from a CSV announced as well?
Can the message include the customer's phone number or address?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
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.
See how it worksEmail yourself overdue Wave invoices every Monday
The week starts with one email listing each late invoice and how much is still due.
See how it worksGet a Friday summary of invoices you sent
At the end of each week you have a record of every invoice created in Wave and the total billed.
See how it worksKeep exploring
Set up “Post new Wave customers to Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
