← All guides
Contents & other guides

Getting started

Filter & search guide

The same filter-and-search box sits above most lists in HumanR — staff, leave, payroll, loans, documents, accommodation and more. It behaves identically on every one; only the columns change to match the list. One box replaces a row of dropdowns: pick several values at once, search by part of a name, exclude a value, and share the result as a link. You never have to type the syntax: + Add filter writes it for you.

This is the guide HumanR users read inside the product, published as-is. It is written for someone with the screen in front of them, so it describes buttons you cannot click from here — which is rather the point: you can check how the product behaves before you commit to it.

Three ways to filter

Type a column and HumanR suggests the values it has actually seen.Type a column and HumanR suggests the values it has actually seen.
Type a column and HumanR suggests the values it has actually seen.

All three end up in the same place — pick whichever suits you:

  1. + Add filter — the no-typing route. Pick a column, pick how to match it, tick the values, press Apply. Multi-select is checkboxes. This is the old dropdown panel, except it holds every column and lets you tick more than one value.
  2. Type in the box — start typing a column name and the list appears; press Enter or Tab to take a suggestion. After the colon it suggests real values from your data. to move, Esc to close.
  3. Just type a word — anything that isn't a column:value is searched across the list's main text columns at once. On the staff list that's staff number, name, nickname, contact, WhatsApp and email; other lists search their own.

Press Enter (or the Filter button) to apply. reset clears everything and forgets the remembered filter.

Chips — what is applied

Once applied, each filter appears below the box as a plain-English chip: Department is any of FINANCE or ADMIN × Click its × to drop that one filter and re-run — you never have to edit the text to undo something.

A chip with a dashed border is one the list applied for you (see Filters a list adds for you). A red chip is one that could not be applied — see When it turns red.

Filtering by a column

Filtering by a column — build a precise query without leaving the list.Filtering by a column — build a precise query without leaving the list.
Filtering by a column — build a precise query without leaving the list.

The shape is column:value — no spaces around the colon. Several filters separated by spaces must all match:

status:Activecurrently active staff
department:FINANCEone department, exact name
department:"MARINE OPERATIONS"a name with spaces — wrap it in quotes
status:Active department:FINANCEboth must be true

Columns answer to their everyday names as well: dept:, nat:, phone:, manager:, grade:, contract:, probation: and more all work — see All columns. Autocomplete inserts the quotes for you whenever a value needs them.

Several values at once

A comma means “any of these” — this is the thing the old dropdowns could not do:

department:FINANCE,ADMINin either department
department:"MARINE OPERATIONS","SITE OPERATIONS"quote each name that has spaces
status:Active,OnLeaveactive or on leave
nationality:BANGLADESHI,INDIAN,NEPALIas many as you like

Building one by typing: pick the first value as usual, then type a ,. The list reopens, and from then on every value you pick keeps the list open — so the comma is typed once, not once per value. Press space when you're done.

Or don't type at all: + Add filter → Department → is any of gives you checkboxes.

Partial matches — the LIKE equivalents

When you don't want to list every value, match on part of the name instead. ~ is “contains”, ^ is “starts with”:

In SQLHereFinds
LIKE '%BOATYARD%'department:~BOATYARDBOATYARD, BOATYARD-FIBER, and FIBER - BOATYARD
LIKE 'BOATYARD%'department:^BOATYARDonly the ones that begin with it
LIKE '%fin%'department:~finFINANCE, FINANCE & ACCOUNTS, …
NOT LIKE '%BOATYARD%'-department:~BOATYARDeveryone else

Case doesn't matter, and you never type % yourself. One ~ filter often replaces a long comma list — department:~BOATYARD catches every BOATYARD department, however many there are and whatever gets added later.

Excluding — the minus

A leading - inverts any filter, including a list or a partial match:

-nationality:BANGLADESHIeveryone else
-department:FINANCE,ADMINin neither department
-status:Terminated,Resignednobody who has left

Rows with nothing in that column count as “not it” — -department:~fin includes staff with no department at all, which is normally what you mean.

Blank & filled

email:!*no email on file — the data-cleanup filter
email:*has an email
department:!*not assigned to any department
contract:!*no contract end date recorded

Read * as “has something”. These take no value.

Dates & expiries

Write a date as 2026-01-31, or relative to today: today, +90d (90 days ahead), -30d, +6m, -1y. Relative dates are worked out when you press Enter, so the link you share is a fixed date.

contract:<=+90dcontracts ending within 90 days — including already expired
probation:<=+30dprobations ending within a month
joined:>=2025-01-01joined this year or later
joined:>=2025-01-01 joined:<=2025-12-31joined during 2025
joined:2025-01-01..2025-12-31the same thing, as a range
lastticket:<-1yno ticket in over a year

<= and >= include the day itself; < and > don't. An expiry chase deliberately has no lower bound, so rows that expired last month — the urgent ones — stay in the list. When you filter on an expiry the list grows a matching date column, sorted with the most urgent first.

Numbers & ranges

devicepin:10004exactly
devicepin:>=10000at least
devicepin:10000..20000between, inclusive of both ends

.. works on dates too. Both ends are included.

All operators

Which ones apply depends on the kind of column — + Add filter only ever offers the legal ones, and typing an illegal one tells you which are allowed.

WriteMeansWorks onExample
:is / equalsevery kindstatus:Active
,is any oftext, choice, lookupdept:FINANCE,ADMIN
~containstext, lookupdept:~fin
^starts withtext, lookupdept:^BOAT
> <after / before, more / lessdate, numberjoined:>2025-01-01
>= <=on or after / on or beforedate, numbercontract:<=+90d
..between (inclusive)date, numberdevicepin:100..200
*has a valuetext, lookup, date, numberemail:*
!*is blanktext, lookup, date, numberemail:!*
-not — inverts any of the aboveevery kind-status:Resigned
" "keeps spaces togetherevery kinddept:"HUMAN RESOURCES"

Everything is joined with AND, and there is no or keyword or brackets — the comma is how you say “or”, within one column.

The staff columns

The Columns menu — show or hide any column to shape the view.The Columns menu — show or hide any column to shape the view.
The Columns menu — show or hide any column to shape the view.

These are the columns on the staff list — the fullest set, shown here as the worked example. Every other list (leave, payroll, accommodation, documents and the rest) has its own columns; open + Add filter on that list, or start typing in its box, to see them. The operators and syntax on this page are the same for all of them.

Every column below can be filtered on. The also answers to spellings mean exactly the same thing — use whichever you'd say out loud.

ColumnTypeAlso answers to
Identity
empnotextno, staffno
name nickname shortcodetext
genderchoice
nationalitytextnat, country
religiontext
maritalstatustextmarried, marital
seriesstaff-no prefixseries:BD → staff numbers starting BD-
Contact
contacttextphone, mobile
whatsapp emailtext
Placement
departmentlookupdept, division
designationlookuptitle, job
sitelookuplocation, worksite
companylookup
Employment
statuschoiceActive, OnLeave, Terminated, Resigned, …
joineddate
contractexpirydatecontract
probationexpirydateprobation
terminateddateleft
reportstotextmanager
employmenttypechoicetype, workercategory — Local, Foreign, Unknown
hierarchyleveltextlevel, grade
ticketeligibilityyes/noticket, ticketeligible
lastticketdate
devicepinnumberpin
Skills
vehicles licence motorcycletext
Pay
salarycategorytextsalary
paymentcategorytextpayment
pensionchoice
bankaccounttextrestricted — see below
Personal
dob, addresses, emergencycontactname, emergencycontact, emergencycontactaddress, terminationreason, specialremarksdate / textrestricted — see below

Not sure of the name? Type the first few letters — the list matches the column's label and its nicknames, so “div” finds Department.

Filters a list adds for you

A list can start with a sensible default already applied, shown as a dashed chip so you can see it and drop it. The staff list is the clearest example: it leaves out anyone terminated or resigned unless you ask otherwise — Excluding past staff × Click its × to include everyone.

On the staff list this default also steps aside the moment you mention status: yourself — so status:Terminated,Resigned shows leavers only, and status:Terminated,Resigned department:* narrows that to leavers who still hold a department. Other lists apply their own defaults in the same way, and any of them comes off with a click.

When it turns red

A filter that can't be applied is never quietly ignored — it comes back as a red chip saying why, and the rest of the query still runs:

  • Unknown filter “xyz” — no such column. Check the list.
  • Status can't be filtered that way. Try: is, is any of. — the operator doesn't suit that column.
  • “soon” isn't a date. Try 2026-07-30, today, +90d or -30d. — the value didn't parse.
  • You don't have permission to filter by date of birth. — see below.

This is deliberate: a filter that silently did nothing would show you a wrong-looking list with no explanation.

Sharing & memory

The whole filter lives in the page address, so copy the URL and send it — the person who opens it sees the same list (through their own permissions). Bookmark it for a view you run every week. Old bookmarks from before the filter box still work; they redirect to the new form automatically.

Your last filter is remembered, per list. Come back to the same list later — from the menu, from a link, tomorrow morning — and it's still applied. Each list remembers its own filter separately. Press reset to clear it and start from the full list.

Clicking the box while it's empty offers your recent searches, the last ten. Both of these are kept in this browser only, never on the server.

Restricted columns

Pay and personal columns — bank account, date of birth, addresses, emergency contacts, termination reason, special remarks — need the Sensitive · Pay or Sensitive · Personal permission. Without it they are absent from the suggestions and from + Add filter, and typing one is refused rather than ignored. That's on purpose: filtering on a date of birth would let someone narrow it down guess by guess, which is exactly why those columns can't be sorted on either.

Worked examples

Copy any of these into the box:

FilterWhat you get
department:FINANCE,ADMINstaff in either department
department:~BOATYARDevery BOATYARD department at once
contract:<=+90d status:Activeactive staff whose contract ends within 3 months, expired first
probation:<=+30dprobations to confirm this month
email:!* status:Activeactive staff with no email — a cleanup list
joined:>=-30djoined in the last 30 days
-nationality:MALDIVIAN status:Activeactive expatriate staff
site:"K.MALE" designation:~engineerengineers of any grade at one site
status:Terminated,Resigned terminated:>=-1yeveryone who left in the past year
series:BD status:Activeactive staff on the BD staff-number series
department:!*staff not assigned to a department
manager:~hassaneveryone reporting to a Hassan

Whatever you end up with, Export CSV gives you the same rows as a file, and clicking a column header sorts them without losing the filter.

Questions this guide did not answer?

Ask us directly. We answer product questions in plain language, including the ones where the answer is “not yet”.

No credit card. No sales call required. A real login, emailed to you.