On a schedule
Post Stripe revenue reports in Slack
Each morning Slack shows yesterday's sales, refunds and net revenue from Stripe, compared with the day before.
- Runs
- On a schedule
- Apps
- Slack, Stripe
- AI
- Not needed
- Access
- Stripe read (restricted key); chat:write
Send this to your assistant
Create a ClickRuntime automation: every morning at 8, post yesterday's Stripe revenue to #finance: gross sales, refunds and net, per currency, compared with the day before.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A founder of a subscription software business checks Stripe several times a day out of habit, while the rest of the team has no idea whether last week was good or bad. Revenue only comes up in the monthly meeting, when it is too late to react to a slow week or a run of refunds.
A short revenue post in Slack each morning gives everyone the same number at the same time. Sales sees whether a campaign worked, support notices when refunds jump, and the founder stops being the only person who knows.
What you get out of it
One shared number for the team
Everyone reads the same figures from the same source, so there is no debate about which dashboard is right. Conversations start from the facts instead of from guesses.
Refunds are visible next to sales
Gross sales alone can look healthy while refunds quietly rise. Seeing both on one line, with the net result, shows the real picture every day.
Changes stand out early
The comparison with the previous day makes a sudden drop or spike obvious. A broken checkout or a successful launch shows up the next morning, not at month end.
No one needs Stripe access
People who should see revenue but should not manage billing get the numbers in Slack. Fewer logins to Stripe means less risk of someone changing the wrong setting.
How it works
What happens, step by step
Every morning, ClickRuntime collects yesterday's payments and refunds from your Stripe account.
It adds them up for each currency, giving gross sales, refunds and net revenue.
It compares the totals with the previous day, which it remembers from the last report.
A short summary is posted in your #finance Slack channel.
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, state
from datetime import datetime, timedelta, timezone
@on_trigger
def run(event):
stripe.api_key = credentials.secret("STRIPE_API_KEY")
end = datetime.now(timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0)
period = {"gte": int((end - timedelta(days=1)).timestamp()), "lt": int(end.timestamp())}
totals = {}
for tx in stripe.BalanceTransaction.list(created=period, limit=100).auto_paging_iter():
if tx.type in ("charge", "payment", "refund", "payment_refund"):
t = totals.setdefault(tx.currency.upper(), {"sales": 0, "refunds": 0})
t["refunds" if "refund" in tx.type else "sales"] += abs(tx.amount) / 100
previous = state.get("previous") or {}
lines = []
for cur, t in sorted(totals.items()):
net = t["sales"] - t["refunds"]
before = previous.get(cur)
change = f" ({net - before:+,.2f} vs day before)" if before is not None else ""
lines.append(f"{cur}: sales {t['sales']:,.2f}, refunds {t['refunds']:,.2f}, net {net:,.2f}{change}")
notify.slack("Stripe revenue yesterday\n" + ("\n".join(lines) or "No payments"), channel="#finance")
state.set("previous", {c: t["sales"] - t["refunds"] for c, t in totals.items()})
return {"currencies": len(totals)}FAQ
Common questions
Can I get weekly or monthly totals instead of daily?
Are Stripe fees taken off?
What time zone does the day follow?
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 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.
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 “Post Stripe revenue reports in Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.