> ## Documentation Index
> Fetch the complete documentation index at: https://help.liftify.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Entry and exit rules

> Decide which customers a campaign pulls in, and what makes it stop messaging someone before the sequence finishes.

Entry rules decide who a campaign pulls in. Exit rules decide who it lets go early. Both live on the **Entry / Exit** step of the campaign builder, and both are also shown on the campaign's page so you can read them without opening the builder.

Two lines on that step state the logic:

* **Entry Rules** — *"Customers will enter this campaign if they match any entry rule."*
* **Exit Rules** — *"When multiple exit rules are active, customers will exit campaigns when any rule has its condition met."*

A campaign cannot be launched without at least one entry rule that is switched on.

## Two ways customers get into a campaign

This is the single most important thing to get right, because the trigger list offers options that will never fire for some accounts.

**Automatic entry** is what entry rules do. Something happens — a job is marked complete in your field-service software, a review lands, a customer replies — and Liftify enrols everyone who matches.

**Manual entry** is you putting someone in: the **Enroll this contact in a campaign** checkbox when you add a contact, the **Enroll in Campaign** button on a contact's page, or the **Enroll** bulk action on the contacts list. See [Add a contact and enroll them](/contacts/add-a-contact-and-enroll).

<Warning>
  Manual enrollment does not use entry rules at all, and adding a contact by hand in Liftify does **not** trip the **When customer is added** trigger. That is deliberate: adding someone to your contact list should never quietly start messaging them. If you add contacts by hand and want them in a campaign, enroll them explicitly.
</Warning>

<Warning>
  The triggers **When a job is created**, **When a job is completed**, and **When a job is cancelled** only fire for accounts where a connected field-service system pushes jobs into Liftify. If your jobs live in a system that is not connected, there are no jobs in Liftify to trigger on, and a rule built on one of these will sit there matching nothing forever. Check with whoever set up your Liftify account before you rely on a job trigger.
</Warning>

## Add an entry rule

1. On the **Entry / Exit** step, click **Add Entry Rule**.
2. **Name (optional)** — a label for you, described on screen as *"Optional — describe this rule"*. Worth filling in once you have more than one.
3. **Trigger Event** — the moment that pulls a customer in. The picker starts on **Select trigger event**.
4. Some triggers refer to another campaign. Choosing one of those reveals a **Select campaign** picker.
5. Optionally narrow the trigger with **Conditions** (below).
6. Click **Save Rule**, or **Cancel** to back out.

New rules are saved switched on.

### Entry trigger events

| Trigger                                   | Fires when                                                                                                       |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| **When customer is added**                | A customer arrives from a connected system or integration. Contacts you add by hand in Liftify do not fire this. |
| **When another campaign goal is not met** | A named campaign finishes without meeting its goal for that customer                                             |
| **When campaign goal is met**             | A named campaign meets its goal for that customer                                                                |
| **When campaign is completed**            | A customer finishes a named campaign                                                                             |
| **When customer replies to a campaign**   | A customer replies to a message from a named campaign                                                            |
| **Review Left**                           | A review is matched to that customer                                                                             |
| **Survey Response Completed**             | A customer completes a survey response                                                                           |
| **When a job is created**                 | A job for that customer appears in Liftify                                                                       |
| **When a job is completed**               | A job for that customer is marked complete                                                                       |
| **When a job is cancelled**               | A job for that customer is cancelled                                                                             |

Once you pick a campaign in **Select campaign**, the rule reads back with that campaign's name in it, for example **When 'Spring tune-up' campaign is completed**.

<Warning>
  Chaining a campaign to its own completion event creates a loop. If an entry rule triggers on a campaign-completion event, do not set that campaign's **Campaign Exclusion Time (days)** to 0 — the customer will receive the campaign over and over until they unsubscribe. Liftify shows the same warning on the **Settings** step.
</Warning>

## Add an exit rule

Exit rules stop the rest of the sequence for one customer. On a review-request campaign this is what stops you nagging somebody who already left the review.

Click **Add Exit Rule**; the form is the same as the entry form, with its own trigger list:

| Trigger                             | Stops the sequence when the customer...   |
| ----------------------------------- | ----------------------------------------- |
| **Has opened any touchpoint**       | opens any one message                     |
| **Has clicked any touchpoint**      | clicks a link in any one message          |
| **Has opened all touchpoints**      | has opened every message sent so far      |
| **Has clicked all touchpoints**     | has clicked every message sent so far     |
| **Has clicked review landing page** | clicks through to the review landing page |
| **Review Left**                     | leaves a review                           |
| **Has replied**                     | replies to a message                      |
| **Survey Response Completed**       | completes a survey response               |

A customer who exits keeps their history — nothing is deleted, the remaining messages just do not send.

## Narrow a rule with conditions

Conditions filter a trigger. "When a job is completed" plus a condition on **Invoice Amount** means only jobs above a certain value pull the customer in.

1. In the rule form, click **Add Condition**.
2. Choose a **Field**, an **Operator**, a **Type**, and a **Value**. Operators depend on the type — text fields offer things like *contains* and *is not empty*, numbers offer *greater than* and *between*, dates offer *before* and *after*, yes/no fields offer *is true* and *is false*.
3. **Require field to be present in payload** is ticked by default. Leave it ticked so the condition is only judged when the incoming information actually contains that field. A rule card that has conditions shows a **Conditional** badge.
4. With two or more conditions, choose **Must match ALL** or **Can match ANY** at the top of the **Conditions** section.
5. **Remove** deletes a condition row.

Fields are grouped by what they describe: **Customer**, **Account**, **Location**, and any custom fields you have set up. Three groups only apply to certain triggers, and the group name says so:

* **Review (review\.matched trigger only)** — Review Source, Star Rating, Has Comment
* **Survey Response (survey response completed trigger only)** — NPS Score, Overall Score
* **Job (job triggers only)** — Job Name, Job Type, Job Status, Business Unit, Invoice Amount, Scheduled Date, Completed Date, Job Date, Source

Picking a field from a group that does not match your trigger gives you a rule that never matches.

Until you add one, the section reads *"No conditions have been added."*

## Switch a rule on or off, edit it, delete it

Each rule card has:

* an on/off toggle, with an **Active** or **Inactive** badge. Switching a rule off is the safe way to stop it without losing how it was built.
* an edit control, which reopens the same form
* a delete control, which asks *"Are you sure you want to delete this rule?"*

Before you add any, each section reads *"No entry rules have been added."* / *"No exit rules have been added."*

## Why a matching customer still didn't get in

A customer can match an entry rule perfectly and still not be enrolled. Liftify checks several things after the rule matches:

* **The campaign is active.** A draft or inactive campaign enrols nobody.
* **The customer's location is assigned to the campaign** on the **Locations** step.
* **Exclusion windows.** The campaign's own **Campaign Exclusion Time (days)**, plus the two account-wide windows in **Settings → Campaigns**, can all hold a customer back because they were messaged recently. See [Account-wide campaign defaults](/campaigns/account-campaign-defaults).
* **Prevent Campaign Collision.** If that setting is on for the campaign, a customer already in another active campaign is blocked.
* **Sending days.** A campaign with no sending day ticked does not enrol.
* **Unsubscribes.** An unsubscribed customer is not enrolled.

If enrollment is what you actually want for a specific person, enrolling them by hand from their contact page skips the exclusion windows — it is treated as a deliberate decision you made.
