On a schedule
Post a weekly Shopify sales report in Slack
Every Monday Slack shows last week's orders, revenue and best sellers, with a short comment on what changed.
- Runs
- On a schedule
- Apps
- Shopify, Slack
- AI
- Optional
- Access
- Shopify read_orders; Slack chat:write
Send this to your assistant
Create a ClickRuntime automation: every Monday at 9, post last week's Shopify orders, revenue, average order value and top 5 products to #team, with a one-line comment comparing it to the week before.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A small homeware brand has five people: two on marketing, one on customer service, one packing orders and the founder. Only the founder looks at Shopify analytics, so the team hears about a great week or a slow one second-hand, if at all.
A weekly report in Slack gives everyone the same view on Monday morning. Marketing sees whether last week's email moved sales, the packer knows which products to stock up on, and the week starts with a shared sense of how the store is doing.
What you get out of it
The whole team sees the results
People who do not use Shopify analytics still see orders, revenue and best sellers. Effort and results are connected for everyone, not just the owner.
Best sellers guide the week
The top products list tells marketing what to promote and operations what to restock. Decisions start from last week's real demand.
Week-on-week change is called out
A short comment points out what went up or down compared with the week before. Small trends get noticed before they become big ones.
A record in the channel
Every report stays in Slack history, so comparing this month with last quarter is a quick scroll. No one needs to rebuild old reports.
How it works
What happens, step by step
Every Monday morning, ClickRuntime collects last week's orders from your Shopify store.
It adds up orders, revenue and average order value, and finds the best-selling products.
It compares the totals with the previous week, which it remembers from the last report.
AI adds a one-line comment on what changed, if you turn it on.
The report is posted in your #team Slack channel.
Before it runs live
- Connect Shopify
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
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
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Google Sheets
- Combine it with other Shopify and Slack steps into one automation
Under the hood
The code that runs this automation
from datetime import date, timedelta
from collections import Counter
from clickruntime import on_trigger, credentials, http, notify, state, ai
STORE = "your-store.myshopify.com"
def gql(query, variables=None):
resp = http.post(f"https://{STORE}/admin/api/2025-07/graphql.json", json={"query": query, "variables": variables or {}},
headers={"X-Shopify-Access-Token": credentials.connection("shopify", "store")})
return resp.raise_for_status() or resp.json()["data"]
Q = """query($q: String!, $after: String) { orders(first: 100, query: $q, after: $after) { pageInfo { hasNextPage endCursor }
nodes { totalPriceSet { shopMoney { amount } } lineItems(first: 50) { nodes { title quantity } } } } }"""
@on_trigger
def run(event):
end = date.today() - timedelta(days=date.today().weekday())
q, after, revenue, count, items = f"created_at:>={end - timedelta(days=7)} created_at:<{end} -status:cancelled", None, 0.0, 0, Counter()
while True:
page = gql(Q, {"q": q, "after": after})["orders"]
for o in page["nodes"]:
count += 1
revenue += float(o["totalPriceSet"]["shopMoney"]["amount"])
items.update({li["title"]: li["quantity"] for li in o["lineItems"]["nodes"]})
if not page["pageInfo"]["hasNextPage"]:
break
after = page["pageInfo"]["endCursor"]
prev = state.get("last") or {}
text = f"Last week: {count} orders, {revenue:,.2f} revenue, {revenue / max(count, 1):,.2f} average\nTop: " + ", ".join(f"{t} ({n})" for t, n in items.most_common(5))
try:
text += "\n" + ai.generate(f"This week {count} orders {revenue:.0f}; last week {prev}", system="One short sentence on the change.", max_output_tokens=60).text
except (ai.AINotIncluded, ai.AILimitReached):
pass
notify.slack(text, channel="#team")
state.set("last", {"orders": count, "revenue": round(revenue)})
return {"orders": count}FAQ
Common questions
Are cancelled or refunded orders counted?
Can I get the report daily instead?
Is the comment required?
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 low-stock warnings from Shopify in Slack
Each morning Slack lists the products that will run out within two weeks at their current sales rate.
See how it worksDraft a weekly blog post about one of your products
Each week a new blog draft about one of your products appears in Shopify, and Slack tells you it is ready to review.
See how it worksGet a Slack alert when orders stop or ship late
Slack tells you when no orders have come in for longer than usual, or when paid orders are waiting too long to ship.
See how it worksKeep exploring
Set up “Post a weekly Shopify sales report in Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.