Skip to content

On a schedule

Get a morning list of tickets open for over 3 days

Each morning you see which tickets have been waiting too long, grouped by assignee.

Runs
On a schedule
Apps
Zendesk
AI
Not needed
Access
read

Send this to your assistant

Create a ClickRuntime automation: every weekday at 8am, email me the Zendesk tickets that have been unsolved for more than 3 days, grouped by assignee, with links.

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 support lead at a 12-person SaaS company opens Zendesk on Monday and the oldest open ticket is nine days old. It was assigned to someone who went on vacation, and the customer has written twice. Views help only if someone looks at them, and agents focus on the newest tickets because those feel urgent. Older ones slide to the bottom of the queue and customers stop waiting politely.

Each morning, Zendesk is searched for tickets that are not solved and were created more than three days ago. They are grouped by assignee and an email goes out with one section per person, each ticket carrying its subject and a direct link. Unassigned tickets are listed together so they do not vanish.

It works well for team leads who run a morning standup and want a list ready before it starts.

What you get out of it

  • Nothing sits unnoticed for a week

    A three-day threshold catches tickets before customers escalate to a cancellation or a chargeback. The lead sees the oldest items first thing, while there is still time to recover. It also shows how many tickets that is.

  • Workload gaps become visible

    Grouping by assignee shows that one agent carries 14 aging tickets while another carries two. That makes rebalancing a five-minute conversation instead of a discovery during a quarterly review. Recovery is far easier than apologizing after a churn notice.

  • Standups start with facts

    Instead of asking who has what, the team reads the list and picks. Meetings shorten because the problem tickets are already named, linked and attributed to a person. A shared list also builds accountability, because everyone reads the same names.

  • Absences stop causing silent backlogs

    When an agent is out sick, their open tickets still appear under their name every morning. Someone else can pick them up without waiting for the customer to complain. Leads can reassign tickets before the day begins.

  • Reply times improve with evidence

    Tracking how many aging tickets show up each morning gives managers a simple trend to bring to staffing discussions, backed by a record rather than an impression. Over months, the count becomes a metric you can set a target for.

  • Training gaps show up

    If the same agent's tickets keep aging, that points to a coaching need or an over-full queue, and a lead can act on it with specifics. Reading the list also reminds leads which customers have been waiting longest, so personal outreach happens before the complaint arrives.

How it works

What happens, step by step

  1. Every morning, ClickRuntime finds Zendesk tickets that are still unsolved more than three days after they were opened.

  2. It groups them by the agent they are assigned to.

  3. You get an email listing each agent's aging tickets with their numbers and subjects.

Before it runs live

  • Connect Zendesk

What you get

RunsOn a schedule
Get a morning list of tickets open for over 3 daystoday, 9:00Succeeded
Email · Aging ticketsPriya #4712 Bulk import fails at row 500

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 Zendesk 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.
aging_unsolved_tickets_alert.pyexample
from datetime import date, timedelta
from clickruntime import on_trigger, http, credentials, notify

ZD = "https://yourcompany.zendesk.com/api/v2"
AGENT_EMAIL = "you@yourcompany.com"

def zd(method, path, **kw):
    r = http.request(method, f"{ZD}{path}", auth=(f"{AGENT_EMAIL}/token", credentials.secret("ZENDESK_API_TOKEN")), **kw)
    r.raise_for_status()
    return r.json() if r.content else None

@on_trigger
def run(event):
    cutoff = (date.today() - timedelta(days=3)).isoformat()
    tickets = zd("GET", "/search.json", params={"query": f"type:ticket status<solved created<{cutoff}", "per_page": 100})["results"]
    users = {}
    by_agent = {}
    for t in tickets:
        aid = t.get("assignee_id")
        if aid and aid not in users:
            users[aid] = zd("GET", f"/users/{aid}.json")["user"]["name"]
        by_agent.setdefault(users.get(aid, "Unassigned"), []).append(
            f"  #{t['id']} {t['subject']} https://yourcompany.zendesk.com/agent/tickets/{t['id']}")
    body = "\n\n".join(f"{a}\n" + "\n".join(rows) for a, rows in sorted(by_agent.items()))
    notify.email_me(f"{len(tickets)} tickets unsolved for 3+ days", body or "None.")
    return {"aging": len(tickets)}

FAQ

Common questions

Does a ticket on hold or pending count as unsolved?
The search looks for tickets whose status is not solved, so new, open, pending and on-hold tickets are all included. If you only want open ones, the search can be narrowed to that status. Pending and on-hold tickets stay in the list too, since neither means solved.
Can I change the three-day cutoff to five days?
Yes. The age filter is a single value in the Zendesk search, so a different cutoff or a limit to one group or priority is a small edit your AI assistant can make for you. The new version is shown for approval before it runs. Add a priority filter if you only care about high-priority tickets going stale. It can also be limited to a single group.
What happens to tickets with no assignee?
They are not dropped. Tickets without an assignee are collected into their own group in the email, since unassigned and old is often the worst combination to miss. The lead can then hand them out. If you run several support groups, a separate list per group keeps the email readable.
What permissions does it need?
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 a morning list of tickets open for over 3 days” from your assistant

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