Skip to content

Daily

Catch paid orders that haven't shipped

Each day you see paid orders that are still unfulfilled after 2 days.

Runs
Daily
Apps
Shopify
AI
Not needed
Access
read_orders

Send this to your assistant

Create a ClickRuntime automation: every day at 10am, Slack me Shopify orders that are paid but still unfulfilled more than 48 hours after they were placed.

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 customer paid on Monday and by Thursday has heard nothing. In the store's backlog, their order sits among forty others, each one apparently fine because Shopify shows it as paid. Perhaps stock was miscounted, the pick list missed it, or the person who handles it was out sick. Nobody notices until the customer writes an annoyed email, opens a dispute, or leaves a one-star review that mentions slow shipping.

Each day, ClickRuntime asks Shopify for orders that are paid, still unfulfilled and created more than two days ago, then posts the list to your team's Slack channel with order number, age, customer and total. Orders disappear from the list as soon as they are fulfilled, so the post is a short list of what truly needs attention.

Small teams that ship from a single desk and larger ones with a fulfillment partner can both use it as a safety net.

What you get out of it

  • Late shipments are caught on day three

    A short daily list means a delayed order is noticed while the customer is still waiting patiently, not after they have escalated. A fast apology and ship date often saves the relationship.

  • Hidden problems get exposed

    Orders usually stay unfulfilled for a reason: out of stock, a wrong address, a held payment. Seeing them repeatedly forces someone to find the cause rather than letting them age in the queue.

  • Chargebacks become less likely

    Customers who never receive an order frequently dispute the charge. Shipping or refunding within a few days of payment removes the most common reason for disputes about non-delivery, and the fees that come with them.

  • Review scores are protected

    Slow shipping is a frequent complaint in public reviews. A routine check on aging orders prevents the long tail of waits that turn into complaints on Google, Trustpilot or your product pages.

  • Handovers need no briefing

    When a colleague covers for someone on leave, the daily post tells them exactly which orders are overdue. There is no need to explain a spreadsheet or the informal system the previous person kept.

How it works

What happens, step by step

  1. Every day, the automation looks for Shopify orders that are paid but still not fulfilled.

  2. It keeps the ones placed more than two days ago.

  3. The list is posted to your Slack channel with each order number, customer, total and the date it was placed.

Before it runs live

  • Connect Shopify

What you get

RunsDaily
Catch paid orders that haven't shippedtoday, 9:00Succeeded
Slack · #store2 paid orders unfulfilled after 48h: • #1039 · Dana Ruiz · 84.00 · placed 2026-10-16

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.
unfulfilled_order_reminder.pyexample
from datetime import datetime, timedelta, timezone
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"]


@on_trigger
def run(event):
    cutoff = (datetime.now(timezone.utc) - timedelta(hours=48)).strftime("%Y-%m-%dT%H:%M:%SZ")
    orders = gql("""query($q: String!) { orders(first: 100, query: $q) { nodes { name createdAt
        customer { displayName } totalPriceSet { shopMoney { amount } } } } }""",
        {"q": f"financial_status:paid fulfillment_status:unfulfilled created_at:<{cutoff}"})["orders"]["nodes"]
    if not orders:
        return {"late": 0}
    lines = [f"• {o['name']} · {(o['customer'] or {}).get('displayName', 'guest')} · "
             f"{float(o['totalPriceSet']['shopMoney']['amount']):,.2f} · placed {o['createdAt'][:10]}" for o in orders]
    notify.slack(f"{len(orders)} paid orders unfulfilled after 48h:\n" + "\n".join(lines), channel="#store")
    return {"late": len(orders)}

FAQ

Common questions

Does it include orders waiting on payment?
No. Only orders Shopify marks as paid and unfulfilled appear. Pending or unpaid orders are not your obligation to ship yet, so leaving them out keeps the list focused on customers who have paid and are waiting.
Can I change the two-day threshold?
Yes. A store that promises same-day dispatch might use one day, while one that makes products to order might use a week. Tell your AI assistant the window and the query will use it from the next run.
What about partially fulfilled orders?
Orders with some items shipped are marked partially fulfilled in Shopify and are not matched by the unfulfilled filter. If you also want those listed because the remaining items are late, a second condition can be added.
What permissions does it need?
read_orders. 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 (daily). 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 “Catch paid orders that haven't shipped” from your assistant

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