What this audit checks
Authentication & access
- API token valid (auth on /api/v2/users/me.json) and not revoked
- Subdomain correct and reachable (correct data-residency region)
- Connector account has agent/admin role with Search + Tickets read scope
- All expected brands readable (multi-brand aggregation complete)
Backlog health
- Open ticket count vs 30-day baseline (sudden growth = drowning signal)
- Blocked / On-hold ticket count + change WoW
- Oldest open ticket age (>90 days = backlog rot)
- Backlog-by-priority skew (Urgent+High >50% of open = firefighting)
- Backlog-by-status distribution (New/Open/Pending/On-hold mix)
Throughput & capacity
- Tickets resolved (7d) dropped >25% vs prior week
- Avg cycle time degradation >25% week-over-week
- Assignees with >10 open tickets (overload signal)
- Unassigned tickets > 5 (warn) / > 20 (critical) - work nobody owns
- Sprint scope-creep (>15% added after the triage window started)
VortexIQ findings lifecycle (the stickiness test)
- Abandoned findings - vortex_iq-tagged tickets, no status change >14d
- Finding resolution rate over rolling 90d (target >75%, alert <50%)
- Avg time-to-fix for resolved findings (>14d sustained)
- Findings closed without a deploy/evidence comment (silent dismissals)
- Regression rate - findings reopened after Solved
Cross-channel: revenue-at-risk (the killer area)
- Critical findings from sibling connectors (shopify/bigcommerce/adobe/cybersource) older than 7 days with NO Zendesk ticket - coverage gap
- Abandoned findings count rising while a commerce sibling’s refund_rate climbs - measured-but-not-fixed revenue leak
- High-LTV customers (top decile per commerce sibling) waiting on unresolved vortex_iq tickets
- Zendesk tickets referencing decommissioned / archived integrations - stale work
Severity thresholds
| Signal | Warn | Critical |
|---|---|---|
vortexiq_findings_abandoned | 5 | 15 |
vortexiq_finding_resolution_rate | 75 | 50 |
blocked_tickets | 3 | 8 |
unassigned_tickets | 5 | 20 |
oldest_open_ticket_age_days | 60 | 90 |
cycle_time_change_pct | 25 | 50 |
scope_creep_pct | 15 | 30 |
Data sources
GET https://{subdomain}.zendesk.com/api/v2/users/me.json- Token + account/region sanityGET https://{subdomain}.zendesk.com/api/v2/brands.json- Brand inventory for multi-brand aggregationGET https://{subdomain}.zendesk.com/api/v2/groups.json- Group inventory + workload splitGET https://{subdomain}.zendesk.com/api/v2/users.json- Agent inventory + capacity calc (assignee load)GET https://{subdomain}.zendesk.com/api/v2/search.json- Backlog reads: status/priority counts, oldest-open, by-assignee, abandoned-findings, blockedGET https://{subdomain}.zendesk.com/api/v2/search/count.json- Finding resolution-rate numerator/denominator countsGET https://{subdomain}.zendesk.com/api/v2/tickets.json- Finding-ticket lifecycle reads (in-flight, resolved, time-to-fix)