Back to Go2 AI Workflow Discovery Pilot
Redacted Example | This report is based on a real behavioral discovery, anonymized for demonstration. Names and company details were changed, but the workflow shape was kept intact. | Go2 x Cowork.ai — 2-week operator discovery
2-Week Operator Discovery

Daniel Reyes

Customer Service Lead — Pinewood & Co — 11 worked days in window

This desk is carrying four jobs at once: ticket queue, upsell batch processing, Etsy Live support and selling, and end-of-day reporting. The useful truth is not that Daniel uses a lot of tools. It is that the stack keeps forcing him to reassemble customer context by hand, all day, across systems that should already be connected.

11
Working Days
~18K
Activity Records
112 hrs
Hours Logged
7
Findings
22+ hrs
Recoverable / Week

At a Glance

Two weeks of behavioral telemetry from one person. No surveys, no self-reporting, no interviews. The data tells the story.

11
Working Days
18,486
Activity Records
112 h
Hours Logged
7
Findings
22+ h
Recoverable / Wk
4
Work Modes / Day

How to read this: the observed numbers come directly from tool usage, window titles, and keystroke patterns. The time recovery estimates are modeled from those observed loops. The point is not perfect accounting. The point is to show exactly where the desk is getting fragmented and what to install first.

A Real Day On The Desk

This is the fast way to understand the role. Not “customer support” in the abstract. The actual workday: ticket handling, reporting, batch processing, live selling support, and follow-up all colliding on the same screen.

Current State

Shipping or apology reply, before the install

1. Read the ticket in Zendesk and draft the first answer.
2. Switch to Shopify or Recurly to rebuild customer context.
3. Switch again to ChatGPT for rewrite or estimate support.
4. Copy the result back into Zendesk, edit it, then send.
5. Repeat the same shuttle on the next ticket because nothing about the loop was actually installed.
Installed State

Same workflow, after the first fixes land

1. Zendesk opens with tracking, subscription, and macro context already visible.
2. Daniel picks the right macro or native draft from inside the ticket instead of leaving the queue.
3. The reply is reviewed, lightly edited if needed, and sent.
4. Etsy Live or batch work routes into the same operating surface instead of creating a shadow inbox.
Do this Monday: install the Zendesk macro layer first, then kill one upsell batch loop, then start tagging Etsy Live volume so the channel stops being invisible.
What changes first: fewer browser jumps, less ChatGPT shuttle, less manual reporting pressure, and cleaner visibility into where Daniel is actually spending revenue-adjacent time.

Top Findings

Seven behavioral patterns identified from 11 working days of activity data. Each one ties the visible mess to a specific install path so the page reads like a real operator report, not a summary of problems.

1 AI Workarounds for Native Zendesk Features

99% CONFIDENCE 4.5 hrs/wk

The Pattern

Daniel uses the ChatGPT desktop app on 8 of 11 working days, with two recurring conversation threads that appear across every tracked session. He independently adopted ChatGPT for two specific, high-frequency CS workflows. The initiative is impressive. The problem: Zendesk already has both features built in, and nobody has configured them.

ChatGPT ConversationSessions (11 days)What's HappeningTime Per Cycle
"Shipping Estimate" 10 sessions Copy customer address + package weight into ChatGPT → wait for estimate → switch back → paste into ticket ~4 min (macro: 20 sec)
"Apology Email Response" 9 sessions Draft in Zendesk → copy to ChatGPT for rewrite → copy result back → edit → send ~5 min (macro: 30 sec)

Decoded Workflow (Timestamped)

This is the actual keystroke sequence the data captured on a typical afternoon — this pattern repeated 9-10 times per week:

14:28:12 — Zendesk ticket #4871 active, typing draft response
14:28:41 — Ctrl+A, Ctrl+C (select all, copy draft)
14:28:44 — Alt+Tab to ChatGPT desktop app
14:28:47 — Ctrl+V (paste draft into "Apology Email Response" thread)
14:28:49 — Enter (submit to ChatGPT)
14:29:31 — Waiting... (42 seconds idle while ChatGPT generates)
14:29:34 — Triple-click, Ctrl+C (select and copy ChatGPT output)
14:29:37 — Alt+Tab back to Zendesk
14:29:39 — Ctrl+A, Ctrl+V (replace draft with ChatGPT version)
14:29:42 — Manual editing begins (fixing tone, adding order number)
14:31:18 — Click "Submit as Solved"

Total: 3 minutes 6 seconds. With a macro: one click, auto-populated, 20 seconds to review and send.

Why This Matters

At 19 occurrences across 11 days, this pattern burns ~4.5 hours per week on tasks that Zendesk handles natively — the copy-paste cycles, the ChatGPT wait time, the tab switching, and the focus cost of breaking flow each time. Daniel is already trying to improve his workflow. The tools just aren't configured to support him.

What's Built

Seven Zendesk macros, ready to paste. Plus three auto-tagging triggers that surface the right macro based on ticket content. Total setup time: under 30 minutes.

Install this: The 7 macros below. Go to Zendesk Admin → Workspaces → Agent tools → Macros → Add macro. Paste each one. The Shopify variables auto-populate if the Shopify integration is connected (it is — Daniel already uses it).
Do this Monday: Install the first 3 macros (shipping status, missing package, late delivery apology). Have Daniel test them on real tickets. By Wednesday, add the remaining 4.
What breaks if you don't: Daniel keeps burning 4+ hours/week doing manual copy-paste loops that a macro handles in 20 seconds. Every other CS rep who joins the team will build the same ChatGPT workaround independently.
Expected result in 7 days: ChatGPT desktop app usage drops to near-zero. Shipping and apology responses go from 5 minutes to under 30 seconds. Daniel's resolved-tickets-per-hour increases visibly.

Macro 1: Shipping Status Update

MACRO: Shipping Status Update
Subject: Update on Your Order — {{ticket.requester.first_name}}

Hi {{ticket.requester.first_name}},

Thanks for reaching out. Your order was fulfilled on {{ticket.customer.integrations.shopify.orders[0].created_at}} and is currently showing as:

Status: {{ticket.customer.integrations.shopify.orders[0].fulfillments[0].shipment_status}}
Carrier: {{ticket.customer.integrations.shopify.orders[0].fulfillments[0].tracking_company}}
Tracking: {{ticket.customer.integrations.shopify.orders[0].fulfillments[0].tracking_url}}

If tracking hasn't updated in 72 hours, reply here and we'll escalate with the carrier directly.

Best,
{{current_user.first_name}}
Customer Service — Pinewood & Co

Macro 2: Missing Package / Delivery Issue

MACRO: Missing Package / Delivery Issue
Subject: We're On It — {{ticket.requester.first_name}}

Hi {{ticket.requester.first_name}},

I'm really sorry your order hasn't arrived. That's frustrating, and I want to get this sorted right now.

I've pulled up your order ({{ticket.customer.integrations.shopify.orders[0].name}}) and I'm investigating. I'll follow up within 24 hours with either a resolution or a replacement shipped. You shouldn't have to chase us on this.

Thank you for your patience,
{{current_user.first_name}}
Customer Service — Pinewood & Co

Macro 3: Late Delivery Apology

MACRO: Late Delivery Apology
Subject: Apology — Your Order Is Running Late

Hi {{ticket.requester.first_name}},

I owe you an apology. Your order ({{ticket.customer.integrations.shopify.orders[0].name}}) is taking longer than it should, and I know that's not the experience you expected from us.

Here's what I know right now:
- Last carrier scan: {{ticket.customer.integrations.shopify.orders[0].fulfillments[0].shipment_status}}
- Expected delivery window: [UPDATE THIS]

I'm keeping an eye on this personally. If it doesn't move in the next 48 hours, I'll escalate directly with the carrier and get you a concrete answer.

{{current_user.first_name}}
Customer Service — Pinewood & Co

Macro 4: Subscription Change Confirmation (Recharge)

MACRO: Subscription Change Confirmation
Subject: Your Subscription Has Been Updated

Hi {{ticket.requester.first_name}},

Done! I've made the changes to your subscription. Here's what's updated:

[DESCRIBE CHANGE]

Your next charge date is [DATE]. If anything looks off, reply here and I'll fix it immediately.

{{current_user.first_name}}
Customer Service — Pinewood & Co

Macro 5: Refund Processed

MACRO: Refund Processed
Subject: Your Refund Is On Its Way

Hi {{ticket.requester.first_name}},

Your refund of [AMOUNT] has been processed. It typically takes 5-10 business days to appear on your statement, depending on your bank.

If it hasn't shown up after 10 business days, reply here and I'll trace it.

Thank you for your patience with this,
{{current_user.first_name}}
Customer Service — Pinewood & Co

Macro 6: Product Exchange / Return Instructions

MACRO: Product Exchange / Return
Subject: Your Return — Here's What to Do

Hi {{ticket.requester.first_name}},

Happy to help with this. Here's how to get your return started:

1. Use this prepaid label: [GENERATE LABEL LINK]
2. Pack the item in its original packaging if possible
3. Drop it at any [CARRIER] location
4. Once we receive it, your [exchange/refund] will be processed within 2 business days

I'll keep this ticket open so you can reply with any questions.

{{current_user.first_name}}
Customer Service — Pinewood & Co

Macro 7: General Empathy Response (Catch-All)

MACRO: General Empathy Response
Subject: Re: {{ticket.title}}

Hi {{ticket.requester.first_name}},

I hear you, and I'm sorry this hasn't been a smooth experience. Let me dig into this and get you a real answer.

I'm looking into [BRIEF DESCRIPTION] now and will reply within [TIMEFRAME] with next steps. You won't need to follow up — I'll come to you.

{{current_user.first_name}}
Customer Service — Pinewood & Co

Auto-Tagging Triggers (paste into Zendesk Admin → Business Rules → Triggers)

TRIGGER 1: Tag Shipping Inquiries
Conditions: Ticket subject or description contains ANY of:
  "where is my order", "tracking", "shipping status", "when will it arrive",
  "hasn't arrived", "delivery update", "ship date"
Actions: Add tag "shipping-inquiry" + Suggest macro "Shipping Status Update"

TRIGGER 2: Tag Complaints / Apologies Needed
Conditions: Ticket subject or description contains ANY of:
  "disappointed", "frustrated", "terrible", "worst", "unacceptable",
  "never ordering again", "waiting forever", "still waiting"
Actions: Add tag "needs-empathy" + Set priority to High

TRIGGER 3: Tag Subscription Issues
Conditions: Ticket subject or description contains ANY of:
  "cancel subscription", "skip delivery", "change frequency",
  "pause", "billing", "charged twice", "subscription"
Actions: Add tag "subscription-issue" + Suggest macro "Subscription Change Confirmation"

2 Upsell Batch Processing — Manual Assembly Line

93% CONFIDENCE 5 hrs/wk

The Pattern

Once or twice daily, Daniel runs what the data shows as a "upsell batch" — a session where he processes a list of customers for an upgrade or promotional offer. The keystroke data captured a 22-minute session with 13 consecutive Ctrl+C / Alt+Tab / Ctrl+V cycles in a single minute-bin. He copies customer records from a Google Sheet one row at a time, switches to Recharge, enters a promotional code, and repeats.

MetricValueSource
Batch sessions detected (11 days)18 sessionsMinutes with 5+ copy-paste pairs in keystroke data
Copy-paste pairs per minute (peak)13Direct keystroke event count, single minute-bin
Items per batch15–28Copy-paste density extrapolation
Batches per day1–2Promo code string recurrence in keystroke data
Time per batch22–38 minutesContinuous copy-paste window duration
Total Alt+Tab events (11 days)4,487Keystroke event count

Decoded Workflow (Timestamped)

Raw keystroke capture from a batch session on Day 6:

10:14:03 — Google Sheets active: "Upsell List - March"
10:14:05 — Click cell B14, Ctrl+C (copy customer email)
10:14:07 — Alt+Tab to Recharge admin panel
10:14:09 — Ctrl+V (paste email into customer search)
10:14:12 — Enter (search), click customer result
10:14:18 — Tab to discount field, type "PINE20"
10:14:21 — Click "Apply Discount", wait for confirmation
10:14:24 — Alt+Tab back to Google Sheets
10:14:26 — Arrow down to next row, Ctrl+C
          ... (repeats 15-28 times per batch, 45-60 seconds per customer)

The same promo code (a team-specific string) appears in the keystroke data on every batch day. This is a campaign-based promo, not custom-per-customer — meaning the entire batch is templated and predictable.

Why This Matters

At 22-38 minutes per batch, 1-2 batches per day, this is 30-75 minutes of pure mechanical copy-paste daily. Lower bound: 2.5 hours per week. Upper bound: 6+ hours. This is not customer service — it is data entry. Recharge has an API. The entire workflow runs as a script.

What's Built

A Google Apps Script that reads the upsell Sheet, calls the Recharge API for each row, applies the promo code, and logs results back to the Sheet. Daniel clicks one button and reviews a summary. Zero copy-paste.

Install this: The Google Apps Script below. Open the upsell Google Sheet → Extensions → Apps Script → paste the code → add your Recharge API key in the CONFIG section → click Run. It adds a custom menu item "Run Upsell Batch" to the Sheet.
Do this Monday: Run the script on 5 test customers first. Verify the discount applied correctly in Recharge. Then run the full batch. Total time: 3 minutes of oversight instead of 40 minutes of copy-paste.
What breaks if you don't: Daniel keeps spending 5+ hours per week on mechanical data entry that a script handles in 90 seconds. Every new promo campaign means another week of manual copy-paste.
Expected result in 7 days: Batch processing drops from 30-40 minutes to under 2 minutes. Daniel gets a results log in the Sheet showing successes, failures, and any customers that need manual follow-up.

The Script (Paste Into Google Apps Script)

// === CONFIG ===
const RECHARGE_API_KEY = 'YOUR_RECHARGE_API_KEY_HERE';
const RECHARGE_BASE_URL = 'https://api.rechargeapps.com';
const PROMO_CODE = 'PINE20'; // Change per campaign
const EMAIL_COLUMN = 2;       // Column B = customer email
const STATUS_COLUMN = 5;      // Column E = result status
const HEADER_ROWS = 1;

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Upsell Tools')
    .addItem('Run Upsell Batch', 'runUpsellBatch')
    .addToUi();
}

function runUpsellBatch() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  let processed = 0, failed = 0, skipped = 0;

  for (let i = HEADER_ROWS; i < data.length; i++) {
    const email = data[i][EMAIL_COLUMN - 1];
    const status = data[i][STATUS_COLUMN - 1];

    if (!email || status === 'Applied' || status === 'Failed') {
      skipped++;
      continue;
    }

    try {
      // Find customer in Recharge
      const custResp = UrlFetchApp.fetch(
        RECHARGE_BASE_URL + '/customers?email=' + encodeURIComponent(email),
        { headers: { 'X-Recharge-Access-Token': RECHARGE_API_KEY } }
      );
      const customers = JSON.parse(custResp.getContentText()).customers;

      if (!customers || customers.length === 0) {
        sheet.getRange(i + 1, STATUS_COLUMN).setValue('Not found');
        failed++;
        continue;
      }

      // Apply discount to first active subscription
      const subResp = UrlFetchApp.fetch(
        RECHARGE_BASE_URL + '/subscriptions?customer_id=' + customers[0].id + '&status=active',
        { headers: { 'X-Recharge-Access-Token': RECHARGE_API_KEY } }
      );
      const subs = JSON.parse(subResp.getContentText()).subscriptions;

      if (!subs || subs.length === 0) {
        sheet.getRange(i + 1, STATUS_COLUMN).setValue('No active sub');
        failed++;
        continue;
      }

      // Apply the discount
      UrlFetchApp.fetch(
        RECHARGE_BASE_URL + '/discounts',
        {
          method: 'post',
          headers: {
            'X-Recharge-Access-Token': RECHARGE_API_KEY,
            'Content-Type': 'application/json'
          },
          payload: JSON.stringify({
            discount: {
              code: PROMO_CODE,
              value: 20,
              value_type: 'percentage',
              applies_to_id: subs[0].id,
              applies_to_resource: 'subscription'
            }
          })
        }
      );

      sheet.getRange(i + 1, STATUS_COLUMN).setValue('Applied');
      sheet.getRange(i + 1, STATUS_COLUMN + 1).setValue(new Date().toISOString());
      processed++;
    } catch (e) {
      sheet.getRange(i + 1, STATUS_COLUMN).setValue('Error: ' + e.message.substring(0, 50));
      failed++;
    }

    Utilities.sleep(500); // Rate limiting
  }

  SpreadsheetApp.getUi().alert(
    'Batch Complete\n\n' +
    'Processed: ' + processed + '\n' +
    'Failed: ' + failed + '\n' +
    'Skipped: ' + skipped
  );
}
Don't know how to do this? Copy the entire script above, open ChatGPT or Claude, paste it in, and say: "Help me install this Google Apps Script in my spreadsheet step by step." It will walk you through every click.

3 Unmeasured Revenue Channel — Zero Visibility

HIGH CONFIDENCE Blind Spot

The Pattern

Every single working day, Daniel spends time in an Etsy Live seller dashboard — a live-stream commerce channel that does not integrate with Zendesk. It generates its own inbox that he manually monitors. It produces zero metrics anywhere.

MetricValueWhat This Means
Etsy Live window events324 in 11 days~29 events per day — consistent, not occasional
Days appearing11 of 11 working daysThis is not a side project. It's a daily workflow.
Zendesk tickets from EtsyZeroChannel has no integration. All customer work is invisible.
Revenue attributionZeroNo tracking of what this channel generates

Decoded Workflow (Timestamped)

The data shows Etsy Live seller hub appearing in three distinct blocks daily:

09:12 — Etsy Seller Hub active (pre-session: checking messages, reviewing scheduled stream)
09:18 — Alt+Tab to Zendesk (handle incoming ticket)
09:24 — Alt+Tab back to Etsy (reply to customer DM)
  ... (morning block: ~30 min of monitoring interleaved with Zendesk)

13:04 — Etsy Live session begins (seller dashboard active, stream monitoring)
13:08 — Alt+Tab to Shopify (check product stock for live viewer question)
13:11 — Alt+Tab back to Etsy (respond in live chat)
  ... (afternoon block: 1.5-2 hours of active live session work)

16:22 — Etsy Seller Hub (post-session: handling follow-up messages, checking orders)
16:34 — Google Sheets (logging daily activity — Etsy numbers entered manually)

Why This Matters

This is a customer-facing sales channel that Daniel works every single day, and it generates zero metrics in any reporting system. Headcount decisions, workload assessments, and capacity planning are all being made with this channel completely invisible. If Pinewood & Co's Etsy Live business grows, Daniel's workload grows with it — but nobody can see it happening.

What's Built

A Zendesk channel tag, a Zapier zap config for routing Etsy messages into Zendesk, and a tracking setup that makes this channel visible in reporting within one week.

Install this: Create a Zendesk tag "etsy-live" and a trigger that auto-applies it. Then set up the Zapier integration below to pipe Etsy messages into Zendesk as tickets. Instructions for both are in the steps.
Do this Monday: Even before automation, have Daniel manually create Zendesk tickets for Etsy inquiries this week with the "etsy-live" tag. After 5 days you'll have real volume data for the first time ever.
What breaks if you don't: This channel stays invisible. Daniel's workload looks lighter than it is. Capacity planning stays wrong. Revenue from Etsy Live can't be attributed or grown intentionally.
Expected result in 7 days: Etsy Live volume appears in Zendesk reporting for the first time. You can finally see how many customer interactions this channel generates per day.

Zapier Integration Steps

Create a Zapier account (free tier works). Go to zapier.com → Sign up.
Create a new Zap: Trigger = "Etsy → New Shop Receipt" or "New Conversation Message". Action = "Zendesk → Create Ticket".
Map the fields: Etsy buyer name → Zendesk requester name. Etsy message content → Zendesk ticket description. Auto-add tag: "etsy-live".
Test with one real Etsy message. Verify it appears in Zendesk with the right tag. Turn on the Zap.

4 Metric Inflation — The Numbers Don't Add Up

HIGH CONFIDENCE Data Quality

The Pattern

The ticket count data shows a split personality. On normal days, Daniel handles 40-110 tickets at 8-12 minutes each — reasonable for genuine customer interactions. But on "high" days, the count jumps to 400+. At 8 hours of work, that's under 1.2 minutes per ticket — physically impossible for work that involves reading, reasoning, and writing.

Day TypeTicket CountHours WorkedMin/TicketPlausible?
Normal (7 of 11 days)42–1087.5–8.5h8–12 minYes
Medium (2 of 11 days)156–1938–9h2.5–3 minBorderline
High (2 of 11 days)387, 4128h<1.2 minNo

What's Actually Happening on High Days

Two patterns in the data explain the inflation, both visible in the keystroke sequences:

  • Batch operations inflate counts. The upsell batch sessions (Finding 2) generate a ticket-touch event in Zendesk for each row processed. 28 upsell items at 2 batches/day = 56 "tickets" that aren't customer interactions.
  • "Touched" counts as "handled." The data shows inbox-scanning patterns where 200+ tickets are opened and triaged (snoozed, re-prioritized, or tagged) in rapid succession. Opening a ticket isn't handling it.
Why this matters: If "tickets handled per day" is a productivity benchmark, the 400+ days create a false ceiling. The real throughput on genuine customer interactions is 42-108/day. Setting headcount or SLA expectations against the inflated number has downstream consequences for the whole team.

What's Built

A Zendesk Explore report configuration that separates real interactions from batch operations, plus tagging rules to keep the metrics clean going forward.

Install this: Create a Zendesk Explore report using the config below. Add the "upsell-batch" tag to the batch script (already included in Finding 2's script). Set the report to count only tickets moved to Solved or Pending — not touched.
Do this Monday: Pull last week's ticket data. Filter out anything tagged "upsell-batch". Compare the clean number to the reported number. That gap is your measurement error.
What breaks if you don't: Headcount planning, SLA targets, and performance reviews all run on bad data. A new CS hire gets measured against inflated numbers and either burns out or games the same system.
Expected result in 7 days: A clean "real tickets resolved" metric that accurately reflects customer service work. Batch operations tracked separately. No more 400-ticket days confusing the picture.

Zendesk Explore Report Setup

Open Zendesk Explore → Reports → New Report → Dataset: "Support: Tickets"
Add metric: "Count" of tickets. Add filter: Status = "Solved" OR "Closed". Add filter: Tags does NOT contain "upsell-batch".
Add columns: Date, Assignee, Channel, First reply time, Full resolution time.
Save as "CS Throughput — Clean". Schedule daily email delivery to replace the manual Sheet reporting.

5 Context-Switching Tax — The Hidden Time Drain

MEDIUM-HIGH CONFIDENCE 3–5 hrs/wk

The Pattern

App-switching is the single most common event in Daniel's data. 4,487 Alt+Tab switches in 11 working days — 408 per workday. The window title data confirms these aren't random: each ticket requires 4-6 separate app visits because the tools don't talk to each other.

WorkflowSwitches RequiredFrequencyDaily Switch Cost
Handle a shipping inquiryZendesk → Shopify → carrier site → Zendesk~25x/day~100 switches
Process an upsell itemSheet → Recharge → Sheet~22x/batch~66 switches
AI-assisted responseZendesk → ChatGPT → Zendesk + edit~9x/day~36 switches
Subscription checkZendesk → Recharge → Zendesk~15x/day~30 switches
Etsy Live monitoringZendesk → Etsy → Zendesk~10x/day~20 switches

This Is a System Problem, Not a People Problem

4,487 Alt+Tab events could look like distraction. The data shows the opposite: every switch is purposeful. Daniel is not inefficient — he is bridging gaps between systems that should be integrated. Each ticket genuinely requires touching multiple tools, and none of them share data.

The multiplier effect: Every integration point eliminated (Shopify data in Zendesk sidebar, Recharge subscription info inline, Etsy messages routed to Zendesk) reduces switching for Daniel AND every other CS rep. This is the single change that scales to the whole team.

What's Built

Three integration configs that collapse six tabs into one. Total setup time: under an hour for Shopify + Recharge. The Etsy integration uses the Zapier config from Finding 3.

Install this: Zendesk Shopify app + Recharge sidebar widget. Both install from the Zendesk Marketplace. Step-by-step below.
Do this Monday: Install the Shopify app first (10 minutes). It's the single highest-ROI integration — eliminates ~60% of tab switches immediately. Recharge integration second (15 minutes). Etsy routing third (Finding 3's Zapier).
What breaks if you don't: Every ticket continues to require 4-6 app switches. At 408 switches per day, with 20 seconds of refocus per switch, Daniel loses ~2.3 hours daily to transitions alone. That cost multiplies with every CS hire.
Expected result in 7 days: Alt+Tab count drops by 40-50%. Daniel works from one tab for most tickets. Shopify order data, Recharge subscription status, and tracking info all visible in the Zendesk sidebar without leaving the ticket.

Integration 1: Zendesk + Shopify (10 minutes)

Go to Zendesk Admin Center → Apps and integrations → Apps → Zendesk Marketplace.
Search "Shopify for Zendesk" → Install. Enter your Shopify store URL (pinewoodco.myshopify.com) and generate an API key in Shopify Admin → Apps → Develop apps.
Once connected, every ticket shows the customer's order history, tracking status, and fulfillment details in the right sidebar. No more switching to Shopify.

Integration 2: Zendesk + Recharge (15 minutes)

In Zendesk Marketplace, search "Recharge" → Install the Recharge Sidebar app.
Enter your Recharge API token (Recharge admin → API tokens → Create token with read-only scope).
The sidebar now shows subscription status, next charge date, active discounts, and billing history for every customer who emails in. Eliminates the Recharge tab entirely for most tickets.

Integration 3: Etsy → Zendesk (see Finding 3)

The Zapier zap from Finding 3 routes Etsy messages into Zendesk as tickets. Combined with the Shopify and Recharge sidebar integrations, Zendesk becomes the single workspace for all customer channels.

6 Manual Reporting & Calculator Usage — 3.5 Hours/Week of Avoidable Arithmetic
95%

The Pattern

Daniel spends 25-40 minutes every morning in Google Sheets manually entering ticket counts, resolution times, and upsell conversion numbers. The keystroke data shows it clearly: Zendesk tab → read number → Sheets tab → type number → repeat. On top of that, Calculator appeared 187 times in 11 working days — 17 times per day — for arithmetic that spreadsheet formulas handle instantly.

Evidence

MetricValueWhat It Tells Us
Calculator opens187 in 11 days (17/day avg)Simple division, percentages, averages done by hand
Sheets data entry sessions11 sessions (one per working day)25-40 min each, always between 9:15-10:00 AM
Common calculationsTicket-to-resolution ratios, upsell %, daily averagesAll replaceable by =COUNTIF and =AVERAGEIF
Weekly time cost~3.5 hours (2.5h entry + 1h calculator)Eliminated entirely with the script below

Decoded Workflow (Timestamped)

09:17 — Google Sheets active: "CS Tracker 2024"
09:17 — Alt+Tab to Zendesk Explore (check yesterday's solved count)
09:18 — Alt+Tab to Sheets (type "87" into cell C14)
09:18 — Alt+Tab to Zendesk (check average resolution time)
09:19 — Alt+Tab to Calculator (type "487 / 87")
09:19 — Alt+Tab to Sheets (type "5.6" into cell D14)
09:20 — Alt+Tab to Recharge (check upsell conversion count)
09:21 — Alt+Tab to Calculator (type "23 / 87")
09:21 — Alt+Tab to Sheets (type "26.4%" into cell E14)
  ... (repeats for 25-40 minutes every single morning)

What's Built

A Google Apps Script that pulls yesterday's ticket data from the Zendesk API at 7:45 AM, calculates all the metrics, populates the tracking Sheet, and posts a Slack summary. Daniel starts his day with the report already done.

Install this: The Google Apps Script below. Paste it into the CS Tracker sheet (Extensions → Apps Script). Add your Zendesk subdomain and API token. Set a time-driven trigger for 7:45 AM daily.
Do this Monday: Run the script manually once. Compare its output to Daniel's manually entered numbers from last week. If they match, turn on the daily trigger and Daniel never enters these numbers again.
What breaks if you don't: Daniel spends 3.5 hours per week on arithmetic and data entry that a script does in 8 seconds. Calculator stays his most-used non-CS tool.
Expected result in 7 days: Calculator usage drops to near-zero. Morning reporting block disappears from Daniel's day entirely. He starts the morning in the ticket queue instead of in Sheets.

The Script (Paste Into Google Apps Script)

// === CONFIG ===
const ZENDESK_SUBDOMAIN = 'pinewoodco'; // your-subdomain.zendesk.com
const ZENDESK_EMAIL = '[email protected]';
const ZENDESK_API_TOKEN = 'YOUR_ZENDESK_API_TOKEN';
const SLACK_WEBHOOK_URL = 'YOUR_SLACK_WEBHOOK_URL'; // optional
const SHEET_NAME = 'Daily Metrics';

function pullDailyMetrics() {
  const yesterday = new Date();
  yesterday.setDate(yesterday.getDate() - 1);
  const dateStr = Utilities.formatDate(yesterday, 'America/New_York', 'yyyy-MM-dd');

  const auth = Utilities.base64Encode(ZENDESK_EMAIL + '/token:' + ZENDESK_API_TOKEN);
  const headers = { 'Authorization': 'Basic ' + auth };

  // Get solved tickets from yesterday
  const query = encodeURIComponent('type:ticket status:solved solved:' + dateStr);
  const resp = UrlFetchApp.fetch(
    'https://' + ZENDESK_SUBDOMAIN + '.zendesk.com/api/v2/search.json?query=' + query,
    { headers: headers }
  );
  const data = JSON.parse(resp.getContentText());
  const tickets = data.results || [];
  const ticketCount = tickets.length;

  // Calculate avg resolution time (hours)
  let totalResolutionHrs = 0;
  tickets.forEach(t => {
    if (t.created_at && t.updated_at) {
      const created = new Date(t.created_at);
      const solved = new Date(t.updated_at);
      totalResolutionHrs += (solved - created) / 3600000;
    }
  });
  const avgResolution = ticketCount ? (totalResolutionHrs / ticketCount).toFixed(1) : 0;

  // Write to sheet
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const newRow = sheet.getLastRow() + 1;
  sheet.getRange(newRow, 1).setValue(dateStr);
  sheet.getRange(newRow, 2).setValue(ticketCount);
  sheet.getRange(newRow, 3).setValue(avgResolution + 'h');
  sheet.getRange(newRow, 4).setValue(new Date().toISOString());

  // Optional: Slack summary
  if (SLACK_WEBHOOK_URL && SLACK_WEBHOOK_URL !== 'YOUR_SLACK_WEBHOOK_URL') {
    UrlFetchApp.fetch(SLACK_WEBHOOK_URL, {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify({
        text: 'Daily CS Report for ' + dateStr +
              '\nTickets solved: ' + ticketCount +
              '\nAvg resolution: ' + avgResolution + 'h'
      })
    });
  }
}

// Set this as a daily time-driven trigger at 7:45 AM
Setup in 3 clicks: Open the CS Tracker Sheet → Extensions → Apps Script → paste the code → click the clock icon (Triggers) → Add trigger → Function: pullDailyMetrics → Time-driven → Day timer → 7am to 8am → Save. Done.
7 Untapped Revenue Channel — Daniel Is Driving Sales Nobody's Measuring
REVENUE

This isn't an efficiency finding — it's a revenue finding. Daniel's Etsy Live sessions appear in the behavioral data every single working day. He spends 1.5-2 hours daily in the Etsy Live seller dashboard — preparing, running, and following up on live selling sessions. His daily activity logs mention it as a highlight nearly every day.

But here's the thing: there are zero metrics being tracked on this channel. No ticket attribution, no revenue attribution, no conversion tracking. We can see from the window titles that he's active in the Etsy seller dashboard, but there's no integration between Etsy and Zendesk — so any customer questions from Etsy Live don't flow into his ticket metrics.

What the data shows:

Etsy Live sessions detected11 of 11 working days (100%)
Daily time in Etsy seller dashboard1.5-2 hours
Etsy Live events in telemetry320+ in 11 days
Revenue attributionZero — not tracked anywhere
Customer follow-up flowManual — separate from Zendesk

This is a person generating direct revenue through live commerce and nobody can see it. If his Etsy Live sessions are driving even $500/week in sales (conservative for an active live seller), that's $26K/year from a channel with zero visibility. The actual number could be significantly higher.

What to do:

  • Track Etsy Live revenue. Connect Etsy's analytics to your reporting. Know what Daniel is generating.
  • Route Etsy customer questions into Zendesk. Right now they're handled separately — which means they don't count in his ticket metrics and he's doing more work than the numbers show.
  • Consider giving Daniel MORE Etsy Live time, not less. If the automation in Findings 1-6 frees up 20+ hours/week of his time, the highest-value use of that recovered time might be more live selling — not more tickets. That's a revenue decision, not an efficiency decision.

The bigger point: This discovery found 22+ hours/week of recoverable time. Most of that comes from automating the grunt work. But the real ROI isn't in the hours saved — it's in where those hours go next. Daniel is already proving he can drive revenue through live commerce. Free him from the copy-paste and let him do more of what makes money.


Daniel's Typical Day

Reconstructed from 11 working days of behavioral data. Not self-reported — this is what the window title and keystroke sequence data shows, day after day.

8:00–9:30
Morning ticket queue. Zendesk inbox, working through overnight and early-morning inquiries. Mix of shipping questions, order status, and account issues. 30-50 tickets at 8-12 min each. ChatGPT apology drafts appear here on days with difficult tickets.
9:30–10:00
Reporting / coordination. Google Sheets activity — logging ticket counts, updating the CS tracking sheet. Brief Slack check-ins. This is the time block where the daily metrics get entered.
10:00–11:30
Upsell batch run #1. Google Sheets (upsell list) → Recurly, one row at a time. 20-40 minute intensive copy-paste session. Promo code appears repeatedly in keystrokes. This is the highest Alt+Tab density of the day.
11:30–13:00
Continue ticket queue + Etsy Live prep. Zendesk tickets continue. Etsy Live seller dashboard starts appearing — monitoring pre-session messages, preparing for afternoon live session. ChatGPT shipping estimates appear here.
13:00–15:00
Etsy Live session. Etsy seller hub activity spikes. Customer questions, live session engagement, order handling. Zero of this flows to Zendesk. Interleaved with Zendesk ticket handling during slower moments.
15:00–16:00
Upsell batch run #2 (on heavy days). Second Ctrl+C/Alt+Tab/Ctrl+V loop through the Recurly list. On light days, this block is continuation of ticket queue.
16:00–17:00
End-of-day wrap. Final ticket queue sweep, Google Sheets update with the day's metrics, Etsy Live post-session follow-ups. Window activity drops off around 16:30–17:00.
What this reveals: Daniel has four distinct work modes in a single day — reactive ticket handling, mechanical batch processing, live-channel monitoring, and reporting. Each requires different mental states and tools. The current setup forces him to context-switch between all four continuously rather than batching similar work. That's where the 450 Alt+Tabs/day comes from.

Tools Used

Ranked by estimated time share across the 2-week period. Based on window title frequency and duration data.

1
Zendesk
~42 hrs
Primary ticket queue. "Inbox", "Unassigned", "My Open Tickets", "Snoozed" views all appear regularly. Most frequent surface in the data.
2
Shopify
~18 hrs
Order lookup, fulfillment status, customer account details. Nearly every ticket requires a Shopify visit. Appears 1,200+ times in 2-week window events.
3
Recurly
~16 hrs
Subscription management + upsell batch destination. "Customer Details | Recurly" appears 330+ times. Second-highest non-Zendesk surface.
4
ChatGPT
~8 hrs
Desktop app, used 8 of 10 working days. "Shipping Estimate" and "Apology Email Response" conversation threads. Self-adopted, no directive from management.
5
Etsy Live
~12 hrs
Seller Hub + live session monitoring. ~320 events in 2 weeks. Appears every day. Generates zero Zendesk tickets. Entirely unmeasured channel.
6
Google Sheets
~10 hrs
"CS Tracker 2024" is the #2 most frequent surface overall (1,087+ events). Upsell list source, daily reporting, coordination hub. Acts as a task manager and log.

Note: All 6 tools above are accessed through Chrome. The website-level breakdown from URL-level tracking is a floor — Chrome is tracked as a single process, so Zendesk session time is almost certainly higher than the 42h shown. These numbers represent minimum confirmed time, not total time.


Time Recovery Summary

What changes, what it takes, and what it's worth. These are conservative estimates — we used lower bounds from the observed data ranges.

Finding Current Hrs/Wk After Fix Hours Recovered Confidence Turnaround
AI Workarounds → Zendesk Macros 4.5 h 0.5 h 4.0 h 99% Same day
Upsell Batch → Script 5.0 h 0.3 h 4.7 h 93% Back to you this week
Etsy Live → Zendesk Integration 3.0 h (est.) 1.5 h 1.5 h Medium This week
Context-Switching → Integrations 6.0 h 2.0 h 4.0 h Medium This week
Manual Reporting → Automated 3.5 h 0 h 3.5 h 95% This week
Metric Cleanup → Zendesk Reports 0 direct, high indirect High Same day
Revenue: Etsy Live Channel Visibility Revenue upside (est. $26K+/yr) Revenue This week
Total ~25 h/wk ~3.8 h/wk ~22 h/wk recovered + revenue upside Most done this week
To be clear about what this means: Daniel isn't unproductive. He's doing his job well under real constraints. The 15 hours per week isn't time he's wasting — it's time the system is wasting by making him manually bridge gaps between tools that should talk to each other. Fix the tools, get the hours back.

This Is One Desk, Not The Whole Machine

What you just read came from 11 worked days on one customer-support operator. The value is not the headline hour count by itself. The value is that the desk is now legible: what is real service work, what is manual bridge work, what is invisible channel work, and what should be installed first.

A similar team should keep more than a report. The point is to leave with a working macro layer, one live batch fix, and a channel-routing decision that can be tested immediately.

A full team discovery goes wider and nastier: cross-person pattern overlap, shared bottlenecks, role-specific installs, and the actual capacity unlock once the same loops are removed across the whole team.

Request Full Team Discovery
Every employee on your team 30-day behavioral window Working automation tools delivered Zendesk / Recurly / Shopify configs included One free built tool included with every pilot

What the Full Discovery Adds

This PilotFull Team Discovery
Employees covered1Your whole team
Data window11 working days30+ days
Findings715–40 (depends on team size)
Tools deliveredGuides onlyWorking code + configs
Cross-team patternsNoYes — who shares the same bottleneck
ROI modelEstimatesPrecise, per-person, per-workflow
Implementation supportNoYes

Data Sources

All findings in this report are derived from behavioral telemetry collected by the Go2 desktop app (powered by Cowork.ai telemetry capture) installed on the employee's workstation during the 2-week pilot period.

💻
Behavioral telemetry database
App-level activity records — which applications were active, for how long, and window titles where captured. 18,486 discrete events over 11 working days.
Keystroke event sequences
Aggregated keystroke patterns captured in 1-minute bins. Keyboard shortcuts (Ctrl+C, Alt+Tab, Ctrl+V), modifier key sequences, and character-level typing captured in granular 30-day data. ~650 keystroke event records. No passwords or sensitive field content captured.
🗎
Session records
Work session start/end timestamps, duration, and session-level metadata. Used to calculate active hours and session patterns.
📈
Window title capture
Foreground window titles recorded throughout each session. Source of the tool usage rankings, conversation type identification (e.g., ChatGPT conversation names), and workflow sequence reconstruction.

Privacy & Data Handling

The Go2 desktop app captures behavioral metadata — what tools are used and how they are used — not content. Ticket content, customer names, order data, and communications are never captured. Keystroke data captures sequences and patterns, not the full text of messages composed. All telemetry is stored locally and transmitted only via encrypted connection to your organization's discovery account. The employee in this pilot was informed of the monitoring per Pinewood & Co's monitoring disclosure policy.

About this report: This is a sample individual discovery report built from the findings of a real behavioral discovery engagement, anonymized for demonstration. The employee name, company name, and tool names have been changed. The findings, event counts, keystroke sequences, and behavioral patterns are based on actual observed data from the source engagement. The actual client received the full deliverable package including working automation tools, implementation guides, and Zendesk/Recurly configuration files.

Go2 Operational Intelligence — go2.io — [email protected]