At a glance
The percentage of Vortex IQ findings created in Teamwork in the last 90 days that have been marked complete. On agency Teamwork installations this is the agency’s per-client batting average and a leading indicator of retainer-margin health: a falling rate against rising logged hours is the canonical “we’re working but not closing” pattern.
| The formula | resolved_in_window ÷ created_in_window, where resolved_in_window counts Teamwork tasks with vortex_iq_finding_id, completed = true, AND completed-on within the 90-day window; created_in_window counts tasks with the same custom field set and created-on within the same window. |
| API endpoints | Teamwork v3 API GET /projects/api/v3/tasks.json paged by meta.page.hasMore. We bucket by vortex_iq_finding_id to avoid double-counting if a finding was re-created. |
| Window | Rolling 90 days, refreshed hourly. The headline number updates on every webhook for the live count; the rate calculation is hourly to smooth single-task volatility. |
| What “resolved” means | completed = true. Teamwork’s task model uses a single completion boolean; there is no separate Won’t Do state. The agency’s convention is to mark complete with a comment explaining the close decision. |
| Project scope | All vortex_iq_outbound Teamwork projects across all connected Sites. |
| Archived projects | Excluded from both numerator and denominator. |
| Time zone | UTC for both created-on and completed-on. The 90-day window aligns to UTC. |
| Alert trigger | < 50% raises a critical alert. |
| Sentiment thresholds | Gauge: green ≥ 75%, amber 50-74%, red < 50%. |
| Multi-Site / multi-project aggregation | Yes, computed on summed numerator and denominator. Per-Site and per-project stack panels available. |
| Roles | owner, operations |
Calculation
Calculated automatically from your Teamwork data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A UK ecommerce-focused agency running 6 retainer clients on Teamwork. Snapshot taken on 02 May 26 at 16:00 BST.| Last 90 days (02 Feb 26 - 02 May 26), all 6 clients | Count |
|---|---|
Findings created (Teamwork tasks with vortex_iq_finding_id, created-on in window) | 84 |
Findings completed (above set, AND completed = true, completed-on in window) | 56 |
| Findings still open from window | 22 |
| Findings re-created (counted once on first close in numerator) | 6 |
- 67% sits in the amber band (50-74%). Healthy for an agency Teamwork installation; the per-client breakdown is what drives action.
- Per-client breakdown matters more than the blended number. A 67% blended rate often hides one or two clients running at 40-45% who drag the average. Open the per-project stack panel; the lowest-rate client is the leading indicator of retainer-margin issues.
- Pair this card with Teamwork’s billable-hours report. The agency-specific signal is rate-vs-hours: a falling rate while hours stay flat means the team is working but not closing, a margin-leak pattern. A falling rate while hours fall is a paused-client pattern, less concerning operationally but a relationship-cooling signal.
- Compare against Findings Open trend. If open count is rising for three weeks while resolution rate sits at 67%, the audit programme is producing more findings than the agency can absorb, which on a retainer becomes a renegotiation conversation with the client.
- Aim for 75% sustained on the blended rate, with no single client below 60%. Per-client floors matter more than the overall on agencies; a single client at 40% means that client is at risk of churn, regardless of how strong the other clients are running.
Sibling cards merchants should reference together
| Card | Why pair it with Resolution Rate | What the combination tells you |
|---|---|---|
| VortexIQ Findings Open | Rate’s denominator-half. | Falling rate + climbing open count = capacity bottleneck. |
| Abandoned Findings (>14d) | Tasks that count in the denominator but never become numerators. | High abandoned + low rate = retainer-margin or paused-client signal. |
| Avg Time-to-Fix (days) | Cycle time inside this rate. | High rate + low time-to-fix = excellent. High rate + high time-to-fix = closing eventually but slowly. |
| Tickets Resolved (7d) | Short-window throughput of all tasks. | High overall throughput but low findings rate = agency is shipping client features but skipping audit closure. |
| Sprint Velocity (avg) | Capacity ceiling. | Flat rate with rising velocity = audit work not entering sprints. |
| Throughput Trend | The slope. | A rate dipping while throughput climbs = deliberate prioritisation away from audit work. |
| Sprint Progress | Whether findings are getting committed to the current sprint. | Low sprint progress + low rate = findings queued but never pulled in. |
Reconciling against the vendor’s own dashboard
Where to look in Teamwork’s own UI:
teamwork.com then open Reports in the left navigation. The Tasks Overview report aggregates completed-vs-created counts across selected projects. Set the time range to Last 90 days and apply the filter Custom field: vortex_iq_finding_id has any value. Teamwork’s Reports module also exposes a Project Health widget that approximates this rate per project and can be pinned to a custom dashboard.
For agency-wide visibility across multiple Sites, the workaround is to maintain one dashboard per Site; Teamwork does not currently support cross-Site reporting natively.
Why our number may legitimately differ from a Teamwork report:
| Reason | Direction | Why |
|---|---|---|
| Window definition | Either | Teamwork’s Reports “Last 90 days” rolls daily at midnight in your account-profile timezone; our window rolls hourly in UTC. |
| Re-created findings | Ours lower | Teamwork counts each completion event; we count once per finding-id. |
| Subtask handling | Either | Teamwork’s report can be configured to include or exclude subtasks; our default is to count subtasks with their own vortex_iq_finding_id. |
| Archived projects | Same | Both we and Teamwork’s default report exclude archived projects. |
| Multi-Site aggregation | Ours wider | Teamwork is per-Site; we sum across all connected Sites. |
| Card | Expected relationship | What causes the divergence |
|---|---|---|
datadog.dd_health_score | Often correlated for engineering-heavy clients. The agency’s rate dips for that client when Datadog incidents spike on the client’s stack. | Use the per-project stack panel here; the per-client correlation is the actionable agency-margin reasoning. |
newrelic.nr_apdex | Same shape. | Same. |
Known limitations / merchant FAQs
My Teamwork Tasks Overview report shows 73% but you say 67%. Why? Six points of gap is normal. Most likely: re-created tasks (Teamwork counts each completion; we count once per finding-id), or window-rolling timezone (UTC vs profile-timezone). Pin a per-project stack panel and the gap usually closes to 2-3 points. Does a “marked complete with comment ‘won’t do’” count as resolved? Yes. Teamwork has only a single completion boolean; the comment is the team’s documentation, not a separate state. We treat all completions as resolutions because closing the loop is what the rate measures. Our blended rate is 67% but Client B is at 38%. What do I do? The per-client number is the actionable signal. 38% on a single client is a renegotiation conversation: either the agency is under-delivering for the retainer, or the audit programme is producing more findings than the engagement scope assumes. Open this card filtered to Client B, plus Findings Open, Abandoned Findings, and Teamwork’s billable-hours report for that client. Within 10 minutes you have the numbers for the client check-in. Our overall rate sits at 45%. Should I be concerned? Yes. Below 50% is the alarm threshold. On agency Teamwork this is the leading indicator of a margin problem across the portfolio, not a single-client issue. We use multiple Teamwork Sites. Which Site’s rate matters most? The lowest. Open the per-Site stack panel; on multi-Site agencies the lowest-rate Site is usually the one with the smaller team or the more transactional client mix. Throughput dropped this week, rate is still high. What’s happening? “Team closed everything easy and left the hard stuff.” Open Avg Time-to-Fix, if mean cycle time climbed alongside the throughput drop, the team has finished quick-wins and is starting on heavier findings. Healthy phase, lasts 1-3 weeks. Today’s rate looks volatile. Why? At low resolution volumes the rate is sensitive: 5 resolutions out of 8 is 62.5% and one extra close moves it to 75%. The 90-day window makes daily volatility small but visible. The 7-day moving rate is less noisy. Agency Teamwork installations typically see end-of-week clustering because billable-time approval drives the close cadence. Multi-team reporting: how do I see resolution rate per agency team within one Site? Teamwork’s Teams feature is the natural boundary. Per-team rate is on the roadmap; until then, the workaround is to use one project per team and tag each as a separatevortex_iq_outbound route in connector setup, the per-project stack reflects per-team breakdown.
Is Teamwork the right tool for tracking this metric?
For agencies and consultancies running multiple retainer clients with billable-hours-driven margins, yes. The dual-significance reading (operations discipline plus retainer-margin signal) is unique to Teamwork because of the integrated time-tracking. In-house ecommerce ops teams will find Asana/ClickUp/Monday more natural; engineering-only teams will find Linear cleaner; PMOs will find Smartsheet richer. Teamwork’s strength is the agency-context overlay this card sits naturally next to.
Resolution rate climbed but I don’t think the team did anything different. What changed?
Three usual causes. (1) Audit programme produced fewer findings (denominator shrank). Check Findings Open trend. (2) A bulk close (the team did a portfolio-wide stale-task review). Check Teamwork’s Activity stream. (3) A project was archived or removed from connector routing; tasks in that project drop out of the denominator while completed counts stay, lifting the rate by 5-10 points overnight.