Unwrapped

Legacy SaaS dossier · zendesk

Zendesk

Zendesk

CategoryCustomer support / ticketingZendesk Suite + Advanced AISite ↗

A shared inbox with macros and SLAs, sold as a Suite with an AI tier that bills extra for the LLM your agents already use in another tab.

01 · Data

Data the SaaS sits on

Inbound email
Inbound emailYours
Knowledge base
Knowledge baseYours
Customers table
Customers tableYours
Stripe
StripeAPI

Internal Build Score

0.71

Feasibility of a useful internal substitute for the actually-used 20% of this SaaS, built with Claude and your own data layer.

IBS = 0.25·U + 0.25·C + 0.20·D + 0.15·I + 0.15·Mthis record · 71%
  • U

    User adoption gap

    weight 0.250.70

    How much licensed surface area sits idle.

  • C

    Core simplicity

    weight 0.250.80

    How small the actually-used 20% is when re-implemented honestly.

  • D

    Data portability

    weight 0.200.62

    How clean the exit is, exports, formats, audit lock.

  • I

    Integration burden (inverse)

    weight 0.150.60

    How few external systems must keep working through the SaaS.

  • M

    Moat erosion

    weight 0.150.78

    How much the original differentiator has been commoditised by LLMs + cheap infra.

Editorial heuristic. Not investment advice, not a procurement recommendation.

03 · Feature usage

Commonly used vs. rarely touched

Commonly used

05

  • Email + chat → ticket queue
  • Assignee + status + priority
  • Saved replies / macros
  • SLA timers per channel
  • Searchable history + customer profile

Rarely touched

07

  • AI add-on tier billing per resolved ticket on top of seats
  • Sunshine CRM platform pretending to be a CDP
  • Explore, analytics built on a custom query language
  • Talk (voice), Sell (CRM), Guide (KB), every adjacent vertical as a SKU
  • Workforce Engagement, schedules + QA bolted on after acquisition
  • Per-light-agent / collaborator pricing oddities
  • Connectors that exist only on the highest tier

Internal build

Build it yourself

01 · Stack & flow

Postgres
Postgres
Next.js
Next.js
Claude API
Claude API
Postmark
Postmark
Twilio (voice / SMS)
Twilio (voice / SMS)

Internal build map

Data in

Inbound email
KB
Customer row

Agent layer

Reply drafter
Tagger

Logic

queue + assign
retrieve KB
draft + cite
SLA timer
escalate triggers

Outputs

Draft reply
Ticket tags
SLA alert
Build time
7 weeks
Run cost
$6/seat·mo
vs. SaaS
$240K / yr

Build outline

  1. Inbound email → tickets via Postmark MX
  2. Agent console: queue, claim, reply, tag
  3. Claude drafts first reply + categorises
  4. SLA timer service + alerts to Slack
  5. Knowledge base = same markdown repo as the wiki

02 · Claude prompt

First, map what you actually use (optional)
Step 1 · usage audit prompt

// Zendesk usage audit, scope the rebuild Input: 90 days of ticket volume by channel, the macro list with use counts, the trigger / automation list, and the SKUs on the contract. ## Do 1. Keep channels with real volume; drop any under 1% of tickets. 2. Keep macros used more than 5 times in 90d; the rest are dead. 3. Separate triggers with external side effects (email, webhook) from field-only triggers. ## Output JSON: { keep_channels[], keep_macros[], keep_triggers[], drop[] }.

Step 2 · rebuild the core

// Support reply drafter, internal agent console You see (a) one customer ticket (subject + body + history with this customer), (b) the agent's last 20 most-used macros, and (c) the relevant KB articles retrieved by the previous step. ## What you must do 1. Draft a reply that resolves the actual question, no boilerplate openers, no "Thanks for reaching out". 2. Match the closest macro by name (return it in `macro_match`). 3. Flag refund / cancel / legal triggers in `escalation_flag`. 4. Cite each fact to a KB article id in `citations[]`. ## What you do not do - Do not promise refunds, discounts, or policy changes. - Do not invent KB content; if none retrieved, say so in the draft. - Do not write closing pleasantries, the agent's signature handles that. ## Output JSON: { draft, macro_match, escalation_flag, citations }.

03 · Result

Charged twice for May. Please refund.
ticket:38192

Refund initiated on duplicate May charge ($29.00), Stripe ref ch_3Ru… · macro: billing-double-charge · escalation: false