New) or AI filters (i.e Ticket content is related to printer issue) to target the right tickets.
Deterministic filters
Deterministic filters match explicit criteria like queue, status, priority, and company. They are predictable and fast. Example below when trying to filter for all tickets that are from a company calledAutotask Corporation and are in a New status.

A value dropdown offers the first 100 matches. Fields like Company and Contact can hold tens of thousands of entries in your PSA, so the dropdown shows the first 100 that match and tells you how many more matched — keep typing to narrow it. The limit applies only to what the list offers at once: you can still select as many values as you need. To reach an entry the list does not show, type the start of its name — the dropdown offers the names that begin with what you typed before the names that only contain it.
AI filters
AI filters capture intent across inconsistent fields and text. They reduce noise and catch edge cases. Example below when trying to filter for all tickets that are related to aprinter issue.

Let Neo write the filter
Adjust with Neo, beside Verify Rules, opens the Neo Support chat for this workflow’s filter. Say which items it should run on — “only P1s from Contoso”, “skip anything already assigned” — and Neo reads the saved filter, shows you the conditions before and after, and applies them once you confirm. It replaces the whole condition set when it writes, so it works from what is saved rather than patching part of it. Save the workflow first: Neo reads the saved version, so the button waits while you have unsaved edits.Filters that search for text you type
Some filters ask a yes/no question about text you supply.[Extra] Ticket Notes contain, [Extra] Audit Trail Contains and [AI] Ticket content is related to all work this way.
Pick one of these fields and the builder shows one text box beside it, with no label. Type the words to search for there — !!AssignMe, or ~Ticket Closed~. The builder sets the rest of the rule for you, so there is no operator to choose and no second value to fill in.
Do not move the search text anywhere else, and do not look for a
contains operator on these rules. The field name already names the comparison: contain on the notes and audit-trail filters, related to on the AI one. A rule of this kind with an empty text box is the one to fix.[AI] Ticket content is related to and [AI] Ticket content is not related to, type a topic, such as domain renewal invoices. The AI asks one question per ticket, whether the ticket is related to that topic, and the field you picked sets the direction. Do not type instructions such as “exclude X, but do not exclude Y”: the AI reads the whole text as the topic, so a ticket that fits the “do not exclude” part counts as related, and the “not related to” rule then skips it. To narrow the set, make the topic narrower, or add a second rule on a field such as category or ticket type.
Filter on custom fields
Switch on Use custom field conditions under the filter to match on your PSA’s own ticket fields: user-defined fields in Autotask and ConnectWise, custom fields in Halo and Syncro, and custom columns (u_…) in ServiceNow. Each condition has a field, an operator and a value, and the conditions are combined with the rest of the filter using AND.
Pick the field from the list. The list holds your PSA’s ticket custom fields as of the last PSA sync. Where a field has an internal name different from its label, as in Halo (CFDispatchTicket) and ServiceNow (u_business_unit), the list shows both and the condition stores the internal name.
- A standard field is not a custom field. Halo’s Category 1, a ConnectWise source or status, and similar fields go in the filter rules above. In Autotask, ConnectWise, Halo and Syncro, a custom field condition on such a name reads the field as empty on every ticket, so
nullmatches them all. - A saved field that is not in the list shows a warning under the condition. Pick the field from the list to fix it.
- In ServiceNow, a column that only another ticket table defines, such as Request Item, names that table in the list. A scheduled workflow searches incidents only, so such a column filters only a triggered workflow.
- A field you created in your PSA today appears after the next PSA sync.
- Before the first PSA sync stores your custom fields, the field is a text box. Type the field’s internal name where your PSA has one:
CFDispatchTicketin Halo,u_business_unitin ServiceNow. In Autotask, ConnectWise and Syncro, type the name exactly as your PSA shows it.
Reorder rules and groups
Every rule and every nested group has a drag handle (⋮⋮) on its left and Move up / Move down arrows on its right.- Arrows move the item one slot within its own group. This changes only how the filter reads; it never changes which tickets match, because rules inside one AND or OR group apply regardless of order.
- Drag a rule or group by its handle and drop it on another rule to take that rule’s slot, or on a group’s header (the AND/OR selector) to move it into that group. Drop it on the top header to move it out of a nested group. Moving an item into or out of a group does change what the filter matches — a short notice confirms the destination, and the warnings under the filter refresh straight away. Click Verify Rules if you want to check the result against live tickets.
Where each filter runs
Filters are applied in two places, and the split affects how fast a scheduled workflow runs and how many credits it uses.- Your PSA applies most deterministic filters. Status, queue or team, ticket type, priority, company, and date rules are sent to the PSA as part of the search, so only matching tickets are ever fetched.
- Neo applies the rest after fetching. Rules prefixed with
[Extra](such as# Time Entries countorHours since ticket was created) and[AI]are calculated by Neo, because the PSA has no equivalent field. A few PSA fields also fall into this group where the PSA’s search API cannot express the comparison.
[Extra] and [AI] rules fetches every ticket the PSA-side rules allow, then narrows.
ServiceNow: one Status option can cover two ticket types. ServiceNow stores a status as a number, and it reuses the same number across ticket types with different names. Number 2 is In Progress on an incident and Work in Progress on a request item, and number 8 is Cancelled against Awaiting Approval. Neo names every meaning in the option, so you pick In Progress / Work in Progress.On a triggered workflow the rule matches either ticket type. Add a Ticket Type rule beside it to keep the rule to one.A scheduled workflow searches incidents only, so a Status rule there matches incidents whichever meanings the option names, and an option no incident uses — such as Pending — matches nothing.
The ticket count shown when you verify a workflow is measured before the
[Extra] and [AI] rules are applied. If your filter relies on them, expect the workflow to process fewer tickets than the verification count suggests.When a name appears more than once in your PSA
Some PSA fields let the same name exist several times. Autotask sub-issue types are the common case: each one belongs to a parent issue type, so a name likeProblem can exist once under every issue type you have. Company and contact names repeat too, usually when an old record was archived and a new one created beside it.
The dropdown shows one entry per name, so you cannot tell them apart there. A filter naming that value matches every entry that carries the name. If your PSA has eleven sub-issue types called Problem, a rule for Problem selects tickets under all eleven.
This is the same for
is not and is not in list rules: the filter excludes every entry carrying the name, not just one of them.Issue TypeisHostingandSub-Issue TypeisProblemmatches only theProblemthat belongs toHosting.
Filter by who created or assigned a ticket (ConnectWise)
On ConnectWise you can scope a workflow by the person behind a ticket with two rules. Both show a member dropdown, so you can select one or more people withis in list or is not in list.
[Extra] Entered By— who created the ticket.[Extra] Assigned By— who last set the ticket’s owner. Use this to pick up only the tickets a named dispatcher assigned. A ticket that was never assigned has no value, so it never matches anis in listrule.
[Extra] rules, so Neo applies them after fetching. Pair them with a PSA-side rule (a board, a status, or a date range) on scheduled workflows to keep the fetch small. Assigned By also reads each ticket’s audit trail, which is one more ConnectWise request per ticket.
The dropdown lists your active ConnectWise members. That usually includes the accounts your integrations run as, so you can also select (or exclude) a connector or an automation user. If a name is missing — a deactivated member, or a label with no member record — match it with a
contains rule instead.Filter by the company’s account team (ConnectWise)
On ConnectWise,[Extra] Company Team member matches the people on the Company Team of the company a ticket belongs to. It shows the same member dropdown, so is in list and is not in list take one or more people, and is takes one.
Use it to scope a workflow to the companies a named person looks after — for example, alert only on tickets from the companies your four account managers own:
Company Team memberis in listNorbert V.,Zach S.,Kevin C.,Jonathan C.
is in list rule — use is null to select those companies instead.
The dropdown lists your active ConnectWise members. A company team can also name a contact, who has no member record and so is missing from the dropdown — match a contact with a
contains rule, which takes part of the name and ignores capitalisation.The rule matches on the person, whatever their team role. If the same person sits on one company team as an account manager and on another as a technical contact, both companies match. To narrow it to one role today, add a rule for a field that already separates them, or reach the role through the API — the builder does not offer a role box yet.[Extra] rule, so Neo applies it after fetching, and it reads each ticket’s company team — one ConnectWise request per ticket, served from Neo’s cache when the same company team was read shortly before. Pair it with a PSA-side rule (a board, a status, or a date range) on scheduled workflows to keep the fetch small.
Filter by priority (Halo)
Halo defines priorities per SLA, and each SLA numbers its own levels 1, 2, 3 and so on. The Priority ID dropdown lists every level of every SLA under the name Halo shows for it, so pick the name you see on the ticket in Halo.- A rule matches tickets whose own SLA calls their level by that name. Two SLAs that use the same name for a level match together, as in Halo’s own filters.
- To narrow to one SLA, add an SLA ID rule next to the priority rule.
- Ticket details and agent instructions show the priority under the ticket’s own SLA name too.
Filter by the end user’s email (Halo)
On Halo you can target tickets by the email address of the end user on the ticket. The rule is called End User Email, and it takes any text operator —is, is not, contains.
- Use
containswith a domain (@contoso.com) to select every ticket from one customer’s users. - Halo cannot filter on the address itself, so Neo applies this rule after fetching. Pair it with a PSA-side rule — a status, a team, or a date range — on scheduled workflows.
- A ticket whose end user has no email address on record never matches an
isorcontainsrule. - To match the address an email came from, use Sender Email below. Halo can file an email under the client’s General User, who has no address, so End User Email is empty on that ticket.
Filter by the email sender (Halo)
On Halo,[Extra] Sender Email matches the address that the ticket’s email came from. Halo keeps this address on the ticket even when it files the email under the client’s General User. This happens when the sender’s Halo user belongs to another client, such as “Unknown”.
- Use it for a list of vendor senders:
Sender Emailis in listcommunications@ramp.com,no-reply@vendor.com. Capitalisation does not matter, andcontainswith a domain (@ramp.com) matches every sender from it. - Use
is notto keep a sender out of an agent, for example a dispatcher that must skip vendor notifications. - A ticket with no sender, such as one a technician or the portal created, has no value. It never matches
is,is in listorcontains, matchesis null, and passesis notandis not in list. - Halo’s ticket list does not include the sender, so on a scheduled workflow Neo reads each ticket in full to get it, once per ticket. Pair the rule with a PSA-side rule — a status, a team, or a date range — to keep the fetch small. A triggered workflow already reads the full ticket.
Filter by category (Halo)
On Halo you can target tickets by their category. The rules are called Category 1, Category 2, Category 3 and Category 4, one for each category level in Halo, and they take any text operator.- Use
is nullto select tickets with no category at that level, for example an agent that fills in a missing category on closed tickets:Status IDisClosedandCategory 1is null. isandis in listcompare the full category name as Halo shows it on the ticket, such asTechnical>User Admin>Password/MFA Reset. Usecontainsto match part of it.- Halo categories are standard ticket fields, not custom fields, so use these rules and never a custom field condition named “Category 1”. A custom field condition only reads your Halo custom fields.
- Neo applies these rules after fetching. Pair them with a PSA-side rule — a status, a team, or a date range — on scheduled workflows.
Filter by Top Level (Halo)
In Halo a client can sit under a Top Level, a group of clients.[Extra] Client Top Level matches the name of the Top Level that the ticket’s client sits under, so one rule covers every client in the group, including clients you add to it later.
Client Top LevelisManaged Servicesmatches tickets from every client under that Top Level.is in listtakes several Top Levels, andcontainsmatches part of the name. Capitalisation does not matter.- Pick the Top Level from the list. It shows the Top Levels of the clients Neo synced from Halo. The rule stores the name, so after you rename a Top Level in Halo, pick it again once Neo syncs your clients.
- A client that is in no Top Level never matches
is,is in listorcontains. Useis nullto select those clients, andis notoris not in listto keep them while you exclude a Top Level. - Neo reads the Top Level from the clients it synced from Halo, and fetches a client it has not synced yet from Halo with the ticket. A client moved to another Top Level can match its former Top Level until the next PSA sync.
- Neo applies this rule after fetching. Pair it with a PSA-side rule — a status, a team, or a date range — on scheduled workflows.
Filter by a custom field (Halo)
Halo cannot filter tickets on a custom field, and its ticket list does not include custom field values. So Neo applies every custom field condition after fetching, on scheduled and triggered workflows alike.- On a scheduled workflow, Neo reads a ticket in full to get its custom fields, once per ticket. Pair the condition with a PSA-side rule — a status, a team, or a date range — to keep the fetch small.
is notalso matches a ticket that does not have the field at all.
Run Now and your filters
When you click Run Now on a workflow and give it a ticket, Neo does not do PSA event matching — it starts that workflow directly on the ticket you chose. It does still evaluate that same workflow’s own Filter Ticket conditions first, through a read-only pass. If the ticket does not match the filter, the run is recorded as SKIPPED in Executions and no actions are taken. The Run Now dialog has a Bypass ‘Filter Ticket’ conditions switch. Turn it on to run the workflow on the chosen ticket even when the ticket does not match the filter — useful for testing a workflow against a specific ticket without changing the filter. The public API does the same withbypass_entities_filter: true on Run an agent now, so you can also ask Neo Support to run a workflow on a ticket its filter skips.
A Run Now runs every step of a Workflow in full. Instructions given for one run reach only an Agent step and Dispatch Ticket, in this Workflow or in one it starts with Trigger Another Workflow, so a Ticket Triage step decides every field it covers again, not only the one you want fixed. Neo Support asks you to confirm before it re-runs a Workflow with such instructions, and the public API returns a warning in
meta.warnings when the Workflow has a step that ignores them or starts another workflow.Run Now checks the filter of the workflow you are running. It is separate from how another agent hands off to a target with the Trigger or Schedule Workflow tool, which skips the target’s filter — see that tool’s page for the difference.Building your filters using AI
We get that building filters can sometimes be a bit tricky. So to make this easier, you can get Neo to build your filters for you using theGenerate Rules button. You’d specify, in natural language, what you want to filter for and Neo will build the filters for you.

