Skip to content

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.

Paste it into your assistant. It tells you what it will send or change before it runs live.

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

  1. Every Monday morning, ClickRuntime collects last week's orders from your Shopify store.

  2. It adds up orders, revenue and average order value, and finds the best-selling products.

  3. It compares the totals with the previous week, which it remembers from the last report.

  4. AI adds a one-line comment on what changed, if you turn it on.

  5. 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

RunsOn a schedule
Post a weekly Shopify sales report in Slacktoday, 9:00Succeeded
Slack · #teamLast week: 142 orders, 9,860.00 revenue, 69.44 average Top: Linen cushion cover (38), Oak serving board (21)

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
weekly_shopify_sales_report_in_slack.pyexample
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?
Cancelled orders are left out. Revenue uses each order's current total, so refunds already processed reduce it.
Can I get the report daily instead?
Yes. Ask for a daily run and it will report on the previous day, compared with the same day a week earlier.
Is the comment required?
No. The comment is written by AI from the totals and is optional. Without it you still get the numbers and the top products.
What permissions does it need?
Shopify read_orders; Slack chat:write. Nothing else in your accounts is used.
Does it need AI?
No, but you can ask for an AI step (for example a summary). It then uses ClickRuntime's built-in AI allowance.
How many runs does it use?
One run each time it runs (on a schedule). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

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.