Skip to content

On a schedule

Get yesterday's sales every morning

Each morning you see yesterday's order count, total sales and top products.

Runs
On a schedule
Apps
Shopify
AI
Not needed
Access
read_orders (read)

Send this to your assistant

Create a ClickRuntime automation: every day at 8am, email me how many Shopify orders I got yesterday, total sales, how many are paid and fulfilled, and the top 5 products.

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

Every morning a store owner opens Shopify to find out how yesterday went, clicks through Analytics, switches the date range, and tries to remember what the comparison was last week. It takes several minutes, and on busy mornings it does not happen at all, so a drop in orders or a surprise bestseller goes unnoticed for days. Staff who are not given admin access never see the numbers, and so they cannot connect their own work to the results.

Each morning the automation queries yesterday's orders, adds up revenue and order count, splits the orders by paid and fulfilled, ranks the line items by sales, and emails the summary to you and anyone else on the list. It runs on the schedule you choose. Store owners, marketers and operations staff use it to start the day with the same short view of the store's performance.

What you get out of it

  • The day starts with the numbers

    Yesterday's revenue and orders are waiting when you open your email. No clicking through Analytics means the review actually happens, even on days when everything is hectic. By the time the first coffee is ready you know whether yesterday's orders rose or fell.

  • Top products are clear

    The ranking of line items shows what sold best. You can restock a bestseller before it runs out and feature it in the next email or on the homepage. Seeing a $19 accessory outsell the flagship product tells you what to restock first.

  • Paid and fulfilled split shows backlog

    Seeing how many orders are paid but not yet fulfilled tells the warehouse what is waiting. A growing gap means shipping is falling behind, and you can respond that morning.

  • Staff see results without admin access

    Anyone on the list gets the figures without needing a Shopify login. Marketing and packing staff can see how their work connects to sales, which keeps the team engaged. A packer or marketer who has no Shopify login still sees how yesterday's work turned into revenue.

  • A dated history of sales

    The daily emails build into a record of how the store performed each day. Looking back at a promotion or a slow week is a matter of searching your inbox.

How it works

What happens, step by step

  1. Every morning at 8 in your store's time zone, the automation collects yesterday's Shopify orders.

  2. It totals the number of orders and sales, and how many were paid and fulfilled.

  3. It ranks the products by how many were sold.

  4. You get an email with the totals and your top products.

Before it runs live

  • Connect Shopify

What you get

RunsOn a schedule
Get yesterday's sales every morningtoday, 9:00Succeeded
Email · Shopify sales for 2026-10-18Orders: 23 · Sales: 1,948.50 · Paid: 22 · Fulfilled: 17 Top products: 9 × Pour-Over Kit, 6 × Filter Papers x100

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
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Shopify 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.
daily_sales_summary_email.pyexample
from collections import Counter
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, http, notify

STORE = "your-store.myshopify.com"

def gql(query, variables=None):
    resp = http.post(f"https://{STORE}/admin/api/2025-07/graphql.json",
                     headers={"X-Shopify-Access-Token": credentials.connection("shopify", "store")},
                     json={"query": query, "variables": variables or {}})
    resp.raise_for_status()
    return resp.json()["data"]

QUERY = """query($q: String!) { orders(first: 250, query: $q) { nodes {
  displayFinancialStatus displayFulfillmentStatus totalPriceSet { shopMoney { amount currencyCode } }
  lineItems(first: 50) { nodes { title quantity } } } } }"""

@on_trigger
def run(event):
    day = date.today() - timedelta(days=1)
    orders = gql(QUERY, {"q": f"created_at:>={day} created_at:<{date.today()}"})["orders"]["nodes"]
    total = sum(float(o["totalPriceSet"]["shopMoney"]["amount"]) for o in orders)
    paid = sum(o["displayFinancialStatus"] == "PAID" for o in orders)
    fulfilled = sum(o["displayFulfillmentStatus"] == "FULFILLED" for o in orders)
    top = Counter()
    for o in orders:
        for li in o["lineItems"]["nodes"]:
            top[li["title"]] += li["quantity"]
    lines = [f"Orders: {len(orders)}", f"Sales: {total:,.2f}", f"Paid: {paid} · Fulfilled: {fulfilled}", "", "Top products:"]
    lines += [f"  {qty} × {title}" for title, qty in top.most_common(5)]
    notify.email_me(f"Shopify sales for {day}", "\n".join(lines))
    return {"orders": len(orders), "sales": total}

FAQ

Common questions

What time period does 'yesterday' cover?
The calendar day in your store's time zone, from midnight to midnight. If you sell mostly in another time zone, the day will not match your customers' day exactly, so choose the store setting that fits your business.
Does revenue include refunds and shipping?
You can choose. Gross sales, net of refunds, and totals with or without shipping and tax are all possible, and the email states which one it uses, so the number matches what you expect from your own reports.
Can I send it to several people with different content?
Yes. You can send the full summary to the owner and a shorter version, such as only top products, to a marketer. Each email can have its own recipient and content, set up in a single request to your AI assistant.
What permissions does it need?
read_orders (read). Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's 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 “Get yesterday's sales every morning” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.