Skip to content

Every 30 minutes

Spot upsell chances in support tickets

Support tickets that hint at a bigger need are flagged, logged as a note and task in Zoho CRM, and emailed to sales.

Runs
Every 30 minutes
Apps
Gmail, Zoho CRM
AI
Yes, uses the built-in AI allowance
Access
Zoho write; gmail.send

Send this to your assistant

Create a ClickRuntime automation: every hour, read new support tickets. When one suggests the customer needs more seats, a higher plan or another product, add a note and a follow-up task to their Zoho record and email sales about it.

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 software company's support team hears every day from customers who've outgrown their plan: 'we've added ten more staff', 'can we connect our second warehouse?'. Those comments sit in the help desk and never reach sales, so upgrades happen late or not at all.

New tickets are now read every hour for signs of growth. Likely upsells get a note and a task on the customer's Zoho record, and sales gets an email with the ticket and why it looks like an opportunity.

What you get out of it

  • Sales hears what support hears

    Growth signals buried in tickets reach the people who can act on them.

  • Upgrades offered at the right time

    A customer asking about more seats is ready to talk about a bigger plan now, not next quarter.

  • Tracked in the CRM

    Each opportunity becomes a task with an owner and due date, not a forwarded email that gets lost.

  • Support keeps helping, not selling

    The support team doesn't need to change how they work; the flagging happens on its own.

How it works

What happens, step by step

  1. Every hour, ClickRuntime fetches support tickets created since the last check.

  2. AI reads each one and scores how likely it is to be an upsell opportunity.

  3. For likely ones, a note and a follow-up task are added to the customer's record in Zoho CRM.

  4. Sales gets an email with the ticket and the reason, and each ticket is only looked at once.

Before it runs live

  • Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail
  • Connect Zoho CRM

What you get

RunsEvery 30 minutes
Spot upsell chances in support ticketstoday, 9:00Succeeded
Email · Upsell signalNorthwind Retail asked how to add 12 more users after opening a second store. Task added in Zoho.

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

  • Act only on the items that match your own rules, and skip the rest
  • Change what the AI looks for, or how it writes the result
  • Add another app, for example also send it to Slack
  • Combine it with other Gmail and Zoho CRM 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.
support_tickets_to_upsell_alerts.pyexample
import base64
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, ai, state, report_fetched

ZOHO = "https://www.zohoapis.com/crm/v6"

@on_trigger
def run(event):
    since = state.get("since") or "2026-01-01T00:00:00Z"
    tickets = http.get("https://support.acme.example/api/tickets", params={"created_after": since},
                       headers={"Authorization": f"Bearer {credentials.secret('HELPDESK_API_KEY')}"}).json()["tickets"]
    report_fetched(len(tickets))
    if not tickets:
        return {"summary": "No new tickets"}
    zh = {"Authorization": f"Zoho-oauthtoken {credentials.connection('zoho', 'work')}"}
    gmail = build("gmail", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
    for t in tickets:
        r = ai.generate(f"Is this support ticket an upsell opportunity? {t['body'][:1500]}", max_output_tokens=80,
                        json_schema={"type": "object", "properties": {"score": {"type": "integer"}, "reason": {"type": "string"}}}).json
        if r["score"] < 7:
            continue
        contact = http.get(f"{ZOHO}/Contacts/search", headers=zh, params={"email": t["email"]}).json()["data"][0]
        http.post(f"{ZOHO}/Notes", headers=zh, json={"data": [{"Parent_Id": {"id": contact["id"]}, "$se_module": "Contacts",
                                                                "Note_Content": f"Upsell signal: {r['reason']}"}]})
        http.post(f"{ZOHO}/Tasks", headers=zh, json={"data": [{"Subject": f"Upsell follow-up: {t['subject']}", "What_Id": {"id": contact["id"]}}]})
        raw = f"To: sales@acme.example\r\nSubject: Upsell signal from {t['email']}\r\n\r\n{r['reason']}\n\nTicket: {t['subject']}"
        gmail.users().messages().send(userId="me", body={"raw": base64.urlsafe_b64encode(raw.encode()).decode()}).execute()
    state.set("since", tickets[-1]["created_at"])
    return {"checked": len(tickets)}

FAQ

Common questions

Where do tickets come from?
From your help desk's API, which the automation checks every hour for tickets created since the last check.
How does it match a ticket to a Zoho record?
By the customer's email address, looking up their contact or account in Zoho CRM.
Will every ticket create a task?
No. Only tickets scored as likely upsells do; routine questions are left alone.
What permissions does it need?
Zoho write; gmail.send. Nothing else in your accounts is used.
Does it need AI?
Yes. It uses ClickRuntime's built-in AI, so you don't need an OpenAI or Anthropic key. Every plan includes a monthly AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new 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 “Spot upsell chances in support tickets” from your assistant

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