- What is your original issue/pain point you want to solve?
Currently, Zammad does not provide a reliable way to filter or trigger actions based on whether a ticket has any tags or not.
In the search bar, the query !tags:* correctly finds tickets without tags — but this logic is not available in Overviews, Triggers, Automations, or Core Workflows.
This creates a functional gap:
Admins can’t create an overview for “tickets without tags.”
Admins can’t trigger actions like “if a ticket gets its first tag” or “if a ticket loses all tags.”
Automations cannot distinguish between “tagged” and “untagged” tickets.
- Which are one or two concrete situations where this problem hurts the most?
Ticket organization:
To track untagged tickets (for quality assurance), we need an overview for “tickets without tags.” Currently, this is impossible in the UI.
- Why is it not solvable with the Zammad standard?
The search operator !tags:* works only in the global search bar, not in filters for Overviews, Triggers, or Core Workflows, Scheduler, etc… .
The standard tag filters (contains all, contains one, contains none, does not contain one) require explicit tag names and do not allow checking for an empty tag list.
There is no exposed field (like tags_count) that could be used for numerical filtering (e.g. tags_count = 0).
- What is your expectation / what do you want to achieve?
I propose adding a persistent attribute tags_count to the Ticket model that represents the number of tags currently assigned to a ticket.
This field should be usable in all filterable contexts (Overviews, Triggers, Automations, Core Workflows).
Expected behavior:
tags_count = 0 → tickets without tags
tags_count > 0 → tickets with one or more tags
Filters like “greater than,” “equals,” or “less than” can be used consistently.
Alternative (simpler) implementation:
Add a boolean filter condition has tags / has no tags that internally checks for an empty tag list.
Additional information
Technical suggestion:
A simple implementation could hook into tag add/remove operations (e.g. in app/models/tag.rb or via an Observer) to update ticket.tags_count.
Example pseudo-code:
after_add :update_tag_count
after_remove :update_tag_count
def update_tag_count
ticket.update(tags_count: ticket.tag_list.size)
end
Benefits:
Improves consistency between search and filters
Enables better reporting and workflow automation
Very low performance impact
Backward-compatible (no API-breaking changes)
Your Zammad environment:
Average concurrent agent count: ~30
Average tickets a day: ~200
What roles/people are involved: Support agents, Team leads, System administrators
Anything else which you think is useful to understand your use case:
This feature request was derived from a real-world need to identify tickets without tags using the same logic as !tags:*, but in UI-based configurations like Overviews and Core Workflows.
Currently, this gap forces administrators to maintain manual workarounds (custom scripts or API calls), which this enhancement would eliminate.