Auto-triage and tag Zendesk tickets using Claude Cowork

low complexityCost: Usage-based

Prerequisites

Prerequisites
  • Claude Desktop with Cowork enabled
  • Zendesk API credentials: account email, API token, and subdomain
  • A computer that stays awake during business hours (or a dedicated machine running Claude Desktop)

Overview

Claude Cowork lets you define a recurring task in plain English and have Claude execute it on a schedule — no script or skill file required. You describe what you want Claude to do, and it uses its built-in tools to call the Zendesk API directly, classify tickets by reading their content, and apply tags. This is the fastest way to get ticket triage working with zero code.

Step 1: Find your Zendesk API credentials

In Zendesk, go to Admin Center → Apps and integrations → APIs → Zendesk API. Enable Token Access if it isn't already, then click Add API token.

You'll need three values:

  • Subdomain: the acme part of acme.zendesk.com
  • Email: your Zendesk account email
  • API token: copy from the API token page (shown once on creation)

Step 2: Create groups if needed

Navigate to Admin Center → People → Teams → Groups. Make sure you have groups matching your topic areas:

  • Billing Support
  • Shipping Support
  • Product Support
  • Account Support
  • Technical Support
  • General Support

If these groups already exist, skip this step.

Step 3: Create the Cowork task

Open Claude Desktop and go to the Cowork tab. Click + New task.

Title: Triage and tag untagged Zendesk tickets

Description:

You are a support ops assistant. Your job is to classify untagged Zendesk tickets by topic and assign them to the correct support group.
 
Steps:
1. Search for open tickets that don't have any topic tag yet:
   GET https://{SUBDOMAIN}.zendesk.com/api/v2/search.json?query=type:ticket status:open -tags:topic-billing -tags:topic-shipping -tags:topic-product -tags:topic-account -tags:topic-technical -tags:topic-uncategorized
   Auth: Basic — username: {EMAIL}/token:{API_TOKEN}
 
2. For each ticket, read the subject and description.
 
3. Classify each ticket into one topic:
   - topic-billing: invoices, charges, payments, subscriptions, pricing
   - topic-shipping: delivery, tracking, packages, lost items, shipping delays
   - topic-product: product quality, defects, wrong item, size/color issues
   - topic-account: login, password, account access, profile settings
   - topic-technical: errors, bugs, API issues, integrations, crashes
   - topic-uncategorized: anything that doesn't fit above
 
4. For each classified ticket, update it via PUT:
   PUT https://{SUBDOMAIN}.zendesk.com/api/v2/tickets/{id}.json
   Body: {"ticket": {"tags": [EXISTING_TAGS, "topic-{category}"]}}
   Do NOT remove existing tags — always merge.
 
5. If the topic has a matching group, set the group_id too:
   - topic-billing → Billing Support
   - topic-shipping → Shipping Support
   - topic-product → Product Support
   - topic-account → Account Support
   - topic-technical → Technical Support
   - topic-uncategorized → General Support
 
6. Print a summary: how many tickets checked, how many classified per topic.
 
Important:
- Skip tickets that already have a topic-* tag.
- Never remove existing tags — only add.
- Use your judgment for ambiguous tickets — a message like "my order never showed up" is a shipping issue even without the word "shipping."

Replace {'{'}SUBDOMAIN{'}'}, {'{'}EMAIL{'}'}, and {'{'}API_TOKEN{'}'} with your real values.

Use environment variables for credentials

Instead of putting credentials in the task description, store them as shell environment variables (ZENDESK_SUBDOMAIN, ZENDESK_EMAIL, ZENDESK_API_TOKEN) and reference them in your description as "use the value from the ZENDESK_API_TOKEN environment variable." Claude can read env vars when running bash commands.

Step 4: Set the schedule

Frequency: Every 30 minutes

Cowork will execute the task on this cadence and show you the output each time.

Cowork requires Claude Desktop to be running

Scheduled Cowork tasks only execute while Claude Desktop is open and your computer is awake. If you close the app or your laptop sleeps, tasks are skipped until the next scheduled interval. For 24/7 coverage, use the Agent Skill approach with cron or GitHub Actions instead.

Step 5: Run manually first

Before trusting the schedule, click Run now in Cowork to test it. Claude will:

  1. Call the Zendesk search API for untagged open tickets
  2. Read each ticket's subject and description
  3. Classify each ticket into a topic
  4. Apply the tag and group assignment via the API
  5. Print a run summary

A successful run looks like:

Searched for untagged open tickets. Found 8 to classify.
 
#48201 "Why was I double-charged?" → topic-billing (Billing Support)
#48205 "Package still hasn't arrived" → topic-shipping (Shipping Support)
#48208 "Getting a 500 error on checkout" → topic-technical (Technical Support)
#48211 "Can't reset my password" → topic-account (Account Support)
#48215 "The item arrived damaged" → topic-product (Product Support)
#48219 "How do I update my payment method?" → topic-billing (Billing Support)
#48222 "Integration with our CRM stopped working" → topic-technical (Technical Support)
#48225 "General question about your service" → topic-uncategorized (General Support)
 
Done. Tagged 8 tickets: 2 billing, 1 shipping, 2 technical, 1 account, 1 product, 1 uncategorized.

Step 6: Refine the task description

After the first few runs, review the tagged tickets in Zendesk. If classifications are off, add examples or exceptions to the task description:

"Tickets mentioning 'payment method' or 'update card' should be tagged as topic-account, not topic-billing. Tickets about items arriving damaged should be tagged as topic-product, not topic-shipping."

Cowork's task description is your prompt — the more specific you are, the better Claude performs.

When to use this approach

  • You want triage working today without writing or deploying any code
  • Your ticket volume is under 200/day and 30-minute batching is acceptable
  • You're evaluating categories before committing to Zendesk triggers or a cron script
  • You want AI-quality classification without setting up a separate Anthropic API key

When to switch approaches

  • You need triage to run 24/7 reliably → use the Agent Skill with cron or GitHub Actions
  • You need instant classification → use Zendesk native triggers (keyword-based, fires on creation)
  • Your ticket volume is high and batching creates visible delays → use n8n with a webhook trigger
Combine Cowork with Zendesk triggers for best coverage

Use Zendesk triggers for the 80% of tickets with obvious keywords. Use Cowork to sweep remaining untagged tickets every 30 minutes and catch the conversational or ambiguous ones that keywords miss. The two approaches complement each other — triggers are instant, Claude is smarter.

Cost

  • Cowork uses your Claude Desktop subscription — no additional API costs
  • Each run processes up to 50 tickets and takes 1-3 minutes depending on volume

Need help implementing this?

We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.