# Block Replication
Source: https://docs.checkoutrules.com/guides/en/advanced/block-replication
Learn how to copy a block inside a rule, paste it, and reuse it.
## Overview
Block replication allows you to quickly duplicate existing logic in a rule without manually recreating it. This is especially useful when the content of the blocks is similar, as it saves time and ensures consistency.
## Usage
### Copy the Block
Click the **Copy block** icon on the block you want to duplicate. This will copy the entire block, including its conditions and actions.
After copying, the **tick icon** and **"Copied"** text will appear in place of the Copy block icon. Also, a confirmation message **"Block copied successfully!"** will be shown at the bottom.
### Paste the Block
Paste the copied block below by clicking on the **Paste block** icon inside the **same rule** or any other same type rule.
A confirmation message **"Block pasted successfully!"** will be shown at the bottom.
If you copy more than one block, only the **last copied block** will be pasted, not all.
### Update the Content
Modify the necessary conditions, values, or actions in the pasted block to match the new scenario. This allows you to reuse the structure while customizing it for the new case.
**Example:**\
If you copied a block where the sub-condition **User language** is set to **French** with the error message in French, after pasting the block you can:
* Change the sub-condition **User language** from **French** to **German**.
* Replace the error message text with the German translation.
This way, the logic of the block remains the same (minimum order check), but the details are customized for a different language.
## Example Use Case
Let’s create a rule that enforces a **minimum order amount** while showing error messages in multiple languages.
By using **block replication**, you only need to create the first block (French), then simply copy and paste it inside the same rule, and update the **User language** condition and error message for German. Finally, add a fallback block for English.
### Block 1 (French)
* Add the **Order total amount** condition and set it to **less than or equal to 99.99** to trigger an error if the order amount is under 100.
* AND sub-condition **User language** is **French**.
* Set the error message:
> "Le montant de la commande est inférieur au montant minimum requis de 100 \$"
### Block 2 (German) — created by copying Block 1
* Paste the copied block below all blocks by clicking on the **Paste block** icon inside the **same rule**.
* Update the **User language** sub-condition to **German**.
* Update the error message:
> "Der Bestellbetrag liegt unter dem erforderlichen Mindestbestellwert von 100 \$"
### Block 3 (Default fallback – English)
* Add the **Order total amount** condition and set it to **less than or equal to 99.99** to trigger an error if the order amount is under 100.
* For the **else / fallback condition**, AND sub-condition **Previous all conditions invalid**.
* Set the error message:
> "Order amount is less than the required minimum order amount of \$100"
# Branching (if else)
Source: https://docs.checkoutrules.com/guides/en/advanced/branching
Learn how to create and use an if, else if, else rule structure to handle multiple conditions in your rules.
## Overview
Usually when a rule has more than one blocks, then each block is executed in a sequence from top to bottom, and if conditions for any block are met, then the actions for that block are executed. So, each rule can have multiple actions. But some times we do not want this behavior, we only want one block to execute and then the rule should stop. This is where branching comes in.
Branching allows you to build rules using multiple condition blocks that follow **if → else if → else** logic. Each block is checked in **sequence**, and as soon as one block matches, its actions are executed, and the rule stops. This ensures that **only one block runs**, preventing overlapping or conflicting actions. This is a very powerful feature and can be used to create complex rules with multiple conditions.
> Here is an example of a branching rule with three blocks. Here, we want to apply different discounts based on the product tag and we have a default discount of 5% off on all shipping in the case customer is not eligible for any of the other discounts. Only one block will execute based on the conditions and then the rule will stop.
The key condition here is [Previous all conditions
invalid](/guides/en/essentials/condition-sets/condition-set-1#previous-all-conditions-invalid)
in second and third blocks, which ensures only one block will execute based on
the conditions and then the rule will stop. Using this condition you can use
branching in any rule.
This is how this rule will execute:
Then 20% off shipping will be applied and the rule will stop.
Then 50% off shipping will be applied and the rule will stop.
Then 5% off shipping will be applied.
## Explanation
### First condition block (if)
* The system starts with the first condition block.
* This block can include multiple **sub-conditions** combined with **AND** or **OR**.
* If the overall block condition is fulfilled, its **“Then” action** runs (e.g., apply 20% discount).
* Once it runs, the system does not check the next blocks.
> **Example:** Product tag has value of **sport** *AND* Order subtotal amount ≥ **33** *OR* Product tag has value of **shoes** → Apply 20% OFF on all shipping
### Else if condition block(s)
* If the first block does not match, the system checks the next block(s).
* An **Else If** block can contain multiple **sub-conditions** using **AND** or **OR**, and it must include the **"Previous all conditions invalid"** condition as a subcondition.
* There may be one or more blocks in sequence. However, if the **"Previous all conditions invalid"** condition is not present, the block will not work as an **Else If** and will behave as a regular **If** block.
* If the overall block condition for any block is fulfilled, its **“Then” action** runs (e.g., apply 50% discount), and evaluation stops.
> **Example:** Previous all conditions invalid AND Customer tag has value of **VIP** → Apply 50% off on all shipping
### Fallback block (else)
* If none of the previous blocks match, you can add a fallback block with a condition of [Previous all conditions invalid](/guides/en/essentials/condition-sets/condition-set-1#previous-all-conditions-invalid).
* This acts as the **Else (default catch all)** and ensures that there is always a default **“Then” action** (e.g., apply 5% discount), when no previous blocks were executed.
> **Example:** Previous all conditions invalid → Apply 5% OFF on all shipping
You should arrange the blocks in the order of highest priority to lowest
priority. The first block is the highest priority and the last block is the
lowest priority.
## Example use case
Let’s say you want to apply different shipping discounts based on **product tags**.
### Rule setup
**Block 1 (if)** → *Product tag has value of `sport`* → Apply **20%** off on all shipping (highest priority).
**Adding the next block**\
To add a new block after the first one, you can either:\
Click the **“Add new block”** button in the rule builder.
Or, [copy the previous block](/guides/en/advanced/block-replication) and **paste it below** using the **paste icon**, then modify its conditions and actions.
**Block 2 (else if)** → *Product tag has value of `winter`* AND *Previous all conditions invalid* → Apply **50% off on all shipping**
**Block 3 (else)** → *Previous all conditions invalid* → Apply **5% off on all shipping** (default discount).
Here is how the whole rule setup will look.
### Execution flow
The system starts with **Block 1**. If it matches (product tag = `sport`), **20% off shipping** is applied, and the rule ends.
If Block 1 does not match, it checks **Block 2**. If product tag = `winter`, then **50% off shipping** applies, and the rule ends.
If neither Block 1 nor Block 2 matches, **Block 3** executes. Since it uses **Previous all conditions invalid**, it acts as a **default catch all**, applying **5% off shipping**.
# Concurrency
Source: https://docs.checkoutrules.com/guides/en/advanced/concurrency
Learn how multiple rules of the same type work together and how they impact the checkout process.
## Overview
We can create multiple rules of the same type. Concurrency describes what happens when multiple active rules of the same type exist and then are triggered on the checkout page at the same time.
This article will help you understand what happens when these rules are applied together, and how their combined effect can influence the checkout process.
## Explanation
When you add more than one rule of the same type, they all run **independently but almost at the same time**. The checkout result is the combined effect of all rules that are triggered and generate actions. The order of execution for these rules is **non-deterministic** according to Shopify, they can execute in any order.
Every rule can only generate actions which can be combined with other actions generated by the same rule type.
For example, you can have a rule to hide a shipping method, but you cannot have a rule to show a shipping method.
All hide shipping methods rules will be combined together to determine all the shipping methods that should be hidden.
Here’s how it works step by step:
Every rule starts executing almost at the same time, checking its own conditions to determine if it should generate any actions.
If the condition of a rule is satisfied, its action is generated.
> For example, you can have a rule to hide any shipping method that contains "Worldwide" in its name. Then another rule to hide any shipping method that contains "International Shipping" in its name. Both rules will generate actions, one will hide "Worldwide" and the other will hide "International Shipping".
If multiple rules generate actions, their actions are combined and sent to the Shopify Checkout.
> For example, Rule 1 hides a method that contains "Worldwide", Rule 2 hides a method that contains "International Shipping" → A combined action of hide both Worldwide and International Shipping will be generated and sent to the Shopify Checkout.
## Example use case
Let’s say you want to **hide certain shipping methods** based on the customer’s zip code.\
For this, let’s suppose we create the following rules:
**Rule 1** → Hide `DHL Express Worldwide` shipping method when zip code is **2005** or starts with **100**.
**Rule 2** → Hide `International Shipping` method when zip code is **2005** or starts with **500**.
### Case 1: Only one rule applies
* If the customer enters a zip code like **10045**, **Rule 1** applies, because conditions for Rule 2 are not met, so it does not generate any actions.
→ At checkout, the `DHL Express Worldwide` method is hidden, but `International Shipping` and other methods remain available as shown in the screenshot below.
* If the customer enters a zip code like **50010**, **Rule 2** applies.\
→ At checkout, the `International Shipping` method is hidden, but `DHL Express Worldwide` and other methods remain available.
### Case 2: Both rules apply together
* If the customer enters the **zip code 2005**, then conditions are met for both rules, so **both Rule 1 and Rule 2** apply together.
* This means **both `DHL Express Worldwide` and `International Shipping`** will be hidden from checkout, leaving only the other available methods.
## Rule conflicts
If multiple rules are not concurrency safe, they may conflict with each other and cause issues on the checkout page.
We need to ensure that the rules are not conflicting with each other to avoid issues.
Caution needed when using multiple rules of the same type. Always ensure that the rules are not conflicting with each other to avoid issues.
### Example: Only show these shipping methods
When a rule is set to **Only show these shipping methods**, it will try to hide all shipping methods that are not in the list which we want to "only show".
If multiple rules are set to **Only show these shipping methods**, they may conflict with each other and cause all shipping options to be hidden.
> **Example:** Rule 1 → Only show `DHL Express Worldwide` shipping method when zip code is 2005 or starts with 100.
> Rule 2 → Only show `International Shipping` shipping method when zip code is 2005 or starts with 500.
When both rules run for same ZIP code **2005**, Rule 1 will try to hide all shipping methods that are not `DHL Express Worldwide` and Rule 2 will try to hide all shipping methods that are not `International Shipping`. This will result in **No shipping available** error because both rules are not compatible with each other.
To solve this issue, we need to create a 3rd rule here, which will handle the common zip codes separately.
In this way, we can ensure Rule 1 and Rule 2 are independent of each other. Rule 3 will handle the common zip codes separately and we can be sure of what shipping methods will be available for the customer in each case.
As a general tip, we should always try to pair **Only show these shipping methods** with the **Shipping Method Available** condition as a sub-condition, and use the same value(s) in both.
> **Example:** Rule → Only show `DHL Express Worldwide` shipping method when zip code is 2005 or starts with 100 *AND* sub-condition **Shipping Method Available** has any of these values: *DHL Express Worldwide* This will make sure that *DHL Express Worldwide* is actually available for that checkout before we try to hide all other shipping methods.
In this way, we can make sure that the shipping methods are actually available on the checkout page in the first place, that we want to "Only show" to the customer.
# Multi store support
Source: https://docs.checkoutrules.com/guides/en/advanced/multi-store-support
Learn how to export multiple rules from one store and import them into another Shopify store.
## Overview
You can copy over rules between different Shopify stores without having to create them manually. You can export rules from one store as a ZIP file and then import that file into another store. This saves time, ensures consistency, and makes it easier to manage similar rules across multiple stores. You can also create a backup of your rules in case you need to restore them later.
## Usage
### Export rules
Select one or more rules in your current store and export them. The selected rules can be downloaded as a **ZIP file** to your computer or exported as individual files.
Here are the steps to export rules:
You can select one or multiple rules that you want to export. Then, click on the three dots and select **"Export"**. Then a popup will appear.
Alternatively, you can export a single rule by opening the rule, clicking **"More actions"**, and then selecting **"Export"** to export that rule individually.
In the popup, choose one of the following options:
* **ZIP archive** (Downloads a single ZIP file containing all the selected rules)
* **Individual files** (Downloads each selected rule as a separate JSON file with staggered timing)
Lastly, click "Export" to export the rules.
### Import rules
Open another Shopify store, go to the import option, and upload the previously exported **ZIP file** or individual rule JSON files. All the rules inside the ZIP or the selected JSON files will be added to the new store.
Here are the steps to import rules:
Click the **"Import"** button. Then a popup will appear.
In the popup, add your files or drag and drop them (for example, `Rename payment methods-besure-export.json`).
Lastly, click the **"Import"** button in the popup to import the rules into the store.
## Example use case
Let’s say you manage two Shopify stores:
* **Store A** → already has discount rules for different customer groups.
* **Store B** → needs the same discount rules.
Instead of recreating the rules from scratch in **Store B**, you can:
Export the rules from Store A as a ZIP file.
Import that ZIP file into Store B.
The rules will be imported and ready for use immediately.
# Rule duplication
Source: https://docs.checkoutrules.com/guides/en/advanced/rule-duplication
Duplicate a rule to quickly create and customize similar ones.
## Overview
Rule Duplication allows you to quickly create a new rule based on an existing one.\
Instead of building a rule from scratch, you can duplicate it, make a few changes, and set it up in less time.
This is especially useful when the new rule you want to create is very similar to an existing one.
## Usage
### Select rules
You can select one or multiple rules that you want to duplicate.
### Duplicate action
Click on the three dots, then click on "Duplicate". A confirmation popup will appear.
Then, in the popup, click "Duplicate" to create copies of the selected rules.
### Modify rules
Update the duplicated rules by changing only the parts you need to adjust, such as conditions or values.
> For example, if the original rule gives a **10% discount** on orders over **100 dollars**, you can duplicate it and modify the condition to apply the discount on orders over **150 dollars**.
### Save rules
Once modified, save the new rules without affecting the original ones.
## Example use case
Let’s say you already have a rule that applies a discount to customers in the **United States**. If you want to create the same rule for customers in **Canada**, you can do it in two simple steps:
* Create a copy of the existing **United States discount rule**.
* Update the location setting to **Canada** and save the new rule.
# Translations
Source: https://docs.checkoutrules.com/guides/en/advanced/translations
Learn how to set up validation rules that display error messages in different languages based on the customer’s language, with a default fallback option.
## Overview
Translations allow you to localize validation error messages for different customer languages. By clicking the **Add translation** button, you can display error messages in multiple languages at checkout based on the customer's language. You can also define a default fallback message in any language you prefer, which will be shown when a translation is not available.
## How to set up
### Create a validation rule
Start by creating a rule with the condition(s) of your choice.
> For example, Order total amount less than or equal \$100
### Select target
Select the **target** where you want the error message
to be displayed on the checkout page.
### Set default error message
Add the **error message** in the field. This message will be used as the default error message if no user language is found or if no translation is added for the error message. You can set it in any language you want.
### Add translations
Click the **Add translation** button. From the dropdown, select the language you want and enter the error message in the selected language. Repeat the same process to add translations for multiple languages.
### Summary
Here is a summary of the rule we created in the steps above:
> We set the condition **“Order total amount ≤ 99.99”** and select the target as **“Top of the checkout page”**. Our default message is:
> **“Order amount is less than the required minimum order amount of \$100.”**
> We then translate the error message into French and German:
> * **French:** "Le montant de la commande est inférieur au montant minimum requis de 100 \$"
> * **German:** "Der Bestellbetrag liegt unter dem erforderlichen Mindestbestellwert von 100 \$"
> Here is how you can set it up:
## What happens at checkout
* If the customer’s **language is French** and the **order amount is less than \$100**, they will see the **French error message** at the checkout.
* If the customer’s **language is German** and the **order amount is less than \$100**, they will see the **German error message** at the checkout.
* If the customer’s **language is any other language** and the **order amount is less than \$100**, they will see the default **English message** at the checkout.
# Condition Set 1
Source: https://docs.checkoutrules.com/guides/en/essentials/condition-sets/condition-set-1
Learn about each condition available inside _Condition Set 1_.
## Always
If you don’t want to set any condition, select *Always*. The rule will run every time for everyone, without checking any conditions.
## Previous all conditions invalid
When all previous conditions are invalid in the previous [rule block](/guides/en/get-started/concepts#block), i-e the previous rule block did not run, this condition becomes true, ensuring the action is triggered only if none of the earlier conditions are met.
Available only when at least one previous rule block exists.
## Date Time
### Additional setup required
When setting up any **Date Time** condition, additional setup is required. Follow these steps to complete it.
From the Please choose your time zone dropdown, select your store’s time zone, then click "Save" to apply it.
> For example, select Vancouver if you want Pacific Time (PT).
* Click on the BeSure Embed Block link to enable the block in your theme.
* In the theme editor, locate the BeSure Embed Block under App embeds and enable it.
After enabling the block, please save your theme. The Save
button is located in the top-right corner.
Click "Mark as done" when all steps are completed, then save
the rule.
Now, after creating the rule, empty your cart first. Then, add a new product to the cart and proceed to checkout to test if the rule is working as expected.
For **Customer location (using GeoIP)** conditions, enable the
BeSure Embed Block and save your theme. Timezone selection is
not required for customer location.
In rule types that support it, when you use **Date Time** or **Customer
location (using GeoIP)** conditions, you can also configure **Fallback** in
the action area.
### Date(s)
Used to compare the customer’s checkout date with a selected date or range of dates, based on one of the following sub-conditions:
* **is** (The customer’s checkout date matches the selected date)
* **is not** (The customer’s checkout date does not match the selected date)
* **is before** (The customer’s checkout date is earlier than the selected date)
* **is after** (The customer’s checkout date is later than the selected date)
* **is in between** (The customer’s checkout date is within the selected start and end dates)
* **is not in between** (The customer’s checkout date is outside the selected start and end dates)
* **are** (The customer’s checkout date matches any of the selected dates)
* **are not** (The customer’s checkout date does not match any of the selected dates)
* **are (only day and month)** (The customer’s checkout day and month match any of the selected day-and-month values, regardless of the year)
* **are not (only day and month)** (The customer’s checkout day and month do not match any of the selected day-and-month values, regardless of the year)
For **is**, **is not**, **is before**, and **is after**, select a single date from the calendar picker.
> For example, `is before August 11, 2026` → Matches date before August 11, 2026.
For **is in between** and **is not in between**, select both a start date and an end date from the calendar picker.
> For example, `is in between August 11, 2026 and August 19, 2026` → Matches date between August 11, 2026 and August 19, 2026.
For **are** and **are not**, enter one or more dates in `MM-DD-YYYY` format, separated by commas.
> For example, `are 08-11-2026,12-25-2026,01-01-2027` → Matches if the checkout date is August 11, 2026, December 25, 2026, or January 1, 2027.
For **are (only day and month)** and **are not (only day and month)**, enter one or more dates in `MM-DD` format, separated by commas. The year is ignored when evaluating the condition.
> For example, `are (only day and month) 08-11,12-25` → Matches if the checkout date falls on August 11 or December 25 in any year.
### Day of the week
Used to compare the customer’s checkout day with a selected day or range of days, based on one of the following sub-conditions:
* **is** (The customer’s checkout day matches the selected day)
* **is not** (The customer’s checkout day does not match the selected day)
* **is in between** (The customer’s checkout day falls between the selected start and end days)
* **is not in between** (The customer’s checkout day does not fall between the selected start and end days)
For **is** and **is not**, select a single day from the dropdown.
> For example, `is Monday` → Matches day Monday.
For **is in between** and **is not in between**, select both a start day and an end day from the dropdown.
> For example, `is in between Monday and Friday` → Matches days between Monday and Friday.
### Time of the day
Used to compare the customer’s checkout time with a selected time or range of times, based on one of the following sub-conditions:
* **is** (The customer’s checkout time matches the selected time)
* **is not** (The customer’s checkout time does not match the selected time)
* **is in between** (The customer’s checkout time falls between the selected start and end times)
* **is not in between** (The customer’s checkout time does not fall between the selected start and end times)
For **is** and **is not**, select a single time from the dropdown.
> For example, `is 02:30` → Matches exactly 2:30 AM.
For **is in between** and **is not in between**, select both a start time and an end time from the dropdown.
> For example, `is not in between 01:30 and 05:00` → Matches times not between 1:30 AM and 5:00 AM.
### Day of the week and time of the day
Used to compare the customer’s checkout day and time with a selected range, based on one of the following conditions:
* **is in between** (Matches when the checkout day and time fall between the selected start and end values)
* **is not in between** (Matches when the checkout day and time do not fall between the selected start and end values)
To set these conditions, select a day and time as the starting point and another day and time as the ending point from the dropdowns.
> For example, `is in between Monday 00:00 and Wednesday 12:00` → Matches checkouts occurring between Monday at midnight and Wednesday at noon.
### Fallback
If the app fails to determine the time or date, a fallback action will be executed based on the selected option:
* If **"Do nothing"** is selected, no action will be performed when the app fails to determine the time or date.
* If **"Do this action"** is selected, the configured action will be executed when the app fails to determine the time or date.
> For example, if **"Do this action"** is selected and the configured rule is **"Reorder shipping methods"**, an operation will reorder based on **Alphabetical order (Name A–Z, ascending)** whenever the app is unable to determine the time or date.
Each rule has its own operation. For example, the "Hide Payment Methods" rule
operations include "Hide all payment methods" or "Hide these payment methods"
etc. Therefore, select the fallback operation according to the rule you are
working on.
## Customer
### New customer
This condition becomes true if the customer is a new customer, i-e the customer has not previously spent any amount in the store to buy products.
### Repeat customer
This condition becomes true if the customer has previously spent any amount in the store to buy products.
### Customer total previous spent
This condition checks the customer’s **total previous spent amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the customer’s total previous spent amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the customer’s total previous spent amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 500` → Matches customers who have spent 500 or more in total on previous purchases.
### Email address
This condition checks the customer’s **email address** against specific criteria, based on one of the following sub-conditions:
* **contains** (The email address includes the entered value)
* **does not contain** (The email address does not include the entered value)
* **is empty** (No email address is provided)
* **is not empty** (An email address is provided)
* **is** (The email address exactly matches the entered value)
* **is not** (The email address does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the customer’s email address.
> For example, `contains @gmail.com` → Matches any email address ending with “@gmail.com”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the email field is blank.
### Customer tags
This condition checks the customer’s **tags** against specific criteria, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer has at least one of the entered tags)
* **Does not have any of these values** (Matches if the customer has none of the entered tags)
You can only use this condition with the same values throughout the rule. If
you want to use different values in different rule blocks, you should switch
to condition set 5 which allows more flexibility.
To set these conditions, type one or more tags into the field and choose the appropriate comparison from the dropdown. Separate multiple tags with commas and then press enter to load the tags simultaneously.
> For example, `Has any of these values: VIP, VVIP` → Matches customers who have either the “VIP” or “VVIP” tag.
### Customer location (using GeoIP)
This condition checks the country in which the customer opens the shop and evaluates it against specific criteria based on one of the following sub-conditions:
* **Has any of these values** ( The condition is satisfied if the customer's country matches at least one of the selected values)
* **Does not have any of these values** ( The condition is satisfied if the customer's country does not match any of the selected values)
* **Has any other value besides these values** ( The condition is satisfied if the customer's country is different from the selected values)
* **Does not have any other value besides these values** ( The condition is satisfied if the customer's country matches only the selected values and no others)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas or select from the dropdown.
> For example, `Does not have any of these values: Canada, United States` → Matches customer location other than “Canada” or “United States”.
### Fallback
If the app fails to determine the customer location, a fallback action will be executed based on the selected option:
* If **"Do nothing"** is selected, no action will be performed when the app fails to determine the customer location.
* If **"Do this action"** is selected, the configured action will be executed when the app fails to determine the customer location.
> For example, if **"Do this action"** is selected and the configured rule is **"Reorder shipping methods"**, an operation will reorder based on **Alphabetical order (Name A–Z, ascending)** whenever the app is unable to determine the customer location.
Each rule has its own operation. For example, the "Hide Payment Methods" rule
operations include "Hide all payment methods" or "Hide these payment methods"
etc. Therefore, select the fallback operation according to the rule you are
working on.
## Order Details
### Order total amount
This condition checks the **order’s total amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s total amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s total amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 600` → Matches orders with a total amount of 600 or more.
### Order subtotal amount
This condition checks the **order’s subtotal amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 699` → Matches orders with a subtotal amount of 699 or more.
## Cart Details
### Quantity per product tag
This condition checks the **quantity of products with a specific product tag** in the order against defined criteria, based on one of the following sub-conditions:
* **quantity is greater than or equals** (Matches when the quantity of products with the specified product tag is greater than or equal to the entered number)
* **quantity is less than or equals** (Matches when the quantity of products with the specified product tag is less than or equal to the entered number)
* **quantity is divisible by** (Matches when the quantity of products with the specified product tag is an exact multiple of the entered number)
* **quantity is not divisible by** (Matches when the quantity of products with the specified product tag is not a multiple of the entered number)
To set these conditions:
Enter the product tag in the “Enter product tag” field.
Enter the quantity in the “Enter quantity” field.
Select the comparison option from the dropdown.
> **Example for “quantity is greater than or equals”**:
> Product Tag: `SummerCollection`
> Quantity: `3`
> → Matches orders where there are 3 or more units of products tagged `SummerCollection`.
> **Example for “quantity is divisible by”**:
> Product Tag: `SummerCollection`
> Quantity: `2`
> → Matches orders where the quantity of products tagged `SummerCollection` is 2, 4, 6, 8, etc.
### Quantity per each product
This condition checks the **quantity of each individual product in the checkout** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the quantity of any product is greater than or equal to the entered number)
* **is less than or equals** (Matches when the quantity of any product is less than or equal to the entered number)
To set these conditions, enter a quantity in the field and choose the appropriate comparison from the dropdown.
The quantity refers to the quantity of each individual product line item in
the checkout, not the total quantity of all products combined. The condition
is considered a match if any product in the checkout
satisfies the selected criteria.
> **Example for “is greater than or equals”**:
> `is greater than or equals 3` → Matches when at least one product in the checkout has a quantity of 3 or more.
## Cart Has Any Items
### SKU
This condition checks the **SKU** of the products in the cart against specific criteria. It will become true if **any** product in the cart has the entered SKU value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the SKU has at least one of the entered values)
* **Does not have any of these values** (Matches if the SKU has none of the entered values)
* **Has any other value besides these values** (Matches if the SKU has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the SKU has only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of SKUs is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of SKUs is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more SKU values into the field. Separate multiple values with commas.
Use \* wildcard to match multiple SKU values. For example, SKU\* will match
SKU12, sku-new-1 etc.
> For example, `Has any of these values: SKU1, SKU2` → Matches if the SKU is either
> “SKU1” or “SKU2”.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the SKU count.
> For example, `Has number of values greater than or equals 3` → Matches if there are three or more SKUs.
### Product tags
This condition checks the **Product Tags** against specific criteria. It will become true if **any** product in the cart has the entered Product Tag value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the Product Tags have at least one of the entered values)
* **Does not have any of these values** (Matches if the Product Tags have none of the entered values)
* **Has any other value besides these values** (Matches if the Product Tags have a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the Product Tags have only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of Product Tags is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of Product Tags is less than or equal to the entered number)
You can only use this condition with the same values throughout the rule. If
you want to use different values in different rule blocks, you should switch
to condition set 3, 5, or 6 which allow more flexibility.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more Product Tag values into the field. Separate multiple values with commas.
> For example, `Does not have any of these values: summer, clearance` → Matches if the Product Tag does not include “summer” or “clearance”.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the Product Tags count.
> For example, `Has number of values less than or equals 4` → Matches if there are four or fewer Product Tags.
### Collections
This condition checks the **Collections** against specific criteria. It will become true if **any** product in the cart belongs to the entered Collection value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the Collection has at least one of the entered values)
* **Does not have any of these values** (Matches if the Collection has none of the entered values)
* **Has any other value besides these values** (Matches if the Collection has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the Collection has only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of Collections is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of Collections is less than or equal to the entered number)
You can only use this condition with the same values throughout the rule. If
you want to use different values in different rule blocks, you should switch
to condition set 3 which allows more flexibility.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more Collection values into the field.
> For example, `Has any other value besides these values: Summer2025, Winter2025` → Matches if the Collection includes at least one value that is not “Summer2025” or “Winter2025”.
From the popup, select one or multiple collections from the already created collections in your store.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the Collection count.
> For example, `Has number of values less than or equals 7` → Matches if there are seven or fewer Collections.
## Discount
### Discount code
This condition evaluates discount codes used at checkout against selected values and determines whether the rule is satisfied based on the chosen logic.
* **Has any of these values** (The condition is satisfied if at least one entered discount code matches one or more of the selected values )
* **Does not have any of these values** ( The condition is satisfied if none of the entered discount codes match any of the selected values )
* **Has any other value besides these values** ( The condition is satisfied if at least one entered discount code is different from the selected values )
* **Does not have any other value besides these values** ( The condition is satisfied only if all entered discount codes exactly match the selected values and no additional discount codes are present )
Please use `*` wildcard to match multiple discount codes. For example, `FREE*`
will match FREE12, free-590 etc. Use `?` to match to any single character.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas or select from the dropdown.
> For example, `Does not have any of these values: SAVE10, ORDER20%OFF` → Matches discount codes other than “SAVE10” or “ORDER20%OFF”.
## Shipping
### Shipping methods available
Used to check if the given shipping methods are actually available on the checkout page, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the checkout page contains at least one of the listed shipping methods)
* **Does not have any of these values** (Matches if the checkout page does not contain any of the listed shipping methods)
* **Has any other value besides these values** (Matches if the checkout page contains shipping methods other than the listed ones)
* **Does not have any other value besides these values** (Matches if the checkout page contains only the listed shipping methods and no others)
* **Has number of values greater than or equals** (Matches if the number of shipping methods available on the checkout page is greater than or equal to the specified number)
* **Has number of values less than or equals** (Matches if the number of shipping methods available on the checkout page is less than or equal to the specified number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial shipping method names. For example, Stand\*
will match Standard, standard shipping etc.
> For example, `Has any of these values: Express Delivery, Standard Shipping` → Matches if at least one of the selected shipping methods is available.
For **Has number of values greater than or equals** or **Has number of values less than or equals**, enter the count threshold.
> For example, `Has number of values greater than or equals 3` → Matches if three or more shipping methods are available.
### Selected shipping type (Ship/Pickup)
This condition checks the "Ship vs Pickup in store" selection on the checkout page, as shown below.
It will become true if the selected shipping type is the same as the entered value, based on one of the following sub-conditions:
* **is** (Matches if the Delivery selection is exactly as the entered value)
* **is not** (Matches if the Delivery selection is different from the entered value)
For any of the above options, choose one shipping type from the list: **Pickup**, **Local delivery**, **Shipping**, **Pickup point**, **Retail**, or **None**.
> **Example:** `is not: Pickup` → Matches if the selected shipping type is anything other than “Pickup”, i-e it is "Ship".
## Localization
### User language
This condition checks the language selected by the customer, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer language is from the given list)
* **Does not have any of these values** (Matches if the customer language is not from the given list)
* **Has any other value besides these values** (Matches if the customer language is not from the given list)
* **Does not have any other value besides these values** (Matches if the customer language is from the given list and no others)
For any of the above options, search and select one or more languages from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any of these values: English, French` → Matches if the field does not contain “English” or “French”.
## Shipping Address
### Shipping address is empty
This condition becomes true if the shipping address fields are empty.
### Shipping address is not empty
This condition becomes true if the shipping address fields are not empty.
### Full name (First name + Last name)
Used to compare the customer’s full name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the full name contains the specified value or partial value)
* **Does not contain** (Matches if the full name does not contain the specified value or partial value)
* **Is empty** (Matches if no name is entered)
* **Is not empty** (Matches if any value is entered in the name field)
* **Is** (Matches if the full name exactly matches the specified value)
* **Is not** (Matches if the full name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the name is less than or equal to the specified number)
* **Has only** (Matches if the full name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the full name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Does not contain: Test` → Matches if the name does not contain “Test” anywhere.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the customer’s name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 10` → Matches if the full name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the full name field is left blank.
### First name
Used to compare the customer’s first name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the first name contains the specified value or partial value)
* **Does not contain** (Matches if the first name does not contain the specified value or partial value)
* **Is empty** (Matches if no first name is entered)
* **Is not empty** (Matches if any value is entered in the first name field)
* **Is** (Matches if the first name exactly matches the specified value)
* **Is not** (Matches if the first name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the first name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the first name is less than or equal to the specified number)
* **Has only** (Matches if the first name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the first name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Jane` → Matches if the first name is anything except “Jane”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the first name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the first name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the first name field is left blank.
### Last name
Used to compare the customer’s last name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the last name contains the specified value or partial value)
* **Does not contain** (Matches if the last name does not contain the specified value or partial value)
* **Is empty** (Matches if no last name is entered)
* **Is not empty** (Matches if any value is entered in the last name field)
* **Is** (Matches if the last name exactly matches the specified value)
* **Is not** (Matches if the last name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the last name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the last name is less than or equal to the specified number)
* **Has only** (Matches if the last name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the last name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Smith` → Matches if the last name is anything except “Smith”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the last name contains English characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the last name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the last name field is left blank.
### P.O. box address
The selected condition is based on whether the customer's address includes a P.O. Box. This condition can be used to trigger specific actions, such as restricting certain shipping methods or applying special handling rules for orders going to P.O. Box addresses.
When you use the 'P.O. box address' condition in the rule, then all kind of
entries in the shipping address like P.O. box or P O box or P.o b o x etc are
detected by the app automatically. If you want to also detect a custom word or
phrase, you can do that by using the 'Address line' condition within which you
can specify the word or phrase you want to detect.
If you want to detect PO Box words or phrase in other languages, you can do
that by using the 'Address (line1 + line2)' condition within which you can
specify the words or phrase you want to detect. For example, 'Packstation' in
German. You can add mulitple of these conditions for each word using the OR
operator in between them.
### Not P.O. box address
This condition becomes true if the customer’s address does not contain a P.O. Box.
### Address (line 1 + line 2)
Used to compare the customer’s full address (combined from Address Line 1 and Address Line 2) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the address contains the specified value or partial value)
* **Does not contain** (Matches if the address does not contain the specified value or partial value)
* **Is empty** (Matches if no address is entered in both lines)
* **Is not empty** (Matches if any value is entered in either line)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the address is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the address is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the address is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the address is less than or equal to the specified number)
* **Has no of words greater than or equals** (Matches if the total number of words in the address is greater than or equal to the specified number)
* **Has no of words less than or equals** (Matches if the total number of words in the address is less than or equal to the specified number)
* **Has only** (Matches if the address contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the address contains characters other than the allowed character type from the dropdown)
For **Contains** and **Does not contain**, enter the value to match.
> For example, `Contains: Street` → Matches if the address contains the word “Street”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the address contains English characters only.
For **Has no of digits/characters/words greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of words greater than or equals 5` → Matches if the address contains 5 or more words.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if both Address Line 1 and Address Line 2 are blank.
### Address line 1
Used to compare the customer’s address from Address Line 1 with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if Address Line 1 contains the specified value or partial value)
* **Does not contain** (Matches if Address Line 1 does not contain the specified value or partial value)
* **Is empty** (Matches if no value is entered in Address Line 1)
* **Is not empty** (Matches if any value is entered in Address Line 1)
* **Has no of digits greater than or equals** (Matches if the total number of digits in Address Line 1 is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in Address Line 1 is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in Address Line 1 is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in Address Line 1 is less than or equal to the specified number)
* **Has no of words greater than or equals** (Matches if the total number of words in Address Line 1 is greater than or equal to the specified number)
* **Has no of words less than or equals** (Matches if the total number of words in Address Line 1 is less than or equal to the specified number)
* **Has only** (Matches if Address Line 1 contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if Address Line 1 contains characters other than the allowed character type from the dropdown)
For **Contains** and **Does not contain**, enter the value to match.
> For example, `Contains: Street` → Matches if Address Line 1 contains the word “Street”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if Address Line 1 contains English characters only.
For **Has no of digits/characters/words greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of words greater than or equals 5` → Matches if Address Line 1 contains 5 or more words.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if Address Line 1 is left blank.
### Address line 2 (Apartment, suite, etc)
Used to compare the customer’s address from Address Line 2 (Apartment, suite, unit, building, floor, etc.) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if Address Line 2 contains the specified value or partial value)
* **Does not contain** (Matches if Address Line 2 does not contain the specified value or partial value)
* **Is empty** (Matches if no value is entered in Address Line 2)
* **Is not empty** (Matches if any value is entered in Address Line 2)
* **Has no of digits greater than or equals** (Matches if the total number of digits in Address Line 2 is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in Address Line 2 is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in Address Line 2 is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in Address Line 2 is less than or equal to the specified number)
* **Has no of words greater than or equals** (Matches if the total number of words in Address Line 2 is greater than or equal to the specified number)
* **Has no of words less than or equals** (Matches if the total number of words in Address Line 2 is less than or equal to the specified number)
* **Has only** (Matches if Address Line 2 contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if Address Line 2 contains characters other than the allowed character type from the dropdown)
For **Contains** and **Does not contain**, enter the value to match.
> For example, `Contains: Apt` → Matches if Address Line 2 contains the word “Apt”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters + accent variants` → Matches if Address Line 2 contains English characters and accented characters.
For **Has no of digits/characters/words greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of words greater than or equals 3` → Matches if Address Line 2 contains 3 or more words.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if Address Line 2 is left blank.
### Company
Used to compare the customer’s company name (The company name field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the company name contains the specified value or partial value)
* **Does not contain** (Matches if the company name does not contain the specified value or partial value)
* **Is empty** (Matches if no company name is entered)
* **Is not empty** (Matches if any value is entered in the company name field)
* **Is** (Matches if the company name exactly matches the specified value)
* **Is not** (Matches if the company name is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the company name is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the company name is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the company name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the company name is less than or equal to the specified number)
* **Has only** (Matches if the company name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the company name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: Tech` → Matches if the company name contains the word “Tech”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the company name contains English characters only.
For **Has no of digits/characters greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of characters greater than or equals 10` → Matches if the company name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the company name field is left blank.
### Phone number
Used to compare the customer’s phone number (The phone number field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the phone number contains the specified value or partial value)
* **Does not contain** (Matches if the phone number does not contain the specified value or partial value)
* **Is empty** (Matches if no phone number is entered)
* **Is not empty** (Matches if any value is entered in the phone number field)
* **Is** (Matches if the phone number exactly matches the specified value)
* **Is not** (Matches if the phone number is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the phone number is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the phone number is less than or equal to the specified number)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: 123` → Matches if the phone number contains “123” anywhere.
For **Has no of digits greater than or equals** or **Has no of digits less than or equals**, enter the threshold value.
> For example, `Has no of digits greater than or equals 10` → Matches if the phone number contains 10 or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the phone number field is left blank.
### City / Area
Used to compare the City / Area (The City/Area field on the checkout page) values with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the city field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the city field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the city field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the city field contains only the listed values and no others)
* **Has number of digits greater than or equals** (Matches if the number of digits in the city field is greater than or equal to the specified number)
* **Has number of digits less than or equals** (Matches if the number of digits in the city field is less than or equal to the specified number)
* **Is empty** (Matches if the city field has no value)
* **Is not empty** (Matches if the city field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial city names. For example, Santo\* will match
santo domingo, santodomngo etc.
> For example, `Has any of these values: Lahore, Karachi` → Matches if the field contains either “Lahore” or “Karachi”.
For **Has number of digits greater than or equals** or **Has number of digits less than or equals**, enter the digit count threshold.
> For example, `Has number of digits greater than or equals 5` → Matches if the field’s value has five or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if no value is entered for the field.
### Province code / State code
Used to compare the Province / State (The Province/State field on the checkout page) values with one or more specific values or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the province field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the province field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the province field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the province field contains only the listed values and no others)
* **Is empty** (Matches if the province field has no value)
* **Is not empty** (Matches if the province field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Add 2 or 3 letter province/state code abbreviation in "ISO\_3166-2" format
only.
> For example, `Does not have any other value besides these values: CA, TX` → Matches if the field contains only “CA” or “TX” and no other values.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is not empty` → Matches if any value is entered for the field.
### Country
Used to compare the Country (The Country field on the checkout page) values with one or more specific countries, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the country field contains at least one of the selected countries)
* **Does not have any of these values** (Matches if the country field does not contain any of the selected countries)
* **Has any other value besides these values** (Matches if the country field contains countries other than the selected ones)
* **Does not have any other value besides these values** (Matches if the country field contains only the selected countries and no others)
For any of the above options, search and select one or more countries from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any other value besides these values: Portugal, Poland` → Matches if the field contains only “Portugal” or “Poland” and no other countries.
### Zip code / Postal code
Used to compare the Zip code / Postal code (The Zip/Postal Code field on the checkout page) values with one or more specific zip or postal codes, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the zip/postal code field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the zip/postal code field does not contain any of the listed values)
* **Has value in between these values** (Matches if the zip/postal code field value falls within the specified range)
* **Does not have value in between these values** (Matches if the zip/postal code field value does not fall within the specified range)
* **Has any other value besides these values** (Matches if the zip/postal code field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the zip/postal code field contains only the listed values and no others)
* **Has only digits** (Matches if the zip/postal code field contains only numeric characters)
* **Does not have only digits** (Matches if the zip/postal code field contains any non-numeric characters)
* **Has number of digits in between** (Matches if the number of digits falls within the specified range)
* **Does not have number of digits in between** (Matches if the number of digits does not fall within the specified range)
* **Is empty** (Matches if the zip/postal code field has no value)
* **Is not empty** (Matches if the zip/postal code field contains any value)
Use **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values** to match against one or more specific zip/postal codes. Separate multiple values with commas.
Use \* wildcard to match multiple zip codes. For example, BT\* will match BT12,
bt-590 etc. Use ? to match to any single character.
> For example, `Has any of these values: BT*` → Matches all zip/postal codes starting with “BT”.
> Another example, `Does not have any of these values: 12345, 67890` → Matches if the code is not “12345” or “67890”.
Use **Has value in between these values** or **Does not have value in between these values** to match zip/postal codes within or outside a numeric range.
Enter numbers only. All values ranging in between starting value until the
last value will be matched, including the starting and last value.
> For example, `Has value in between these values: 10000 – 20000` → Matches if the code is between “10000” and “20000”.
Use **Has only digits** or **Does not have only digits** to match zip/postal codes that contain only numeric characters (0–9) or those that include any non-numeric characters, such as letters, spaces, or symbols.
> For example, `Has only digits` → Matches digits only (0–9).
Use **Has number of digits in between** or **Does not have number of digits in between** to match based on the count of digits in the code.
Enter numbers only. All values ranging in between given number of digits will
be matched.
> For example, `Has number of digits in between: 4 – 6` → Matches codes that contain between 4 and 6 digits.
Use **Is empty** or **Is not empty** when you only need to check whether the field is filled in.
> For example, `Is not empty` → Matches if any value is entered in the field
# Condition Set 2
Source: https://docs.checkoutrules.com/guides/en/essentials/condition-sets/condition-set-2
Learn about each condition available inside _Condition Set 2_.
## Always
If you don’t want to set any condition, select *Always*. The rule will run every time for everyone, without checking any conditions.
## Previous all conditions invalid
When all previous conditions are invalid in the previous [rule block](/guides/en/get-started/concepts#block), i-e the previous rule block did not run, this condition becomes true, ensuring the action is triggered only if none of the earlier conditions are met.
Available only when at least one previous rule block exists.
## Customer
### Customer is logged in
Matches if the customer has an active account session and is currently logged in to their store account at the time of checkout.
### Customer is not logged in
Matches if the customer does not have an active account session and is checking out as a guest.
### Email address
This condition checks the customer’s **email address** against specific criteria, based on one of the following sub-conditions:
* **contains** (The email address includes the entered value)
* **does not contain** (The email address does not include the entered value)
* **is empty** (No email address is provided)
* **is not empty** (An email address is provided)
* **is** (The email address exactly matches the entered value)
* **is not** (The email address does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the customer’s email address.
> For example, `contains @gmail.com` → Matches any email address ending with “@gmail.com”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the email field is blank.
### Customer total number of previous orders
This condition checks the **total number of previous orders** placed by the customer against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the customer’s total number of previous orders is greater than or equal to the entered number)
* **is less than or equals** (Matches when the customer’s total number of previous orders is less than or equal to the entered number)
To set these conditions, enter the number of orders in the field and choose the appropriate comparison from the dropdown.
> For example, `is greater than or equals 3` → Matches customers who have placed 3 or more previous orders.
## Order Details
### Order total amount
This condition checks the **order’s total amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s total amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s total amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 600` → Matches orders with a total amount of 600 or more.
### Order subtotal amount
This condition checks the **order’s subtotal amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 699` → Matches orders with a subtotal amount of 699 or more.
### Order total quantity
This condition checks the **total quantity of items in an order** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total quantity of items is greater than or equal to the entered number)
* **is less than or equals** (Matches when the total quantity of items is less than or equal to the entered number)
* **is multiple of** (Matches when the total quantity is an exact multiple of the entered number)
* **is not multiple of** (Matches when the total quantity is not a multiple of the entered number)
To set these conditions, enter a quantity in the field and choose the appropriate comparison from the dropdown.
The quantity refers to the **sum of all item quantities** in the order, not
the number of distinct products.
> **Example for “is multiple of”**:\
> `is multiple of 5` → Matches orders with total quantities like 5, 10, 15, 20, etc.
> **Example for “is greater than or equals”**:\
> `is greater than or equals 3` → Matches orders with 3 or more total items.
### Physical product total quantity
This condition checks the **total quantity of physical items in an order** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total quantity of physical items is greater than or equal to the entered number)
* **is less than or equals** (Matches when the total quantity of physical items is less than or equal to the entered number)
* **is multiple of** (Matches when the total quantity of physical items is an exact multiple of the entered number)
* **is not multiple of** (Matches when the total quantity of physical items is not a multiple of the entered number)
To set these conditions, enter a quantity in the field and choose the appropriate comparison from the dropdown.
The quantity refers to the **sum of all physical item quantities** in the
order, not the number of distinct products.
> **Example for “is multiple of”**:
> `is multiple of 5` → Matches orders with total quantities like 5, 10, 15, 20, etc.
> **Example for “is greater than or equals”**:
> `is greater than or equals 3` → Matches orders with 3 or more physical items.
### Order total weight
This condition checks the **order’s total weight** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s total weight is greater than or equal to the entered weight)
* **is less than or equals** (Matches when the order’s total weight is less than or equal to the entered weight)
To set these conditions, enter the weight in the field, select the weight unit (**lb**, **oz**, **kg**, or **g**) from the dropdown, and choose the appropriate comparison.
> For example, `is less than or equals 5 kg` → Matches orders with a total weight of 5 kilograms or less.
### Order total one time purchase weight
This condition checks the **total weight of one-time purchase items** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total one-time purchase weight is greater than or equal to the entered weight)
* **is less than or equals** (Matches when the total one-time purchase weight is less than or equal to the entered weight)
To set these conditions, enter the weight in the field, select the weight unit (**lb**, **oz**, **kg**, or **g**) from the dropdown, and choose the appropriate comparison.
> For example, `is greater than or equals 10 lb` → Matches orders where the total weight of one-time purchase items is 10 pounds or more.
### Order total subscription weight
This condition checks the **total weight of subscription items** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total subscription weight is greater than or equal to the entered weight)
* **is less than or equals** (Matches when the total subscription weight is less than or equal to the entered weight)
To set these conditions, enter the weight in the field, select the weight unit (**lb**, **oz**, **kg**, or **g**) from the dropdown, and choose the appropriate comparison.
> For example, `is greater than or equals 5 kg` → Matches orders where the total weight of subscription items is 5 kilograms or more.
## Cart Details
### Cart attribute
This condition checks the **attributes attached to the cart** against specific criteria, based on one of the following sub-conditions:
* **Has any of these values** (Matches when the specified cart attribute contains any of the entered values)
* **Does not have any of these values** (Matches when the specified cart attribute does not contain any of the entered values)
* **Has empty value** (Matches when the specified cart attribute exists but has no value)
* **Does not have empty value** (Matches when the specified cart attribute exists and contains a value)
To set these conditions:
Enter the attribute key in the “Enter key” field.
Enter the value(s) to match (where applicable).
Choose the comparison option from the dropdown.
For **Has any of these values** and **Does not have any of these values**, enter one or more values into the field. Separate multiple values with commas.
Use \* wildcard to match partial values. For example, value\* will match
value123, VALUETEST etc.
> **Example for “Has any of these values”**:
> Key: `delivery_method`
> Values: `express, pickup`
> → Matches carts where the `delivery_method` attribute is either `express`
> or `pickup`.
For **Has empty value** and **Does not have empty value**, no value entry is required.
> **Example for “Does not have empty value”**:
> Key: `gift_message`
> → Matches carts where a `gift_message` attribute exists and contains some text (e.g., “Happy Birthday!”).
### Product quantity per SKU
This condition checks the **quantity of a specific product (by SKU)** in the order against defined criteria, based on one of the following sub-conditions:
* **quantity is greater than or equals** (Matches when the quantity of the specified SKU is greater than or equal to the entered number)
* **quantity is less than or equals** (Matches when the quantity of the specified SKU is less than or equal to the entered number)
* **quantity is divisible by** (Matches when the quantity of the specified SKU is an exact multiple of the entered number)
* **quantity is not divisible by** (Matches when the quantity of the specified SKU is not a multiple of the entered number)
To set these conditions:
Enter the SKU in the “Enter SKU” field.
Enter the quantity in the “Enter quantity” field.
Select the comparison option from the dropdown.
> **Example for “quantity is greater than or equals”**:
> SKU: `ABC123`
> Quantity: `3`
> → Matches orders where there are 3 or more units of product `ABC123`.
> **Example for “quantity is divisible by”**:
> SKU: `ABC123`
> Quantity: `2`
> → Matches orders where the quantity of product `ABC123` is 2, 4, 6, 8, etc.
### Total quantity – Product quantity of SKU
This condition checks the **total quantity of all products in the order except a specific product (by SKU)** against defined criteria, based on one of the following sub-conditions:
* **quantity is greater than or equals** (Matches when the total quantity excluding the specified SKU is greater than or equal to the entered number)
* **quantity is less than or equals** (Matches when the total quantity excluding the specified SKU is less than or equal to the entered number)
* **quantity is divisible by** (Matches when the total quantity excluding the specified SKU is an exact multiple of the entered number)
* **quantity is not divisible by** (Matches when the total quantity excluding the specified SKU is not a multiple of the entered number)
To set these conditions:
Enter the SKU to exclude in the “Enter SKU” field.
Enter the quantity in the “Enter quantity” field.
Select the comparison option from the dropdown.
> **Example for “quantity is greater than or equals”**:
> SKU: `ABC123`
> Quantity: `5`
> → Matches orders where the total quantity of all products except `ABC123` is 5 or more.
> **Example for “quantity is divisible by”**:
> SKU: `ABC123`
> Quantity: `3`
> → Matches orders where the total quantity of all products except `ABC123` is 3, 6, 9, etc.
## Cart Has Any Items
### SKU
This condition checks the **SKU** of the products in the cart against specific criteria. It will become true if **any** product in the cart has the entered SKU value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the SKU has at least one of the entered values)
* **Does not have any of these values** (Matches if the SKU has none of the entered values)
* **Has any other value besides these values** (Matches if the SKU has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the SKU has only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of SKUs is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of SKUs is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more SKU values into the field. Separate multiple values with commas.
Use \* wildcard to match multiple SKU values. For example, SKU\* will match
SKU12, sku-new-1 etc.
> For example, `Has any of these values: SKU1, SKU2` → Matches if the SKU is either
> “SKU1” or “SKU2”.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the SKU count.
> For example, `Has number of values greater than or equals 3` → Matches if there are three or more SKUs.
### Collection
This condition checks the **collection** in the order against specific criteria. It will become true if **any** of the product in the cart belongs to the entered Collection value, based on one of the following sub-conditions:
* **has value of** (Matches when the collection has the specified value)
* **does not have value of** (Matches when the collection does not have the specified value)
* **has any other value besides** (Matches when the collection has any value except the entered one)
* **does not have any other value besides** (Matches when the collection has only the entered value and no other)
To set these conditions, click on the “Enter value” field to open the collection selection popup, then search for or directly select the desired collection, and choose the appropriate comparison from the dropdown.
> For example, `has value of Summer2025` → Matches when any product in cart belongs to the collection **Summer2025**.
### Collections
This condition checks the **Collections** against specific criteria. It will become true if **any** product in the cart belongs to the entered Collection value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the Collection has at least one of the entered values)
* **Does not have any of these values** (Matches if the Collection has none of the entered values)
* **Has any other value besides these values** (Matches if the Collection has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the Collection has only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of Collections is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of Collections is less than or equal to the entered number)
You can only use this condition with the same values throughout the rule. If
you want to use different values in different rule blocks, you should switch
to condition set 3 which allows more flexibility.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more Collection values into the field.
> For example, `Has any other value besides these values: Summer2025, Winter2025` → Matches if the Collection includes at least one value that is not “Summer2025” or “Winter2025”.
From the popup, select one or multiple collections from the already created collections in your store.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the Collection count.
> For example, `Has number of values less than or equals 7` → Matches if there are seven or fewer Collections.
### Line item property
This condition checks the **properties attached to a line item** against specific criteria, based on one of the following sub-conditions:
* **Has any of these values** (Matches when the specified line item property contains any of the entered values)
* **Does not have any of these values** (Matches when the specified line item property does not contain any of the entered values)
* **Has empty value** (Matches when the specified line item property exists but has no value)
* **Does not have empty value** (Matches when the specified line item property exists and contains a value)
* **Has number of values greater than or equals** (Matches when the specified line item property contains a number of values greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches when the specified line item property contains a number of values less than or equal to the entered number)
To set these conditions:
Enter the property key in the “Enter key” field.
Enter the value(s) to match (where applicable).
Choose the comparison option from the dropdown.
For **Has any of these values** and **Does not have any of these values**, enter one or more values into the field. Separate multiple values with commas.
Use \* wildcard to match partial values. For example, value\* will match
value123, VALUETEST etc.
> **Example for “Has any of these values”**: > Key: `color` > Values: `red, blue`
> → Matches line items where the `color` property is either `red` or `blue`.
For **Has empty value** and **Does not have empty value**, no value entry is required.
> **Example for “Does not have empty value”**:\
> Key: `engraving`\
> → Matches line items where the `engraving` property exists and contains some text (e.g., “Happy Anniversary”).
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter the threshold number into the field.
> **Example for “Has number of values less than or equals”**:\
> Key: `size`\
> Number: `2`\
> → Matches line items where the `size` property has 2 or fewer distinct values (e.g., `S, M`).
### Cart has shipping product (requires delivery)
This condition checks whether the cart contains at least one product that requires shipping (delivery). If present, the condition is considered met.
### Cart has no shipping product
This condition checks whether the cart does not contain any product that requires shipping (delivery). If no such product is present, the condition is considered met.
### Cart has digital product
This condition checks whether the cart contains at least one digital product (A product that does not require shipping). If present, the condition is considered met.
### Cart has no digital product
This condition checks whether the cart does not contain any digital product (i-e All products require shipping). If no such product is present, the condition is considered met.
### Cart has one time purchase product
This condition checks whether the cart contains at least one product that is a one time purchase. If present, the condition is considered met.
### Cart has no one time purchase product
This condition checks whether the cart contains no products that are one time purchases. If no one time purchase products are present, the condition is considered met.
### Cart has subscription product
This condition checks whether the cart contains at least one product that is part of a subscription. If a subscription product is present, the condition is considered met.
### Cart has no subscription product
This condition checks whether the cart contains no products that are part of a subscription. If no subscription products are present, the condition is considered met.
## Product Metafield
### Product variant metafield
This condition checks a **product variant metafield** you specify by **namespace** and **key**, then evaluates it using one of the following sub-conditions:
* **Has any of these values** (Matches if the metafield has at least one of the entered values)
* **Does not have any of these values** (Matches if the metafield has none of the entered values)
* **Has any other value besides these values** (Matches if the metafield has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the metafield has only the entered values and no others)
* **Has empty value** (Matches if the metafield has no value)
* **Does not have empty value** (Matches if the metafield contains any value)
* **Has number greater than or equal to** (Matches if the metafield’s numeric value is greater than or equal to the entered number)
* **Has number less than or equal to** (Matches if the metafield’s numeric value is less than or equal to the entered number)
* **Has number of values greater than or equals** (Matches if the **count** of values in the metafield is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of values in the metafield is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas.
> For example, `Namespace: shipping` · `Key: allowed_regions` · `Does not have any of these values: CA, TX` → Matches if neither “CA” nor “TX” appears in the metafield.
For **Has number greater than or equal to** and **Has number less than or equal to**, enter a single numeric value in the field to match against the metafield’s numeric value.
> For example, `Namespace: specs` · `Key: length_mm` · `Has number greater than or equal to 50` → Matches if the metafield’s numeric value is 50 or more.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match against the count of values in the metafield.
> For example, `Namespace: custom` · `Key: available_colors` · `Has number of values greater than or equals 3` → Matches if there are three or more values in the metafield.
## Discount
### Discount code
This condition evaluates discount codes used at checkout against selected values and determines whether the rule is satisfied based on the chosen logic.
* **Has any of these values** (The condition is satisfied if at least one entered discount code matches one or more of the selected values )
* **Does not have any of these values** ( The condition is satisfied if none of the entered discount codes match any of the selected values )
* **Has any other value besides these values** ( The condition is satisfied if at least one entered discount code is different from the selected values )
* **Does not have any other value besides these values** ( The condition is satisfied only if all entered discount codes exactly match the selected values and no additional discount codes are present )
Please use `*` wildcard to match multiple discount codes. For example, `FREE*`
will match FREE12, free-590 etc. Use `?` to match to any single character.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas or select from the dropdown.
> For example, `Does not have any of these values: SAVE10, ORDER20%OFF` → Matches discount codes other than “SAVE10” or “ORDER20%OFF”.
## Shipping
### Selected shipping method
This condition checks the customer’s **selected shipping method** against specific criteria, based on one of the following sub-conditions:
* **contains** (Matches when the selected shipping method includes the entered value)
* **does not contain** (Matches when the selected shipping method does not include the entered value)
* **is** (Matches exact entered text, or wildcard pattern if `*` is used)
* **is not** (Matches when exact entered text or wildcard pattern does not match)
To set these conditions, enter the value in the field and choose the appropriate comparison from the dropdown.
> For example, `contains Express` → Matches any selected shipping method that includes “Express”.
### Shipping methods available
Used to check if the given shipping methods are actually available on the checkout page, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the checkout page contains at least one of the listed shipping methods)
* **Does not have any of these values** (Matches if the checkout page does not contain any of the listed shipping methods)
* **Has any other value besides these values** (Matches if the checkout page contains shipping methods other than the listed ones)
* **Does not have any other value besides these values** (Matches if the checkout page contains only the listed shipping methods and no others)
* **Has number of values greater than or equals** (Matches if the number of shipping methods available on the checkout page is greater than or equal to the specified number)
* **Has number of values less than or equals** (Matches if the number of shipping methods available on the checkout page is less than or equal to the specified number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial shipping method names. For example, Stand\*
will match Standard, standard shipping etc.
> For example, `Has any of these values: Express Delivery, Standard Shipping` → Matches if at least one of the selected shipping methods is available.
For **Has number of values greater than or equals** or **Has number of values less than or equals**, enter the count threshold.
> For example, `Has number of values greater than or equals 3` → Matches if three or more shipping methods are available.
### Selected shipping type (Ship/Pickup)
This condition checks the "Ship vs Pickup in store" selection on the checkout page, as shown below.
It will become true if the selected shipping type is the same as the entered value, based on one of the following sub-conditions:
* **is** (Matches if the Delivery selection is exactly as the entered value)
* **is not** (Matches if the Delivery selection is different from the entered value)
For any of the above options, choose one shipping type from the list: **Pickup**, **Local delivery**, **Shipping**, **Pickup point**, **Retail**, or **None**.
> **Example:** `is not: Pickup` → Matches if the selected shipping type is anything other than “Pickup”, i-e it is "Ship".
## Localization
### User language
This condition checks the language selected by the customer, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer language is from the given list)
* **Does not have any of these values** (Matches if the customer language is not from the given list)
* **Has any other value besides these values** (Matches if the customer language is not from the given list)
* **Does not have any other value besides these values** (Matches if the customer language is from the given list and no others)
For any of the above options, search and select one or more languages from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any of these values: English, French` → Matches if the field does not contain “English” or “French”.
## Shipping Address
### Shipping address is empty
This condition becomes true if the shipping address fields are empty.
### Shipping address is not empty
This condition becomes true if the shipping address fields are not empty.
### Full name (First name + Last name)
Used to compare the customer’s full name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the full name contains the specified value or partial value)
* **Does not contain** (Matches if the full name does not contain the specified value or partial value)
* **Is empty** (Matches if no name is entered)
* **Is not empty** (Matches if any value is entered in the name field)
* **Is** (Matches if the full name exactly matches the specified value)
* **Is not** (Matches if the full name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the name is less than or equal to the specified number)
* **Has only** (Matches if the full name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the full name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Does not contain: Test` → Matches if the name does not contain “Test” anywhere.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the customer’s name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 10` → Matches if the full name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the full name field is left blank.
### First name
Used to compare the customer’s first name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the first name contains the specified value or partial value)
* **Does not contain** (Matches if the first name does not contain the specified value or partial value)
* **Is empty** (Matches if no first name is entered)
* **Is not empty** (Matches if any value is entered in the first name field)
* **Is** (Matches if the first name exactly matches the specified value)
* **Is not** (Matches if the first name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the first name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the first name is less than or equal to the specified number)
* **Has only** (Matches if the first name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the first name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Jane` → Matches if the first name is anything except “Jane”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the first name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the first name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the first name field is left blank.
### Last name
Used to compare the customer’s last name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the last name contains the specified value or partial value)
* **Does not contain** (Matches if the last name does not contain the specified value or partial value)
* **Is empty** (Matches if no last name is entered)
* **Is not empty** (Matches if any value is entered in the last name field)
* **Is** (Matches if the last name exactly matches the specified value)
* **Is not** (Matches if the last name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the last name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the last name is less than or equal to the specified number)
* **Has only** (Matches if the last name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the last name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Smith` → Matches if the last name is anything except “Smith”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the last name contains English characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the last name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the last name field is left blank.
### P.O. box address
The selected condition is based on whether the customer's address includes a P.O. Box. This condition can be used to trigger specific actions, such as restricting certain shipping methods or applying special handling rules for orders going to P.O. Box addresses.
When you use the 'P.O. box address' condition in the rule, then all kind of
entries in the shipping address like P.O. box or P O box or P.o b o x etc are
detected by the app automatically. If you want to also detect a custom word or
phrase, you can do that by using the 'Address line' condition within which you
can specify the word or phrase you want to detect.
If you want to detect PO Box words or phrase in other languages, you can do
that by using the 'Address (line1 + line2)' condition within which you can
specify the words or phrase you want to detect. For example, 'Packstation' in
German. You can add mulitple of these conditions for each word using the OR
operator in between them.
### Not P.O. box address
This condition becomes true if the customer’s address does not contain a P.O. Box.
### Address (line 1 + line 2)
Used to compare the customer’s full address (combined from Address Line 1 and Address Line 2) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the address contains the specified value or partial value)
* **Does not contain** (Matches if the address does not contain the specified value or partial value)
* **Is empty** (Matches if no address is entered in both lines)
* **Is not empty** (Matches if any value is entered in either line)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the address is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the address is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the address is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the address is less than or equal to the specified number)
* **Has no of words greater than or equals** (Matches if the total number of words in the address is greater than or equal to the specified number)
* **Has no of words less than or equals** (Matches if the total number of words in the address is less than or equal to the specified number)
* **Has only** (Matches if the address contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the address contains characters other than the allowed character type from the dropdown)
For **Contains** and **Does not contain**, enter the value to match.
> For example, `Contains: Street` → Matches if the address contains the word “Street”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the address contains English characters only.
For **Has no of digits/characters/words greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of words greater than or equals 5` → Matches if the address contains 5 or more words.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if both Address Line 1 and Address Line 2 are blank.
### Address line 1
Used to compare the customer’s address from Address Line 1 with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if Address Line 1 contains the specified value or partial value)
* **Does not contain** (Matches if Address Line 1 does not contain the specified value or partial value)
* **Is empty** (Matches if no value is entered in Address Line 1)
* **Is not empty** (Matches if any value is entered in Address Line 1)
* **Has no of digits greater than or equals** (Matches if the total number of digits in Address Line 1 is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in Address Line 1 is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in Address Line 1 is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in Address Line 1 is less than or equal to the specified number)
* **Has no of words greater than or equals** (Matches if the total number of words in Address Line 1 is greater than or equal to the specified number)
* **Has no of words less than or equals** (Matches if the total number of words in Address Line 1 is less than or equal to the specified number)
* **Has only** (Matches if Address Line 1 contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if Address Line 1 contains characters other than the allowed character type from the dropdown)
For **Contains** and **Does not contain**, enter the value to match.
> For example, `Contains: Street` → Matches if Address Line 1 contains the word “Street”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if Address Line 1 contains English characters only.
For **Has no of digits/characters/words greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of words greater than or equals 5` → Matches if Address Line 1 contains 5 or more words.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if Address Line 1 is left blank.
### Address line 2 (Apartment, suite, etc)
Used to compare the customer’s address from Address Line 2 (Apartment, suite, unit, building, floor, etc.) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if Address Line 2 contains the specified value or partial value)
* **Does not contain** (Matches if Address Line 2 does not contain the specified value or partial value)
* **Is empty** (Matches if no value is entered in Address Line 2)
* **Is not empty** (Matches if any value is entered in Address Line 2)
* **Has no of digits greater than or equals** (Matches if the total number of digits in Address Line 2 is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in Address Line 2 is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in Address Line 2 is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in Address Line 2 is less than or equal to the specified number)
* **Has no of words greater than or equals** (Matches if the total number of words in Address Line 2 is greater than or equal to the specified number)
* **Has no of words less than or equals** (Matches if the total number of words in Address Line 2 is less than or equal to the specified number)
* **Has only** (Matches if Address Line 2 contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if Address Line 2 contains characters other than the allowed character type from the dropdown)
For **Contains** and **Does not contain**, enter the value to match.
> For example, `Contains: Apt` → Matches if Address Line 2 contains the word “Apt”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters + accent variants` → Matches if Address Line 2 contains English characters and accented characters.
For **Has no of digits/characters/words greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of words greater than or equals 3` → Matches if Address Line 2 contains 3 or more words.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if Address Line 2 is left blank.
### Company
Used to compare the customer’s company name (The company name field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the company name contains the specified value or partial value)
* **Does not contain** (Matches if the company name does not contain the specified value or partial value)
* **Is empty** (Matches if no company name is entered)
* **Is not empty** (Matches if any value is entered in the company name field)
* **Is** (Matches if the company name exactly matches the specified value)
* **Is not** (Matches if the company name is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the company name is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the company name is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the company name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the company name is less than or equal to the specified number)
* **Has only** (Matches if the company name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the company name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: Tech` → Matches if the company name contains the word “Tech”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the company name contains English characters only.
For **Has no of digits/characters greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of characters greater than or equals 10` → Matches if the company name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the company name field is left blank.
### Phone number
Used to compare the customer’s phone number (The phone number field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the phone number contains the specified value or partial value)
* **Does not contain** (Matches if the phone number does not contain the specified value or partial value)
* **Is empty** (Matches if no phone number is entered)
* **Is not empty** (Matches if any value is entered in the phone number field)
* **Is** (Matches if the phone number exactly matches the specified value)
* **Is not** (Matches if the phone number is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the phone number is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the phone number is less than or equal to the specified number)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: 123` → Matches if the phone number contains “123” anywhere.
For **Has no of digits greater than or equals** or **Has no of digits less than or equals**, enter the threshold value.
> For example, `Has no of digits greater than or equals 10` → Matches if the phone number contains 10 or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the phone number field is left blank.
### Province code / State code
Used to compare the Province / State (The Province/State field on the checkout page) values with one or more specific values or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the province field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the province field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the province field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the province field contains only the listed values and no others)
* **Is empty** (Matches if the province field has no value)
* **Is not empty** (Matches if the province field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Add 2 or 3 letter province/state code abbreviation in "ISO\_3166-2" format
only.
> For example, `Does not have any other value besides these values: CA, TX` → Matches if the field contains only “CA” or “TX” and no other values.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is not empty` → Matches if any value is entered for the field.
### Country
Used to compare the Country (The Country field on the checkout page) values with one or more specific countries, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the country field contains at least one of the selected countries)
* **Does not have any of these values** (Matches if the country field does not contain any of the selected countries)
* **Has any other value besides these values** (Matches if the country field contains countries other than the selected ones)
* **Does not have any other value besides these values** (Matches if the country field contains only the selected countries and no others)
For any of the above options, search and select one or more countries from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any other value besides these values: Portugal, Poland` → Matches if the field contains only “Portugal” or “Poland” and no other countries.
### Zip code / Postal code
Used to compare the Zip code / Postal code (The Zip/Postal Code field on the checkout page) values with one or more specific zip or postal codes, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the zip/postal code field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the zip/postal code field does not contain any of the listed values)
* **Has value in between these values** (Matches if the zip/postal code field value falls within the specified range)
* **Does not have value in between these values** (Matches if the zip/postal code field value does not fall within the specified range)
* **Has any other value besides these values** (Matches if the zip/postal code field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the zip/postal code field contains only the listed values and no others)
* **Has only digits** (Matches if the zip/postal code field contains only numeric characters)
* **Does not have only digits** (Matches if the zip/postal code field contains any non-numeric characters)
* **Has number of digits in between** (Matches if the number of digits falls within the specified range)
* **Does not have number of digits in between** (Matches if the number of digits does not fall within the specified range)
* **Is empty** (Matches if the zip/postal code field has no value)
* **Is not empty** (Matches if the zip/postal code field contains any value)
Use **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values** to match against one or more specific zip/postal codes. Separate multiple values with commas.
Use \* wildcard to match multiple zip codes. For example, BT\* will match BT12,
bt-590 etc. Use ? to match to any single character.
> For example, `Has any of these values: BT*` → Matches all zip/postal codes starting with “BT”.
> Another example, `Does not have any of these values: 12345, 67890` → Matches if the code is not “12345” or “67890”.
Use **Has value in between these values** or **Does not have value in between these values** to match zip/postal codes within or outside a numeric range.
Enter numbers only. All values ranging in between starting value until the
last value will be matched, including the starting and last value.
> For example, `Has value in between these values: 10000 – 20000` → Matches if the code is between “10000” and “20000”.
Use **Has only digits** or **Does not have only digits** to match zip/postal codes that contain only numeric characters (0–9) or those that include any non-numeric characters, such as letters, spaces, or symbols.
> For example, `Has only digits` → Matches digits only (0–9).
Use **Has number of digits in between** or **Does not have number of digits in between** to match based on the count of digits in the code.
Enter numbers only. All values ranging in between given number of digits will
be matched.
> For example, `Has number of digits in between: 4 – 6` → Matches codes that contain between 4 and 6 digits.
Use **Is empty** or **Is not empty** when you only need to check whether the field is filled in.
> For example, `Is not empty` → Matches if any value is entered in the field
## Comparisons
### Product quantity per SKU vs Product quantity per SKU
This condition compares the **product quantity of one SKU** with the **product quantity of another SKU**, based on one of the following sub-conditions:
* **has quantity which is equal to** (Matches if the quantity of SKU1 is exactly equal to the quantity of SKU2)
* **has quantity which is not equal to** (Matches if the quantity of SKU1 is different from the quantity of SKU2)
* **has quantity which is greater than or equals to** (Matches if the quantity of SKU1 is greater than or equal to the quantity of SKU2)
* **has quantity which is less than or equals to** (Matches if the quantity of SKU1 is less than or equal to the quantity of SKU2)
* **has quantity which is multiple of** (Matches if the quantity of SKU1 is an exact multiple of the quantity of SKU2)
* **has quantity which is not multiple of** (Matches if the quantity of SKU1 is not an exact multiple of the quantity of SKU2)
To set these conditions:
Enter the SKU code for the first product in the Enter SKU1 field.
Enter the SKU code for the second product in the
Enter SKU2 field.
Choose the comparison option from the dropdown.
> **Example for “has quantity which is greater than or equals to”**:
> SKU1: `SKU-ABC`
> SKU2: `SKU-XYZ`
> → Matches when the quantity of `SKU-ABC` in the cart is greater than or equal to the quantity of `SKU-XYZ`.
> **Example for “has quantity which is multiple of”**:
> SKU1: `SKU-A`
> SKU2: `SKU-B`
> Multiple: `2`
> → Matches when the quantity of `SKU-A` is exactly 2×, 4×, 6×, etc., the quantity of `SKU-B` (e.g., `SKU-A` has 6 units and `SKU-B` has 3 units).
# Condition Set 3
Source: https://docs.checkoutrules.com/guides/en/essentials/condition-sets/condition-set-3
Learn about each condition available inside _Condition Set 3_.
## Always
If you don’t want to set any condition, select *Always*. The rule will run every time for everyone, without checking any conditions.
## Previous all conditions invalid
When all previous conditions are invalid in the previous [rule block](/guides/en/get-started/concepts#block), i-e the previous rule block did not run, this condition becomes true, ensuring the action is triggered only if none of the earlier conditions are met.
Available only when at least one previous rule block exists.
## Customer
### Email address
This condition checks the customer’s **email address** against specific criteria, based on one of the following sub-conditions:
* **contains** (The email address includes the entered value)
* **does not contain** (The email address does not include the entered value)
* **is empty** (No email address is provided)
* **is not empty** (An email address is provided)
* **is** (The email address exactly matches the entered value)
* **is not** (The email address does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the customer’s email address.
> For example, `contains @gmail.com` → Matches any email address ending with “@gmail.com”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the email field is blank.
### Customer tag
This condition checks the **customer’s tag** against specific criteria, based on one of the following sub-conditions:
* **has value of** (Matches when the customer’s tags include the entered value)
* **does not have value of** (Matches when the customer’s tags do not include the entered value)
To set these conditions, enter the tag value in the field and choose the appropriate comparison from the dropdown.
> For example, `has value of VIP` → Matches customers who have the **VIP** tag.
## Order Details
### Order total amount
This condition checks the **order’s total amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s total amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s total amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 600` → Matches orders with a total amount of 600 or more.
### Order subtotal amount
This condition checks the **order’s subtotal amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 699` → Matches orders with a subtotal amount of 699 or more.
### Order subtotal one time purchase amount
This condition checks the **order’s subtotal one time purchase amount** (The subtotal amount from products that are not subscription products) against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal one time purchase amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal one time purchase amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 700` → Matches orders with a subtotal one time purchase amount of 700 or more.
### Order subtotal subscription amount
This condition checks the **order’s subtotal subscription amount** (The subtotal amount from products that are subscription products) against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal subscription amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal subscription amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 1200` → Matches orders with a subtotal subscription amount of 1200 or more.
### Order subtotal digital amount
This condition checks the **order’s subtotal digital amount** (The subtotal amount from products that are digital products) against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal digital amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal digital amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is less than or equals 398` → Matches orders with a subtotal digital amount of 398 or less.
### Order subtotal physical amount
This condition checks the **order’s subtotal physical amount** (The subtotal amount from products that are physical products) against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal physical amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal physical amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 299` → Matches orders with a subtotal physical amount of 299 or more.
### Order total quantity
This condition checks the **total quantity of items in an order** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total quantity of items is greater than or equal to the entered number)
* **is less than or equals** (Matches when the total quantity of items is less than or equal to the entered number)
* **is multiple of** (Matches when the total quantity is an exact multiple of the entered number)
* **is not multiple of** (Matches when the total quantity is not a multiple of the entered number)
To set these conditions, enter a quantity in the field and choose the appropriate comparison from the dropdown.
The quantity refers to the **sum of all item quantities** in the order, not
the number of distinct products.
> **Example for “is multiple of”**:\
> `is multiple of 5` → Matches orders with total quantities like 5, 10, 15, 20, etc.
> **Example for “is greater than or equals”**:\
> `is greater than or equals 3` → Matches orders with 3 or more total items.
### Physical product total quantity
This condition checks the **total quantity of physical items in an order** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total quantity of physical items is greater than or equal to the entered number)
* **is less than or equals** (Matches when the total quantity of physical items is less than or equal to the entered number)
* **is multiple of** (Matches when the total quantity of physical items is an exact multiple of the entered number)
* **is not multiple of** (Matches when the total quantity of physical items is not a multiple of the entered number)
To set these conditions, enter a quantity in the field and choose the appropriate comparison from the dropdown.
The quantity refers to the **sum of all physical item quantities** in the
order, not the number of distinct products.
> **Example for “is multiple of”**:
> `is multiple of 5` → Matches orders with total quantities like 5, 10, 15, 20, etc.
> **Example for “is greater than or equals”**:
> `is greater than or equals 3` → Matches orders with 3 or more physical items.
## Cart Details
### Order subtotal amount per product tag
This condition checks the **subtotal amount of products with a specific product tag** in the order against defined criteria, based on one of the following sub-conditions:
* **amount is greater than or equals** (Matches when the subtotal amount of products with the specified product tag is greater than or equal to the entered amount)
* **amount is less than or equals** (Matches when the subtotal amount of products with the specified product tag is less than or equal to the entered amount)
To set these conditions:
Enter the product tag in the “Enter product tag” field.
Enter the amount in the “Enter amount” field.
Select the comparison option from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> **Example for “amount is greater than or equals”**:\
> Product Tag: `SummerCollection`\
> Amount: `777`\
> → Matches orders where the subtotal amount of products tagged `SummerCollection` is 777 or more.
### Order subtotal amount - Order subtotal amount per product tag
This condition checks the **order’s subtotal amount minus the subtotal amount of products with a specific product tag** against defined criteria, based on one of the following sub-conditions:
* **amount is greater than or equals** (Matches when the difference is greater than or equal to the entered amount)
* **amount is less than or equals** (Matches when the difference is less than or equal to the entered amount)
To set these conditions:
Enter the product tag in the “Enter product tag” field.
Enter the amount in the “Enter amount” field.
Select the comparison option from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> **Example for “amount is less than or equals”**:\
> Product Tag: `SummerCollection`\
> Amount: `500`\
> → Matches orders where the subtotal amount excluding products tagged `SummerCollection` is 500 or less.
### Quantity per product tag
This condition checks the **quantity of products with a specific product tag** in the order against defined criteria, based on one of the following sub-conditions:
* **quantity is greater than or equals** (Matches when the quantity of products with the specified product tag is greater than or equal to the entered number)
* **quantity is less than or equals** (Matches when the quantity of products with the specified product tag is less than or equal to the entered number)
* **quantity is divisible by** (Matches when the quantity of products with the specified product tag is an exact multiple of the entered number)
* **quantity is not divisible by** (Matches when the quantity of products with the specified product tag is not a multiple of the entered number)
To set these conditions:
Enter the product tag in the “Enter product tag” field.
Enter the quantity in the “Enter quantity” field.
Select the comparison option from the dropdown.
> **Example for “quantity is greater than or equals”**:
> Product Tag: `SummerCollection`
> Quantity: `3`
> → Matches orders where there are 3 or more units of products tagged `SummerCollection`.
> **Example for “quantity is divisible by”**:
> Product Tag: `SummerCollection`
> Quantity: `2`
> → Matches orders where the quantity of products tagged `SummerCollection` is 2, 4, 6, 8, etc.
### Quantity per each product
This condition checks the **quantity of each individual product in the checkout** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the quantity of any product is greater than or equal to the entered number)
* **is less than or equals** (Matches when the quantity of any product is less than or equal to the entered number)
To set these conditions, enter a quantity in the field and choose the appropriate comparison from the dropdown.
The quantity refers to the quantity of each individual product line item in
the checkout, not the total quantity of all products combined. The condition
is considered a match if any product in the checkout
satisfies the selected criteria.
> **Example for “is greater than or equals”**:
> `is greater than or equals 3` → Matches when at least one product in the checkout has a quantity of 3 or more.
## Cart Has Any Items
### Product tag
This condition checks the **product tag** in the order against specific criteria. It will become true if **any** product in the cart has the entered Product Tag value, based on one of the following sub-conditions:
* **has value of** (Matches when the product tag has the specified value)
* **does not have value of** (Matches when the product tag does not have the specified value)
* **has any other value besides** (Matches when the product tag has any value except the entered one)
* **does not have any other value besides** (Matches when the product tag has only the entered value and no other)
To set these conditions, enter the value in the “Enter value” field, then choose the appropriate comparison from the dropdown.
> For example, `has value of NewArrival` → Matches when the product tag is **NewArrival**.
### Product tags
This condition checks the **Product Tags** against specific criteria. It will become true if **any** product in the cart has the entered Product Tag value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the Product Tags have at least one of the entered values)
* **Does not have any of these values** (Matches if the Product Tags have none of the entered values)
* **Has any other value besides these values** (Matches if the Product Tags have a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the Product Tags have only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of Product Tags is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of Product Tags is less than or equal to the entered number)
You can only use this condition with the same values throughout the rule. If
you want to use different values in different rule blocks, you should switch
to condition set 3, 5, or 6 which allow more flexibility.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more Product Tag values into the field. Separate multiple values with commas.
> For example, `Does not have any of these values: summer, clearance` → Matches if the Product Tag does not include “summer” or “clearance”.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the Product Tags count.
> For example, `Has number of values less than or equals 4` → Matches if there are four or fewer Product Tags.
### Collection
This condition checks the **collection** in the order against specific criteria. It will become true if **any** of the product in the cart belongs to the entered Collection value, based on one of the following sub-conditions:
* **has value of** (Matches when the collection has the specified value)
* **does not have value of** (Matches when the collection does not have the specified value)
* **has any other value besides** (Matches when the collection has any value except the entered one)
* **does not have any other value besides** (Matches when the collection has only the entered value and no other)
To set these conditions, click on the “Enter value” field to open the collection selection popup, then search for or directly select the desired collection, and choose the appropriate comparison from the dropdown.
> For example, `has value of Summer2025` → Matches when any product in cart belongs to the collection **Summer2025**.
### Collections
This condition checks the **Collections** against specific criteria. It will become true if **any** product in the cart belongs to the entered Collection value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the Collection has at least one of the entered values)
* **Does not have any of these values** (Matches if the Collection has none of the entered values)
* **Has any other value besides these values** (Matches if the Collection has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the Collection has only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of Collections is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of Collections is less than or equal to the entered number)
You can only use this condition with the same values throughout the rule. If
you want to use different values in different rule blocks, you should switch
to condition set 3 which allows more flexibility.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more Collection values into the field.
> For example, `Has any other value besides these values: Summer2025, Winter2025` → Matches if the Collection includes at least one value that is not “Summer2025” or “Winter2025”.
From the popup, select one or multiple collections from the already created collections in your store.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the Collection count.
> For example, `Has number of values less than or equals 7` → Matches if there are seven or fewer Collections.
### Cart has shipping product (requires delivery)
This condition checks whether the cart contains at least one product that requires shipping (delivery). If present, the condition is considered met.
### Cart has no shipping product
This condition checks whether the cart does not contain any product that requires shipping (delivery). If no such product is present, the condition is considered met.
### Cart has digital product
This condition checks whether the cart contains at least one digital product (A product that does not require shipping). If present, the condition is considered met.
### Cart has no digital product
This condition checks whether the cart does not contain any digital product (i-e All products require shipping). If no such product is present, the condition is considered met.
### Cart has one time purchase product
This condition checks whether the cart contains at least one product that is a one time purchase. If present, the condition is considered met.
### Cart has no one time purchase product
This condition checks whether the cart contains no products that are one time purchases. If no one time purchase products are present, the condition is considered met.
### Cart has subscription product
This condition checks whether the cart contains at least one product that is part of a subscription. If a subscription product is present, the condition is considered met.
### Cart has no subscription product
This condition checks whether the cart contains no products that are part of a subscription. If no subscription products are present, the condition is considered met.
### Any product cost per quantity
This condition checks the **cost per quantity of any product in the order** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the cost per quantity of any product is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the cost per quantity of any product is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 200` → Matches when any product’s cost per quantity is 200 or more.
## Discount
### Discount code
This condition evaluates discount codes used at checkout against selected values and determines whether the rule is satisfied based on the chosen logic.
* **Has any of these values** (The condition is satisfied if at least one entered discount code matches one or more of the selected values )
* **Does not have any of these values** ( The condition is satisfied if none of the entered discount codes match any of the selected values )
* **Has any other value besides these values** ( The condition is satisfied if at least one entered discount code is different from the selected values )
* **Does not have any other value besides these values** ( The condition is satisfied only if all entered discount codes exactly match the selected values and no additional discount codes are present )
Please use `*` wildcard to match multiple discount codes. For example, `FREE*`
will match FREE12, free-590 etc. Use `?` to match to any single character.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas or select from the dropdown.
> For example, `Does not have any of these values: SAVE10, ORDER20%OFF` → Matches discount codes other than “SAVE10” or “ORDER20%OFF”.
## Shipping
### Shipping method price
This condition checks the **shipping method’s price** based on the selected shipping name criteria and price comparison rule. You can configure it using the following options:
**Shipping name criteria:**
* **shipping name contains** (Matches when the shipping method name includes the entered text)
* **shipping name is** (Matches exact entered text, or wildcard pattern if `*` is used)
* **any shipping method** (Matches regardless of the shipping method name)
**Price comparison options:**
* **price is greater than or equals** (Matches when the shipping method price is greater than or equal to the entered amount)
* **price is less than or equals** (Matches when the shipping method price is less than or equal to the entered amount)
> For example, `shipping name contains Express` + `price is greater than or equals 200` → Matches orders with a shipping method name containing “Express” and a shipping price of 200 or more.
### Selected shipping type (Ship/Pickup)
This condition checks the "Ship vs Pickup in store" selection on the checkout page, as shown below.
It will become true if the selected shipping type is the same as the entered value, based on one of the following sub-conditions:
* **is** (Matches if the Delivery selection is exactly as the entered value)
* **is not** (Matches if the Delivery selection is different from the entered value)
For any of the above options, choose one shipping type from the list: **Pickup**, **Local delivery**, **Shipping**, **Pickup point**, **Retail**, or **None**.
> **Example:** `is not: Pickup` → Matches if the selected shipping type is anything other than “Pickup”, i-e it is "Ship".
### Shipping methods available
Used to check if the given shipping methods are actually available on the checkout page, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the checkout page contains at least one of the listed shipping methods)
* **Does not have any of these values** (Matches if the checkout page does not contain any of the listed shipping methods)
* **Has any other value besides these values** (Matches if the checkout page contains shipping methods other than the listed ones)
* **Does not have any other value besides these values** (Matches if the checkout page contains only the listed shipping methods and no others)
* **Has number of values greater than or equals** (Matches if the number of shipping methods available on the checkout page is greater than or equal to the specified number)
* **Has number of values less than or equals** (Matches if the number of shipping methods available on the checkout page is less than or equal to the specified number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial shipping method names. For example, Stand\*
will match Standard, standard shipping etc.
> For example, `Has any of these values: Express Delivery, Standard Shipping` → Matches if at least one of the selected shipping methods is available.
For **Has number of values greater than or equals** or **Has number of values less than or equals**, enter the count threshold.
> For example, `Has number of values greater than or equals 3` → Matches if three or more shipping methods are available.
## Localization
### User language
This condition checks the language selected by the customer, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer language is from the given list)
* **Does not have any of these values** (Matches if the customer language is not from the given list)
* **Has any other value besides these values** (Matches if the customer language is not from the given list)
* **Does not have any other value besides these values** (Matches if the customer language is from the given list and no others)
For any of the above options, search and select one or more languages from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any of these values: English, French` → Matches if the field does not contain “English” or “French”.
## Shipping Address
### Shipping address is empty
This condition becomes true if the shipping address fields are empty.
### Shipping address is not empty
This condition becomes true if the shipping address fields are not empty.
### Full name (First name + Last name)
Used to compare the customer’s full name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the full name contains the specified value or partial value)
* **Does not contain** (Matches if the full name does not contain the specified value or partial value)
* **Is empty** (Matches if no name is entered)
* **Is not empty** (Matches if any value is entered in the name field)
* **Is** (Matches if the full name exactly matches the specified value)
* **Is not** (Matches if the full name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the name is less than or equal to the specified number)
* **Has only** (Matches if the full name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the full name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Does not contain: Test` → Matches if the name does not contain “Test” anywhere.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the customer’s name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 10` → Matches if the full name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the full name field is left blank.
### First name
Used to compare the customer’s first name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the first name contains the specified value or partial value)
* **Does not contain** (Matches if the first name does not contain the specified value or partial value)
* **Is empty** (Matches if no first name is entered)
* **Is not empty** (Matches if any value is entered in the first name field)
* **Is** (Matches if the first name exactly matches the specified value)
* **Is not** (Matches if the first name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the first name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the first name is less than or equal to the specified number)
* **Has only** (Matches if the first name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the first name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Jane` → Matches if the first name is anything except “Jane”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the first name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the first name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the first name field is left blank.
### Last name
Used to compare the customer’s last name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the last name contains the specified value or partial value)
* **Does not contain** (Matches if the last name does not contain the specified value or partial value)
* **Is empty** (Matches if no last name is entered)
* **Is not empty** (Matches if any value is entered in the last name field)
* **Is** (Matches if the last name exactly matches the specified value)
* **Is not** (Matches if the last name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the last name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the last name is less than or equal to the specified number)
* **Has only** (Matches if the last name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the last name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Smith` → Matches if the last name is anything except “Smith”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the last name contains English characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the last name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the last name field is left blank.
### P.O. box address
The selected condition is based on whether the customer's address includes a P.O. Box. This condition can be used to trigger specific actions, such as restricting certain shipping methods or applying special handling rules for orders going to P.O. Box addresses.
When you use the 'P.O. box address' condition in the rule, then all kind of
entries in the shipping address like P.O. box or P O box or P.o b o x etc are
detected by the app automatically. If you want to also detect a custom word or
phrase, you can do that by using the 'Address line' condition within which you
can specify the word or phrase you want to detect.
If you want to detect PO Box words or phrase in other languages, you can do
that by using the 'Address (line1 + line2)' condition within which you can
specify the words or phrase you want to detect. For example, 'Packstation' in
German. You can add mulitple of these conditions for each word using the OR
operator in between them.
### Not P.O. box address
This condition becomes true if the customer’s address does not contain a P.O. Box.
### Address (line 1 + line 2)
Used to compare the customer’s full address (combined from Address Line 1 and Address Line 2) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the address contains the specified value or partial value)
* **Does not contain** (Matches if the address does not contain the specified value or partial value)
* **Is empty** (Matches if no address is entered in both lines)
* **Is not empty** (Matches if any value is entered in either line)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the address is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the address is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the address is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the address is less than or equal to the specified number)
* **Has no of words greater than or equals** (Matches if the total number of words in the address is greater than or equal to the specified number)
* **Has no of words less than or equals** (Matches if the total number of words in the address is less than or equal to the specified number)
* **Has only** (Matches if the address contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the address contains characters other than the allowed character type from the dropdown)
For **Contains** and **Does not contain**, enter the value to match.
> For example, `Contains: Street` → Matches if the address contains the word “Street”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the address contains English characters only.
For **Has no of digits/characters/words greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of words greater than or equals 5` → Matches if the address contains 5 or more words.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if both Address Line 1 and Address Line 2 are blank.
### Address line 1
Used to compare the customer’s address from Address Line 1 with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if Address Line 1 contains the specified value or partial value)
* **Does not contain** (Matches if Address Line 1 does not contain the specified value or partial value)
* **Is empty** (Matches if no value is entered in Address Line 1)
* **Is not empty** (Matches if any value is entered in Address Line 1)
* **Has no of digits greater than or equals** (Matches if the total number of digits in Address Line 1 is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in Address Line 1 is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in Address Line 1 is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in Address Line 1 is less than or equal to the specified number)
* **Has no of words greater than or equals** (Matches if the total number of words in Address Line 1 is greater than or equal to the specified number)
* **Has no of words less than or equals** (Matches if the total number of words in Address Line 1 is less than or equal to the specified number)
* **Has only** (Matches if Address Line 1 contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if Address Line 1 contains characters other than the allowed character type from the dropdown)
For **Contains** and **Does not contain**, enter the value to match.
> For example, `Contains: Street` → Matches if Address Line 1 contains the word “Street”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if Address Line 1 contains English characters only.
For **Has no of digits/characters/words greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of words greater than or equals 5` → Matches if Address Line 1 contains 5 or more words.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if Address Line 1 is left blank.
### Address line 2 (Apartment, suite, etc)
Used to compare the customer’s address from Address Line 2 (Apartment, suite, unit, building, floor, etc.) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if Address Line 2 contains the specified value or partial value)
* **Does not contain** (Matches if Address Line 2 does not contain the specified value or partial value)
* **Is empty** (Matches if no value is entered in Address Line 2)
* **Is not empty** (Matches if any value is entered in Address Line 2)
* **Has no of digits greater than or equals** (Matches if the total number of digits in Address Line 2 is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in Address Line 2 is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in Address Line 2 is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in Address Line 2 is less than or equal to the specified number)
* **Has no of words greater than or equals** (Matches if the total number of words in Address Line 2 is greater than or equal to the specified number)
* **Has no of words less than or equals** (Matches if the total number of words in Address Line 2 is less than or equal to the specified number)
* **Has only** (Matches if Address Line 2 contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if Address Line 2 contains characters other than the allowed character type from the dropdown)
For **Contains** and **Does not contain**, enter the value to match.
> For example, `Contains: Apt` → Matches if Address Line 2 contains the word “Apt”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters + accent variants` → Matches if Address Line 2 contains English characters and accented characters.
For **Has no of digits/characters/words greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of words greater than or equals 3` → Matches if Address Line 2 contains 3 or more words.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if Address Line 2 is left blank.
### Company
Used to compare the customer’s company name (The company name field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the company name contains the specified value or partial value)
* **Does not contain** (Matches if the company name does not contain the specified value or partial value)
* **Is empty** (Matches if no company name is entered)
* **Is not empty** (Matches if any value is entered in the company name field)
* **Is** (Matches if the company name exactly matches the specified value)
* **Is not** (Matches if the company name is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the company name is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the company name is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the company name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the company name is less than or equal to the specified number)
* **Has only** (Matches if the company name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the company name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: Tech` → Matches if the company name contains the word “Tech”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the company name contains English characters only.
For **Has no of digits/characters greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of characters greater than or equals 10` → Matches if the company name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the company name field is left blank.
### Phone number
Used to compare the customer’s phone number (The phone number field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the phone number contains the specified value or partial value)
* **Does not contain** (Matches if the phone number does not contain the specified value or partial value)
* **Is empty** (Matches if no phone number is entered)
* **Is not empty** (Matches if any value is entered in the phone number field)
* **Is** (Matches if the phone number exactly matches the specified value)
* **Is not** (Matches if the phone number is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the phone number is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the phone number is less than or equal to the specified number)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: 123` → Matches if the phone number contains “123” anywhere.
For **Has no of digits greater than or equals** or **Has no of digits less than or equals**, enter the threshold value.
> For example, `Has no of digits greater than or equals 10` → Matches if the phone number contains 10 or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the phone number field is left blank.
### City / Area
Used to compare the City / Area (The City/Area field on the checkout page) values with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the city field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the city field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the city field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the city field contains only the listed values and no others)
* **Has number of digits greater than or equals** (Matches if the number of digits in the city field is greater than or equal to the specified number)
* **Has number of digits less than or equals** (Matches if the number of digits in the city field is less than or equal to the specified number)
* **Is empty** (Matches if the city field has no value)
* **Is not empty** (Matches if the city field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial city names. For example, Santo\* will match
santo domingo, santodomngo etc.
> For example, `Has any of these values: Lahore, Karachi` → Matches if the field contains either “Lahore” or “Karachi”.
For **Has number of digits greater than or equals** or **Has number of digits less than or equals**, enter the digit count threshold.
> For example, `Has number of digits greater than or equals 5` → Matches if the field’s value has five or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if no value is entered for the field.
### Province code / State code
Used to compare the Province / State (The Province/State field on the checkout page) values with one or more specific values or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the province field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the province field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the province field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the province field contains only the listed values and no others)
* **Is empty** (Matches if the province field has no value)
* **Is not empty** (Matches if the province field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Add 2 or 3 letter province/state code abbreviation in "ISO\_3166-2" format
only.
> For example, `Does not have any other value besides these values: CA, TX` → Matches if the field contains only “CA” or “TX” and no other values.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is not empty` → Matches if any value is entered for the field.
### Country
Used to compare the Country (The Country field on the checkout page) values with one or more specific countries, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the country field contains at least one of the selected countries)
* **Does not have any of these values** (Matches if the country field does not contain any of the selected countries)
* **Has any other value besides these values** (Matches if the country field contains countries other than the selected ones)
* **Does not have any other value besides these values** (Matches if the country field contains only the selected countries and no others)
For any of the above options, search and select one or more countries from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any other value besides these values: Portugal, Poland` → Matches if the field contains only “Portugal” or “Poland” and no other countries.
### Zip code / Postal code
Used to compare the Zip code / Postal code (The Zip/Postal Code field on the checkout page) values with one or more specific zip or postal codes, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the zip/postal code field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the zip/postal code field does not contain any of the listed values)
* **Has value in between these values** (Matches if the zip/postal code field value falls within the specified range)
* **Does not have value in between these values** (Matches if the zip/postal code field value does not fall within the specified range)
* **Has any other value besides these values** (Matches if the zip/postal code field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the zip/postal code field contains only the listed values and no others)
* **Has only digits** (Matches if the zip/postal code field contains only numeric characters)
* **Does not have only digits** (Matches if the zip/postal code field contains any non-numeric characters)
* **Has number of digits in between** (Matches if the number of digits falls within the specified range)
* **Does not have number of digits in between** (Matches if the number of digits does not fall within the specified range)
* **Is empty** (Matches if the zip/postal code field has no value)
* **Is not empty** (Matches if the zip/postal code field contains any value)
Use **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values** to match against one or more specific zip/postal codes. Separate multiple values with commas.
Use \* wildcard to match multiple zip codes. For example, BT\* will match BT12,
bt-590 etc. Use ? to match to any single character.
> For example, `Has any of these values: BT*` → Matches all zip/postal codes starting with “BT”.
> Another example, `Does not have any of these values: 12345, 67890` → Matches if the code is not “12345” or “67890”.
Use **Has value in between these values** or **Does not have value in between these values** to match zip/postal codes within or outside a numeric range.
Enter numbers only. All values ranging in between starting value until the
last value will be matched, including the starting and last value.
> For example, `Has value in between these values: 10000 – 20000` → Matches if the code is between “10000” and “20000”.
Use **Has only digits** or **Does not have only digits** to match zip/postal codes that contain only numeric characters (0–9) or those that include any non-numeric characters, such as letters, spaces, or symbols.
> For example, `Has only digits` → Matches digits only (0–9).
Use **Has number of digits in between** or **Does not have number of digits in between** to match based on the count of digits in the code.
Enter numbers only. All values ranging in between given number of digits will
be matched.
> For example, `Has number of digits in between: 4 – 6` → Matches codes that contain between 4 and 6 digits.
Use **Is empty** or **Is not empty** when you only need to check whether the field is filled in.
> For example, `Is not empty` → Matches if any value is entered in the field
# Condition Set 4
Source: https://docs.checkoutrules.com/guides/en/essentials/condition-sets/condition-set-4
Learn about each condition available inside _Condition Set 4_.
## Always
If you don’t want to set any condition, select *Always*. The rule will run every time for everyone, without checking any conditions.
## Previous all conditions invalid
When all previous conditions are invalid in the previous [rule block](/guides/en/get-started/concepts#block), i-e the previous rule block did not run, this condition becomes true, ensuring the action is triggered only if none of the earlier conditions are met.
Available only when at least one previous rule block exists.
## Customer
### Email address
This condition checks the customer’s **email address** against specific criteria, based on one of the following sub-conditions:
* **contains** (The email address includes the entered value)
* **does not contain** (The email address does not include the entered value)
* **is empty** (No email address is provided)
* **is not empty** (An email address is provided)
* **is** (The email address exactly matches the entered value)
* **is not** (The email address does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the customer’s email address.
> For example, `contains @gmail.com` → Matches any email address ending with “@gmail.com”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the email field is blank.
### Customer tag
This condition checks the **customer’s tag** against specific criteria, based on one of the following sub-conditions:
* **has value of** (Matches when the customer’s tags include the entered value)
* **does not have value of** (Matches when the customer’s tags do not include the entered value)
To set these conditions, enter the tag value in the field and choose the appropriate comparison from the dropdown.
> For example, `has value of VIP` → Matches customers who have the **VIP** tag.
### Customer total number of previous orders
This condition checks the **total number of previous orders** placed by the customer against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the customer’s total number of previous orders is greater than or equal to the entered number)
* **is less than or equals** (Matches when the customer’s total number of previous orders is less than or equal to the entered number)
To set these conditions, enter the number of orders in the field and choose the appropriate comparison from the dropdown.
> For example, `is greater than or equals 3` → Matches customers who have placed 3 or more previous orders.
## B2B Details
### Customer is a B2B company
This condition checks whether the customer belongs to a **company** in your store records. If the customer is identified as a B2B company, the condition is considered met.
### Customer is not a B2B company
This condition checks whether the customer does **not** belong to a **company** in your store records. If the customer is not identified as a B2B company, the condition is considered met.
### Purchasing company name
This condition checks if the customer belongs to a company in your store records, then checks that **purchasing company name** against specific criteria, based on one of the following sub-conditions:
* **contains** (The purchasing company name includes the entered value)
* **does not contain** (The purchasing company name does not include the entered value)
* **is empty** (No purchasing company name is provided)
* **is not empty** (A purchasing company name is provided)
* **is** (The purchasing company name exactly matches the entered value)
* **is not** (The purchasing company name does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the customer’s purchasing company name.
> For example, `contains Trading` → Matches any purchasing company name containing the word “Trading”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the purchasing company name field is blank.
### Purchasing company location name
This condition checks if the customer belongs to a company in your store records, then checks that **purchasing company location name** against specific criteria, based on one of the following sub-conditions:
* **contains** (The purchasing company location name includes the entered value)
* **does not contain** (The purchasing company location name does not include the entered value)
* **is empty** (No purchasing company location name is provided)
* **is not empty** (A purchasing company location name is provided)
* **is** (The purchasing company location name exactly matches the entered value)
* **is not** (The purchasing company location name does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the customer’s purchasing company location name.
> For example, `contains New York` → Matches any purchasing company location name containing “New York”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the purchasing company location name field is blank.
## Order Details
### Order subtotal amount
This condition checks the **order’s subtotal amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 699` → Matches orders with a subtotal amount of 699 or more.
## Cart Details
### Currency
Used to compare the customer's currency selection on your store, with one or more specific currencies, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer's currency is from the given list)
* **Does not have any of these values** (Matches if the customer's currency is not from the given list)
* **Has any other value besides these values** (Matches if the customer's currency is not from the given list)
* **Does not have any other value besides these values** (Matches if the customer's currency is from the given list and no others)
For any of the above options, search and select one or more currencies from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection. Separate multiple values with commas.
> For example, `Does not have any other value besides these values: USD, EUR` → Matches if the field contains only “USD” or “EUR” and no other currencies.
### Product vendor
This condition checks the **product vendor** against specific criteria. If any product in the cart has the entered Product Vendor value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the product vendor has at least one of the entered values)
* **Does not have any of these values** (Matches if the product vendor has none of the entered values)
* **Has any other value besides these values** (Matches if the product vendor has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the product vendor has only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of product vendors is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of product vendors is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more product vendor names into the field. Separate multiple values with commas.
Use \* wildcard to match multiple values. For example, Drop\* will match
Dropship, drop-590 etc. Use ? to match to any single character.
> For example, `Has any of these values: Nike, Adidas` → Matches if the product vendor
> is either “Nike” or “Adidas”.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the product vendor count.
> For example, `Has number of values greater than or equals 3` → Matches if there are three or more product vendors.
### Product title
This condition checks the **product title** against specific criteria. If any product in the cart has the entered Product Title value, based on one of the following sub-conditions:
* **contains** (The product title includes the entered value)
* **does not contain** (The product title does not include the entered value)
* **is** (The product title exactly matches the entered value)
* **is not** (The product title does not exactly match the entered value)
To set these conditions, enter the product title value in the field and choose the appropriate comparison from the dropdown.
> For example, `contains Shoes` → Matches any product title containing the word “Shoes”.
### Product type
This condition checks the **product type** against specific criteria. If any product in the cart has the entered Product Type value, based on one of the following sub-conditions:
* **contains** (The product type includes the entered value)
* **does not contain** (The product type does not include the entered value)
* **is empty** (No product type is provided)
* **is not empty** (A product type is provided)
* **is** (The product type exactly matches the entered value)
* **is not** (The product type does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the product type.
> For example, `contains Electronics` → Matches any product type containing the word “Electronics”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the product type field is blank.
### Order subtotal amount per SKU
This condition checks the **subtotal amount of products with a specific SKU** in the order against defined criteria, based on one of the following sub-conditions:
* **amount is greater than or equals** (Matches when the subtotal amount of products with the specified SKU is greater than or equal to the entered amount)
* **amount is less than or equals** (Matches when the subtotal amount of products with the specified SKU is less than or equal to the entered amount)
To set these conditions:
Enter the SKU in the “Enter SKU” field.
Enter the amount in the “Enter amount” field.
Select the comparison option from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> **Example for “amount is greater than or equals”**:
> SKU: `ABC123`
> Amount: `777`
> → Matches orders where the subtotal amount of products with SKU `ABC123` is 777 or more.
### Order subtotal amount per product tag
This condition checks the **subtotal amount of products with a specific product tag** in the order against defined criteria, based on one of the following sub-conditions:
* **amount is greater than or equals** (Matches when the subtotal amount of products with the specified product tag is greater than or equal to the entered amount)
* **amount is less than or equals** (Matches when the subtotal amount of products with the specified product tag is less than or equal to the entered amount)
To set these conditions:
Enter the product tag in the “Enter product tag” field.
Enter the amount in the “Enter amount” field.
Select the comparison option from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> **Example for “amount is greater than or equals”**:\
> Product Tag: `SummerCollection`\
> Amount: `777`\
> → Matches orders where the subtotal amount of products tagged `SummerCollection` is 777 or more.
### Order subtotal amount - Order subtotal amount per product tag
This condition checks the **order’s subtotal amount minus the subtotal amount of products with a specific product tag** against defined criteria, based on one of the following sub-conditions:
* **amount is greater than or equals** (Matches when the difference is greater than or equal to the entered amount)
* **amount is less than or equals** (Matches when the difference is less than or equal to the entered amount)
To set these conditions:
Enter the product tag in the “Enter product tag” field.
Enter the amount in the “Enter amount” field.
Select the comparison option from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> **Example for “amount is less than or equals”**:\
> Product Tag: `SummerCollection`\
> Amount: `500`\
> → Matches orders where the subtotal amount excluding products tagged `SummerCollection` is 500 or less.
### Any product discount amount
This condition checks the **discount amount applied to any product** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the discount amount on any product is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the discount amount on any product is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 50` → Matches if any product in the order has a discount amount of 50 or more.
### Any product discount percentage
This condition checks the **discount percentage applied to any product** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the discount percentage on any product is greater than or equal to the entered percentage)
* **is less than or equals** (Matches when the discount percentage on any product is less than or equal to the entered percentage)
To set these conditions, enter the percentage in the field and choose the appropriate comparison from the dropdown.
> For example, `is greater than or equals 10` → Matches if any product in the order has a discount percentage of 10% or more.
### Total product discount amount
This condition checks the **total product discount amount** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total discount amount for a product is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the total discount amount for a product is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 100` → Matches if the total discount amount for any product in the order is 100 or more.
### Total product discount percentage
This condition checks the **total product discount percentage** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total discount percentage for a product is greater than or equal to the entered percentage)
* **is less than or equals** (Matches when the total discount percentage for a product is less than or equal to the entered percentage)
To set these conditions, enter the percentage in the field and choose the appropriate comparison from the dropdown.
> For example, `is greater than or equals 20` → Matches if the total discount percentage for any product in the order is 20% or more.
## Cart Has Any Items
### SKU
This condition checks the **SKU** of the products in the cart against specific criteria. It will become true if **any** product in the cart has the entered SKU value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the SKU has at least one of the entered values)
* **Does not have any of these values** (Matches if the SKU has none of the entered values)
* **Has any other value besides these values** (Matches if the SKU has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the SKU has only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of SKUs is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of SKUs is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more SKU values into the field. Separate multiple values with commas.
Use \* wildcard to match multiple SKU values. For example, SKU\* will match
SKU12, sku-new-1 etc.
> For example, `Has any of these values: SKU1, SKU2` → Matches if the SKU is either
> “SKU1” or “SKU2”.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the SKU count.
> For example, `Has number of values greater than or equals 3` → Matches if there are three or more SKUs.
### Product tag
This condition checks the **product tag** in the order against specific criteria. It will become true if **any** product in the cart has the entered Product Tag value, based on one of the following sub-conditions:
* **has value of** (Matches when the product tag has the specified value)
* **does not have value of** (Matches when the product tag does not have the specified value)
* **has any other value besides** (Matches when the product tag has any value except the entered one)
* **does not have any other value besides** (Matches when the product tag has only the entered value and no other)
To set these conditions, enter the value in the “Enter value” field, then choose the appropriate comparison from the dropdown.
> For example, `has value of NewArrival` → Matches when the product tag is **NewArrival**.
## Product Metafield
### Product metafield
This condition checks a **product metafield** you specify by **namespace** and **key**, then evaluates it using one of the following sub-conditions:
* **Has any of these values** (Matches if the metafield has at least one of the entered values)
* **Does not have any of these values** (Matches if the metafield has none of the entered values)
* **Has any other value besides these values** (Matches if the metafield has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the metafield has only the entered values and no others)
* **Has empty value** (Matches if the metafield has no value)
* **Does not have empty value** (Matches if the metafield contains any value)
* **Has number greater than or equal to** (Matches if the metafield’s numeric value is greater than or equal to the entered number)
* **Has number less than or equal to** (Matches if the metafield’s numeric value is less than or equal to the entered number)
* **Has number of values greater than or equals** (Matches if the **count** of values in the metafield is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of values in the metafield is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas.
> For example, `Namespace: details` · `Key: material` · `Has any of these values: Cotton, Linen` → Matches if the metafield contains either “Cotton” or “Linen”.
For **Has number greater than or equal to** and **Has number less than or equal to**, enter a single numeric value in the field to match against the metafield’s numeric value.
> For example, `Namespace: nutrition` · `Key: calories` · `Has number less than or equal to 200` → Matches if the metafield’s numeric value is 200 or below.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match against the count of values in the metafield.
> For example, `Namespace: features` · `Key: available_sizes` · `Has number of values greater than or equals 5` → Matches if the metafield contains five or more sizes.
## Discount
### Discount code
This condition evaluates discount codes used at checkout against selected values and determines whether the rule is satisfied based on the chosen logic.
* **Has any of these values** (The condition is satisfied if at least one entered discount code matches one or more of the selected values )
* **Does not have any of these values** ( The condition is satisfied if none of the entered discount codes match any of the selected values )
* **Has any other value besides these values** ( The condition is satisfied if at least one entered discount code is different from the selected values )
* **Does not have any other value besides these values** ( The condition is satisfied only if all entered discount codes exactly match the selected values and no additional discount codes are present )
Please use `*` wildcard to match multiple discount codes. For example, `FREE*`
will match FREE12, free-590 etc. Use `?` to match to any single character.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas or select from the dropdown.
> For example, `Does not have any of these values: SAVE10, ORDER20%OFF` → Matches discount codes other than “SAVE10” or “ORDER20%OFF”.
## Shipping
### Shipping methods available
Used to check if the given shipping methods are actually available on the checkout page, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the checkout page contains at least one of the listed shipping methods)
* **Does not have any of these values** (Matches if the checkout page does not contain any of the listed shipping methods)
* **Has any other value besides these values** (Matches if the checkout page contains shipping methods other than the listed ones)
* **Does not have any other value besides these values** (Matches if the checkout page contains only the listed shipping methods and no others)
* **Has number of values greater than or equals** (Matches if the number of shipping methods available on the checkout page is greater than or equal to the specified number)
* **Has number of values less than or equals** (Matches if the number of shipping methods available on the checkout page is less than or equal to the specified number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial shipping method names. For example, Stand\*
will match Standard, standard shipping etc.
> For example, `Has any of these values: Express Delivery, Standard Shipping` → Matches if at least one of the selected shipping methods is available.
For **Has number of values greater than or equals** or **Has number of values less than or equals**, enter the count threshold.
> For example, `Has number of values greater than or equals 3` → Matches if three or more shipping methods are available.
### Selected shipping type (Ship/Pickup)
This condition checks the "Ship vs Pickup in store" selection on the checkout page, as shown below.
It will become true if the selected shipping type is the same as the entered value, based on one of the following sub-conditions:
* **is** (Matches if the Delivery selection is exactly as the entered value)
* **is not** (Matches if the Delivery selection is different from the entered value)
For any of the above options, choose one shipping type from the list: **Pickup**, **Local delivery**, **Shipping**, **Pickup point**, **Retail**, or **None**.
> **Example:** `is not: Pickup` → Matches if the selected shipping type is anything other than “Pickup”, i-e it is "Ship".
## Localization
### User language
This condition checks the language selected by the customer, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer language is from the given list)
* **Does not have any of these values** (Matches if the customer language is not from the given list)
* **Has any other value besides these values** (Matches if the customer language is not from the given list)
* **Does not have any other value besides these values** (Matches if the customer language is from the given list and no others)
For any of the above options, search and select one or more languages from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any of these values: English, French` → Matches if the field does not contain “English” or “French”.
## Shipping Address
### Shipping address is empty
This condition becomes true if the shipping address fields are empty.
### Shipping address is not empty
This condition becomes true if the shipping address fields are not empty.
### Full name (First name + Last name)
Used to compare the customer’s full name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the full name contains the specified value or partial value)
* **Does not contain** (Matches if the full name does not contain the specified value or partial value)
* **Is empty** (Matches if no name is entered)
* **Is not empty** (Matches if any value is entered in the name field)
* **Is** (Matches if the full name exactly matches the specified value)
* **Is not** (Matches if the full name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the name is less than or equal to the specified number)
* **Has only** (Matches if the full name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the full name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Does not contain: Test` → Matches if the name does not contain “Test” anywhere.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the customer’s name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 10` → Matches if the full name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the full name field is left blank.
### First name
Used to compare the customer’s first name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the first name contains the specified value or partial value)
* **Does not contain** (Matches if the first name does not contain the specified value or partial value)
* **Is empty** (Matches if no first name is entered)
* **Is not empty** (Matches if any value is entered in the first name field)
* **Is** (Matches if the first name exactly matches the specified value)
* **Is not** (Matches if the first name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the first name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the first name is less than or equal to the specified number)
* **Has only** (Matches if the first name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the first name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Jane` → Matches if the first name is anything except “Jane”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the first name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the first name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the first name field is left blank.
### Last name
Used to compare the customer’s last name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the last name contains the specified value or partial value)
* **Does not contain** (Matches if the last name does not contain the specified value or partial value)
* **Is empty** (Matches if no last name is entered)
* **Is not empty** (Matches if any value is entered in the last name field)
* **Is** (Matches if the last name exactly matches the specified value)
* **Is not** (Matches if the last name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the last name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the last name is less than or equal to the specified number)
* **Has only** (Matches if the last name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the last name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Smith` → Matches if the last name is anything except “Smith”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the last name contains English characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the last name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the last name field is left blank.
### Company
Used to compare the customer’s company name (The company name field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the company name contains the specified value or partial value)
* **Does not contain** (Matches if the company name does not contain the specified value or partial value)
* **Is empty** (Matches if no company name is entered)
* **Is not empty** (Matches if any value is entered in the company name field)
* **Is** (Matches if the company name exactly matches the specified value)
* **Is not** (Matches if the company name is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the company name is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the company name is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the company name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the company name is less than or equal to the specified number)
* **Has only** (Matches if the company name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the company name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: Tech` → Matches if the company name contains the word “Tech”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the company name contains English characters only.
For **Has no of digits/characters greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of characters greater than or equals 10` → Matches if the company name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the company name field is left blank.
### Phone number
Used to compare the customer’s phone number (The phone number field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the phone number contains the specified value or partial value)
* **Does not contain** (Matches if the phone number does not contain the specified value or partial value)
* **Is empty** (Matches if no phone number is entered)
* **Is not empty** (Matches if any value is entered in the phone number field)
* **Is** (Matches if the phone number exactly matches the specified value)
* **Is not** (Matches if the phone number is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the phone number is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the phone number is less than or equal to the specified number)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: 123` → Matches if the phone number contains “123” anywhere.
For **Has no of digits greater than or equals** or **Has no of digits less than or equals**, enter the threshold value.
> For example, `Has no of digits greater than or equals 10` → Matches if the phone number contains 10 or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the phone number field is left blank.
### City / Area
Used to compare the City / Area (The City/Area field on the checkout page) values with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the city field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the city field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the city field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the city field contains only the listed values and no others)
* **Has number of digits greater than or equals** (Matches if the number of digits in the city field is greater than or equal to the specified number)
* **Has number of digits less than or equals** (Matches if the number of digits in the city field is less than or equal to the specified number)
* **Is empty** (Matches if the city field has no value)
* **Is not empty** (Matches if the city field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial city names. For example, Santo\* will match
santo domingo, santodomngo etc.
> For example, `Has any of these values: Lahore, Karachi` → Matches if the field contains either “Lahore” or “Karachi”.
For **Has number of digits greater than or equals** or **Has number of digits less than or equals**, enter the digit count threshold.
> For example, `Has number of digits greater than or equals 5` → Matches if the field’s value has five or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if no value is entered for the field.
### Province code / State code
Used to compare the Province / State (The Province/State field on the checkout page) values with one or more specific values or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the province field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the province field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the province field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the province field contains only the listed values and no others)
* **Is empty** (Matches if the province field has no value)
* **Is not empty** (Matches if the province field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Add 2 or 3 letter province/state code abbreviation in "ISO\_3166-2" format
only.
> For example, `Does not have any other value besides these values: CA, TX` → Matches if the field contains only “CA” or “TX” and no other values.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is not empty` → Matches if any value is entered for the field.
### Country
Used to compare the Country (The Country field on the checkout page) values with one or more specific countries, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the country field contains at least one of the selected countries)
* **Does not have any of these values** (Matches if the country field does not contain any of the selected countries)
* **Has any other value besides these values** (Matches if the country field contains countries other than the selected ones)
* **Does not have any other value besides these values** (Matches if the country field contains only the selected countries and no others)
For any of the above options, search and select one or more countries from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any other value besides these values: Portugal, Poland` → Matches if the field contains only “Portugal” or “Poland” and no other countries.
### Zip code / Postal code
Used to compare the Zip code / Postal code (The Zip/Postal Code field on the checkout page) values with one or more specific zip or postal codes, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the zip/postal code field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the zip/postal code field does not contain any of the listed values)
* **Has value in between these values** (Matches if the zip/postal code field value falls within the specified range)
* **Does not have value in between these values** (Matches if the zip/postal code field value does not fall within the specified range)
* **Has any other value besides these values** (Matches if the zip/postal code field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the zip/postal code field contains only the listed values and no others)
* **Has only digits** (Matches if the zip/postal code field contains only numeric characters)
* **Does not have only digits** (Matches if the zip/postal code field contains any non-numeric characters)
* **Has number of digits in between** (Matches if the number of digits falls within the specified range)
* **Does not have number of digits in between** (Matches if the number of digits does not fall within the specified range)
* **Is empty** (Matches if the zip/postal code field has no value)
* **Is not empty** (Matches if the zip/postal code field contains any value)
Use **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values** to match against one or more specific zip/postal codes. Separate multiple values with commas.
Use \* wildcard to match multiple zip codes. For example, BT\* will match BT12,
bt-590 etc. Use ? to match to any single character.
> For example, `Has any of these values: BT*` → Matches all zip/postal codes starting with “BT”.
> Another example, `Does not have any of these values: 12345, 67890` → Matches if the code is not “12345” or “67890”.
Use **Has value in between these values** or **Does not have value in between these values** to match zip/postal codes within or outside a numeric range.
Enter numbers only. All values ranging in between starting value until the
last value will be matched, including the starting and last value.
> For example, `Has value in between these values: 10000 – 20000` → Matches if the code is between “10000” and “20000”.
Use **Has only digits** or **Does not have only digits** to match zip/postal codes that contain only numeric characters (0–9) or those that include any non-numeric characters, such as letters, spaces, or symbols.
> For example, `Has only digits` → Matches digits only (0–9).
Use **Has number of digits in between** or **Does not have number of digits in between** to match based on the count of digits in the code.
Enter numbers only. All values ranging in between given number of digits will
be matched.
> For example, `Has number of digits in between: 4 – 6` → Matches codes that contain between 4 and 6 digits.
Use **Is empty** or **Is not empty** when you only need to check whether the field is filled in.
> For example, `Is not empty` → Matches if any value is entered in the field
# Condition Set 5
Source: https://docs.checkoutrules.com/guides/en/essentials/condition-sets/condition-set-5
Learn about each condition available inside _Condition Set 5_.
## Always
If you don’t want to set any condition, select *Always*. The rule will run every time for everyone, without checking any conditions.
## Previous all conditions invalid
When all previous conditions are invalid in the previous [rule block](/guides/en/get-started/concepts#block), i-e the previous rule block did not run, this condition becomes true, ensuring the action is triggered only if none of the earlier conditions are met.
Available only when at least one previous rule block exists.
## Customer
### New customer
This condition becomes true if the customer is a new customer, i-e the customer has not previously spent any amount in the store to buy products.
### Repeat customer
This condition becomes true if the customer has previously spent any amount in the store to buy products.
### Customer total previous spent
This condition checks the customer’s **total previous spent amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the customer’s total previous spent amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the customer’s total previous spent amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 500` → Matches customers who have spent 500 or more in total on previous purchases.
### Email address
This condition checks the customer’s **email address** against specific criteria, based on one of the following sub-conditions:
* **contains** (The email address includes the entered value)
* **does not contain** (The email address does not include the entered value)
* **is empty** (No email address is provided)
* **is not empty** (An email address is provided)
* **is** (The email address exactly matches the entered value)
* **is not** (The email address does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the customer’s email address.
> For example, `contains @gmail.com` → Matches any email address ending with “@gmail.com”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the email field is blank.
### Customer tag
This condition checks the **customer’s tag** against specific criteria, based on one of the following sub-conditions:
* **has value of** (Matches when the customer’s tags include the entered value)
* **does not have value of** (Matches when the customer’s tags do not include the entered value)
To set these conditions, enter the tag value in the field and choose the appropriate comparison from the dropdown.
> For example, `has value of VIP` → Matches customers who have the **VIP** tag.
### Customer tags
This condition checks the customer’s **tags** against specific criteria, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer has at least one of the entered tags)
* **Does not have any of these values** (Matches if the customer has none of the entered tags)
You can only use this condition with the same values throughout the rule. If
you want to use different values in different rule blocks, you should switch
to condition set 5 which allows more flexibility.
To set these conditions, type one or more tags into the field and choose the appropriate comparison from the dropdown. Separate multiple tags with commas and then press enter to load the tags simultaneously.
> For example, `Has any of these values: VIP, VVIP` → Matches customers who have either the “VIP” or “VVIP” tag.
## B2B Details
### Purchasing company metafield
This condition checks a **purchasing company metafield** you specify by **namespace** and **key**, then evaluates it using one of the following sub-conditions:
* **Has any of these values** (Matches if the metafield has at least one of the entered values)
* **Does not have any of these values** (Matches if the metafield has none of the entered values)
* **Has any other value besides these values** (Matches if the metafield has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the metafield has only the entered values and no others)
* **Has empty value** (Matches if the metafield has no value)
* **Does not have empty value** (Matches if the metafield contains any value)
* **Has number greater than or equal to** (Matches if the metafield’s numeric value is greater than or equal to the entered number)
* **Has number less than or equal to** (Matches if the metafield’s numeric value is less than or equal to the entered number)
* **Has number of values greater than or equals** (Matches if the **count** of values in the metafield is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of values in the metafield is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas.
> For example, `Namespace: profile` · `Key: industry` · `Has any of these values: Retail, Wholesale` → Matches if the purchasing company’s metafield contains either “Retail” or “Wholesale”.
For **Has number greater than or equal to** and **Has number less than or equal to**, enter a single numeric value in the field to match against the metafield’s numeric value.
> For example, `Namespace: finance` · `Key: annual_revenue` · `Has number greater than or equal to 1000000` → Matches if the purchasing company’s annual revenue is one million or more.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match against the count of values in the metafield.
> For example, `Namespace: compliance` · `Key: certifications` · `Has number of values less than or equals 2` → Matches if the company has two or fewer certifications.
### Purchasing company location metafield
This condition checks a **purchasing company location metafield** you specify by **namespace** and **key**, then evaluates it using one of the following sub-conditions:
* **Has any of these values** (Matches if the metafield has at least one of the entered values)
* **Does not have any of these values** (Matches if the metafield has none of the entered values)
* **Has any other value besides these values** (Matches if the metafield has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the metafield has only the entered values and no others)
* **Has empty value** (Matches if the metafield has no value)
* **Does not have empty value** (Matches if the metafield contains any value)
* **Has number greater than or equal to** (Matches if the metafield’s numeric value is greater than or equal to the entered number)
* **Has number less than or equal to** (Matches if the metafield’s numeric value is less than or equal to the entered number)
* **Has number of values greater than or equals** (Matches if the **count** of values in the metafield is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of values in the metafield is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas.
> For example, `Namespace: address` · `Key: country_code` · `Does not have any of these values: US, CA` → Matches if the purchasing company location is not in the United States or Canada.
For **Has number greater than or equal to** and **Has number less than or equal to**, enter a single numeric value in the field to match against the metafield’s numeric value.
> For example, `Namespace: logistics` · `Key: warehouse_capacity` · `Has number less than or equal to 5000` → Matches if the purchasing company location’s warehouse capacity is 5,000 units or fewer.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match against the count of values in the metafield.
> For example, `Namespace: services` · `Key: supported_languages` · `Has number of values greater than or equals 4` → Matches if the location supports four or more languages.
## Order Details
### Order total amount
This condition checks the **order’s total amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s total amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s total amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 600` → Matches orders with a total amount of 600 or more.
### Order subtotal amount
This condition checks the **order’s subtotal amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 699` → Matches orders with a subtotal amount of 699 or more.
### Order total quantity
This condition checks the **total quantity of items in an order** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total quantity of items is greater than or equal to the entered number)
* **is less than or equals** (Matches when the total quantity of items is less than or equal to the entered number)
* **is multiple of** (Matches when the total quantity is an exact multiple of the entered number)
* **is not multiple of** (Matches when the total quantity is not a multiple of the entered number)
To set these conditions, enter a quantity in the field and choose the appropriate comparison from the dropdown.
The quantity refers to the **sum of all item quantities** in the order, not
the number of distinct products.
> **Example for “is multiple of”**:\
> `is multiple of 5` → Matches orders with total quantities like 5, 10, 15, 20, etc.
> **Example for “is greater than or equals”**:\
> `is greater than or equals 3` → Matches orders with 3 or more total items.
### Order total weight
This condition checks the **order’s total weight** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s total weight is greater than or equal to the entered weight)
* **is less than or equals** (Matches when the order’s total weight is less than or equal to the entered weight)
To set these conditions, enter the weight in the field, select the weight unit (**lb**, **oz**, **kg**, or **g**) from the dropdown, and choose the appropriate comparison.
> For example, `is less than or equals 5 kg` → Matches orders with a total weight of 5 kilograms or less.
## Cart Has Any Items
### Product tag
This condition checks the **product tag** in the order against specific criteria. It will become true if **any** product in the cart has the entered Product Tag value, based on one of the following sub-conditions:
* **has value of** (Matches when the product tag has the specified value)
* **does not have value of** (Matches when the product tag does not have the specified value)
* **has any other value besides** (Matches when the product tag has any value except the entered one)
* **does not have any other value besides** (Matches when the product tag has only the entered value and no other)
To set these conditions, enter the value in the “Enter value” field, then choose the appropriate comparison from the dropdown.
> For example, `has value of NewArrival` → Matches when the product tag is **NewArrival**.
### Product tags
This condition checks the **Product Tags** against specific criteria. It will become true if **any** product in the cart has the entered Product Tag value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the Product Tags have at least one of the entered values)
* **Does not have any of these values** (Matches if the Product Tags have none of the entered values)
* **Has any other value besides these values** (Matches if the Product Tags have a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the Product Tags have only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of Product Tags is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of Product Tags is less than or equal to the entered number)
You can only use this condition with the same values throughout the rule. If
you want to use different values in different rule blocks, you should switch
to condition set 3, 5, or 6 which allow more flexibility.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more Product Tag values into the field. Separate multiple values with commas.
> For example, `Does not have any of these values: summer, clearance` → Matches if the Product Tag does not include “summer” or “clearance”.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the Product Tags count.
> For example, `Has number of values less than or equals 4` → Matches if there are four or fewer Product Tags.
### Product variant option
This condition checks the **Product Variant Options** against specific criteria. If any product in the cart has the entered Product Variant Option value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the Product Variant Options have at least one of the entered values)
* **Does not have any of these values** (Matches if the Product Variant Options have none of the entered values)
* **Has any other value besides these values** (Matches if the Product Variant Options have a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the Product Variant Options have only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of Product Variant Options is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of Product Variant Options is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more Product Variant Option values into the field. Separate multiple values with commas.
> For example, `Has any of these values: Red, Blue` → Matches if the Product Variant Option includes either “Red” or “Blue”.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the Product Variant Options count.
> For example, `Has number of values greater than or equals 3` → Matches if there are three or more Product Variant Options.
## Discount
### Discount code
This condition evaluates discount codes used at checkout against selected values and determines whether the rule is satisfied based on the chosen logic.
* **Has any of these values** (The condition is satisfied if at least one entered discount code matches one or more of the selected values )
* **Does not have any of these values** ( The condition is satisfied if none of the entered discount codes match any of the selected values )
* **Has any other value besides these values** ( The condition is satisfied if at least one entered discount code is different from the selected values )
* **Does not have any other value besides these values** ( The condition is satisfied only if all entered discount codes exactly match the selected values and no additional discount codes are present )
Please use `*` wildcard to match multiple discount codes. For example, `FREE*`
will match FREE12, free-590 etc. Use `?` to match to any single character.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas or select from the dropdown.
> For example, `Does not have any of these values: SAVE10, ORDER20%OFF` → Matches discount codes other than “SAVE10” or “ORDER20%OFF”.
## Shipping
### Selected shipping type (Ship/Pickup)
This condition checks the "Ship vs Pickup in store" selection on the checkout page, as shown below.
It will become true if the selected shipping type is the same as the entered value, based on one of the following sub-conditions:
* **is** (Matches if the Delivery selection is exactly as the entered value)
* **is not** (Matches if the Delivery selection is different from the entered value)
For any of the above options, choose one shipping type from the list: **Pickup**, **Local delivery**, **Shipping**, **Pickup point**, **Retail**, or **None**.
> **Example:** `is not: Pickup` → Matches if the selected shipping type is anything other than “Pickup”, i-e it is "Ship".
### Shipping methods available
Used to check if the given shipping methods are actually available on the checkout page, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the checkout page contains at least one of the listed shipping methods)
* **Does not have any of these values** (Matches if the checkout page does not contain any of the listed shipping methods)
* **Has any other value besides these values** (Matches if the checkout page contains shipping methods other than the listed ones)
* **Does not have any other value besides these values** (Matches if the checkout page contains only the listed shipping methods and no others)
* **Has number of values greater than or equals** (Matches if the number of shipping methods available on the checkout page is greater than or equal to the specified number)
* **Has number of values less than or equals** (Matches if the number of shipping methods available on the checkout page is less than or equal to the specified number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial shipping method names. For example, Stand\*
will match Standard, standard shipping etc.
> For example, `Has any of these values: Express Delivery, Standard Shipping` → Matches if at least one of the selected shipping methods is available.
For **Has number of values greater than or equals** or **Has number of values less than or equals**, enter the count threshold.
> For example, `Has number of values greater than or equals 3` → Matches if three or more shipping methods are available.
## Localization
### User language
This condition checks the language selected by the customer, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer language is from the given list)
* **Does not have any of these values** (Matches if the customer language is not from the given list)
* **Has any other value besides these values** (Matches if the customer language is not from the given list)
* **Does not have any other value besides these values** (Matches if the customer language is from the given list and no others)
For any of the above options, search and select one or more languages from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any of these values: English, French` → Matches if the field does not contain “English” or “French”.
## Shipping Address
### Shipping address is empty
This condition becomes true if the shipping address fields are empty.
### Shipping address is not empty
This condition becomes true if the shipping address fields are not empty.
### Full name (First name + Last name)
Used to compare the customer’s full name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the full name contains the specified value or partial value)
* **Does not contain** (Matches if the full name does not contain the specified value or partial value)
* **Is empty** (Matches if no name is entered)
* **Is not empty** (Matches if any value is entered in the name field)
* **Is** (Matches if the full name exactly matches the specified value)
* **Is not** (Matches if the full name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the name is less than or equal to the specified number)
* **Has only** (Matches if the full name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the full name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Does not contain: Test` → Matches if the name does not contain “Test” anywhere.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the customer’s name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 10` → Matches if the full name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the full name field is left blank.
### First name
Used to compare the customer’s first name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the first name contains the specified value or partial value)
* **Does not contain** (Matches if the first name does not contain the specified value or partial value)
* **Is empty** (Matches if no first name is entered)
* **Is not empty** (Matches if any value is entered in the first name field)
* **Is** (Matches if the first name exactly matches the specified value)
* **Is not** (Matches if the first name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the first name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the first name is less than or equal to the specified number)
* **Has only** (Matches if the first name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the first name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Jane` → Matches if the first name is anything except “Jane”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the first name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the first name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the first name field is left blank.
### Last name
Used to compare the customer’s last name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the last name contains the specified value or partial value)
* **Does not contain** (Matches if the last name does not contain the specified value or partial value)
* **Is empty** (Matches if no last name is entered)
* **Is not empty** (Matches if any value is entered in the last name field)
* **Is** (Matches if the last name exactly matches the specified value)
* **Is not** (Matches if the last name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the last name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the last name is less than or equal to the specified number)
* **Has only** (Matches if the last name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the last name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Smith` → Matches if the last name is anything except “Smith”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the last name contains English characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the last name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the last name field is left blank.
### Company
Used to compare the customer’s company name (The company name field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the company name contains the specified value or partial value)
* **Does not contain** (Matches if the company name does not contain the specified value or partial value)
* **Is empty** (Matches if no company name is entered)
* **Is not empty** (Matches if any value is entered in the company name field)
* **Is** (Matches if the company name exactly matches the specified value)
* **Is not** (Matches if the company name is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the company name is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the company name is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the company name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the company name is less than or equal to the specified number)
* **Has only** (Matches if the company name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the company name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: Tech` → Matches if the company name contains the word “Tech”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the company name contains English characters only.
For **Has no of digits/characters greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of characters greater than or equals 10` → Matches if the company name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the company name field is left blank.
### Phone number
Used to compare the customer’s phone number (The phone number field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the phone number contains the specified value or partial value)
* **Does not contain** (Matches if the phone number does not contain the specified value or partial value)
* **Is empty** (Matches if no phone number is entered)
* **Is not empty** (Matches if any value is entered in the phone number field)
* **Is** (Matches if the phone number exactly matches the specified value)
* **Is not** (Matches if the phone number is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the phone number is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the phone number is less than or equal to the specified number)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: 123` → Matches if the phone number contains “123” anywhere.
For **Has no of digits greater than or equals** or **Has no of digits less than or equals**, enter the threshold value.
> For example, `Has no of digits greater than or equals 10` → Matches if the phone number contains 10 or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the phone number field is left blank.
### City / Area
Used to compare the City / Area (The City/Area field on the checkout page) values with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the city field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the city field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the city field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the city field contains only the listed values and no others)
* **Has number of digits greater than or equals** (Matches if the number of digits in the city field is greater than or equal to the specified number)
* **Has number of digits less than or equals** (Matches if the number of digits in the city field is less than or equal to the specified number)
* **Is empty** (Matches if the city field has no value)
* **Is not empty** (Matches if the city field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial city names. For example, Santo\* will match
santo domingo, santodomngo etc.
> For example, `Has any of these values: Lahore, Karachi` → Matches if the field contains either “Lahore” or “Karachi”.
For **Has number of digits greater than or equals** or **Has number of digits less than or equals**, enter the digit count threshold.
> For example, `Has number of digits greater than or equals 5` → Matches if the field’s value has five or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if no value is entered for the field.
### Province code / State code
Used to compare the Province / State (The Province/State field on the checkout page) values with one or more specific values or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the province field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the province field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the province field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the province field contains only the listed values and no others)
* **Is empty** (Matches if the province field has no value)
* **Is not empty** (Matches if the province field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Add 2 or 3 letter province/state code abbreviation in "ISO\_3166-2" format
only.
> For example, `Does not have any other value besides these values: CA, TX` → Matches if the field contains only “CA” or “TX” and no other values.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is not empty` → Matches if any value is entered for the field.
### Country
Used to compare the Country (The Country field on the checkout page) values with one or more specific countries, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the country field contains at least one of the selected countries)
* **Does not have any of these values** (Matches if the country field does not contain any of the selected countries)
* **Has any other value besides these values** (Matches if the country field contains countries other than the selected ones)
* **Does not have any other value besides these values** (Matches if the country field contains only the selected countries and no others)
For any of the above options, search and select one or more countries from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any other value besides these values: Portugal, Poland` → Matches if the field contains only “Portugal” or “Poland” and no other countries.
### Zip code / Postal code
Used to compare the Zip code / Postal code (The Zip/Postal Code field on the checkout page) values with one or more specific zip or postal codes, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the zip/postal code field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the zip/postal code field does not contain any of the listed values)
* **Has value in between these values** (Matches if the zip/postal code field value falls within the specified range)
* **Does not have value in between these values** (Matches if the zip/postal code field value does not fall within the specified range)
* **Has any other value besides these values** (Matches if the zip/postal code field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the zip/postal code field contains only the listed values and no others)
* **Has only digits** (Matches if the zip/postal code field contains only numeric characters)
* **Does not have only digits** (Matches if the zip/postal code field contains any non-numeric characters)
* **Has number of digits in between** (Matches if the number of digits falls within the specified range)
* **Does not have number of digits in between** (Matches if the number of digits does not fall within the specified range)
* **Is empty** (Matches if the zip/postal code field has no value)
* **Is not empty** (Matches if the zip/postal code field contains any value)
Use **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values** to match against one or more specific zip/postal codes. Separate multiple values with commas.
Use \* wildcard to match multiple zip codes. For example, BT\* will match BT12,
bt-590 etc. Use ? to match to any single character.
> For example, `Has any of these values: BT*` → Matches all zip/postal codes starting with “BT”.
> Another example, `Does not have any of these values: 12345, 67890` → Matches if the code is not “12345” or “67890”.
Use **Has value in between these values** or **Does not have value in between these values** to match zip/postal codes within or outside a numeric range.
Enter numbers only. All values ranging in between starting value until the
last value will be matched, including the starting and last value.
> For example, `Has value in between these values: 10000 – 20000` → Matches if the code is between “10000” and “20000”.
Use **Has only digits** or **Does not have only digits** to match zip/postal codes that contain only numeric characters (0–9) or those that include any non-numeric characters, such as letters, spaces, or symbols.
> For example, `Has only digits` → Matches digits only (0–9).
Use **Has number of digits in between** or **Does not have number of digits in between** to match based on the count of digits in the code.
Enter numbers only. All values ranging in between given number of digits will
be matched.
> For example, `Has number of digits in between: 4 – 6` → Matches codes that contain between 4 and 6 digits.
Use **Is empty** or **Is not empty** when you only need to check whether the field is filled in.
> For example, `Is not empty` → Matches if any value is entered in the field
# Condition Set 6
Source: https://docs.checkoutrules.com/guides/en/essentials/condition-sets/condition-set-6
Learn about each condition available inside _Condition Set 6_.
## Always
If you don’t want to set any condition, select *Always*. The rule will run every time for everyone, without checking any conditions.
## Previous all conditions invalid
When all previous conditions are invalid in the previous [rule block](/guides/en/get-started/concepts#block), i-e the previous rule block did not run, this condition becomes true, ensuring the action is triggered only if none of the earlier conditions are met.
Available only when at least one previous rule block exists.
## Customer
### New customer
This condition becomes true if the customer is a new customer, i-e the customer has not previously spent any amount in the store to buy products.
### Repeat customer
This condition becomes true if the customer has previously spent any amount in the store to buy products.
### Customer total previous spent
This condition checks the customer’s **total previous spent amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the customer’s total previous spent amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the customer’s total previous spent amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 500` → Matches customers who have spent 500 or more in total on previous purchases.
### Email address
This condition checks the customer’s **email address** against specific criteria, based on one of the following sub-conditions:
* **contains** (The email address includes the entered value)
* **does not contain** (The email address does not include the entered value)
* **is empty** (No email address is provided)
* **is not empty** (An email address is provided)
* **is** (The email address exactly matches the entered value)
* **is not** (The email address does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the customer’s email address.
> For example, `contains @gmail.com` → Matches any email address ending with “@gmail.com”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the email field is blank.
### Customer metafield
This condition checks a **customer metafield** you specify by **namespace** and **key**, then evaluates it using one of the following sub-conditions:
* **Has any of these values** (Matches if the metafield has at least one of the entered values)
* **Does not have any of these values** (Matches if the metafield has none of the entered values)
* **Has any other value besides these values** (Matches if the metafield has a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the metafield has only the entered values and no others)
* **Has empty value** (Matches if the metafield has no value)
* **Does not have empty value** (Matches if the metafield contains any value)
* **Has number greater than or equal to** (Matches if the metafield’s numeric value is greater than or equal to the entered number)
* **Has number less than or equal to** (Matches if the metafield’s numeric value is less than or equal to the entered number)
* **Has number of values greater than or equals** (Matches if the **count** of values in the metafield is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of values in the metafield is less than or equal to the entered number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas.
> For example, `Namespace: custom` · `Key: new` · `Has any of these values: vip` → Matches if the customer metafield contains the value vip.
For **Has number greater than or equal to** and **Has number less than or equal to**, enter a single numeric value in the field to match against the metafield’s numeric value.
> For example, `Namespace: custom` · `Key: new` · `Has number greater than or equal to 60` → Matches if the metafield’s numeric value is 60 or more.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match against the count of values in the metafield.
> For example, `Namespace: custom` · `Key: new` · `Has number of values greater than or equals 4` → Matches if there are four or more values in the metafield.
## Order Details
### Order total amount
This condition checks the **order’s total amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s total amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s total amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 600` → Matches orders with a total amount of 600 or more.
### Order subtotal amount
This condition checks the **order’s subtotal amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s subtotal amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s subtotal amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 699` → Matches orders with a subtotal amount of 699 or more.
### Order tax amount
This condition checks the **order’s tax amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s tax amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s tax amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 50` → Matches orders with a tax amount of 50 or more.
### Order duty amount
This condition checks the **order’s duty amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s duty amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the order’s duty amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 80` → Matches orders with a duty amount of 80 or more.
### Order total weight
This condition checks the **order’s total weight** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the order’s total weight is greater than or equal to the entered weight)
* **is less than or equals** (Matches when the order’s total weight is less than or equal to the entered weight)
To set these conditions, enter the weight in the field, select the weight unit (**lb**, **oz**, **kg**, or **g**) from the dropdown, and choose the appropriate comparison.
> For example, `is less than or equals 5 kg` → Matches orders with a total weight of 5 kilograms or less.
### Order total one time purchase weight
This condition checks the **total weight of one-time purchase items** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total one-time purchase weight is greater than or equal to the entered weight)
* **is less than or equals** (Matches when the total one-time purchase weight is less than or equal to the entered weight)
To set these conditions, enter the weight in the field, select the weight unit (**lb**, **oz**, **kg**, or **g**) from the dropdown, and choose the appropriate comparison.
> For example, `is greater than or equals 10 lb` → Matches orders where the total weight of one-time purchase items is 10 pounds or more.
### Order total subscription weight
This condition checks the **total weight of subscription items** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total subscription weight is greater than or equal to the entered weight)
* **is less than or equals** (Matches when the total subscription weight is less than or equal to the entered weight)
To set these conditions, enter the weight in the field, select the weight unit (**lb**, **oz**, **kg**, or **g**) from the dropdown, and choose the appropriate comparison.
> For example, `is greater than or equals 5 kg` → Matches orders where the total weight of subscription items is 5 kilograms or more.
### Total discount amount (any discount type)
This condition checks the **total discount amount** in the order (any product or order discount) against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total discount amount is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the total discount amount is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is less than or equals 50` → Matches if the total discount amount of the order (any type) is 50 or less.
### Total discount percentage (any discount type)
This condition checks the **total discount percentage** in the order (any product or order discount) against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total discount percentage from any type of discount in the order is greater than or equal to the entered percentage)
* **is less than or equals** (Matches when the total discount percentage from any type of discount in the order is less than or equal to the entered percentage)
To set these conditions, enter the percentage in the field and choose the appropriate comparison from the dropdown.
> For example, `is less than or equals 15` → Matches if the total discount percentage from any discount type in the order is 15% or less.
### Order total discount amount
This condition checks the **order total discount amount** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total discount amount for the order is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the total discount amount for the order is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is less than or equals 75` → Matches if the total discount amount for the entire order is 75 or less.
### Order total discount percentage
This condition checks the **order total discount percentage** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the overall discount percentage applied to the entire order is greater than or equal to the entered percentage)
* **is less than or equals** (Matches when the overall discount percentage applied to the entire order is less than or equal to the entered percentage)
To set these conditions, enter the percentage in the field and choose the appropriate comparison from the dropdown.
> For example, `is less than or equals 15` → Matches if the total discount percentage applied on the order is 15% or less.
### Retail location
This condition checks the retail location from where the order is initiated against specific criteria, based on one of the following sub-conditions:
* **Has any of these values** (Matches when the retail location matches one or more of the specified values)
* **Does not have any of these values** (Matches when the retail location does not match any of the specified values)
* **Has any other value besides these values** (Matches when the retail location has any value except the entered ones)
* **Does not have any other value besides these values** (Matches when the retail location has only the entered value and no other)
* **Is empty** (Matches when no retail location is present)
* **Is not empty** (Matches when a retail location value exists)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas or select location from the dropdown.
> For example, `Has any of these values: Store A, Store B` → Matches checkouts initiated from Store A or Store B.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches checkouts where no retail location is recorded.
### Order location is retail (POS)
This condition becomes true if the order is initiated through a retail **Point of Sale (POS)** location rather than an online store.
### Order location is not retail (POS)
This condition becomes true if the order is not initiated through a retail **Point of Sale (POS)** location and instead originates from an online store.
## Cart Details
### Any product discount amount
This condition checks the **discount amount applied to any product** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the discount amount on any product is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the discount amount on any product is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 50` → Matches if any product in the order has a discount amount of 50 or more.
### Any product discount percentage
This condition checks the **discount percentage applied to any product** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the discount percentage on any product is greater than or equal to the entered percentage)
* **is less than or equals** (Matches when the discount percentage on any product is less than or equal to the entered percentage)
To set these conditions, enter the percentage in the field and choose the appropriate comparison from the dropdown.
> For example, `is greater than or equals 10` → Matches if any product in the order has a discount percentage of 10% or more.
### Total product discount amount
This condition checks the **total product discount amount** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total discount amount for a product is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the total discount amount for a product is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is greater than or equals 100` → Matches if the total discount amount for any product in the order is 100 or more.
### Total product discount percentage
This condition checks the **total product discount percentage** in the order against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the total discount percentage for a product is greater than or equal to the entered percentage)
* **is less than or equals** (Matches when the total discount percentage for a product is less than or equal to the entered percentage)
To set these conditions, enter the percentage in the field and choose the appropriate comparison from the dropdown.
> For example, `is greater than or equals 20` → Matches if the total discount percentage for any product in the order is 20% or more.
## Cart Has Any Items
### Product tag
This condition checks the **product tag** in the order against specific criteria. It will become true if **any** product in the cart has the entered Product Tag value, based on one of the following sub-conditions:
* **has value of** (Matches when the product tag has the specified value)
* **does not have value of** (Matches when the product tag does not have the specified value)
* **has any other value besides** (Matches when the product tag has any value except the entered one)
* **does not have any other value besides** (Matches when the product tag has only the entered value and no other)
To set these conditions, enter the value in the “Enter value” field, then choose the appropriate comparison from the dropdown.
> For example, `has value of NewArrival` → Matches when the product tag is **NewArrival**.
### Product tags
This condition checks the **Product Tags** against specific criteria. It will become true if **any** product in the cart has the entered Product Tag value, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the Product Tags have at least one of the entered values)
* **Does not have any of these values** (Matches if the Product Tags have none of the entered values)
* **Has any other value besides these values** (Matches if the Product Tags have a value that is not among the entered values)
* **Does not have any other value besides these values** (Matches if the Product Tags have only the entered values and no others)
* **Has number of values greater than or equals** (Matches if the **count** of Product Tags is greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches if the **count** of Product Tags is less than or equal to the entered number)
You can only use this condition with the same values throughout the rule. If
you want to use different values in different rule blocks, you should switch
to condition set 3, 5, or 6 which allow more flexibility.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more Product Tag values into the field. Separate multiple values with commas.
> For example, `Does not have any of these values: summer, clearance` → Matches if the Product Tag does not include “summer” or “clearance”.
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter a single numeric value in the field to match the Product Tags count.
> For example, `Has number of values less than or equals 4` → Matches if there are four or fewer Product Tags.
### Line item property
This condition checks the **properties attached to a line item** against specific criteria, based on one of the following sub-conditions:
* **Has any of these values** (Matches when the specified line item property contains any of the entered values)
* **Does not have any of these values** (Matches when the specified line item property does not contain any of the entered values)
* **Has empty value** (Matches when the specified line item property exists but has no value)
* **Does not have empty value** (Matches when the specified line item property exists and contains a value)
* **Has number of values greater than or equals** (Matches when the specified line item property contains a number of values greater than or equal to the entered number)
* **Has number of values less than or equals** (Matches when the specified line item property contains a number of values less than or equal to the entered number)
To set these conditions:
Enter the property key in the “Enter key” field.
Enter the value(s) to match (where applicable).
Choose the comparison option from the dropdown.
For **Has any of these values** and **Does not have any of these values**, enter one or more values into the field. Separate multiple values with commas.
Use \* wildcard to match partial values. For example, value\* will match
value123, VALUETEST etc.
> **Example for “Has any of these values”**: > Key: `color` > Values: `red, blue`
> → Matches line items where the `color` property is either `red` or `blue`.
For **Has empty value** and **Does not have empty value**, no value entry is required.
> **Example for “Does not have empty value”**:\
> Key: `engraving`\
> → Matches line items where the `engraving` property exists and contains some text (e.g., “Happy Anniversary”).
For **Has number of values greater than or equals** and **Has number of values less than or equals**, enter the threshold number into the field.
> **Example for “Has number of values less than or equals”**:\
> Key: `size`\
> Number: `2`\
> → Matches line items where the `size` property has 2 or fewer distinct values (e.g., `S, M`).
### Cart has one time purchase product
This condition checks whether the cart contains at least one product that is a one time purchase. If present, the condition is considered met.
### Cart has no one time purchase product
This condition checks whether the cart contains no products that are one time purchases. If no one time purchase products are present, the condition is considered met.
## Discount
### Discount code
This condition evaluates discount codes used at checkout against selected values and determines whether the rule is satisfied based on the chosen logic.
* **Has any of these values** (The condition is satisfied if at least one entered discount code matches one or more of the selected values )
* **Does not have any of these values** ( The condition is satisfied if none of the entered discount codes match any of the selected values )
* **Has any other value besides these values** ( The condition is satisfied if at least one entered discount code is different from the selected values )
* **Does not have any other value besides these values** ( The condition is satisfied only if all entered discount codes exactly match the selected values and no additional discount codes are present )
Please use `*` wildcard to match multiple discount codes. For example, `FREE*`
will match FREE12, free-590 etc. Use `?` to match to any single character.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas or select from the dropdown.
> For example, `Does not have any of these values: SAVE10, ORDER20%OFF` → Matches discount codes other than “SAVE10” or “ORDER20%OFF”.
## Shipping
### Selected shipping method
This condition checks the customer’s **selected shipping method** against specific criteria, based on one of the following sub-conditions:
* **contains** (Matches when the selected shipping method includes the entered value)
* **does not contain** (Matches when the selected shipping method does not include the entered value)
* **is** (Matches exact entered text, or wildcard pattern if `*` is used)
* **is not** (Matches when exact entered text or wildcard pattern does not match)
To set these conditions, enter the value in the field and choose the appropriate comparison from the dropdown.
> For example, `contains Express` → Matches any selected shipping method that includes “Express”.
### Selected shipping method price
This condition checks the **selected shipping method’s price** against specific criteria, based on one of the following sub-conditions:
* **is greater than or equals** (Matches when the selected shipping method’s price is greater than or equal to the entered amount)
* **is less than or equals** (Matches when the selected shipping method’s price is less than or equal to the entered amount)
To set these conditions, enter the amount in the field and choose the appropriate comparison from the dropdown.
Enter the amount in your store currency. Settings > Store Details > Store
Currency
> For example, `is less than or equals 50` → Matches orders where the selected shipping method price is 50 or less.
### Selected shipping type (Ship/Pickup)
This condition checks the "Ship vs Pickup in store" selection on the checkout page, as shown below.
It will become true if the selected shipping type is the same as the entered value, based on one of the following sub-conditions:
* **is** (Matches if the Delivery selection is exactly as the entered value)
* **is not** (Matches if the Delivery selection is different from the entered value)
For any of the above options, choose one shipping type from the list: **Pickup**, **Local delivery**, **Shipping**, **Pickup point**, **Retail**, or **None**.
> **Example:** `is not: Pickup` → Matches if the selected shipping type is anything other than “Pickup”, i-e it is "Ship".
### Shipping method price
This condition checks the **shipping method’s price** based on the selected shipping name criteria and price comparison rule. You can configure it using the following options:
**Shipping name criteria:**
* **shipping name contains** (Matches when the shipping method name includes the entered text)
* **shipping name is** (Matches exact entered text, or wildcard pattern if `*` is used)
* **any shipping method** (Matches regardless of the shipping method name)
**Price comparison options:**
* **price is greater than or equals** (Matches when the shipping method price is greater than or equal to the entered amount)
* **price is less than or equals** (Matches when the shipping method price is less than or equal to the entered amount)
> For example, `shipping name contains Express` + `price is greater than or equals 200` → Matches orders with a shipping method name containing “Express” and a shipping price of 200 or more.
### Shipping methods available
Used to check if the given shipping methods are actually available on the checkout page, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the checkout page contains at least one of the listed shipping methods)
* **Does not have any of these values** (Matches if the checkout page does not contain any of the listed shipping methods)
* **Has any other value besides these values** (Matches if the checkout page contains shipping methods other than the listed ones)
* **Does not have any other value besides these values** (Matches if the checkout page contains only the listed shipping methods and no others)
* **Has number of values greater than or equals** (Matches if the number of shipping methods available on the checkout page is greater than or equal to the specified number)
* **Has number of values less than or equals** (Matches if the number of shipping methods available on the checkout page is less than or equal to the specified number)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial shipping method names. For example, Stand\*
will match Standard, standard shipping etc.
> For example, `Has any of these values: Express Delivery, Standard Shipping` → Matches if at least one of the selected shipping methods is available.
For **Has number of values greater than or equals** or **Has number of values less than or equals**, enter the count threshold.
> For example, `Has number of values greater than or equals 3` → Matches if three or more shipping methods are available.
## Localization
### User language
This condition checks the language selected by the customer, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer language is from the given list)
* **Does not have any of these values** (Matches if the customer language is not from the given list)
* **Has any other value besides these values** (Matches if the customer language is not from the given list)
* **Does not have any other value besides these values** (Matches if the customer language is from the given list and no others)
For any of the above options, search and select one or more languages from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any of these values: English, French` → Matches if the field does not contain “English” or “French”.
## Shipping Address
### Shipping address is empty
This condition becomes true if the shipping address fields are empty.
### Shipping address is not empty
This condition becomes true if the shipping address fields are not empty.
### Full name (First name + Last name)
Used to compare the customer’s full name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the full name contains the specified value or partial value)
* **Does not contain** (Matches if the full name does not contain the specified value or partial value)
* **Is empty** (Matches if no name is entered)
* **Is not empty** (Matches if any value is entered in the name field)
* **Is** (Matches if the full name exactly matches the specified value)
* **Is not** (Matches if the full name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the name is less than or equal to the specified number)
* **Has only** (Matches if the full name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the full name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Does not contain: Test` → Matches if the name does not contain “Test” anywhere.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the customer’s name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 10` → Matches if the full name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the full name field is left blank.
### First name
Used to compare the customer’s first name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the first name contains the specified value or partial value)
* **Does not contain** (Matches if the first name does not contain the specified value or partial value)
* **Is empty** (Matches if no first name is entered)
* **Is not empty** (Matches if any value is entered in the first name field)
* **Is** (Matches if the first name exactly matches the specified value)
* **Is not** (Matches if the first name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the first name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the first name is less than or equal to the specified number)
* **Has only** (Matches if the first name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the first name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Jane` → Matches if the first name is anything except “Jane”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `has only: english characters` → Matches if the first name contains english characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the first name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the first name field is left blank.
### Last name
Used to compare the customer’s last name with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the last name contains the specified value or partial value)
* **Does not contain** (Matches if the last name does not contain the specified value or partial value)
* **Is empty** (Matches if no last name is entered)
* **Is not empty** (Matches if any value is entered in the last name field)
* **Is** (Matches if the last name exactly matches the specified value)
* **Is not** (Matches if the last name is not exactly the specified value)
* **Has no of characters greater than or equals** (Matches if the total character count in the last name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total character count in the last name is less than or equal to the specified number)
* **Has only** (Matches if the last name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the last name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Is not: Smith` → Matches if the last name is anything except “Smith”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the last name contains English characters only.
For **Has no of characters greater than or equals** or **Has no of characters less than or equals**, enter the character count threshold.
> For example, `Has no of characters greater than or equals 5` → Matches if the last name contains 5 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the last name field is left blank.
### Company
Used to compare the customer’s company name (The company name field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the company name contains the specified value or partial value)
* **Does not contain** (Matches if the company name does not contain the specified value or partial value)
* **Is empty** (Matches if no company name is entered)
* **Is not empty** (Matches if any value is entered in the company name field)
* **Is** (Matches if the company name exactly matches the specified value)
* **Is not** (Matches if the company name is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the company name is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the company name is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the company name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the company name is less than or equal to the specified number)
* **Has only** (Matches if the company name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the company name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: Tech` → Matches if the company name contains the word “Tech”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the company name contains English characters only.
For **Has no of digits/characters greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of characters greater than or equals 10` → Matches if the company name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the company name field is left blank.
### Phone number
Used to compare the customer’s phone number (The phone number field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the phone number contains the specified value or partial value)
* **Does not contain** (Matches if the phone number does not contain the specified value or partial value)
* **Is empty** (Matches if no phone number is entered)
* **Is not empty** (Matches if any value is entered in the phone number field)
* **Is** (Matches if the phone number exactly matches the specified value)
* **Is not** (Matches if the phone number is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the phone number is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the phone number is less than or equal to the specified number)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: 123` → Matches if the phone number contains “123” anywhere.
For **Has no of digits greater than or equals** or **Has no of digits less than or equals**, enter the threshold value.
> For example, `Has no of digits greater than or equals 10` → Matches if the phone number contains 10 or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the phone number field is left blank.
### City / Area
Used to compare the City / Area (The City/Area field on the checkout page) values with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the city field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the city field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the city field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the city field contains only the listed values and no others)
* **Has number of digits greater than or equals** (Matches if the number of digits in the city field is greater than or equal to the specified number)
* **Has number of digits less than or equals** (Matches if the number of digits in the city field is less than or equal to the specified number)
* **Is empty** (Matches if the city field has no value)
* **Is not empty** (Matches if the city field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial city names. For example, Santo\* will match
santo domingo, santodomngo etc.
> For example, `Has any of these values: Lahore, Karachi` → Matches if the field contains either “Lahore” or “Karachi”.
For **Has number of digits greater than or equals** or **Has number of digits less than or equals**, enter the digit count threshold.
> For example, `Has number of digits greater than or equals 5` → Matches if the field’s value has five or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if no value is entered for the field.
### Province code / State code
Used to compare the Province / State (The Province/State field on the checkout page) values with one or more specific values or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the province field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the province field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the province field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the province field contains only the listed values and no others)
* **Is empty** (Matches if the province field has no value)
* **Is not empty** (Matches if the province field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Add 2 or 3 letter province/state code abbreviation in "ISO\_3166-2" format
only.
> For example, `Does not have any other value besides these values: CA, TX` → Matches if the field contains only “CA” or “TX” and no other values.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is not empty` → Matches if any value is entered for the field.
### Country
Used to compare the Country (The Country field on the checkout page) values with one or more specific countries, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the country field contains at least one of the selected countries)
* **Does not have any of these values** (Matches if the country field does not contain any of the selected countries)
* **Has any other value besides these values** (Matches if the country field contains countries other than the selected ones)
* **Does not have any other value besides these values** (Matches if the country field contains only the selected countries and no others)
For any of the above options, search and select one or more countries from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any other value besides these values: Portugal, Poland` → Matches if the field contains only “Portugal” or “Poland” and no other countries.
### Zip code / Postal code
Used to compare the Zip code / Postal code (The Zip/Postal Code field on the checkout page) values with one or more specific zip or postal codes, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the zip/postal code field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the zip/postal code field does not contain any of the listed values)
* **Has value in between these values** (Matches if the zip/postal code field value falls within the specified range)
* **Does not have value in between these values** (Matches if the zip/postal code field value does not fall within the specified range)
* **Has any other value besides these values** (Matches if the zip/postal code field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the zip/postal code field contains only the listed values and no others)
* **Has only digits** (Matches if the zip/postal code field contains only numeric characters)
* **Does not have only digits** (Matches if the zip/postal code field contains any non-numeric characters)
* **Has number of digits in between** (Matches if the number of digits falls within the specified range)
* **Does not have number of digits in between** (Matches if the number of digits does not fall within the specified range)
* **Is empty** (Matches if the zip/postal code field has no value)
* **Is not empty** (Matches if the zip/postal code field contains any value)
Use **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values** to match against one or more specific zip/postal codes. Separate multiple values with commas.
Use \* wildcard to match multiple zip codes. For example, BT\* will match BT12,
bt-590 etc. Use ? to match to any single character.
> For example, `Has any of these values: BT*` → Matches all zip/postal codes starting with “BT”.
> Another example, `Does not have any of these values: 12345, 67890` → Matches if the code is not “12345” or “67890”.
Use **Has value in between these values** or **Does not have value in between these values** to match zip/postal codes within or outside a numeric range.
Enter numbers only. All values ranging in between starting value until the
last value will be matched, including the starting and last value.
> For example, `Has value in between these values: 10000 – 20000` → Matches if the code is between “10000” and “20000”.
Use **Has only digits** or **Does not have only digits** to match zip/postal codes that contain only numeric characters (0–9) or those that include any non-numeric characters, such as letters, spaces, or symbols.
> For example, `Has only digits` → Matches digits only (0–9).
Use **Has number of digits in between** or **Does not have number of digits in between** to match based on the count of digits in the code.
Enter numbers only. All values ranging in between given number of digits will
be matched.
> For example, `Has number of digits in between: 4 – 6` → Matches codes that contain between 4 and 6 digits.
Use **Is empty** or **Is not empty** when you only need to check whether the field is filled in.
> For example, `Is not empty` → Matches if any value is entered in the field
# Condition Set 7
Source: https://docs.checkoutrules.com/guides/en/essentials/condition-sets/condition-set-7
Learn about each condition available in _Condition Set 7_.
## Always
If you don’t want to set any condition, select *Always*. The rule will run every time for everyone, without checking any conditions.
## Previous all conditions invalid
When all previous conditions are invalid in the previous [rule block](/guides/en/get-started/concepts#block), i-e the previous rule block did not run, this condition becomes true, ensuring the action is triggered only if none of the earlier conditions are met.
Available only when at least one previous rule block exists.
## Customer
### Email address
This condition checks the customer’s **email address** against specific criteria, based on one of the following sub-conditions:
* **contains** (The email address includes the entered value)
* **does not contain** (The email address does not include the entered value)
* **is empty** (No email address is provided)
* **is not empty** (An email address is provided)
* **is** (The email address exactly matches the entered value)
* **is not** (The email address does not exactly match the entered value)
For **contains**, **does not contain**, **is**, and **is not**, type a value in the text box to compare against the customer’s email address.
> For example, `contains @gmail.com` → Matches any email address ending with “@gmail.com”.
For **is empty** and **is not empty**, no value entry is required.
> For example, `is empty` → Matches when the email field is blank.
## Discount
### Discount code
This condition evaluates discount codes used at checkout against selected values and determines whether the rule is satisfied based on the chosen logic.
* **Has any of these values** (The condition is satisfied if at least one entered discount code matches one or more of the selected values )
* **Does not have any of these values** ( The condition is satisfied if none of the entered discount codes match any of the selected values )
* **Has any other value besides these values** ( The condition is satisfied if at least one entered discount code is different from the selected values )
* **Does not have any other value besides these values** ( The condition is satisfied only if all entered discount codes exactly match the selected values and no additional discount codes are present )
Please use `*` wildcard to match multiple discount codes. For example, `FREE*`
will match FREE12, free-590 etc. Use `?` to match to any single character.
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, and **Does not have any other value besides these values**, enter one or more values into the field. Separate multiple values with commas or select from the dropdown.
> For example, `Does not have any of these values: SAVE10, ORDER20%OFF` → Matches discount codes other than “SAVE10” or “ORDER20%OFF”.
## Localization
### User language
This condition checks the language selected by the customer, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the customer language is from the given list)
* **Does not have any of these values** (Matches if the customer language is not from the given list)
* **Has any other value besides these values** (Matches if the customer language is not from the given list)
* **Does not have any other value besides these values** (Matches if the customer language is from the given list and no others)
For any of the above options, search and select one or more languages from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any of these values: English, French` → Matches if the field does not contain “English” or “French”.
## Billing Address
### Company
Used to compare the customer’s company name (The company name field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the company name contains the specified value or partial value)
* **Does not contain** (Matches if the company name does not contain the specified value or partial value)
* **Is empty** (Matches if no company name is entered)
* **Is not empty** (Matches if any value is entered in the company name field)
* **Is** (Matches if the company name exactly matches the specified value)
* **Is not** (Matches if the company name is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the company name is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the company name is less than or equal to the specified number)
* **Has no of characters greater than or equals** (Matches if the total number of characters in the company name is greater than or equal to the specified number)
* **Has no of characters less than or equals** (Matches if the total number of characters in the company name is less than or equal to the specified number)
* **Has only** (Matches if the company name contains only the allowed character type from the dropdown)
* **Does not have only** (Matches if the company name contains characters other than the allowed character type from the dropdown)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: Tech` → Matches if the company name contains the word “Tech”.
For **Has only** and **Does not have only**, select the character type from the dropdown:
* **English characters** (Allows only A–Z and a–z)
* **English characters + accent variants** (Allows A–Z, a–z, plus accented characters like é, ñ, ö)
> For example, `Has only: English characters` → Matches if the company name contains English characters only.
For **Has no of digits/characters greater than or equals** or **less than or equals**, enter the threshold value.
> For example, `Has no of characters greater than or equals 10` → Matches if the company name contains 10 or more characters.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the company name field is left blank.
### Phone number
Used to compare the customer’s phone number (The phone number field on the checkout page) with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Contains** (Matches if the phone number contains the specified value or partial value)
* **Does not contain** (Matches if the phone number does not contain the specified value or partial value)
* **Is empty** (Matches if no phone number is entered)
* **Is not empty** (Matches if any value is entered in the phone number field)
* **Is** (Matches if the phone number exactly matches the specified value)
* **Is not** (Matches if the phone number is not exactly the specified value)
* **Has no of digits greater than or equals** (Matches if the total number of digits in the phone number is greater than or equal to the specified number)
* **Has no of digits less than or equals** (Matches if the total number of digits in the phone number is less than or equal to the specified number)
For **Contains**, **Does not contain**, **Is**, and **Is not**, enter the value to match.
> For example, `Contains: 123` → Matches if the phone number contains “123” anywhere.
For **Has no of digits greater than or equals** or **Has no of digits less than or equals**, enter the threshold value.
> For example, `Has no of digits greater than or equals 10` → Matches if the phone number contains 10 or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if the phone number field is left blank.
### City / Area
Used to compare the City / Area (The City/Area field on the checkout page) values with one or more specific values, counts, or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the city field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the city field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the city field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the city field contains only the listed values and no others)
* **Has number of digits greater than or equals** (Matches if the number of digits in the city field is greater than or equal to the specified number)
* **Has number of digits less than or equals** (Matches if the number of digits in the city field is less than or equal to the specified number)
* **Is empty** (Matches if the city field has no value)
* **Is not empty** (Matches if the city field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Use \* wildcard to match partial city names. For example, Santo\* will match
santo domingo, santodomngo etc.
> For example, `Has any of these values: Lahore, Karachi` → Matches if the field contains either “Lahore” or “Karachi”.
For **Has number of digits greater than or equals** or **Has number of digits less than or equals**, enter the digit count threshold.
> For example, `Has number of digits greater than or equals 5` → Matches if the field’s value has five or more digits.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is empty` → Matches if no value is entered for the field.
### Province code / State code
Used to compare the Province / State (The Province/State field on the checkout page) values with one or more specific values or states, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the province field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the province field does not contain any of the listed values)
* **Has any other value besides these values** (Matches if the province field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the province field contains only the listed values and no others)
* **Is empty** (Matches if the province field has no value)
* **Is not empty** (Matches if the province field contains any value)
For **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, **Does not have any other value besides these values**, enter one or more values to match. Separate multiple values with commas.
Add 2 or 3 letter province/state code abbreviation in "ISO\_3166-2" format
only.
> For example, `Does not have any other value besides these values: CA, TX` → Matches if the field contains only “CA” or “TX” and no other values.
For **Is empty** and **Is not empty**, no value entry is needed.
> For example, `Is not empty` → Matches if any value is entered for the field.
### Country
Used to compare the Country (The Country field on the checkout page) values with one or more specific countries, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the country field contains at least one of the selected countries)
* **Does not have any of these values** (Matches if the country field does not contain any of the selected countries)
* **Has any other value besides these values** (Matches if the country field contains countries other than the selected ones)
* **Does not have any other value besides these values** (Matches if the country field contains only the selected countries and no others)
For any of the above options, search and select one or more countries from the list. You can also use the **Paste**, **Copy all**, or **Clear all** options for quick selection.
> For example, `Does not have any other value besides these values: Portugal, Poland` → Matches if the field contains only “Portugal” or “Poland” and no other countries.
### Zip code / Postal code
Used to compare the Zip code / Postal code (The Zip/Postal Code field on the checkout page) values with one or more specific zip or postal codes, based on one of the following sub-conditions:
* **Has any of these values** (Matches if the zip/postal code field contains at least one of the listed values)
* **Does not have any of these values** (Matches if the zip/postal code field does not contain any of the listed values)
* **Has value in between these values** (Matches if the zip/postal code field value falls within the specified range)
* **Does not have value in between these values** (Matches if the zip/postal code field value does not fall within the specified range)
* **Has any other value besides these values** (Matches if the zip/postal code field contains values other than the listed ones)
* **Does not have any other value besides these values** (Matches if the zip/postal code field contains only the listed values and no others)
* **Has only digits** (Matches if the zip/postal code field contains only numeric characters)
* **Does not have only digits** (Matches if the zip/postal code field contains any non-numeric characters)
* **Has number of digits in between** (Matches if the number of digits falls within the specified range)
* **Does not have number of digits in between** (Matches if the number of digits does not fall within the specified range)
* **Is empty** (Matches if the zip/postal code field has no value)
* **Is not empty** (Matches if the zip/postal code field contains any value)
Use **Has any of these values**, **Does not have any of these values**, **Has any other value besides these values**, or **Does not have any other value besides these values** to match against one or more specific zip/postal codes. Separate multiple values with commas.
Use \* wildcard to match multiple zip codes. For example, BT\* will match BT12,
bt-590 etc. Use ? to match to any single character.
> For example, `Has any of these values: BT*` → Matches all zip/postal codes starting with “BT”.
> Another example, `Does not have any of these values: 12345, 67890` → Matches if the code is not “12345” or “67890”.
Use **Has value in between these values** or **Does not have value in between these values** to match zip/postal codes within or outside a numeric range.
Enter numbers only. All values ranging in between starting value until the
last value will be matched, including the starting and last value.
> For example, `Has value in between these values: 10000 – 20000` → Matches if the code is between “10000” and “20000”.
Use **Has only digits** or **Does not have only digits** to match zip/postal codes that contain only numeric characters (0–9) or those that include any non-numeric characters, such as letters, spaces, or symbols.
> For example, `Has only digits` → Matches digits only (0–9).
Use **Has number of digits in between** or **Does not have number of digits in between** to match based on the count of digits in the code.
Enter numbers only. All values ranging in between given number of digits will
be matched.
> For example, `Has number of digits in between: 4 – 6` → Matches codes that contain between 4 and 6 digits.
Use **Is empty** or **Is not empty** when you only need to check whether the field is filled in.
> For example, `Is not empty` → Matches if any value is entered in the field
# Introduction
Source: https://docs.checkoutrules.com/guides/en/essentials/condition-sets/introduction
Understand what condition sets are and how to use them.
## What is a condition set?
A **condition set** is a group of predefined conditions that can be used to control when a checkout rule should run. These conditions are available in the [When](/guides/en/get-started/concepts#conditions-the-“when”) selector in the rule setup.
Each condition set lists how many conditions are available within it compared to the total. For example, **Condition set 1** `23 / 156` means there are 23 conditions available in Condition set 1 out of 156 total conditions. Here, 156 is the total number of conditions available in all condition sets.
You can hover over the condition set name to see all the conditions available
in that condition set. You can also search for a condition using the search
bar to find a specific condition.
Conditions from a selected **condition set** appear in the [When](/guides/en/get-started/concepts#conditions-the-“when”) selector below inside the rule [block](/guides/en/get-started/concepts#block). You can switch between condition sets and then open the condition selector in the "When" selector below, to see the conditions available in the selected condition set.
> For example, here we are using the default **Condition set 1**, which has 23 conditions available, setting the rule to run if the **Order total** is greater than or equal to **\$50** and the **Shipping country** is the **United States**, since these conditions are available in Condition set 1.
## Why condition sets exist
Not all conditions can be placed in the same rule due to size limits, so we provide different condition sets. Each set contains a portion of the total available conditions. You can create multiple rules with different condition sets to control your customers checkout experience.
## How to use condition sets
### Choose condition set
In the Condition Sets section, click on the desired condition set. If you are unsure which condition set to choose, you can search for a condition using the search bar or hover over the condition set name to see all the conditions available in that condition set.
> For example, here we selected *Condition set 3*.
#### Search for a Condition (Optional)
You can click on the search in the top right corner of the condition sets section.
Then, type the condition you want into the search bar and click the search button.
Then, the matching condition sets will be displayed. Click on the condition set that contains your desired condition to switch to it.
### Select conditions
Once you have selected the condition set, choose the condition(s) you want to apply. You can add multiple conditions within the same set to create powerful rules.
### Example usage
For example, here we are using *Condition set 4*, setting the rule to hide shipping methods if ***Any product discount amount*** is *less than or equal* to *300* or the ***Order subtotal amount*** is *less than or equal* to *1500*. Then, hide all shipping methods.
## Tips for using condition sets
* Start by identifying the main condition that triggers your rule.
* Check different sets to see where your needed condition is located.
* Use the search function to find the condition set more easily.
By using condition sets effectively, you can precisely control **when** your checkout rules are executed, improving your store’s flexibility and checkout experience.
# Discount all
Source: https://docs.checkoutrules.com/guides/en/essentials/discount/discount-all
Configure order, product, and shipping discounts together in one rule.
## Rule overview
This is the primary discount rule in the current app flow. It lets you combine **order**, **product**, and **shipping** discounts, as well as **reject discount codes**, into a single rule, each with its own operation options.
For each block, you define the conditions and then enable one or more discount types (**order**, **product**, **shipping**, or **reject discount codes**). The app applies eligible discounts according to your selected strategy settings.
## Supported operations
### Order discount operations
| Operation | Behavior |
| --------------------------------------------- | ----------------------------------------------------------------------------------- |
| **Percentage** | Applies percentage discount to order amount. |
| **Fixed amount off** | Applies fixed currency discount to order amount. |
| **Percentage excluding these products** | Applies percentage discount to order amount while excluding selected products. |
| **Percentage for only these products** | Applies percentage discount based only on selected products. |
| **Fixed amount off excluding these products** | Applies fixed amount discount while excluding selected products. |
| **Fixed amount off for only these products** | Applies fixed amount discount based only on selected products. |
| **Fixed price subtotal percentage** | Sets order amount to `order subtotal × percent / 100` (excluding shipping and tax). |
### Product discount operations
| Operation | Behavior |
| ----------------------------------- | ---------------------------------------------------------------- |
| **Percentage** | Applies percentage discount to selected products. |
| **Fixed amount off** | Applies fixed currency discount to selected products. |
| **Set fixed amount** | Sets selected products to a fixed target amount. |
| **Set all products free** | Makes selected products free. |
| **Fixed price subtotal percentage** | Sets selected product price to `order subtotal × percent / 100`. |
### Shipping discount operations
| Operation | Behavior |
| ----------------------------------- | ------------------------------------------------------------------------------------------------- |
| **Percentage** | Applies a percentage discount to selected shipping method(s). |
| **Fixed amount off** | Applies a fixed currency amount discount to selected shipping method(s). |
| **Set fixed price** | Sets each selected shipping method to a target fixed price. |
| **Set all shipping free** | Makes all shipping methods free. |
| **Subtotal percentage** | Discount amount is `order subtotal × percent / 100`, then applied to selected shipping method(s). |
| **Fixed price subtotal percentage** | Sets each selected shipping method price to `order subtotal × percent / 100`. |
## Sample configuration
The following steps show how to create and configure a **Discount All** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Discount" → select checkout rule type "Discount all" → click “Select Rule”*.
Next, you’ll land on the **Create new discount rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally add a name such as "Discount all" to describe what it does if you want to apply an **"Automatic discount"**.
Or, if you prefer to apply the discount using a discount code, click **"Discount code"** and enter your desired code or generate one randomly by clicking **"Generate random code"**.
Next, on the same screen, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated. Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
As part of the [status](/guides/en/get-started/concepts#status) settings, the optional [schedule](/guides/en/get-started/concepts#schedule) section lets you control when an active rule starts and stops. Select a **Start date** and **Start time** for when the rule should begin. Optionally, check **Set end date** to choose an end date and time when the rule should automatically deactivate.
> If you select schedule dates while the rule is set to **Active**, the status becomes **Scheduled** instead of Active. The rule will run from the start date and time until the end date and time, if one is set.
For this example, we are not using a schedule and are keeping **Testing**
status.
Next, on the same screen, configure the [Combinations](/guides/en/get-started/concepts#combinations) settings to control how this rule’s discount interacts with other discounts. You can choose to allow it to combine with:
* **Product discounts** – This lets the discount all rule be used alongside any product level discounts. Make sure product discounts are also set to combine with all discounts.
* **Order discounts** – This enables the discount all rule to work together with overall order level discounts. Make sure order discounts are also set to combine with all discounts.
* **Shipping discounts** – This allows the discount all rule to be used together with shipping level discounts. Make sure shipping discounts are also set to combine with all discounts.
* **Allow multiple product discounts with matching discount tags to apply on the same product** - Only **Shopify Plus** stores can allow multiple product discounts to apply to the same product when the discounts share matching discount tags. For example, if two product discounts use the tag **VIP**, both discounts can apply to the same product.
Next, on the same screen, configure the [Strategy](/guides/en/get-started/concepts#strategy) settings to control how the system handles multiple discount blocks. You can choose **First**, which applies only the first discount that meets the conditions, ignoring any better discounts that may come later, or **Maximum**, which evaluates all discount blocks and applies the one with the highest reduction.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what). Choose the relevant condition from the dropdown.
> As an example, we will choose the default **Condition Set 1**. Then, we will configure the condition for this rule to **Always**, so it runs in all situations.
After choosing a condition, check the order, product, or shipping discount checkboxes according to your requirements. You can select one or multiple checkboxes as needed.
After choosing the checkboxes, you need to select the action for that **discount type**.
**Order Discount:**
You can choose to apply the discount using **Percentage**, **Fixed amount off**, or **Fixed price subtotal percentage**, without needing to select specific products. All other methods **Percentage excluding these products, Percentage for only these products, Fixed amount off excluding these products, and Fixed amount off for only these products** require you to select products for the discount to work.
Then enter the discount value and discount message.
> As an example, here we are setting the discount value to **14%** using the **Percentage** option. The discount message **14% OFF** will be shown to customers at checkout. This 14% discount applies to the order. You can see the settings in the image below.
**Product Discount:**
You can choose to apply the discount using **Percentage**, **Fixed amount off**, **Set fixed amount**, **Set all products free**, or **Fixed price subtotal percentage** based on your requirements.
Then enter the discount value and discount message. Next, select a product or multiple products from the popup to apply the discount. You must add at least one product for the discount to take effect.
Please note that Set all products free does not show any discount
value, message, or product selection because all products are free.
> As an example, here we are setting the discount amount to **15** using the **Fixed amount off** option. The discount message **15\$ OFF** will be shown to customers at checkout. We then select the product **"The Collection Snowboard: Liquid"** to apply the discount to that product. You can see the settings in the image below.
**Shipping Discount:**
You can choose to apply the discount using **Percentage, Fixed amount off, Subtotal percentage, Set fixed price, Set all shipping free, or Fixed price subtotal percentage** based on your requirements.
You can also choose multiple options to apply the discount. The available options are:
* **Selected shipping methods**\
Apply the discount only to specific shipping methods by entering the **names** of the shipping methods you want to include.
* **All shipping methods**\
Apply the discount to all available shipping methods.
* **Highest price shipping method**\
Apply the discount to the shipping method with the highest price.
* **Lowest price shipping method**\
Apply the discount to the shipping method with the lowest price.
* **Shipping method with price**\
Apply the discount based on an entered amount, with an option to target shipping methods that are either greater than or lower than the specified value.
> As an example, here we are setting the discount value to **16%** using the **Percentage** option. The discount message **16% OFF** will be shown to customers at checkout. We have also set **All shipping methods** to apply the discount to all shipping methods. This 16% discount applies to the shipping methods. You can see the settings in the image below.
**Reject discount codes:**
Select one or more discount codes and enter a relevant rejection message.
Also, you can optionally add translations for the rejection message in multiple languages by clicking **Add translation** and then selecting the languages you want to translate the message into. The main rejection message becomes the **default message** and is shown at checkout when no translation matches the customer’s language.
> As an example, we are configuring the rule to reject the discount code **"SAVE20"**. The rejection message **"This discount code is not available right now"** will be displayed to customers at checkout when they attempt to apply the discount code.
Next, on the same screen, if the shipping discount option is checked, the **Subscription Deliveries** section is also available. For subscription shipping products, you can choose to limit the shipping discount to the first delivery only, limit the shipping discount to the first delivery and make the recurring deliveries free, or limit the shipping discount to the first delivery and make all recurring deliveries free.
The **Subscription Deliveries** section options apply only to shipping
products that have a subscription. For normal (non-subscription) product
deliveries, you do not need to select any option. The default setting will
work as expected.
Next, on the same screen, in the [Maximum Discount Uses](/guides/en/get-started/concepts#maximum-discount-uses) section, you can optionally enable a usage limit for the discount code, limit it to one use per customer, or apply both if a discount code is selected.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note that no discounts have been applied yet.
After setting the email, the checkout rule runs and applies the configured discounts.
We can verify that the **14% order discount** has been applied at checkout, as shown below.
The **15\$ product discount** has also been applied at checkout on the product **"The Collection Snowboard: Liquid"**, as shown below.
The **16% shipping discount** has been applied at checkout to **all shipping methods**, as shown below.
When the customer enters and applies the discount code **SAVE20**, it is rejected and the message **"This discount code is not available right now"** is displayed.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* This rule is incompatible with draft-order-based checkout and apps that use draft-order checkout.
* If checkout URL contains `.../checkouts/do/...`, `do` means draft order and this rule will not run.
# Discount order amount
Source: https://docs.checkoutrules.com/guides/en/essentials/discount/discount-order-amount
Discount order amount based on the given conditions.
## Rule overview
This rule allows you to apply a discount to the order amount based on the defined conditions. You can offer discounts as a percentage, fixed amount off, percentage excluding specific products, percentage for only specific products, fixed amount off excluding specific products, or fixed amount off for only specific products using criteria such as order total amount, customer tags, shipping address, product tags, etc.
Using this rule you can create a discount code, or create an automatic discount. If the rule creates a discount code, then customer can use the discount code at the checkout to get the discount. Otherwise, if automatic discount is selected, then the rule can apply a discount automatically to the order subtotal based on the configured conditions. This helps incentivize purchases, reward specific customers, and drive higher conversion rates.
## Supported operations
| Operation | Behavior |
| --------------------------------------------- | ----------------------------------------------------------------------------------- |
| **Percentage** | Applies percentage discount to order amount. |
| **Fixed amount off** | Applies fixed currency discount to order amount. |
| **Percentage excluding these products** | Applies percentage discount to order amount while excluding selected products. |
| **Percentage for only these products** | Applies percentage discount based only on selected products. |
| **Fixed amount off excluding these products** | Applies fixed amount discount while excluding selected products. |
| **Fixed amount off for only these products** | Applies fixed amount discount based only on selected products. |
| **Fixed price subtotal percentage** | Sets order amount to `order subtotal × percent / 100` (excluding shipping and tax). |
## Sample configuration
The following steps show how to create and configure a **Discount Order Amount** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Discount" → select checkout rule type "Discount order amount" → click “Select Rule”*.
Next, you’ll land on the **Create new order discount rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally add a name such as "Discount order amount" to describe what it does if you want to apply an **"Automatic discount"**.
Or, if you prefer to apply the discount using a discount code, click **"Discount code"** and enter your desired code or generate one randomly by clicking **"Generate random code"**.
Next, on the same screen, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated. Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
As part of the [status](/guides/en/get-started/concepts#status) settings, the optional [schedule](/guides/en/get-started/concepts#schedule) section lets you control when an active rule starts and stops. Select a **Start date** and **Start time** for when the rule should begin. Optionally, check **Set end date** to choose an end date and time when the rule should automatically deactivate.
> If you select schedule dates while the rule is set to **Active**, the status becomes **Scheduled** instead of Active. The rule will run from the start date and time until the end date and time, if one is set.
For this example, we are not using a schedule and are keeping **Testing**
status.
Next, on the same screen, configure the [Combinations](/guides/en/get-started/concepts#combinations) settings to control how this order discount interacts with **other discounts**. You can choose to allow it to combine with:
* **Product discounts** – This lets the order discount be used alongside any product level discounts. Make sure product discounts are also configured to combine with order discounts.
* **Order discounts** – This enables multiple order level discounts to be applied together. Ensure the other order discounts are also set to combine with order discounts.
* **Shipping discounts** – This allows the order discount to be used together with shipping level discounts. Confirm that shipping discounts are also set to combine with order discounts.
Next, on the same screen, configure the [Strategy](/guides/en/get-started/concepts#strategy) settings to control how the system handles multiple discount blocks. You can choose **First**, which applies only the first discount that meets the conditions, ignoring any better discounts that may come later, or **Maximum**, which evaluates all discount blocks and applies the one with the highest reduction.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, we will choose default **Condition set 1**. Then, we will configure the rule to run **Always** and set it to apply a **10% discount** using the **Percentage** option. The discount message **"10% OFF"** will be displayed to customers at checkout.
In the Action section, you can choose to apply the discount using **Percentage**, **Fixed amount off**, or **Fixed price subtotal percentage** without needing to select specific products. All other methods **Percentage excluding these products, Percentage for only these products, Fixed amount off excluding these products, and Fixed amount off for only these products** require you to select products for the discount to work.
Next, on the same screen, in the [Maximum Discount Uses](/guides/en/get-started/concepts#maximum-discount-uses) section, you can optionally enable a usage limit for the discount code, limit it to one use per customer, or apply both if a discount code is selected.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note there is no discount applied yet.
After setting the email, the checkout rule runs and applies the configured **10% discount** using the Percentage option. We can verify that the **"10% OFF"** discount message is visible at the checkout, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* This rule is incompatible with draft-order-based checkout and apps that use draft-order checkout.
* If checkout URL contains `.../checkouts/do/...`, `do` means draft order and this rule will not run.
# Discount product amount
Source: https://docs.checkoutrules.com/guides/en/essentials/discount/discount-product-amount
Discount product amount based on the given conditions.
## Rule overview
This rule allows you to apply discounts to specific product prices at checkout based on defined conditions. You can offer a percentage discount, a fixed amount off, or set a specific fixed price using criteria such as customer tags, collections, product SKUs, or other conditions.
You can create either a discount code or an automatic discount. Customers must enter the code at checkout to receive a discount if a discount code is created. If an automatic discount is selected, it will be applied automatically to eligible products when the configured conditions are met.
## Supported operations
| Operation | Behavior |
| ----------------------------------- | ---------------------------------------------------------------- |
| **Percentage** | Applies percentage discount to selected products. |
| **Fixed amount off** | Applies fixed currency discount to selected products. |
| **Set fixed amount** | Sets selected products to a fixed target amount. |
| **Set all products free** | Makes selected products free. |
| **Fixed price subtotal percentage** | Sets selected product price to `order subtotal × percent / 100`. |
## Sample configuration
The following steps show how to create and configure a **Discount Product Amount** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Discount" → select checkout rule type "Discount product amount" → click “Select Rule”*.
Next, you’ll land on the **Create new product discount rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally add a name such as "Discount product amount" to describe what it does if you want to apply an **"Automatic discount"**.
Or, if you prefer to apply the discount using a discount code, click **"Discount code"** and enter your desired code or generate one randomly by clicking **"Generate random code"**.
Next, on the same screen, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated. Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
As part of the [status](/guides/en/get-started/concepts#status) settings, the optional [schedule](/guides/en/get-started/concepts#schedule) section lets you control when an active rule starts and stops. Select a **Start date** and **Start time** for when the rule should begin. Optionally, check **Set end date** to choose an end date and time when the rule should automatically deactivate.
> If you select schedule dates while the rule is set to **Active**, the status becomes **Scheduled** instead of Active. The rule will run from the start date and time until the end date and time, if one is set.
For this example, we are not using a schedule and are keeping **Testing**
status.
Next, on the same screen, configure the [Combinations](/guides/en/get-started/concepts#combinations) settings to control how this product discount interacts with other discounts. You can choose to allow it to combine with:
* **Product discounts** – This enables multiple product level discounts to be applied together. Ensure the other product discounts are also set to combine with product discounts.
* **Order discounts** – This enables the product discount to work together with overall order level discounts. Make sure order discounts are also set to allow combinations with product discounts.
* **Shipping discounts** – This allows the product discount to be used together with shipping level discounts. Confirm that shipping discounts are also set to combine with product discounts.
* **Allow multiple product discounts with matching discount tags to apply on the same product** - Only **Shopify Plus** stores can allow multiple product discounts to apply to the same product when the discounts share matching discount tags. For example, if two product discounts use the tag **VIP**, both discounts can apply to the same product.
Next, on the same screen, configure the [Strategy](/guides/en/get-started/concepts#strategy) settings to control how the system handles multiple discount blocks. You can choose **First**, which applies only the first discount that meets the conditions, ignoring any better discounts that may come later, or **All**, which applies discount to each eligible product in the cart, or **Maximum**, which evaluates all discount blocks and applies the one with the highest reduction.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, we will choose the default **Condition set 1**. Then, we will configure the rule to run **Always** and configure it to apply a **12% discount** using the **Percentage** option. The discount message **"12% OFF"** will be shown to customers at checkout. We then select the product **The 3D Modeled Snowboard** to apply the discount to that product.
In the **Action** section, you can choose to apply the discount using **Percentage**, **Fixed amount off**, **Set fixed amount**, **Set all products free**, or **Fixed price subtotal percentage**, depending on your requirements.
Then enter the discount value and discount message. Next, select a product or multiple products from the popup to apply the discount. You must add at least one product for the discount to take effect.
Please note that Set all products free does not show any discount
value, message, or product selection because all products are free.
Next, on the same screen, in the [Maximum Discount Uses](/guides/en/get-started/concepts#maximum-discount-uses) section, you can optionally enable a usage limit for the discount code, limit it to one use per customer, or apply both if a discount code is selected.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note that the product discount has not been applied
yet.
After setting the email, the checkout rule runs and applies the configured product discount. We can verify that the **12% discount** is visible on the selected products at checkout, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* This rule is incompatible with draft-order-based checkout and apps that use draft-order checkout.
* If checkout URL contains `.../checkouts/do/...`, `do` means draft order and this rule will not run.
# Discount shipping methods
Source: https://docs.checkoutrules.com/guides/en/essentials/discount/discount-shipping-methods
Discount shipping rates based on the given conditions.
## Rule overview
This rule allows you to discount shipping rates at the checkout based on defined conditions. You can apply percentage, fixed amount off, subtotal percentage, set fixed price, or set all shipping free, etc. using criteria like shipping address, customer tags, product tags, etc.
Using this rule you can create a discount code, or create an automatic discount. If the rule creates a discount code, then customer can use the discount code at the checkout to get the discount. Otherwise, if automatic discount is selected, then the rule can apply a discount automatically to the selected shipping methods based on the configured conditions.
## Supported operations
| Operation | Behavior |
| ----------------------------------- | ------------------------------------------------------------------------------------------------- |
| **Percentage** | Applies a percentage discount to selected shipping method(s). |
| **Fixed amount off** | Applies a fixed currency amount discount to selected shipping method(s). |
| **Set fixed price** | Sets each selected shipping method to a target fixed price. |
| **Set all shipping free** | Makes all shipping methods free. |
| **Subtotal percentage** | Discount amount is `order subtotal × percent / 100`, then applied to selected shipping method(s). |
| **Fixed price subtotal percentage** | Sets each selected shipping method price to `order subtotal × percent / 100`. |
## Sample configuration
The following steps show how to create and configure a **Discount Shipping Methods** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, you’ll be redirected to the **Select checkout rule type screen**. Choose *category "Shipping" → select checkout rule type "Discount shipping methods" → click “Select Rule”*.
Next, you’ll land on the **Create new shipping discount rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally add a name such as "Discount shipping methods" to describe what it does if you want to apply an **"Automatic discount"**.
Or, if you prefer to apply the discount using a discount code, click **"Discount code"** and enter your desired code or generate one randomly by clicking **"Generate random code"**.
Next, on the same screen, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated. Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
As part of the [status](/guides/en/get-started/concepts#status) settings, the optional [schedule](/guides/en/get-started/concepts#schedule) section lets you control when an active rule starts and stops. Select a **Start date** and **Start time** for when the rule should begin. Optionally, check **Set end date** to choose an end date and time when the rule should automatically deactivate.
> If you select schedule dates while the rule is set to **Active**, the status becomes **Scheduled** instead of Active. The rule will run from the start date and time until the end date and time, if one is set.
For this example, we are not using a schedule and are keeping **Testing**
status.
Next, on the same screen, configure the [Combinations](/guides/en/get-started/concepts#combinations) settings to control how this shipping discount interacts with other discounts. You can choose to allow it to combine with:
* **Product discounts** – This lets the shipping discount be used alongside any product level discounts. Make sure product discounts are also configured to combine with shipping discounts.
* **Order discounts** – This enables the shipping discount to work together with overall order level discounts. Make sure order discounts are also set to allow combinations with shipping discounts.
Next, on the same screen, configure the [Strategy](/guides/en/get-started/concepts#strategy) settings to control how the system handles multiple discount blocks. Currently, only **First** is available and selected by default. This option applies only the first discount that meets the conditions, ignoring any better discounts that may come later.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, we will choose the default **Condition set 1**. Then, we will configure the rule to run **Always** and configure it to apply a **10% discount** to all shipping methods using the **Percentage** option. The discount message **"10% OFF"** will be shown to customers at checkout.
In the Action section, you can choose to apply the discount using **Percentage, Fixed amount off, Subtotal percentage, Set fixed price, Set all shipping free, or Fixed price subtotal percentage** based on your requirements.
You can also choose multiple options to apply the discount. The available options are:
* **Selected shipping methods**\
Apply the discount only to specific shipping methods by entering the **names** of the shipping methods you want to include.
* **All shipping methods**\
Apply the discount to all available shipping methods.
* **Highest price shipping method**\
Apply the discount to the shipping method with the highest price.
* **Lowest price shipping method**\
Apply the discount to the shipping method with the lowest price.
* **Shipping method with price**\
Apply the discount based on an entered amount, with an option to target shipping methods that are either greater than or lower than the specified value.
Next, on the same screen, in the [Subscription Deliveries](/guides/en/get-started/concepts#subscription-deliveries) section, for subscription shipping products, you can choose to limit the shipping discount to the first delivery only, limit the shipping discount to the first delivery and make the recurring deliveries free, or limit the shipping discount to the first delivery and make all recurring deliveries free.
The **Subscription Deliveries** section options apply only to shipping
products that have a subscription. For normal (non-subscription) product
deliveries, you do not need to select any option. The default setting will
work as expected.
Next, on the same screen, in the [Maximum Discount Uses](/guides/en/get-started/concepts#maximum-discount-uses) section, you can optionally enable a usage limit for the discount code, limit it to one use per customer, or apply both if a discount code is selected.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note all shipping options have not yet been
discounted.
After setting the email, the checkout rule runs and applies the configured shipping discount. We can verify that the **10% discount** is visible for the selected shipping methods at checkout, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* This rule is incompatible with draft-order-based checkout and apps that use draft-order checkout.
* If checkout URL contains `.../checkouts/do/...`, `do` means draft order and this rule will not run.
# Reject discount codes
Source: https://docs.checkoutrules.com/guides/en/essentials/discount/reject-discount-codes
Do not allow certain discount codes based on the given conditions.
## Rule overview
This rule allows you to reject certain discount codes at checkout based on the defined conditions. You can block specific discount codes from being applied using criteria such as order total amount, customer tags, shipping address, product tags, etc.
When a customer enters a discount code that matches the configured conditions, the rule prevents the code from being applied and shows a custom rejection message at checkout. This helps enforce discount policies, protect margins, and prevent discount codes from being used in situations where they should not apply.
## Sample configuration
The following steps show how to create and configure a **Reject discount codes** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Discount" → select checkout rule type "Reject discount codes" → click “Select Rule”*.
Next, you’ll land on the **Create new order discount rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Reject discount codes" to describe what it does. Then, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, Deactivated, or Scheduled.
Here, as an example, we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
As part of the [status](/guides/en/get-started/concepts#status) settings, the optional [schedule](/guides/en/get-started/concepts#schedule) section lets you control when an active rule starts and stops. Select a **Start date** and **Start time** for when the rule should begin. Optionally, check **Set end date** to choose an end date and time when the rule should automatically deactivate.
> If you select schedule dates while the rule is set to **Active**, the status becomes **Scheduled** instead of Active. The rule will run from the start date and time until the end date and time, if one is set.
For this example, we are not using a schedule and are keeping **Testing**
status.
Next, on the same screen, configure the [Combinations](/guides/en/get-started/concepts#combinations) settings to control how this order discount interacts with **other discounts**. You can choose to allow it to combine with:
* **Product discounts** – This lets the order discount be used alongside any product level discounts. Make sure product discounts are also configured to combine with order discounts.
* **Order discounts** – This enables multiple order level discounts to be applied together. Ensure the other order discounts are also set to combine with order discounts.
* **Shipping discounts** – This allows the order discount to be used together with shipping level discounts. Confirm that shipping discounts are also set to combine with order discounts.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, here we are going to choose the default condition set 1. Then we are setting the rule to run when **Order subtotal amount** is **greater than or equal to** **300**, and configuring it to reject the discount code **"SAVE10"**. The rejection message **"This discount code cannot be used on this order"** will be shown to customers at checkout when they try to apply it.
Also, you can optionally add translations for the rejection message in multiple languages by clicking **Add translation** and then selecting the languages you want to translate the message into. The main rejection message becomes the **default message** and is shown at checkout when no translation matches the customer’s language.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the discount code has not been rejected yet.
After setting the email, the checkout rule runs when the **Order subtotal amount** is **greater than or equal to** **300** and rejects the discount code **"SAVE10"** when the customer tries to apply it. We can verify that the rejection message **"This discount code cannot be used on this order"** is visible at checkout, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* This rule is incompatible with draft-order-based checkout and apps that use draft-order checkout.
* If your checkout URL includes `.../checkouts/do/...`, `do` stands for draft order. This rule won't run on that checkout.
# Hide express checkout options
Source: https://docs.checkoutrules.com/guides/en/essentials/payment/hide-express-checkout-options
Hide express checkout payment options at the top of the checkout page.
## Rule overview
This rule allows you to hide express checkout buttons such as PayPal, Apple Pay, Google Pay, or Shop Pay at the top of the checkout page based on given conditions.
You can always hide these express buttons, only if you are on
Shopify plus plan due to Shopify restrictions. If you are on any other Shopify
plan, then this rule will hide all express checkout buttons, only when the
shipping address is not filled in. When the shipping address is filled in,
then the express checkout buttons will become visible again. This mechanism
ensures that at least the customer will always input their shipping address.
## Sample configuration
The following steps show how to create and configure a **Hide Express Checkout Options** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Payment" → select checkout rule type "Hide Express Checkout Options" → click “Select Rule”*.
Then, a **checkout layout selection** popup will appear. Choose an option based on your store setup, either **1 page checkout** or **3 page checkout**. If you are using one page checkout on your store, then you should select **1 page checkout**. If you are using 3 page checkout, then you should select **3 page checkout**.
Next, you’ll land on the **Create new hide express checkout options rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Hide express checkout options" to describe what it does. Then, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated.
Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
Next, if you selected **1 page checkout** in the previous step, you will need to set up your payment methods as required in the rule setup. Click **Mark as done** for each method once you have followed the instructions to configure it. Optionally, you can add conditions if you want to control when the rule should execute.
You can watch the provided setup videos and follow along, if you are unsure
how to configure a manual payment method as required in the rule setup.
You only need to configure these manual payment methods, if you are not on
Shopify plus. If you are on Shopify plus, then there is no need to configure
these manual payment methods.
Or, if you selected **3 page checkout** in the previous step, you will need to choose whether to hide or show the payment methods listed in the screen below for both the **Checkout information page** and the **Checkout payment page**. Optionally, you can add conditions if you want to control when the rule should execute for both pages.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the PayPal express payment button is visible.
After setting the email, the checkout rule runs and you’ll see the PayPal express payment button is **hidden**, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
# Hide payment methods
Source: https://docs.checkoutrules.com/guides/en/essentials/payment/hide-payment-methods
Hide certain payment methods at the checkout under given conditions.
## Rule overview
This rule allows you to automatically hide specific payment methods at the checkout based on defined conditions. You can control visibility using criteria such as cart total, shipping address, customer tags, or product details, etc.
This helps streamline the checkout process by removing irrelevant or unavailable payment options, reducing customer friction and improving conversion rates.
## Sample configuration
The following steps show how to create and configure a **Hide Payment Methods** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Payment" → select checkout rule type "Hide Payment Methods" → click “Select Rule”*.
Next, you’ll land on the **Create new hide payment methods rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Hide payment methods" to describe what it does. Then, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated.
Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, here we are using the default **Condition set 1**, setting the rule to run **Always**, and configuring it to hide the payment method **"Cash on Delivery (COD)"**.
In the **action section**, you have three options to manage payment methods at checkout:
* **Hide these payment methods** – Hides only the payment methods you specify when the condition matches.
* **Hide all payment methods** – Hides all available payment methods when the condition matches.
* **Only show these payment methods** – Shows only the specified payment methods when the condition matches and hides all others.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the Cash on Delivery (COD) payment method is
visible.
After setting the email, the checkout rule runs and hides the specified payment methods. We can verify that the **Cash on Delivery (COD)** payment method is no longer visible, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* For US/Canada-based stores, the Credit card option can't be changed unless you are on Shopify Plus. This limitation comes from Shopify.
# Rename payment methods
Source: https://docs.checkoutrules.com/guides/en/essentials/payment/rename-payment-methods
Rename or add a prefix or suffix to the selected payment methods, or translate payment method names at checkout, under the specified conditions.
## Rule overview
This rule allows you to rename, or add a prefix, suffix, or translate payment methods at checkout based on defined conditions. You can customize how payment method labels are displayed using criteria such as cart value, shipping address, customer tags, product details, and more.
This helps enhance clarity, support localization, and improve the overall checkout experience for customers.
## Sample configuration
The following steps show how to create and configure a **Rename Payment Methods** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Payment" → select checkout rule type "Rename Payment Methods" → click “Select Rule”*.
Next, you’ll land on the **Create new rename payment methods rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Rename payment methods" to describe what it does. Then, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated.
Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, We are using **Condition set 1**, setting the rule to run **Always**, and configuring it to rename the payment method **"Cash on Delivery (COD)"** to **"Pay Cash"**.
**Rename these payment methods** with method-name match operators: **contains**, **does not contain**, **is**, **is not**.
For each matched method, choose one output mode:
* **Rename to**: fully replace the method name.
* **Add prefix**: add custom text before the original method name.
* **Add suffix**: add custom text after the original method name.
For method-name matching in this rule:
* Matching is case-insensitive.
* `*` wildcard is supported in user input (for example: `Standard*`, `*Express*`, `*Pickup`).
* **contains** / **does not contain** use partial matching.
* **is** / **is not** support exact text and wildcard patterns.
* If you add multiple method rows, they are evaluated as OR (any matching row can apply).
Optionally, you can add translations for **rename**, **prefix**, and **suffix** by clicking the **add translation icon**.
Then select a language from the dropdown and enter the translated message for the selected language. The text entered in the first row will be used as the default text and displayed whenever a translation is not available.
You can also add multiple translations by clicking the **Add Translation** button and repeating the same process for each language.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the Cash on Delivery (COD) payment method is not
yet renamed.
After setting the email, the checkout rule runs and renames the specified payment methods. We can verify that the **"Cash on Delivery (COD)"** payment method is now displayed as **"Pay Cash"**, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* Payment methods that only show a logo can't be renamed.
* PayPal, Amazon Pay, Shop Pay, and some other payment methods can't be renamed.
* For US/Canada-based stores, the Credit card option can't be changed unless you are on Shopify Plus. This limitation comes from Shopify.
# Reorder payment methods
Source: https://docs.checkoutrules.com/guides/en/essentials/payment/reorder-payment-methods
Rearrange how payment methods are displayed at the checkout under given conditions.
## Rule overview
This rule allows you to change the order in which payment methods appear at checkout. You can prioritize specific payment options based on conditions such as cart total, shipping country, or product tags, etc.
This helps streamline the customer experience by displaying the most preferred or relevant payment methods first.
## Sample configuration
The following steps show how to create and configure a **Reorder Payment Methods** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Payment" → select checkout rule type "Reorder Payment Methods" → click “Select Rule”*.
Then, in the **template selection**, choose an option based on your requirements. In most cases, you can choose the empty rule as a starting point and modify it to your needs. Even if you choose a prefilled template, you will be able to modify it later.
Next, you’ll land on the **Create new reorder payment methods rule** screen, where
you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Reorder payment methods" to describe what it does. Then, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated.
Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, we are going to choose the default Condition set 1, set the rule to always run, and select the operation **Alphabetical order** by selecting **Name A to Z (Ascending)** to reorder the payment methods.
In the action section, you have two options to choose from:
* **Alphabetical order** – This allows you to reorder the payment methods alphabetically. You can choose either **Name A-Z (Ascending)** or **Name Z-A (Descending)**.
* **Fixed ranking** – This option lets you manually set the order of payment methods by assigning a fixed rank (e.g., 1, 2, 3, etc.) to each method, so you can control exactly which method appears in which **position**.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the order of the payment methods.
As an example, after setting the email, the checkout rule runs, and the **payment methods are reordered**.
## Setting the default preselected payment method
By default, Shopify will always make the top payment method the default preselected payment method. So, using this rule, you can change the default preselected payment method to any payment method which you want, by making it the top payment method.
To do this, as an example, you can use the **Fixed ranking** option, and set the rank to 1 for the payment method you want to be the default preselected payment method. Please make sure, "All other payment methods will appear here after the above" is set to "Show in end".
Please note, to test this, you will need to activate the rule, and then clear
out the cookies/cache of the browser, so the default preselected payment
method is not your previously selected payment method (Shopify can save this
selection in cache for your browser). Or you can use a different brwoser as
well to see what your customers will see.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* Some logo-based payment methods can't be moved (e.g., iDeal, Shop Pay, etc.).
* Instead, you can reorder other payment methods around them to move them up or down.
* For US/Canada-based stores, the Credit card option can't be changed unless you are on Shopify Plus. This limitation comes from Shopify.
# Hide shipping methods
Source: https://docs.checkoutrules.com/guides/en/essentials/shipping/hide-shipping-methods
Hide certain shipping or pickup methods at the checkout under given conditions.
## Rule overview
This rule allows you to automatically hide shipping methods at the checkout based on defined conditions. You can control visibility using criteria such as cart total, shipping address, customer tags, or product details, etc.
This helps streamline the checkout experience by removing irrelevant or unavailable delivery options, reducing confusion and improving conversion rates.
## Supported operations
* **Hide these shipping methods**: hides only the methods that match your method-name rules.
* **Only show these shipping methods**: keeps only the matched methods and hides the rest.
* **Hide all shipping methods**: hides all shipping methods whenever the condition block matches.
For method-name matching in this rule:
* Matching is case-insensitive.
* `*` wildcard is supported in user input (for example: `Standard*`, `*Express*`, `*Pickup`).
* **contains** / **does not contain** use partial matching.
* **is** / **is not** support exact text and wildcard patterns.
* If you add multiple method rows, they are evaluated as OR (any matching row can apply).
## Sample configuration
The following steps show how to create and configure a **Hide Shipping Methods** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Shipping" → select checkout rule type "Hide Shipping Methods" → click “Select Rule”*.
Then, in the **template selection**, choose an option based on your requirements. In most cases, you can choose the empty rule as a starting point and modify it to your needs. Even if you choose a prefilled template, you will be able to modify it later.
Next, you’ll land on the **Create new hide shipping methods rule** screen, where
you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Hide shipping methods" to describe what it does. Then, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated.
Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
Next, on the same screen, select the appropriate [Target](/guides/en/get-started/concepts#target) to define where the rule should apply. We can choose *"Ship"* to hide shipping methods shown after a **shipping address** is entered. Then, we can select:
* **All shipments except subscriptions** – applies the rule only to regular shipments and skips any orders containing subscription products. This is useful, as Shopify can automatically choose the cheapest shipping method for subscription products and hide all other shipping methods. Hiding this cheapest shipping method can cause "no shipping available" error. This is why we recommend using this option if you have subscription products to avoid this error.
* **All shipments** – applies the rule to every order, including those with subscription items.
Or, we can choose *"Pick Up"* if we want the rule to apply specifically to pickup methods shown when a customer selects **"Pickup in store"** during checkout.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, here we are using the default **Condition set 1**, setting the rule to run **Always**, and configuring it to **hide shipping methods** that contain **"Express Worldwide"**.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the DHL Express Worldwide shipping method
is available.
After setting the email, the checkout rule runs and hides the specified shipping methods. We can verify that the **"Express Worldwide"** shipping method is no longer visible, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* Please remove USPS from shipping name, e.g., instead of 'USPS Ground Advantage', only use 'Ground Advantage' in rule.
# Rename shipping methods
Source: https://docs.checkoutrules.com/guides/en/essentials/shipping/rename-shipping-methods
Rename or add a prefix or suffix to the selected shipping methods, or translate shipping method names at checkout, under the specified conditions.
## Rule overview
This rule allows you to rename, add a prefix or suffix to, or translate shipping methods at checkout based on specific conditions. You can customize the displayed names using criteria such as cart value, customer tags, shipping address, product details, and more.
This helps enhance clarity for customers, support localization, and improve the overall checkout experience.
## Sample configuration
The following steps show how to create and configure a **Rename Shipping Methods** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Shipping" → select checkout rule type "Rename Shipping Methods" → click “Select Rule”*.
Next, you’ll land on the **Create new rename shipping methods rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Rename shipping methods" to describe what it does. Then, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated.
Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
Next, on the same screen, select the appropriate [Target](/guides/en/get-started/concepts#target) to define where the rule should apply. We can choose *"Ship"* to rename shipping methods shown after a **shipping address** is entered. Then, we can select:
* **All shipments except subscriptions** – applies the rule only to regular shipments and skips any orders containing subscription products. This is useful, as Shopify can automatically choose the cheapest shipping method for subscription products and hide all other shipping methods. Hiding this cheapest shipping method can cause "no shipping available" error. This is why we recommend using this option if you have subscription products to avoid this error.
* **All shipments** – applies the rule to every order, including those with subscription items.
The choice of *"Pick Up"* is not available for this rule type at the moment, due to Shopify limitations.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, we are using **Condition set 1**, setting the rule to run **Always**, and configuring it to rename shipping methods that contain **"International Shipping"** to **"Local Shipping"**.
**Rename these shipping methods** with method-name match operators: **contains**, **does not contain**, **is**, **is not**.
For each matched method, choose one output mode:
* **Rename to**: fully replace the method name.
* **Add prefix**: add custom text before the original method name.
* **Add suffix**: add custom text after the original method name.
For method-name matching in this rule:
* Matching is case-insensitive.
* `*` wildcard is supported in user input (for example: `Standard*`, `*Express*`, `*Pickup`).
* **contains** / **does not contain** use partial matching.
* **is** / **is not** support exact text and wildcard patterns.
* If you add multiple method rows, they are evaluated as OR (any matching row can apply).
Optionally, you can add translations for **rename**, **prefix**, and **suffix** by clicking the **add translation icon**.
Then select a language from the dropdown and enter the translated message for the selected language. The text entered in the first row will be used as the default text and displayed whenever a translation is not available.
You can also add multiple translations by clicking the **Add Translation** button and repeating the same process for each language.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the International Shipping shipping
method is available and not yet renamed.
After setting the email, the checkout rule runs and renames the specified shipping methods. We can verify that the **"International Shipping"** method is now displayed as **"Local Shipping"**, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* Remove `USPS` from the shipping name in the rule (e.g., use `Ground Advantage` instead of `USPS Ground Advantage`).
* Shipping names in checkout that start with `USPS`, `UPS®`, or `Canada Post` can't be removed or renamed due to Shopify limitations.
# Reorder shipping methods
Source: https://docs.checkoutrules.com/guides/en/essentials/shipping/reorder-shipping-methods
Rearrange how shipping or pickup methods are displayed at the checkout under given conditions.
## Rule overview
This rule allows you to automatically change the order in which shipping methods appear at checkout.
You can prioritize specific shipping options based on conditions like cart total, delivery address, or product tags, etc.
This helps streamline the customer experience by showing the most relevant or cost effective shipping methods first.
## Supported operations
* **Fixed ranking**: manually rank selected methods with **contains / does not contain / is / is not** matching.
* **Shipping price**: sort by price low to high or high to low.
* **Alphabetical order**: sort names A to Z or Z to A.
* **Shipping price + Alphabetical order**: sort by price first and break same-price ties alphabetically in any of the 4 available direction combinations.
* **Delivery type**: reorder by selected delivery types in your chosen order.
For method-name matching in **Fixed ranking**:
* Matching is case-insensitive.
* `*` wildcard is supported in user input (for example: `Standard*`, `*Express*`, `*Pickup`).
* **contains** / **does not contain** use partial matching.
* **is** / **is not** support exact text and wildcard patterns.
* If you add multiple method rows, they are evaluated as OR (any matching row can apply).
## Sample configuration
The following steps show how to create and configure a **Reorder Shipping Methods** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Shipping" → select checkout rule type "Reorder Shipping Methods" → click “Select Rule”*.
Then, in the **template selection**, choose an option based on your requirements. In most cases, you can choose the empty rule as a starting point and modify it to your needs. Even if you choose a prefilled template, you will be able to modify it later.
Next, you’ll land on the **Create new reorder shipping methods rule** screen,
where you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Reorder shipping methods" to describe what it does. Then, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated.
Here, as an example, we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
Next, on the same screen, select the appropriate [Target](/guides/en/get-started/concepts#target) to define where the rule should apply. We can choose *"Ship"* to reorder shipping methods shown after a **shipping address** is entered. Then, we can select:
* **All shipments except subscriptions** – applies the rule only to regular shipments and skips any orders containing subscription products. This is useful, as Shopify can automatically choose the cheapest shipping method for subscription products and hide all other shipping methods. Hiding this cheapest shipping method can cause "no shipping available" error. This is why we recommend using this option if you have subscription products to avoid this error.
* **All shipments** – applies the rule to every order, including those with subscription items.
Or, we can choose *"Pick Up"* if we want the rule to apply specifically to pickup methods shown when a customer selects **"Pickup in store"** during checkout.
If you are unsure about what to choose for any rule settings, many times the
default preselected option is the best choice. You can always start with the
default option and modify it later.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example here we are going to choose the default condition set, then set the rule to always run, and select the operation to reorder the shipping methods from shipping prices highest to lowest.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the order of the shipping methods.
After setting the email, the checkout rule runs and you'll see the shipping methods are reordered. We can verify the most expensive shipping method is now at the top, as shown below.
## Setting the default preselected shipping method
By default, Shopify will always make the top shipping method the default preselected shipping method. So, using this rule, you can change the default preselected shipping method to any shipping method which you want, by making it the top shipping method.
To do this, as an example, you can use the **Fixed ranking** option, and set the rank to 1 for the shipping method you want to be the default preselected shipping method. Please make sure, "All other shipping methods will appear here after the above" is set to "Show in end".
Please note, to test this, you will need to activate the rule, and then clear
out the cookies/cache of the browser, so the default preselected shipping
method is not your previously selected shipping method (Shopify can save this
selection in cache for your browser). Or you can use a different brwoser as
well to see what your customers will see.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
## Limitations
* Please remove USPS from shipping name, e.g., instead of 'USPS Ground Advantage', only use 'Ground Advantage' in rule.
# Validate/block checkout
Source: https://docs.checkoutrules.com/guides/en/essentials/validation/validate-block-checkout
Show errors or block invalid (or not allowed) checkout under given conditions.
## Rule overview
This rule allows you to validate or block the checkout process based on defined conditions. You can show custom error messages or completely prevent checkout when certain criteria is met, such as invalid cart contents, restricted shipping regions, customer tags, or missing product attributes, etc.
This helps enforce business rules, prevent unsupported orders, and guide customers to resolve issues before completing the checkout.
## Sample configuration
The following steps show how to create and configure a **Validate/Block Checkout** rule using the app.
### Create a new rule
From your [Shopify admin](/guides/en/get-started/installation#go-to-the-app), open the app. In the sidebar, go to the [Rules](/guides/en/get-started/quickstart#create-a-sample-rule) section and click *"Create Rule"*.
Then, You’ll be redirected to the **Select checkout rule type screen**. Choose *category "Validation " → select checkout rule type "Validate/Block Checkout" → click “Select Rule”*.
Then, in the **template selection**, choose an option based on your requirements. In most cases, you can choose the empty rule as a starting point and modify it to your needs. Even if you choose a prefilled template, you will be able to modify it later.
Next, you’ll land on the **Create new validate/block checkout rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Validate/block checkout" to describe what it does. Then, select the rule [status](/guides/en/get-started/concepts#status): Testing, Active, or Deactivated.
Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
Next, on the same screen, select the appropriate [Behavior](/guides/en/get-started/concepts#behavior) for the rule. You can choose to **Block checkout and show error message**, **Show warning message without blocking checkout**, or **Block checkout only when customer tries to complete order**, depending on how you want the rule to affect the checkout process.
If you are unsure about what to choose for any rule settings, many times the
default preselected option is the best choice. You can always start with the
default option and modify it later.
Next, on the same screen, select the relevant [condition set](/guides/en/get-started/concepts#condition-set), [condition](/guides/en/get-started/concepts#conditions-when), and [action](/guides/en/get-started/concepts#action-what).
> As an example, here we are using the default **Condition set 1**, setting the rule to trigger when the **"Address line 2 (Apartment, suite, etc.)"** field is **empty**, and configuring it to block checkout. The error message **"Enter complete address"** will be displayed under the **Shipping address line 2** field at the checkout, requiring customers to provide their complete address before proceeding.
In the **Action** section, you can choose the **target location** where your custom error message will appear on the checkout page. The dropdown menu provides a list of placement options:
* Under the **General** category, you can select **"Top of the checkout page"** to display the action at the very top.
* Under **Below these Input fields**, you can select to show the action below specific input fields, such as: Email, Customer phone number, Shipping country, Shipping first name, Shipping last name, Shipping company, Shipping address (Address line 1), Shipping address apartment, suite, etc. (Address line 2), Shipping city, Shipping province / state, Shipping zip code / Postal code, Shipping phone number, Billing country, Billing first name, Billing last name, Billing company, Billing address (Address line 1), Billing address apartment, suite, etc. (Address line 2), Billing city, Billing province / state, Billing zip code / postal code, and Billing phone number.
This gives you control over where the error message appears, helping you place it in the most relevant section of the checkout form.
After that, you can enter your message in the **"Error message"** field. The message you enter will be displayed on the checkout page.
Optionally, you can add translations by clicking the **"Add translation"** button and entering the translated message for the desired languages. The message entered before adding translations will be used as the default message and will be shown whenever a translation is not available.
Next, on the same screen, select how the system should behave in the rare case, if the app fails or experiences a problem during checkout. This is a fallback option, and in most cases you would want to allow the customer to complete the checkout, which is the default option. You’ll find two options:
* **Allow customer to complete checkout** : This ensures that even if the app encounters an issue, the customer can still proceed with their purchase without interruption.
* **Block customer from completing checkout**: This will stop the customer from checking out if the app fails, potentially preventing transactions.
Choose the option that aligns best with your desired customer experience and risk tolerance.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the error message is not yet displayed.
Please ensure to fill out all the required fields in the shipping address.
Shopify will only run the rule if all the required fields are filled out and
the customer is actually ready to checkout, to prevent running the rule on
every keystroke.
After leaving the Address line 2 (Apartment, suite, etc.) field **empty**, the checkout rule runs and blocks the checkout process. We can verify that the error message **"Enter complete address"** is displayed under the **Shipping address line 2** field at the checkout, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
# Concepts
Source: https://docs.checkoutrules.com/guides/en/get-started/concepts
Learn the key concepts behind how BeSure Checkout Rules works to customize and control your Shopify checkout experience.
## What is a rule?
A **checkout rule** is a set of logic that defines **what** should happen during the checkout process and **when**.
## Rule essentials
These are the essential parts of every rule that define its purpose, when it should run, what it should do, and how those actions are organized.
### Status
Indicates the current state of the rule, whether it’s in testing, active, or deactivated. This helps control when the rule takes effect.
It is recommended to start with a rule in testing mode, to ensure that the
rule is working as expected without affecting your customers. You can switch
to active mode after testing.
Here is an example of how to turn on the testing mode on the checkout page.
### Condition set
You can use any condition set that suits your needs, if you are unsure you can either start by just using condition set 1 or by using the search box to search which condition set has that condition which you need and switching to it.
> For example, if you want to hide a shipping method based on the product metafield, then you should switch to the condition set 4, then you will be able to use the product metafield condition.
Condition set selection is only available at rule creation time. You cannot
change the condition set after the rule is created. If you need a different
condition set, create a new rule.
Get more information about condition sets [here](/guides/en/essentials/condition-sets/introduction) or learn more about each condition set below.
Learn more about condition set 1.
Learn more about condition set 2.
Learn more about condition set 3.
Learn more about condition set 4.
Learn more about condition set 5.
Learn more about condition set 6.
Learn more about condition set 7.
### Conditions (the "when")
Conditions are based on the selected condition set and define the criteria that must be met to trigger the rule. Use AND (all must be true), OR (any one is true), to group related logic for complex cases.
> See example below - here rule will run under any of the 2 circumstances: when date is 4 August 2025, and that day is Monday, then the rule will run, OR, everyday when time is 00:00 which basically means every day at midnight.
### Action (the "what")
When the conditions in the "when" section are true, the system will perform the action you define. Each action is executed only if its specific criteria (action condition and operations) are also met.
> See example below - here the action is set to reorder shipping methods in a fixed way, by placing 'Next Day Delivery' at the top and putting all the other shipping methods below it.
### Block
Together, **conditions** (the "when"), and the **action** (the "what") make up a **rule block**. You can use **multiple blocks** within a rule to handle complex scenarios easily.
## Additional options (for some rules)
These optional parts appear in specific rule types and add more control over how and where the rule applies or behaves under special conditions.
### Schedule
The rule is set to activate automatically at a future date and time, and optionally deactivate at a specified end date and time. This status is currently available only for discount rules.
### Target
Defines where the rule applies (e.g., shipping or pickup). Used only in shipping rules.
### Combinations
Controls whether the rule discount can be combined with product, order, or shipping discounts. Used only in **Discount** rules.
### Strategy
If the discount rule has multiple blocks, then strategy selection comes into play. It determines how those rule blocks are applied (e.g., first valid one or highest value). Used only in **Discount Order Amount** rule.
### Behavior
Determines what happens when the rule is triggered. You can choose to immediately block the checkout and display an error message, show a warning message while allowing the customer to continue checkout, or allow the customer to proceed through checkout and only block them when they attempt to complete the order. Used only in **Validate or Block Checkout** rules.
### Subscription Deliveries
Control how shipping discounts apply to subscription orders. Choose whether the discount should apply only to the first delivery or extend to recurring deliveries.
**Limit shipping discount to first delivery**\
Applies the shipping discount only to the first subscription delivery. Recurring deliveries will use standard shipping rates.
**Limit shipping discount to first delivery and set recurring delivery free**\
Applies the shipping discount to the first delivery and provides free shipping for recurring deliveries.
**Limit shipping discount to first delivery and set all recurring deliveries free**\
Provides free shipping for all recurring subscription deliveries after the first shipment.
The **Subscription Deliveries** section options apply only to shipping
products that have a subscription. For normal (non-subscription) product
deliveries, you do not need to select any option. The default setting will
work as expected.
### Fallback
Defines what happens if the app cannot evaluate a rule at checkout.
* For the **Validate or Block Checkout** rule, this setting determines whether checkout is allowed or blocked if the app encounters an unexpected issue while processing the rule.
* For rules that use **Date Time** or **Customer location (using GeoIP)** conditions, this setting defines what happens if the app cannot determine the required time/date or customer location:
* **Do nothing**: No action is applied by the rule.
* **Do this action**: The configured fallback action is applied instead.
### Maximum discount uses
Defines the **total number of times** the discount can be used across all customers. Optionally, can also restrict usage to **one time per customer**. Only applicable when using discount codes, not automatic discounts. Used only in **Discount** rules.
> For example, if usage limit **set to 1** and **"Limit to one use per customer"** is unchecked, only one customer will be able to use the discount code. After that, the code becomes invalid for everyone else.
# FAQ
Source: https://docs.checkoutrules.com/guides/en/get-started/faq
Find answers to the most frequently asked questions about using the **BeSure Checkout Rules** app in your Shopify store.
If you can’t find what you’re looking for, [get in touch](https://checkoutrules.com/contact/).
It's a way to customize the checkout experience for your customers. For example, a shipping checkout rule will help you modify the shipping options being displayed on the checkout. Similarly, a payment checkout rule will help you modify the payment options being displayed on the checkout.
You can create a checkout rule by clicking on the **Create rule** button on the rules page. You can then select the type of rule you want to create and follow the instructions.
Sometimes when you select a rule, it might show you a selection of **'empty
rule'** vs **'predefined templates'**. You can select **'empty rule'** if you
cannot find a good template to use. This will allow you to create a rule where
you can customize the behavior exactly as per your needs. You can also select
any of the **'predefined templates'** if you find a template that suits your
needs. This will allow you to create a rule starting from the template, but
you can still customize it as per your needs.
You can test a checkout rule by setting it to **TESTING** status. This will allow you to see how the rule changes your checkout without affecting your customers.\
After creating the rule, simply open your store's checkout page, then use the test email address to see the changes.
You can use any condition set that suits your needs. If you are unsure, you can either start by just using **condition set 1** or by using the search box to search which condition set has that condition and switch to it. For example, if you want to hide a shipping method based on the product metafield, then you can use condition set 4. Condition set selection is only available at rule creation time. You cannot change the condition set after the rule is created.
A checkout rule consists of a condition (or a set of conditions) and an action
(or multiple actions). The condition is used to check if the rule should be
applied or not. The action is used to modify the checkout. For example, if we
set a rule to hide UPS shipping if the order total is less than \$50, then the
condition will check if the order total is less than \$50. If the condition is
met during checkout, then the action will be applied. The action will hide UPS
shipping from the checkout.
A block is composed of block conditions with the block action. When you start creating a new empty rule, the first block is already added for you. You can add multiple blocks in a rule. Each block can have its own set of conditions and one action. The blocks are evaluated in the order they are added. If block conditions are true, then the corresponding action will be applied. Then the next block is evaluated and so on.
Yes, the app works well for both **1 page** and **3 page** checkouts since it uses native Shopify APIs.
No, this app works for all Shopify plans. You can use this app to customize
your checkout for all plans.
Yes, this app works with invoice-based checkout. Only discount rules do not
support invoice-based checkout at the moment, but you can manually apply the
automatic discount rules on the draft order before sending out the invoice.
Yes, there are options available which can enable/disable rules for that
invoice. For example, you can choose to 'ignore the validation rules' before
sharing checkout link or sending out the invoice. Automatic discount rules are
not automatically applied on the invoice checkout, but you can manually apply
the automatic discount rules on the draft order before sending out the
invoice. If you select a shipping option for the customer before sending the
invoice, then shipping rules will not run on that invoice checkout. If you
select 'Payment due later' option and then send the invoice, then payment
rules will run on that invoice checkout.
It works for some rule categories. Validation rules will work, but there is an
option that you can use to ignore them if you need to. Automatic discount
rules can be manually applied to the draft order. When you click on the 'add
discount' button, it will show the option 'Apply all eligible automatic
discounts' which, when selected, can apply the automatic discount rules.
Shipping and payment rules will not work in the draft order admin.
You can use a \* to select all shipping or payment methods. You can also use \*
or ? in these ways, for example, to select all methods that start with
'Standard', you can use 'Standard\*'. To select all methods that end with
'Standard', you can use '\*Standard'. To select all methods that start with
'New' and end with 'Way', you can use 'New\*Way'. Similarly, you can use ? to
match with a single character.
The 'is' condition is used to match the exact value. The 'contains' condition
is used to match the value partially. For example, 'is' will match 'Standard'
with 'Standard' only, while 'contains' will match 'Standard' with 'Standard
Shipping' or 'Standard Delivery'.
You can add a note or modify text displayed on the checkout by following the steps mentioned [here](https://checkoutrules.com/blog/shopify-easily-customize-checkout-text/?utm_source=app\&utm_medium=help_page\&utm_campaign=app_help).
## Reorder Shipping Methods
You can set the default pre-selected shipping method by making it the top
shipping method on the checkout. Then it will be pre-selected for your
customers. Please note, if you have started a checkout before, then Shopify
caches your previous selection of shipping method and will pre-select that
one. You can clear the cache by using incognito browser mode or by using a
different browser or by starting a new checkout with different cart content.
Your customers will not have this issue.
## Reorder Payment Methods
You can set the default pre-selected payment method by making it the top payment method on the checkout. Then it will be pre-selected for your customers (this is not always true, please read the FAQ below). Please note that if you have started a checkout before, then Shopify caches your previous selection of payment method and will pre-select that one. You can clear the cache by using incognito browser mode, by using a different browser, or by starting a new checkout with different cart content. Your customers will not have this issue.
It usually works when you reorder the payment method to the top, then it becomes the pre-selected payment method, but this default pre-selection is controlled by Shopify and the payment provider that you are using. This app only allows you to reorder the payment methods. There are some payment gateways, like Klarna and iDeal, that always want to be selected first, no matter what. In that case, your only option is to try a workaround like showing these payment gateways in a particular region only and hiding them in all other regions. Once they are hidden, it might be possible to set the topmost payment method as the default pre-selected payment method.
## Validate / Block Checkout
When you use the 'P.O. box address' condition in the rule, then all kinds of entries in the shipping address like P.O. box, P O box, or P.o b o x, etc. are detected by the app automatically. If you want to detect a custom word or phrase, you can do that by using the 'Address line' condition within which you can specify the word or phrase you want to detect.
If you want to detect PO Box words or phrases in other languages, you can do that by using the 'Address (line1 + line2)' condition within which you can specify the words or phrases you want to detect. For example, 'Packstation' in German. You can add multiple of these conditions for each word using the OR operator in between them.
# Installation
Source: https://docs.checkoutrules.com/guides/en/get-started/installation
Learn how to install and set up the **BeSure Checkout Rules** app in your Shopify store to start customizing and enhancing your checkout experience.
## Install app
To install the app, go to [BeSure Checkout Rules](https://apps.shopify.com/checkout-rules) on the Shopify App Store.
## Go to the app
After installation, go to your [Shopify admin](https://admin.shopify.com), click on **Apps** in the sidebar.
Then click on **BSure Checkout Rules** to open the app.
## Upgrade your plan
When the app is installed, the **Free Plan** is activated by default. This plan is intended for **testing** or **development** stores and lets you explore the app's features.
To activate rules on your store, navigate to *BSure Checkout Rules → Settings → Billing*.
Then you’ll be redirected to the **Billing** screen. Choose your tenure by selecting
the **Monthly** or **Annual** tab, and click **Select plan** on your preferred option.
After upgrading your plan, you can now activate rules on your store.
Then you’ll be redirected to the **Approve subscription** screen. Choose your **payment method** and **click “Approve”** to complete the upgrade and activate your plan.
After upgrading your plan, you can now **activate rules** on your store.
# Introduction
Source: https://docs.checkoutrules.com/guides/en/get-started/introduction
Welcome to the BeSure Checkout Rules documentation, your guide to customizing the Shopify checkout experience.
## Overview
BeSure Checkout Rules helps you customize and control your Shopify checkout without writing a single line of code.
Take control of your checkout experience by conditionally showing, hiding, renaming, or reordering shipping and payment methods based on cart total, weight, address, items, customer or product tags, and more. You can set default options, block invalid checkouts, hide express payment buttons, move store pickup to the bottom, restrict PO Box shipping, apply discounts to specific orders or shipping methods, and much more using simple rules and conditions.
Whether you're looking to streamline your checkout, reduce errors, or improve customer satisfaction, BeSure helps you configure it with ease.
## Getting started
Get started with BeSure Checkout Rules in just a few simple steps. The steps below will guide you through installing the app, creating rules, and seeing them in action at checkout.
Add BeSure Checkout Rules to your Shopify store from the App Store.
Access the app from your Shopify admin to begin configuring your checkout
logic.
Create rules based on cart, customer, and shipping details.
Your rules are automatically applied at checkout.
## Why use BeSure Checkout Rules?
BeSure Checkout Rules helps Shopify merchants create a smoother, smarter checkout process by applying flexible conditions to shipping and payment methods. It allows you to tailor the experience to your store’s needs, ensuring customers see only the most relevant options while reducing friction and errors.
**Key benefits**
* **Improve customer experience** by showing only relevant shipping and payment methods based on cart or customer conditions.
* **Reduce errors and block high-risk checkouts**, such as orders with PO box addresses or unsupported payment methods like COD.
* **Increase conversion rates** by setting default selections and simplifying the checkout flow for customers.
* **Enhance operational efficiency** by hiding unnecessary express buttons or reordering options to match your business logic.
* **Enforce business rules** such as restricting shipping methods for certain products, addresses, or order values.
* **Apply discounts** to specific orders or shipping methods based on conditions like cart value, tags, or shipping zones.
# Quickstart
Source: https://docs.checkoutrules.com/guides/en/get-started/quickstart
This quickstart will guide you through creating a sample rule, demonstrating how it works, and how it can be used to customize your Shopify checkout.
## Create a sample rule
To create a rule, navigate to *BSure Checkout Rules → Rules → click "Create Rule"*.
You’ll then be redirected to the **Select checkout rule type** screen. Choose a category (Shipping, Payment, Validation, or Discount) → select checkout rule type (e.g., Reorder Shipping Methods) → click “Select Rule”.
Here we are selecting *Reorder Shipping Methods* as the checkout rule type for
demo purpose.
Then, a **template selection** popup will appear. Choose an option based on your
requirements. In most cases, you can choose the empty rule as a starting point and
modify it to your needs. Even if you choose a prefilled template, you will be able
to modify it later.
Next, you’ll land on the **Create new reorder shipping methods rule** screen, where you can configure your rule.
### Rule configuration
To configure the rule, first optionally we can add a name such as "Reorder Shipping Methods" to describe what it does. Then, select the status: Testing, Active, or Deactivated.
Here we are going to choose **Testing** status, so we can quickly test the rule without affecting the checkout for actual customers.
Next, on the same screen, select the relevant condition set, condition, and operation. As an example here we are going to choose the default condition set, then set the rule to always run, and select the operation to reorder the shipping methods from shipping prices highest to lowest.
Finally, click the Save button at the top to create and save your rule.
## Test the rule
Since, the rule is set to testing status, we have to use `test@testing.com` as the email, instead of the actual email, to run the rule at checkout.
The image below shows the checkout page before the testing email
address was used. Please note the order of the shipping methods.
After using the testing email address, the checkout rule runs and you'll see the shipping methods are reordered. We can verify the most expensive shipping method is now at the top, as shown below.
## Activate the rule
Once testing is done, we can activate the rule, so it can start making changes to the checkout for actual customers. Only activated rules can make changes to the checkout for all customers.
Click on **Rules** in the sidebar to view all rules. Select the rule you want to activate, then click the **Activate** button to activate it.
Rule activation is only available on paid plans. If you haven't upgraded your
plan yet, follow the instructions
[here](/guides/en/get-started/installation#upgrade-your-plan) to upgrade.
Similarly, you can create multiple rules based on your requirements by following the process described above.