The moment it happens
Get emailed about large new expenses
Any expense over your limit reaches your inbox the moment it is logged, so nothing big slips by.
- Runs
- The moment it happens
- Apps
- FreshBooks
- AI
- Not needed
- Access
- user:expenses:read
Send this to your assistant
Create a ClickRuntime automation: when a new expense over $500 is added in FreshBooks, email me the vendor, category, amount and who logged it.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A freelancer, a small business owner and a bookkeeper all share the same worry about expenses: something unexpected gets logged, and no one catches it until the month-end review. A staff member books a four-figure software subscription, a card payment is entered under the wrong vendor, or a personal purchase slips into the business books. By the time the books are reconciled, the money is spent and the chance to question it has passed.
When an expense is logged in FreshBooks, the app sends a callback to ClickRuntime, which checks the amount against the threshold you choose and emails you if it is above. Small everyday expenses stay quiet, so the message appears only when the amount is worth a look.
It works best for owners who approve spending but do not enter it themselves.
What you get out of it
Question large purchases while reversible
An email about a large expense arrives the day it is logged. You can ask what it was for while a refund or cancellation is still possible. Small leaks add up over a year.
Keep personal spending out of the books
Seeing unusual items soon after they are entered discourages mistakes and helps staff learn what belongs in the business ledger. Mistakes are corrected while they are still easy to explain.
Reduce month-end surprises
The reconciliation at month-end no longer holds unwelcome discoveries. You have already seen anything large, so the review is faster and calmer. Fewer reviews end with an awkward question about old spending.
Strengthen control without bureaucracy
A threshold alert is a light form of approval for small teams. It adds oversight without forms, sign-offs or a purchasing system. Owners keep control without slowing anyone down or adding paperwork.
Spot errors in amounts or vendors
A figure with an extra zero or a vendor you do not recognize stands out in a short alert. Fixing a typo is easy now and awkward after tax filings. Correcting a bad figure now avoids confusion when taxes are prepared later.
How it works
What happens, step by step
When an expense is logged in FreshBooks, FreshBooks tells ClickRuntime straight away.
ClickRuntime checks the amount against the limit you set and ignores anything below it.
Expenses over the limit reach your inbox with the amount, vendor and category.
Before it runs live
- Connect FreshBooks
- Paste your automation's link into the other app's webhook settings
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 FreshBooks steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, credentials, http, notify
FB = "https://api.freshbooks.com"
def fb():
token = credentials.connection("freshbooks", "work")
headers = {"Authorization": f"Bearer {token}"}
me = http.get(f"{FB}/auth/api/v1/users/me", headers=headers).json()["response"]
return headers, me["business_memberships"][0]["business"]["account_id"]
@on_event
def handle(event):
data = event.json or {}
headers, account = fb()
if "verifier" in data: # one-time callback verification
http.put(f"{FB}/events/account/{account}/events/callbacks/{data['callback_id']}", headers=headers,
json={"callback": {"verifier": data["verifier"]}})
return {"verified": True}
if data.get("name") != "expense.create":
return {"skipped": data.get("name")}
base = f"{FB}/accounting/account/{account}/expenses"
exp = http.get(f"{base}/expenses/{data['object_id']}", headers=headers).json()["response"]["result"]["expense"]
amount = float(exp["amount"]["amount"])
if amount <= 500:
return {"skipped": "under 500"}
cat = http.get(f"{base}/categories/{exp['categoryid']}", headers=headers).json()["response"]["result"]["category"]
notify.email_me(f"New expense: {amount:,.2f} at {exp['vendor']}",
f"Vendor: {exp['vendor']}\nCategory: {cat['category']}\nAmount: {amount:,.2f} {exp['amount']['code']}\nLogged by staff #{exp['staffid']}")
return {"expense_id": data["object_id"]}FAQ
Common questions
How do I set the amount threshold?
Does it include the receipt?
Will edits to an expense trigger another alert?
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
Hear in Slack when a client pays
As soon as a FreshBooks payment is recorded, your team sees the client, invoice and amount in Slack.
See how it worksAnnounce new FreshBooks clients in Slack
Each time someone adds a client, the team gets the name and company in a channel so onboarding can start.
See how it worksGet a weekly list of overdue FreshBooks invoices
Every Monday you see which clients are late and the total still owed, without running a report.
See how it worksKeep exploring
Set up “Get emailed about large new expenses” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
