# Filter contacts

> Build smart filters on the People page — the property, condition, and value pattern, AND and OR logic, every filter dimension from time zone to LinkedIn connection status, and what you can do with the result.

**Open the People page, click Create new filter, pick a Property, choose a condition such as Is, Is not, Contains, Is set, or Is not set, and enter a value. AND adds another property, OR adds another value for the same property. Click Apply to see results or Save to reuse the filter.**

_Status: Reviewed — human-edited, facts not yet confirmed against the product._

## Goal

A precise slice of your [contact](/specifications/contacts) base — everyone who matches a
set of conditions — ready to move to a [list](/specifications/lists), move to a
[sequence](/specifications/sequences), or act on in bulk. Saved filters turn a slice into
a view you can reopen.

## Preconditions

Contacts in the account. Some properties only carry values after a prior action: email
validation status appears after you
[validate the addresses](/behavior/email-validation), call resolution after calls are
logged, inbox category after replies are classified, and custom fields after you create
and fill them.

## Steps

The builder works the same way for every property, on the People page and inside a
sequence's People tab.

1. Open the **People** page and click **Create new filter**.
2. Enter a **Filter name**. This is optional — but if you save the filter, a name makes it easier to find and reuse later.
3. In the **Property** field, select what you want to filter on from the drop-down.
4. Select a condition. Which conditions appear depends on the property: **Is** and **Is not** for exact matches, **Contains** and **Doesn't contain** for partial matches, **Starts with** for prefixes, **Is set** and **Is not set** for whether the field carries any value at all, and **True** or **False** for the sequence-status properties.
5. Enter or pick the value.
6. Click **Apply** to see instant results, or **Save** to both see the results and keep the filter for future use.

## Combining conditions

A filter can hold any number of properties, combined with two operators.

| Operator | Use it for | Effect |
| --- | --- | --- |
| **OR** | The same property with different values | The filter includes contacts that match **any** of the specified criteria |
| **AND** | Different properties | The filter finds contacts that match **all** of the specified criteria |

To build an OR filter, select the **Property**, then click **OR** to add additional
conditions — for example, Provider set to Gsuite, Outlook, or Hotmail returns contacts on
any of the three. To build an AND filter, click **AND** to include the required
properties and select a condition for each — for example, Provider is Gsuite, Sequence is
the Outbound cold outreach sequence, and the contact has opened an email more than once.

The two combine. Click **AND** to add multiple properties, then click **OR** to add
multiple conditions within a property; the system shows results that meet all the
specified conditions. A filter reading "in the Outbound cold outreach sequence, and
Provider is Gsuite, Gmail, or Outlook" returns contacts with those providers *only within
that sequence*. Click **Apply** when the conditions are set.

## Filter reference

| Property | Conditions | Values and notes |
| --- | --- | --- |
| **Time Zone** | Is, Is not, Is set, Is not set | A time-zone value such as UTC+01:00. Is set / Is not set show all contacts who do or do not have a time zone specified in the field |
| **Call resolution** | Is, Is not, Is set, Is not set | Default resolutions are *Positive*, *To Call*, *Negative*, and *Busy*; custom call resolutions you create also appear in the list |
| **Creation source** | Is, Is not | Other, Reply Data (DataSearch, ChromeExtension), Salesforce, Pipedrive, Import CSV, Manually, Reply API, HubSpot, AI SDR, Website visitor, Calendly |
| **Custom field** | Is, Is not, Contains, Doesn't contain, Starts with, Is set, Is not set | Any custom field you added to contacts. AI custom fields add a **Status is** condition |
| **Email Validation status** | Is | Valid, Risky, or Invalid — see [email validation](/behavior/email-validation) |
| **Inbox Category** | Is | Interested and the other categories, including any custom inbox category you created |
| **LinkedIn Connection Status** | Is, Is not | Unchecked, Connected, Not connected, Pending, Connection forbidden, Invalid URL, Revoked |
| **Status: …** | True, False | One property per contact status in the sequence |
| **Title** | Contains (among others) | A free-text job title fragment such as CEO |
| **List** | Is, Is not, Is set, Is not set | A specific list, or any list at all |

### Time zone

Select **Time Zone** as the property, choose **Is** or **Is not**, and enter the value —
for example, UTC+01:00. The **Is set** and **Is not set** conditions do something
different: they return every contact that does or does not have a time zone recorded,
regardless of which one. That is the version to use before a send that depends on local
time.

### Call resolution

Select **Call resolution** as the property, then pick the condition: **Is** shows only
contacts with a specific call resolution, **Is not** excludes them, **Is set** shows all
contacts that have any call resolution recorded, and **Is not set** shows contacts that
have none. Then choose the resolution — for example, Positive. Alongside the default
*Positive*, *To Call*, *Negative*, and *Busy* resolutions, any custom call resolutions you
create appear in the filter list too. See [Calls and SMS](/capabilities/calls-and-sms).

### Creation source

Select **creation source** as the property and use **Is** to view all contacts associated
with a value, or **Is not** to exclude them. The available sources are:

- **Other** — added through sources not listed below.
- **Reply Data** (DataSearch, ChromeExtension) — added from a Realtime B2B Data or Findy search; see [Prospect data](/specifications/prospect-data) and the [Chrome extension](/capabilities/chrome-extension).
- **Salesforce**, **Pipedrive**, **HubSpot** — synced from that CRM.
- **Import CSV** — imported in bulk from a CSV file.
- **Manually** — added by hand.
- **Reply API** — added via the API.
- **AI SDR** — added automatically by Autopilot mode in [AI SDR](/capabilities/ai-sdr).
- **Website visitor** — added through the Website Visitors feature.
- **Calendly** — added automatically by a Calendly booking, when the option to create a new contact if one does not exist is enabled.

If you have set up a native integration with HubSpot, Pipedrive, Salesforce, or Copper
CRM, that integration also appears as its own property in the smart filter. Selecting it
with the **Is set** condition returns the contacts that have a record on the CRM side —
useful for spotting records that never synced. See
[Integrations](/capabilities/integrations).

### Custom fields

Any custom field you add to contacts becomes a filterable property. Standard custom fields
support **Is** and **Is not** for an exact value match, **Contains** and **Doesn't
contain** for a partial match, **Starts with**, and **Is set** / **Is not set** for
whether the field holds any value.

AI custom fields support all of the above and add a **Status is** condition that filters
by enrichment outcome:

- **Enriched** — the field was successfully filled.
- **Failed — Missing variables** — enrichment was skipped because one or more prompt variables were absent.
- **Failed — No results found** — enrichment ran but returned no data.

That last pair is how you find the contacts worth re-running: missing variables mean the
source data is incomplete, no results mean the prompt found nothing to work with.

### Email validation status

After you have [validated your contacts](/behavior/email-validation), select **Email
Validation status** as the property, choose the **Is** condition, and select the status —
for example, Invalid. To catch both problem classes in one pass, click **Or** and add the
Risky status: the filter then shows contacts with either an Invalid or a Risky validation
status. Move that set to a separate list or delete it.

### Inbox category

Select **Inbox Category** as the property and the **Is** condition to find contacts whose
replies were sorted into that category — for example, Interested. Custom inbox categories
you create appear in the filter list as well. See [Inbox](/specifications/inbox).

### LinkedIn connection status

Select **LinkedIn Connection Status** as the property, then **Is** to find contacts at a
specific stage of the connection process or **Is not** to find everyone else. The full set
of statuses is **Unchecked**, **Connected**, **Not connected**, **Pending**, **Connection
forbidden**, **Invalid URL**, and **Revoked**. See
[LinkedIn outreach](/capabilities/linkedin-outreach).

### Status in a sequence

Sequence statuses are exposed one property per status, and the value is **True** or
**False** rather than a picked item. To find contacts that carry two statuses at once,
select the first — for example Status: Replied — set the value to **True**, click **And**,
add Status: Finished, and set that to **True** as well.

The filter offers a property for each contact status — **Active**, **Paused**, **Missing
Data**, **Bounced**, **Out of office**, **Finished**, **Contacted**, **Opted out**,
**Replied**, **Opened**, **Clicked**, **Auto-replied**, **To call**, and **Called** — plus
**Meeting booked**. What each one means, and when Reply assigns it, is in
[Statuses](/reference/statuses).

### Job title

Select **Title** as the property, choose the **Contains** condition, and enter the title
fragment — for example, CEO. Contains rather than Is matters here, because real job titles
carry prefixes and suffixes that an exact match would miss.

### List membership

Select **List** as the property and pick **Is** or **Is not**. In the **Select list**
field, choose the list from the drop-down, or start typing its name — including a shared
list, if you are using Team Edition in the Public mode. The **Is set** and **Is not set**
conditions work at a different level: they return all people who are, or are not, in *any*
list.

### Engagement

Engagement filters are the sequence-status properties with a **False** value. To find the
contacts who never opened your emails, select Status: Opened and set the value to
**False**. The same pattern gives you contacts who never replied, never clicked, or were
never contacted.

## Act on the result

Select the filtered contacts in the grid — the whole result or individual rows — and use
the grid actions.

- **Move to list** — click the button, choose the list, and click **Apply**. Create the list first from **Add new list** on the People page: enter a name and click **Create**.
- **Move to sequence** — click the button, select the sequence from the list, then click **Move contacts**.
- **More → Blacklist** — expand the **More** drop-down, choose **Blacklist**, and pick whether to blacklist the contacts or the whole domain. Blacklisted contacts receive no sequence emails.
- **Save** in the filter panel — keeps the filter itself, so the same slice is one click away next time.

The full set of bulk grid actions — validation, enrichment, status and stage changes,
owner changes, export, and deletion — is in
[Contact management](/capabilities/contact-management).

## Worked example: split out the CEOs

1. On the **People** page, click **Add new list**, name it, and click **Create**.
2. Click **Create new filter**, select **Title** as the property, choose **Contains**, and enter CEO.
3. Click **Apply** to see the results, or **Save** to keep the filter.
4. Select all filtered contacts and click **Move to list**.
5. Choose the list you created and click **Apply**.

## Worked example: re-run the non-openers

1. On the **Sequences** page, click the three dots on the right side of the sequence and select **Duplicate**.
2. Open the original sequence, go to its **People** tab, and click **Create new filter**.
3. Select Status: Opened as the property, set the value to **False**, and click **Apply**.
4. Select the filtered contacts and click **Move to sequence**.
5. Select the duplicate sequence from the list and click **Move contacts**.

## Worked example: blacklist a CSV of contacts

1. On the **People** page, create a new list for the file.
2. Click **Add Contact** and choose **Import from CSV**.
3. Upload the file and map the fields; pick the list you created on the **Options** tab.
4. Once the contacts are in the list, select them and click **More** to expand the drop-down menu.
5. Choose **Blacklist**, then pick whether to blacklist the contacts or the whole domain.

> The blacklist and a list do different jobs. A list groups contacts for outreach; the
> blacklist suppresses sending. A blacklisted contact receives no sequence emails even when
> they sit in an active sequence. See [Lists](/specifications/lists).

## Verification

The grid narrows to the matching contacts as soon as you click **Apply**. Spot-check two
or three rows against the condition you set — for a Contains filter especially, since
partial matches are easy to over-shoot. A saved filter reappears in the filters panel at
the top of the Contacts page and can be reopened without rebuilding it.

## Common mistakes

- Using **Is not set** when you meant **Is not** — the first returns contacts with an empty field, the second returns contacts whose field holds a different value. For the List property, **Is not set** returns people who are in no list at all, not people missing from one particular list.
- Filtering by email validation status before running validation — the property has no values to match until the addresses have been checked.
- Using **Is** on the Title property — job titles rarely match exactly; **Contains** is the condition that works.
- Expecting a filter to behave like a list. A filter is a live view over the grid; a list is a stored membership a contact can belong to alongside others. Move the filtered set to a list when you need it to persist.
- Applying a filter and forgetting to click **Save** — the conditions are gone the next time you open the page.

## FAQ

### How many conditions can one filter hold?

Any number. You can add as many properties as you need to refine the results, and each
property can carry several values through the OR operator.

### What is the difference between AND and OR?

OR widens: it applies to one property with several values and returns contacts matching
any of them. AND narrows: it applies across different properties and returns only contacts
matching all of them. Used together, OR groups the alternatives inside each property and
AND requires every property to match.

### Do I have to name a filter?

No. The **Filter name** field is optional and you can click **Apply** without it. Name it
if you intend to click **Save** — the name is how you find the saved filter again.

### Can I filter by a custom field that Reply's AI filled in?

Yes. AI custom fields support the standard operators plus a **Status is** condition with
the values Enriched, Failed — Missing variables, and Failed — No results found, so you can
separate the fields that enriched cleanly from the ones that need a better prompt or more
source data.

### Can I filter a teammate's contacts?

On Team Edition in the Public mode you can, including by a shared list — start typing the
list name in the **Select list** field and shared lists appear alongside your own. See
[Permissions and roles](/reference/permissions).

### Where do I filter — the People page or the sequence?

Both work and the builder is identical. The People page filters your whole contact base;
a sequence's People tab filters only the contacts in that sequence, which is what you want
for questions like "who in this sequence has not opened anything".

## Related

- [Contacts](/specifications/contacts) · [Lists](/specifications/lists)
- [Contact management](/capabilities/contact-management)
- [Statuses](/reference/statuses)
- [Email validation](/behavior/email-validation)
- [Import contacts](/how-to/import-contacts) · [Manage duplicate contacts](/how-to/manage-duplicates)
- [Edit a running sequence](/how-to/edit-a-running-sequence)

## Build with Reply

- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact search and list endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents filter contacts and act on the result
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted segmentation
