On a schedule
Get a monthly Stripe tax summary in Slack
On the first of each month you see the tax collected on last month's Stripe invoices, broken down by tax rate and region.
- Runs
- On a schedule
- Apps
- Slack, Stripe
- AI
- Not needed
- Access
- Stripe read; chat:write
Send this to your assistant
Create a ClickRuntime automation: on the 1st of every month, total the tax on last month's paid Stripe invoices by tax rate and country, and post the table to #finance.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A small online course business sells to customers in several countries and charges VAT or sales tax through Stripe. Each quarter, the bookkeeper spends an afternoon exporting invoices and building a pivot table to work out how much is owed to each tax authority, and mistakes only appear when the filing is due.
A monthly breakdown of tax collected by rate and region turns that afternoon into a quick check. The figures are ready when the filing window opens, and any odd rate or unexpected country is spotted a month early rather than at the deadline.
What you get out of it
Filings start from a ready number
The amount owed for each tax rate is already totalled. The bookkeeper checks it against Stripe instead of building the report from an export.
Wrong tax settings show up fast
A product missing its tax rate, or a country that should not be charged, appears in the monthly table. Fixing it after one month is far cheaper than after a year.
Finance and founders see the same table
Posting it in a shared channel means the person filing and the person paying both know the amount. Fewer surprises when the payment leaves the account.
A running record in Slack
Each month's summary stays in the channel history. Looking back at last quarter takes a scroll, not a new export.
How it works
What happens, step by step
On the first day of each month, ClickRuntime collects every invoice that was paid in Stripe during the previous month.
It reads the tax lines on each invoice and groups them by tax rate and region.
It totals the tax collected for each group and each currency.
The table is posted to your #finance Slack channel, and a copy is emailed to you.
Before it runs live
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Connect Stripe
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
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Google Sheets
- Combine it with other Slack and Stripe steps into one automation
Under the hood
The code that runs this automation
import stripe
from clickruntime import on_trigger, credentials, notify
import time
from datetime import date
@on_trigger
def run(event):
stripe.api_key = credentials.secret("STRIPE_API_KEY")
first = date.today().replace(day=1)
start = first.replace(year=first.year - 1, month=12) if first.month == 1 else first.replace(month=first.month - 1)
period = {"gte": int(time.mktime(start.timetuple())), "lt": int(time.mktime(first.timetuple()))}
totals = {}
for inv in stripe.Invoice.list(status="paid", created=period, limit=100, expand=["data.total_tax_amounts.tax_rate"]).auto_paging_iter():
for t in inv.total_tax_amounts:
rate = t.tax_rate
key = (rate.display_name, rate.country or rate.jurisdiction or "-", f"{rate.percentage}%", inv.currency.upper())
totals[key] = totals.get(key, 0) + t.amount / 100
lines = [f"{name} {region} {pct}: {amount:,.2f} {cur}" for (name, region, pct, cur), amount in sorted(totals.items())]
text = f"Tax collected {start:%B %Y}\n" + ("\n".join(lines) or "No tax on paid invoices")
notify.slack(text, channel="#finance")
notify.email_me(f"Stripe tax summary {start:%B %Y}", text)
return {"lines": len(lines)}FAQ
Common questions
Does this file my tax returns?
Are one-off payments included, or only invoices?
Can I get it quarterly instead?
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
Post Stripe revenue reports in Slack
Each morning Slack shows yesterday's sales, refunds and net revenue from Stripe, compared with the day before.
See how it worksFind duplicate customers in Stripe
Each day Slack lists any new groups of Stripe customers that share an email address, so you can merge them.
See how it worksTriage billing emails with the customer's Stripe status
New billing emails arrive in Slack already sorted by topic, with the sender's plan and payment status from Stripe beside them.
See how it worksKeep exploring
Set up “Get a monthly Stripe tax summary in Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.