Home → Users Manual → Filters → Example: Escalation Dashboard
6.21. Example: Escalation Dashboard
Updated: 3 Sep 2026, 10:04 PM EDT
Scenario
A manager wants one view of everything needing escalation. A request qualifies if it is urgent and the customer has waited more than 2 hours, or not urgent but has waited more than 8 hours and written more than once without a reply. Only open requests in Billing or Technical Support.
The shape of the problem
Every request has to clear the same 2-hour wait, urgent or not. A request that is not urgent then has to meet two further requirements: the customer must have been waiting more than 8 hours, and must have written more than once. Being urgent is what lets a request skip those two.
That is the idea to hold on to, because it is exactly how the filter gets built.
Setup
Click Create Filter in the left navigation. Everything below happens on the Filter tab unless noted.
1. Name it and share it
- Filter Name: Escalation Dashboard
- Who else can view this → Permission group…, Support Managers
- Tick Display count in Workspace
2. Leave the top-level match on all
The line above the conditions reads Match [all] of the following conditions. Leave it on all: every line and every group below has to pass.
3. Add the three conditions that apply to every request
Every condition is added the same way — click the + icon (Add condition) below the condition box. A blank row appears with a dropdown on the left; choose the condition there, and fill in the controls that appear beside it.
- Open/Closed (under Request Details) → open
- Customer wait time (minutes) (under Date and Time) → Greater than → 120. This field is in minutes, not hours. The calculator icon beside the value box opens Calculate Minutes if you would rather work in hours and let HelpSpot convert.
- Last public reply from (under Other) → Customer. This is the condition that makes "waiting" mean waiting — see below.
4. Add the category group
A Category condition holds one category, so covering two of them takes a group.
- Click the + below the condition box to add a row.
- In its dropdown, scroll to the Advanced heading and choose ANY of the following are true. The row turns into a group header with its own + icon beside it, and one blank condition appears inside the group.
- Set that inner condition to Category → Is → Billing.
- Click the group's own + to add a second inner condition: Category → Is → Technical Support.
The two + icons do different things, and this is the step that trips people up: the one on the group header adds a condition inside the group; the one below the whole condition box adds another top-level condition. (Inner conditions are inserted directly under the group header, so a group can end up listing them in the reverse of the order you entered them. Inside an ANY group, that makes no difference to the result.)
5. Add the first exemption group
- + → Advanced → ANY of the following are true.
- Set the inner condition to Is urgent (under Request Details). It takes no operator and no value — choosing it is the whole condition.
- Group's + → Customer wait time (minutes) → Greater than → 480.
6. Add the second exemption group
- + → Advanced → ANY of the following are true.
- Set the inner condition to Is urgent.
- Group's + → Number of public updates (under Other) → Greater than → 1.
What you should end up with
Match all of the following conditions:
- Open/Closed → open
- Customer wait time (minutes) Greater than 120 — the 2-hour floor, applied to everything
- Last public reply from → Customer
- ANY of the following are true: Category Is Billing; Category Is Technical Support
- ANY of the following are true: Is urgent; Customer wait time (minutes) Greater than 480
- ANY of the following are true: Is urgent; Number of public updates Greater than 1
7. Preview it
Click Run Filter to check the conditions before saving. It shows the first 10 matches unless you tick Show all results first. Spot-check a few rows: every result should be open, in one of the two categories, waiting on a reply from you, and either urgent or well past both non-urgent thresholds.
8. Set the Options tab
- Columns To Display: Request ID, Customer, Email Subject, Category, Assigned To, Customer Wait Time, Public Update Count
- Order: Customer Wait Time, Descending
- Group Requests By: Category
- Tick Never cache the workspace display count
Then Save Filter.
Category and reporting tag names in this example are placeholders — substitute the ones your installation actually uses.
Why "Last public reply from → Customer" is in there
It is doing two jobs, and the filter is wrong without it.
It enforces the "without a reply" half of the rule. The scenario asks for customers who have written more than once and not been answered. Nothing else in the filter says that.
It keeps Customer wait time honest. That condition only measures a live wait while the customer's message is the most recent thing on the request. If a staff member has replied since, it returns the gap between the customer's last message and that reply instead — a historical figure that never changes. So without this condition the dashboard would also list requests where the last exchange happened to be slow but nobody is waiting on anything now.
One rough edge remains, and it is worth knowing about: Number of public updates counts every public note, staff replies included, so it is a proxy for "the customer wrote more than once" rather than an exact count of customer messages. With Last public reply from in place it behaves correctly in the ordinary case. The exception is a staff-initiated request — staff wrote first, the customer replied once — which counts as two.
Why "Is urgent" appears twice
This is the part that looks like a mistake, and isn't.
Each of the last two groups is an exemption.
- "Either this request is urgent, or it has waited more than 8 hours."
- "Either this request is urgent, or the customer has written more than once."
An urgent request satisfies both groups just by being urgent, so neither extra requirement applies to it — it only has to clear the 2-hour floor at the top. A request that is not urgent fails the urgent half of both groups, so it has to satisfy the other half of each: more than 8 hours and more than one message.
There are two groups because there are two requirements to be excused from. If non-urgent requests had three extra requirements, there would be three groups, each starting with Is urgent. The repetition is doing real work: it is not the same condition entered twice, it is the same exemption applied to two different rules.
Why two waiting thresholds?
The other thing that looks like a duplicate: the filter asks for 2 hours at the top and 8 hours further down. If a request has already been caught by the 2-hour line, what is the 8-hour test adding?
Nothing after the first condition is catching anything. In a Match all filter every condition can only remove requests. The 8-hour group is not there to find requests — it is there to hold requests back.
Follow one through. A Billing request, not urgent, waiting 3 hours, customer has written twice:
- Open — passes
- Waited more than 2 hours — passes (180 minutes)
- Category is Billing — passes
- Either urgent, or waited more than 8 hours — fails. It is neither.
So it does not appear. Without that group it would land on the dashboard at the two-hour mark, which is not what the rule asks for: a request that is not urgent is not supposed to escalate until 8 hours. The same request at 9 hours passes the group and shows up.
The two thresholds are the limits for two different populations. 2 hours is what an urgent request has to clear; 8 hours is what a non-urgent one has to clear.
Then why is the 2-hour line at the top rather than in its own group?
Because anything that has cleared 8 hours has necessarily cleared 2. Stating the 2-hour requirement for everyone costs nothing on the non-urgent side, and it saves a fourth group. The strictly equivalent version — ANY of the following are true: Is Not urgent; Customer wait time (minutes) Greater than 120 — is more to read and returns exactly the same requests.
Why it has to be built this way
The natural way to write this rule is two branches — "urgent and waited 2 hours" OR "not urgent and waited 8 hours and wrote twice". That needs a group inside a group, and HelpSpot allows only one level of grouping. See Sub-Condition Groups.
You cannot merge the last two groups into one, either. That would mean putting "waited 8 hours and wrote twice" inside a single ANY group — another nested group, and equally not allowed.
If you would rather write the branches out literally
The same filter can be built the long way, with no exemption logic to follow. Set the top level to Match any and add four groups, one per combination:
- ALL: Open; Last public reply from Customer; Category Is Billing; Is urgent; wait > 120
- ALL: Open; Last public reply from Customer; Category Is Billing; Is Not urgent; wait > 480; public updates > 1
- ALL: Open; Last public reply from Customer; Category Is Technical Support; Is urgent; wait > 120
- ALL: Open; Last public reply from Customer; Category Is Technical Support; Is Not urgent; wait > 480; public updates > 1
Each group is one complete escalation case, which some people find easier to check. The cost is repetition: Open, the reply condition and the category appear in every group, and adding a third category means adding two more groups rather than one line. Both versions return exactly the same requests — pick whichever you would rather come back to in six months.
Why the rest of it works
Grouping by category shows whether escalations are concentrated in one team. Urgent requests appear at the top of each group by default. Never Cache keeps the count honest on a filter people are watching.