Macro / saved-reply audit checklist
A structured audit for an existing macro / saved-reply library — eight passes that surface the dead, inaccurate, robotic, duplicated, and side-effect-laden replies and sort every one into keep, fix, merge, or retire; run it quarterly so the library stays small, current, and worth reaching for.
A macro library grows the way a junk drawer grows: every busy week someone adds one, nobody ever removes one. Two years in you have 300 saved replies, agents can't find the right one, a third point to a feature you renamed, and the canned tone is quietly training customers to feel processed. An audit is how you get back to a library that's small, accurate, and worth reaching for.
The tone problem isn't cosmetic. In Zendesk's 2026 research, 74% of customers say they're frustrated when they have to repeat information, and 67% expect support tailored to their prior interactions (Zendesk CX Trends 2026). A macro that ignores the customer's actual situation trips both at once.
Run a full audit [quarterly] (twice a year if you're a small team), plus same-day fixes whenever a product, price, or policy changes.
Before you start — pull the data
You cannot audit from memory. Get the library and its usage numbers side by side first.
- Export the full macro / saved-reply list from
[Zendesk / Intercom / Gorgias / Front / Freshdesk / Help Scout] - Pull usage per macro for the last
[90 days]: times applied, and by whom - Join the outcome signals you can: reopen rate, CSAT, and escalation rate on tickets where each macro was used
- Separate shared macros from personal/private ones — personal macros are where drift and duplication hide
- List folders/categories and who owns each
- Decide scope: whole library, or one team / channel / language at a time
- Name one owner for the audit and set a deadline
The disposition system
Every macro gets exactly one verdict. No "we'll circle back."
| Disposition | Meaning | Triggered by |
|---|---|---|
| Keep | Accurate, used, well-written | Passes every check below |
| Fix | Right idea, wrong details | Stale fact, dead link, robotic tone, broken action |
| Merge | Duplicate of a better macro | Near-identical to another; keep the best, redirect the rest |
| Retire | No longer earns its place | Zero use, describes a dead feature, or superseded |
| Create | A gap, not a macro yet | High-volume topic with no saved reply (tracked separately) |
Pass 1 — Usage: the dead-macro sweep
- Sort by times-applied. Anything used 0 times in
[90 days]→ Retire candidate - Used fewer than
[5]times but still accurate and covering a rare-but-real case → Keep, tag "low use, intentional" - Identify the top
[20]by volume — these carry most of your traffic and get the hardest scrutiny in every later pass. (Rule of thumb: a small handful of macros covers the bulk of volume; find your set instead of guessing at it.) - Personal macros one agent leans on but nobody shares: promote the good ones to shared, delete the rest
Pass 2 — Accuracy and freshness
- Every factual claim still true: pricing, plan names, limits, timelines, policy
- Every link resolves and points to the current article — no 404s, no redirect chains
- No reference to a renamed or removed feature, a sunset integration, or an old UI ("click the gear icon")
- Screenshots and step-by-steps match the product as it ships today
- Legal / compliance wording current:
[refund policy],[privacy],[regulatory disclosures] - Kill stale time-stamps: "as of
[2024]" lines that are no longer true
Anything failing → Fix, or Retire if the thing it describes is gone.
Pass 3 — Tone and the canned test
- Read it aloud. Person, or form letter? Rewrite the robotic ones
- Does it open by acknowledging the customer's actual situation, or launch straight into boilerplate?
- Personalization tokens present and correct (
[first name],[product],[order #]) — and do they degrade gracefully when empty rather than printing "Hi ," - Every placeholder an agent must edit is obvious (
[INSERT DATE]), not a silent blank that ships as-is - No internal jargon, ticket codes, or dead metaphors leaking to the customer
- Plain and short. Cut the throat-clearing ("We truly value your business and...")
Pass 4 — Coverage gaps
- Pull your top
[20]ticket drivers / tags. Does each high-volume topic have a current macro? - Where agents keep hand-writing the same reply (scan for near-identical free-text answers) → Create a macro
- New features or policies from the last
[quarter]— is there a saved reply yet? - Recurring incidents / outages — a holding or status reply ready to go?
Gaps become Create tasks, tracked apart from the audit dispositions.
Pass 5 — Duplication and findability
- Group near-identical macros. Keep the best, Merge the rest, redirect agents to the survivor
- Naming: can an agent find it by typing the obvious word? Rename the cryptic ones (
[Billing - refund - EU], not[macro_v3_final]) - One consistent convention:
[Topic - Situation - Channel/Lang] - Folder structure matches how agents think, not how the org chart looks
- Keyboard shortcuts / aliases on the top macros
- Sanity-check the total count. Fewer, well-maintained macros beat a giant unsearchable pile every time
Pass 6 — Actions and side effects
The part everyone forgets: many macros do more than paste text. They set status, tags, priority, assignee, or fire automations.
- For each macro that changes ticket fields, confirm every action is still valid — a tag that no longer exists, a queue that was merged, a status flow that changed
- Auto-solve / auto-close macros: check reopen rate. Are they closing tickets that actually needed a reply?
- Assignment actions pointing at a person who left or a team that was renamed
- Triggers / automations keyed off a macro's tag — still wanted?
Pass 7 — Localization and channel variants
- Every language version says the same thing as the source — did a fix to the English macro get mirrored to the others?
- Channel-appropriate: chat macros short, email macros complete, no email signature bleeding into a chat reply
- Retiring a macro? Retire the whole translated set, not just one orphaned language
Pass 8 — Governance and ownership
- Every surviving macro has a named owner and a last-reviewed date
- A written "how to propose or change a macro" process exists, so the library doesn't rot between audits
- A deprecation path: retired macros are archived and recoverable, not silently deleted mid-conversation
- If macros feed an AI / agent-assist or draft-reply system, they're the reviewed source of truth — not drifting behind whatever the model actually sends
The working sheet
One row per macro. This is the audit's output.
| Macro | Uses (90d) | Reopen / CSAT signal | Issue found | Disposition | Owner | Done? |
|---|---|---|---|---|---|---|
[name] | [142] | [reopen 4%] | Broken KB link | Fix | [name] | ☐ |
[name] | [0] | — | Feature removed | Retire | [name] | ☐ |
[name] | [9] | [CSAT 3.1] | Reads robotic | Fix | [name] | ☐ |
Disposition roll-up
| Verdict | Count | Notes |
|---|---|---|
| Keep | [ ] | |
| Fix | [ ] | |
| Merge | [ ] | |
| Retire | [ ] | |
| Create | [ ] | Tracked as new work |
| Total before → after | [300] → [180] | Smaller is the goal |
Kill on sight
Don't debate these. If a macro does any of the following, retire or fix it today:
- Links to a 404 or names a feature that no longer exists
- Zero uses in
[12 months]and not a rare compliance / edge-case reply - Ships a visible
[INSERT X]placeholder to customers - Auto-closes tickets that come back (high reopen rate)
- Is a worse duplicate of a macro you already have
- Reads as a form letter on an angry or high-stakes ticket
Keeping it healthy between audits
| Trigger | Action | Owner | Cadence |
|---|---|---|---|
| Product / price / policy change | Update affected macros same day | [content owner] | On change |
| New top-10 ticket driver appears | Create a macro | [team lead] | On detection |
| Zero-use + broken-link report | Review and prune | [audit owner] | Monthly |
| Full audit (this checklist) | All eight passes | [audit owner] | [Quarterly] |
Metrics to watch over time
- Macro count — flat or falling, not creeping upward
- % of the library used in the last 90 days
- Reopen rate / CSAT on macro-touched tickets vs. the overall baseline
- Broken-link count — trending to zero
- Coverage — share of your top
[20]drivers with a current macro
The goal isn't a big library. It's a small one every agent trusts enough to reach for — and lightly edit — instead of writing from scratch or ignoring entirely.
Continue exploring