# Input-question answer conditions

Use a visitor's saved answer to decide what to show them. You'll find the comparisons for each input type, including numbers, email domains, dates, and missing answers.

Available on the Grow, Scale, and Pro plans.

You can target visitors using an answer they've already given you, such as how many projects they manage or the domain in their email address.

## What it checks

Input-question conditions compare a visitor's saved answer to a specific question. Find the question under **Segments / Questions**, then choose an operator for its input type.

The available operators depend on the question. A **Number** question offers numeric comparisons, while an **Email** question offers email-domain comparisons. You select a question, not a generic expression or a position in a flow.

## When to use it

Use these conditions to compare a saved input answer or check whether a visitor has answered at all.

For multiple-choice answers, use [segment membership conditions](https://rightmessage.com/help/conditions-segments). For an answer event during the current page view, use [Question Engagement](https://rightmessage.com/help/conditions-rightmessage).

Numeric comparisons inside **Scoring & Data** use [score and variable conditions](https://rightmessage.com/help/conditions-scores). Those have different rules for missing values.

## Options

### Whether they've answered

Every supported input type offers **has answered** and **has not answered**. A newly selected input question starts with **has answered**, with no value field.

**has answered** means there's a saved, non-null answer for the question. Zero and an empty text answer still count. **has not answered** checks the opposite.

For every other operator, an absent or null answer doesn't match. For example, **domain is not** with `example.com` on an **Email** question won't include someone who has never answered it.

If a question was deleted or is otherwise unavailable, no operator matches, including **has not answered**. The editor tells you the question is no longer available so you can select a valid one. A missing question isn't the same as an existing question with no answer.

### Numeric answers

**Number**, **Currency**, **Slider**, **Rating**, and **NPS** questions share these operators:

| Choose                       | Enter                 |
| ---------------------------- | --------------------- |
| **equals**                   | One number            |
| **does not equal**           | One number            |
| **greater than**             | One number            |
| **greater than or equal to** | One number            |
| **less than**                | One number            |
| **less than or equal to**    | One number            |
| **between**                  | A minimum and maximum |

**between** includes both endpoints. Enter the minimum first and the maximum second. Non-finite numbers and reversed ranges aren't valid comparison values.

These comparisons need a stored numeric answer. Text such as `"10"` isn't converted into a numeric answer by the condition. Currency comparisons use the stored number and don't convert currencies.

### Text answers

**Short text** and **Long text** questions offer **equals**, **contains**, **starts with**, **is empty**, and **is not empty**, as well as the two presence operators.

Comparisons are case-insensitive. **equals** checks the entire text, **contains** finds text anywhere within the answer, and **starts with** checks the beginning. Each takes one text value. They don't use the shared text operators' comma-separated alternatives or wildcard patterns.

**is empty** and **is not empty** need no value field. They trim whitespace before checking length, so an answer containing only spaces is empty. Ordinary text comparisons don't trim the answer.

An absent answer isn't an empty answer. **is empty** matches only an existing text answer whose trimmed content is empty. **has not answered** checks for absence.

### Website answers

**Website** answers offer the text operators above, plus **domain is** and **domain ends with**.

Domain operators use the hostname from a valid HTTP or HTTPS website answer. Enter a domain such as `example.com`, not a full URL. Matching is case-insensitive.

- **domain is** with `example.com` matches that hostname exactly.
- **domain ends with** with `example.com` matches `example.com` and subdomains such as `docs.example.com`.
- It doesn't match `notexample.com`.

An invalid website value or unsupported URL scheme won't pass a domain comparison, even if the text contains the domain. Choose a text comparison when you want to check the text itself rather than a valid hostname.

### Country answers

**Country** answers offer **is**, **is not**, and **is any of**. Choose one country for **is** or **is not**, and one or more for **is any of**.

These conditions use the country selected in the answer, not the visitor's IP location. For inferred location, use [location conditions](https://rightmessage.com/help/geolocating-your-visitors).

A missing, null, or non-text country answer won't pass **is not**. A saved empty or unrecognized text value can pass it because this comparison doesn't validate the saved country code. An empty **is any of** selection doesn't match.

### Phone number answers

**Phone number** answers offer **country is**, **country is not**, and **country is any of**, with country selectors.

RightMessage uses the country stored with the answer when it's available. Otherwise, it can use a normalized international phone number if the calling-code information identifies one unambiguous country. An absent, invalid, or ambiguous country doesn't match, including with **country is not**.

This checks the phone answer's country, not the visitor's current physical location. It doesn't check whether the phone is active or can receive messages.

### Email answers

| Choose                  | Enter            | What it checks                                                |
| ----------------------- | ---------------- | ------------------------------------------------------------- |
| **domain is**           | One domain       | An exact match                                                |
| **domain ends with**    | One domain       | That domain or a subdomain                                    |
| **domain is not**       | One domain       | A different valid email domain                                |
| **domain is any of**    | Multiple domains | Any exact match                                               |
| **is a business email** | No value         | The domain is outside the bundled personal-email domain list. |
| **is a personal email** | No value         | The domain is on that list.                                   |

Domain comparisons are case-insensitive and need a valid email domain. **domain ends with** respects domain boundaries. `example.com` includes `mail.example.com`, but not `notexample.com`.

Business and personal email checks use a domain list. They don't verify employment, company size, mailbox ownership, deliverability, or consent. An address on a custom domain doesn't confirm a business relationship.

### Name answers

**Name** answers offer **first name equals**, **first name contains**, **has last name**, and **has no last name**.

The first two take one text value and compare case-insensitively. They read the separately stored first-name part, rather than guessing from the first word of a full-name string.

The last-name operators need no value. **has no last name** requires a nonempty first-name part and an empty last name. It won't match an absent answer or an answer with no usable name parts.

### Address answers

**Address** answers offer **country is**, **country is not**, **country is any of**, **region equals**, **city equals**, and **postal code starts with**.

Country operators use country selectors. Region, city, and postal-code operators take a text value and compare case-insensitively. Postal-code matching checks the beginning of the value, not a geographic radius.

These conditions read the separately stored address parts. They don't geocode a plain address string, infer a city from a postal code, or fall back to IP geolocation. If a required part is missing, the condition doesn't match, including a negative country comparison.

### Date answers

| Choose                   | Enter                              | When it matches                                                   |
| ------------------------ | ---------------------------------- | ----------------------------------------------------------------- |
| **before**               | One date                           | The answer is earlier.                                            |
| **after**                | One date                           | The answer is later.                                              |
| **on**                   | One date                           | The answer is the same calendar date.                             |
| **between**              | Start and end dates                | The answer is within the range, including both endpoints.         |
| **in the past**          | No value                           | The answer is before today.                                       |
| **in the future**        | No value                           | The answer is after today.                                        |
| **within the next days** | A nonnegative whole number of days | The answer is between today and that future date, including both. |
| **within the last days** | A nonnegative whole number of days | The answer is between that past date and today, including both.   |

Relative comparisons use the visitor's local calendar date. **in the past** and **in the future** exclude today. Both **within** operators include today and the endpoint, so zero days means today.

Ranges must be in ascending order. Day counts must be nonnegative safe integers. Invalid or missing date answers don't pass a date comparison.

These conditions check a saved date answer. [Date conditions](https://rightmessage.com/help/conditions-date) instead compare the current date with a schedule you configure.

## Examples

[WorkForge](https://workforge.rightmessage.com) could check whether someone's project-count answer is **between** `10` and `50`. Both 10 and 50 would match.

![Input-answer condition matching a saved number of projects per month between 10 and 50](https://rightmessage.com/help/screens/audience-answer-rule.light.webp)

A separate **has answered** condition for an **Email** question in the same [All group](https://rightmessage.com/help/condition-builder-reference#groups-and-combinations) would also require an email answer.

## Things to know

### Which saved answer it uses

Conditions read the latest answer saved for that question in the browser. They don't search every historical response or require the visitor to answer again on the current page.

An answer can be available across flows in the same browser. The condition sets no expiration time. Browser storage, clearing data, another device, and supported answer-sync behavior all affect which answer is available.

An answer isn't automatically shared across devices just because the question appears in both flows.

### Answers that are still loading

A condition can stay unresolved while input answers load, including while a synced answer waits for its contact profile. Loading hasn't finished, so this isn't the same as **has not answered**.
