On a schedule
Get a weekly Slack report of rising and slowing products
Every Monday your team sees which categories and SKUs sold more or less than usual last week, with the ones at risk called out.
- Runs
- On a schedule
- Apps
- Slack, WooCommerce
- AI
- Optional
- Access
- Woo read; chat:write
Send this to your assistant
Create a ClickRuntime automation: every Monday, compare last week's WooCommerce sales by category and SKU with the previous four weeks and post what's rising, what's slowing and any risky SKUs to #sales.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Total revenue can look steady while a once-reliable product quietly fades and a new one takes off. A store owner glancing at weekly totals misses both, and ends up overstocked on the fading line and short on the rising one.
A weekly trend report breaks sales down by category and SKU against the recent average, so buying, promotion and listing decisions follow what customers are actually doing.
What you get out of it
Spot slow decline early
A product selling 30% less each week is easy to miss in a total. Seeing it by name gives time to discount, promote or stop reordering.
Back the winners
Rising SKUs are visible within a week, so you can increase stock and ad spend while demand is growing.
Smarter buying
Purchase orders can follow four-week trends instead of gut feel, which reduces both dead stock and sell-outs.
A short written read
Optional AI commentary turns the table into two or three plain sentences the whole team can follow.
How it works
What happens, step by step
Every Monday morning, ClickRuntime fetches last week's paid WooCommerce orders.
It adds up units sold for each product and category.
It compares each figure with the average of the previous four weeks, which it keeps from earlier reports.
If AI is available, it writes a two-sentence summary of what changed.
It posts the rising and slowing products, and any at-risk SKUs, to #sales in Slack.
Before it runs live
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Connect WooCommerce
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 Slack and WooCommerce 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, state, notify, ai
STORE = "https://shop.example.com/wp-json/wc/v3"
@on_trigger
def run(event):
auth = (credentials.secret("WOO_KEY"), credentials.secret("WOO_SECRET"))
end = date.today() - timedelta(days=date.today().weekday())
orders = http.get(f"{STORE}/orders", auth=auth, params={"after": f"{end - timedelta(days=7)}T00:00:00",
"before": f"{end}T00:00:00", "status": "processing,completed", "per_page": 100}).json()
week = Counter()
for o in orders:
for li in o["line_items"]:
week[li.get("sku") or li["name"]] += li["quantity"]
past = state.get("weeks") or []
avg = {k: sum(w.get(k, 0) for w in past) / len(past) for k in set(week).union(*past)} if past else {}
rising = [f"{k} {week[k]} (avg {a:.0f})" for k, a in avg.items() if a and week[k] > 1.3 * a]
risky = [f"{k} {week[k]} (avg {a:.0f})" for k, a in avg.items() if a >= 3 and week[k] < 0.6 * a]
text = f"Last week: {sum(week.values())} units\nRising: {', '.join(rising) or 'none'}\nAt risk: {', '.join(risky) or 'none'}"
try:
text += "\n" + ai.generate(f"Summarise these sales trends in two plain sentences:\n{text}", max_output_tokens=120).text
except ai.AIError:
pass
notify.slack(text, channel="#sales")
state.set("weeks", (past + [dict(week)])[-4:])
return {"skus": len(week)}FAQ
Common questions
How is a trend calculated?
What makes a SKU risky?
Does it need AI?
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 yesterday's store sales to Slack every morning
Each morning your team sees yesterday's orders, revenue and best sellers in Slack, with a warning when revenue is far above or below normal.
See how it worksGet a daily Slack list of products running low
Every day your team sees which WooCommerce products have dropped below 10 in stock, so you reorder before they sell out.
See how it worksPost the matching order to Slack when a refund or dispute arrives
When a refund request or chargeback comes in, your finance channel sees the WooCommerce order it belongs to, with items, dates and shipping status.
See how it worksKeep exploring
Set up “Get a weekly Slack report of rising and slowing products” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.