Rule operators

Last updated: October 16, 2026

Every operator available in the rule builder — what it does, what kind of value to put on the right side, and a working example for each.

What's covered

This catalogs every operator you can choose in the rule builder when you're creating a policy rule or a form-level condition. It does not cover:

  • The And / Or grouping that combines multiple conditions — see 📄 Understanding policies for that.

  • The facts (left side of a condition) you can build rules against — those depend on your account's standard fields, custom attributes, and connected entities. The rule builder shows what's available as you type.

About the facts in these examples. Most placement-level data on a typical Onboarded account lives under placement.custom_attributes.* rather than as top-level placement fields. The examples below use realistic paths: top-level fields when they exist (client.name, job.name, job.address.state, employee.date_of_birth) and placement.custom_attributes.* for everything else.

The operator dropdown shows every operator regardless of the fact you've selected. The rule builder won't stop you from pairing an operator with a fact type that doesn't make sense (e.g., less than on a text field). Most mismatched pairings evaluate to false and the condition never matches — but that isn't universal. The negative operators is not, is not in, and does not contain return true when the fact is missing, so a rule you expected to sit quiet can match instead. Use the tables below to pair operators with the right kinds of facts, and check the If the fact is missing column on the equality, membership, and list membership tables before you rely on a negative condition.

Equality

Use these on any single-value fact — text, number, date, or a single-select option.

Operator

What it does

Input

Example

If the fact is missing

is

Matches when the fact exactly equals the value.

Single value of the same type as the fact.

client.name is "Acme Corp"

false

is not

Matches when the fact does not equal the value.

Single value of the same type as the fact.

placement.custom_attributes.employment_type is not "Contractor"

true

A fact is missing when the record has no value stored for it — an unpopulated custom attribute, or an address that was never saved. is returns false against a missing fact; is not returns true.

Comparison

Use these on facts that are numbers or dates. Comparing strings with these operators is generally not what you want — string comparison is alphabetical, not what most rules need.

Operator

What it does

Input

Example

less than

Matches when the fact is strictly less than the value.

A number or date.

employee.date_of_birth less than 2008-01-01

at most

Matches when the fact is less than or equal to the value.

A number or date.

placement.custom_attributes.pay_rate at most 25.00

greater than

Matches when the fact is strictly greater than the value.

A number or date.

placement.custom_attributes.start_date greater than 2026-01-01

at least

Matches when the fact is greater than or equal to the value.

A number or date.

placement.custom_attributes.pay_rate at least 15.00

Membership

Use these when the fact is a single value and you want to check whether it's one of several acceptable values — for example, "any of these states" or "any of these client names." Enter the values as a comma-separated list.

Operator

What it does

Input

Example

If the fact is missing

is in

Matches when the fact is one of the listed values.

Comma-separated list of values.

job.address.state is in California, Oregon, Washington

false

is not in

Matches when the fact is not one of the listed values.

Comma-separated list of values.

client.name is not in "Acme Corp", "Beta Inc"

true

The asymmetry matters most here. A record with no stored value for the fact falls out of an is in condition, and falls into an is not in condition. A rule reading employee.address.state is not in CA, NY matches an employee with no address at all. If you need a negative condition, pair it with a second condition requiring the fact to exist.

List membership

Use these when the fact itself is a list — typically a multi-select field — and you want to check whether a particular value sits inside it.

Don't confuse contains with is in. They look similar but flip which side is the list. is in: the value is a list, the fact is a single value. contains: the fact is a list, the value is a single value to look for inside it.

Operator

What it does

Input

Example

If the fact is missing

contains

Matches when the fact (a list) includes the value.

Single value to look for inside the fact.

placement.custom_attributes.skills contains "Forklift"

false

does not contain

Matches when the fact (a list) does not include the value.

Single value.

placement.custom_attributes.skills does not contain "Forklift"

true

Same shape as is in / is not in: an unpopulated multi-select never satisfies contains, and always satisfies does not contain.

Text matching and case

Text comparisons match case exactly unless you tell them otherwise. Spanish, spanish, and SPANISH are three different values to a rule, so a condition reading employee.custom_attributes.language_preference is Spanish skips a record that stores spanish.

The Aa button on the right side of the value input controls this. It starts selected, which means the comparison matches case. Click it once and the comparison ignores case instead. Hovering over the button tells you which state the condition is currently in.

The toggle appears only on the operators that compare text — is, is not, is in, is not in, contains, and does not contain. The comparison operators in the table above don't show it, since numbers and dates have no case.

Ignoring case also widens what counts as a match on true/false values. With the toggle off, a fact stored as TRUE or True matches a value of true. That's usually what you want for data arriving from CSV imports and upstream dropdowns, but it means a condition can start matching records it skipped before — confirm the new behavior on a test record before you rely on it.

Rules you built before this toggle existed keep matching case exactly. Nothing changes on an existing condition until you turn case matching off yourself.

Spaces count too. A text value has to match character for character, including spaces at the start or end. A condition reading employee.first_name is "Justin " — with a trailing space — skips an employee whose first name is stored as Justin. The Aa toggle doesn't help here, since it only changes how capitalization is compared.

A stray space can sit on either side of a condition: in the value you typed into the rule, or in the data that arrived from your ATS. For is in and is not in, the rule builder trims the spaces around each comma-separated value, but the fact is still compared exactly as it's stored. Numbers and true/false values aren't affected — 124 still matches 124. If a condition matches some records and not others, check both sides for extra spaces.

Related