Every 15 minutes
Post paid Harvest invoices to Slack
When a client settles an invoice, your channel sees the client, amount and invoice number within about 15 minutes.
- Runs
- Every 15 minutes
- Apps
- Harvest
- AI
- Not needed
- Access
- read (admin or manager with invoice permission)
Send this to your assistant
Create a ClickRuntime automation: every 15 minutes, look for Harvest invoices marked paid and post the client, amount and invoice number to #finance in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
In a services business, the moment a client pays an invoice matters more than the moment it was sent. A studio owner with a 30-day invoice for $8,400 wants to know when the money lands so they can approve a contractor payout, release a project hold or simply stop worrying. In Harvest the status flips to paid quietly, and unless someone happens to open the Invoices page, finance and project leads hear about it days later, usually when asked.
Every 15 minutes, Harvest is asked for invoices marked paid since the last check. Each one that has not been announced before is posted in Slack with the client name, the amount and the invoice number, and the invoice IDs already handled are saved so you never see the same payment twice.
It suits agencies, consultancies and freelancers who split cash-flow responsibilities between a founder, a bookkeeper and project managers.
What you get out of it
Cash flow decisions are made on facts
A founder who sees a $12,000 payment arrive can approve payroll, a hire or a contractor payout the same afternoon, rather than guessing from the bank balance at month-end. Knowing sooner reduces anxious waiting.
Project holds are lifted promptly
If work was paused until an invoice was settled, the project manager sees the payment and restarts the team the same day. Clients notice quick restarts, and your delivery stays on schedule.
Bookkeeping stays in step
The bookkeeper sees each payment with its invoice number and can reconcile it against the bank feed while it is fresh, which prevents a pile-up of unmatched deposits at quarter end.
Thank-you notes go out while it counts
A short message to the client's accounts contact the day they pay is a small gesture that builds goodwill, and it only happens if somebody knows about the payment in time.
A visible record of who pays quickly
Over weeks the channel becomes a timeline of payments. You can see which clients settle in days and which take months, which informs payment terms for future proposals. Those patterns help when you decide who deserves a deposit up front.
How it works
What happens, step by step
Every 15 minutes, ClickRuntime checks Harvest for invoices that have been marked as paid since the last check.
It skips any invoice it has already announced, so each payment is posted only once.
A message goes to your #finance Slack channel with the invoice number, the client and the amount paid.
Before it runs live
- Connect Harvest
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 Harvest steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timezone
from clickruntime import on_trigger, report_fetched, state, notify, http, credentials
@on_trigger
def run(event):
headers = {"Authorization": "Bearer " + credentials.secret("HARVEST_TOKEN"),
"Harvest-Account-Id": credentials.secret("HARVEST_ACCOUNT_ID"), "User-Agent": "ClickRuntime"}
now = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
since = state.get("since") or now
invoices = http.get("https://api.harvestapp.com/v2/invoices", headers=headers, params={"state": "paid", "updated_since": since}).json()["invoices"]
seen = set(state.get("seen") or [])
new = [i for i in invoices if i["id"] not in seen]
report_fetched(len(new))
if not new:
state.set("since", since)
return {"summary": "No newly paid invoices"}
for i in new:
notify.slack(f"Paid: invoice #{i['number']} from {i['client']['name']}, {i['currency']} {i['amount']:,.2f}", channel="#finance")
state.set("seen", list(seen | {i["id"] for i in new})[-1000:])
state.set("since", now)
return {"posted": len(new)}FAQ
Common questions
Does it announce partial payments?
What stops the same invoice being posted twice?
Can the post tag the person who owns the client?
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
Find out who didn't log their hours yesterday
Each weekday morning your channel lists the people whose tracked time for the previous day fell short.
See how it worksGet Friday's hours by project and person
At the end of each week you receive the hours your team logged, split by project and by person.
See how it worksHear when a project uses 80% of its budget
You get one email for each project that crosses 80% of its budget, early enough to talk to the client.
See how it worksKeep exploring
Set up “Post paid Harvest invoices to Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
