# Automation rules

Rules that act on your behalf, where they live, and how to introduce one safely

Section: app. Audience: public. Updated: 2026-10-03.

---
**"Automation"** is the last page under **"Orders & shipping"** in the sidebar. It opens on **"Activity"**, which says what the automations did today. Its **"Shipping rules"** tab holds the **"Automation rules"** card: things Horizon does for you without being asked each time. **"Checkout methods"** maps what your customers chose at checkout to a carrier service; see [Checkout methods](/app/checkout-methods). **"All automations"** lists everything that runs on its own across Horizon, with a link to where each one is edited.

The **"Shipping rules"** tab lists every rule on the account, including the ones that fire when a parcel is delivered, when tracking reports a problem or when stock runs low: they share one list and one run order with the shipping rules.

The rules were a section of **"Settings"** until September 2026. An old link to that section opens this tab, not **"Activity"**.

## What ran today

**"Activity"** counts, since midnight on your computer's clock, what the automations did: labels bought automatically, documents printed automatically, labels held for your approval, shopper emails sent, returns approved automatically, and reorders suggested when the reorder check ran today. A print or a shopper email that failed gets a line of its own, only when there is one. Each line opens the page that lists those rows: the labels on **"Orders"**, the prints in **"Recent print jobs"** in **"Labels & printing"** in **"Settings"**, the emails in the **"Activity"** tab of **"Customer emails"**, the returns on **"Returns"** and the reorders on **"Purchasing"**.

Labels held for your approval count the holds made today, by a rule and by the address check together. **"Needs attention"** on **"Orders"** counts every order still held, split by reason, so the two numbers can differ.

The **"Waiting for you"** card beside it shows two numbers: the orders **"Needs attention"** lists, and the connection problems it shows (a store to reconnect, a carrier or printer in error). When one of them is above 0, **"Open Needs attention"** takes you there; when both are 0, the card says **"Nothing is waiting for you."** The card is not shown when the server cannot say which orders need attention.

## All automations

**"All automations"** has one row for each engine: **"Shipping rules"**, **"Customer emails"**, **"Returns rules"**, **"Reorder rules"** and **"Passport rules"**. Each row says whether it is on, how many rules it has and when it last ran, and its **"Edit"** button opens the one place it is edited. Nothing is switched on or off from this tab.

The status says what the data says. **"Customer emails"** reads **"Test mode"** when every flow that is on only simulates its sends. **"Reorder rules"** is on while automatic reordering is on, whatever the product rules say. **"Passport rules"** reads **"Off"** while the server does not run passport rules, even when rules are saved. A row that cannot be read says so, and the other rows still show.

## What a rule is

A rule is a condition and an action. When the condition holds, the action happens, with no one in the loop.

That is the value and the risk in the same sentence. A rule applied to the wrong condition is wrong every time it fires, quietly, until somebody notices.

## Introducing one safely

Three habits are worth keeping.

Start narrow. A rule that matches one channel or one supplier tells you whether it behaves before it is let loose on everything.

Watch what it did. The **"Activity log"** records actions taken on the account, which is where you check that a rule did what you expected rather than what you wrote. See [Activity log](/app/activity-log).

Name it for its intent. A rule you cannot understand at a glance in six months is a rule nobody will dare turn off.

## Creating labels automatically

The action **"Create the shipping label"** buys an order's label the moment the order arrives, with nobody pressing anything. The quickest way to start is the template **"Auto-create labels for new orders"**, which does it for every new order. Add conditions to narrow it, for example to one destination country, a weight range or one sales channel.

The label is the one you would get by pressing the button yourself: your shipping settings, or the carrier service the order's checkout method is mapped to, plus whatever carrier, service, package or sender your other rules chose for that order, including a carrier chosen by price or speed. It goes through the same checks, and it is charged like a manual label. See [Shipping defaults](/app/shipping-defaults) and [Checkout methods](/app/checkout-methods).

A few things are worth knowing before you switch it on.

It acts on new orders only: orders a connected store sends after its first import, and orders from an uploaded file. A store's first import and a full history import never trigger it, so connecting a store cannot buy labels for years of old orders. Nor do the orders a WooCommerce, PrestaShop or Adobe Commerce store received while it was disconnected: reconnecting imports them without triggering it, since you may have shipped them another way meanwhile. Orders placed after the reconnect trigger it as usual.

It will not buy for an order that should not ship. A cancelled order and an order the store already fulfilled are left alone, and the order says why. So is an order whose checkout method you mapped to **"Don't buy labels: the customer collects the order"**, whatever carrier a rule sets for it, and an order mapped to a pickup-point service, because the store does not send the pickup point: create that label from the create order form, where you choose the point. An order that is not paid yet is waited for: once the payment arrives, within two weeks, the rule buys its label on its own. The same goes for an order the store has put on hold or scheduled for later. An authorised payment counts as paid.

It buys at most one label per order, however many label rules match it. If the carrier never confirms a purchase, nothing buys that order's label again on its own, including a bulk run, until someone has checked with the carrier.

When it cannot buy, the order says why on **"Orders"**, and nothing is retried on its own. Fix the cause, then create the label by hand or in bulk. See [Orders](/app/orders).

## Holding an order back

The action **"Don't create the label automatically"** keeps the label rules away from the orders it matches, even when a label rule matches them too. Use it for what a person should look at first: the template **"Hold fragile orders"** does it for orders tagged fragile. Your other rules still apply, so the carrier or box they chose is ready when you create the label by hand.

A held order says on **"Orders"** which rule held it. It is not waited on like an unpaid order: paying it later does not buy its label.

## Choosing the carrier by price or speed

The action **"Choose the carrier by price or speed"** asks the carriers you can ship an order with for a price, the moment the order arrives, and picks one of them for it. The template **"Cheapest carrier for every order"** starts one for every new order. Put a label rule below it and the label is bought on the carrier it picked.

Under **"Pick by"**, **"Lowest price"** picks the carrier and service that cost you the least for that parcel. **"Fastest delivery"** picks the one with the fewest days in transit, and the cheaper of two that are as fast. A carrier that does not say how long it takes is left out of a fastest pick: Chronopost gives no delivery time, so a fastest rule that compares only Chronopost never picks, and the rule editor says so.

It only compares what you can actually buy: your own carrier accounts, and Horizon's rates where your plan includes them. A price in another currency than your account's is left out, never converted, and so is a product delivered to a relay point, such as Chrono Relais: an order's label is bought for delivery to its address. To compare only some carriers, tick them under **"Only compare these carriers (optional)"**. Leave them all unticked to compare every carrier you can use, including one you connect later.

Where it sits in the list matters, because it applies at its place:

- It prices the parcel and the sender that the rules above it set, so put it below your package and sender rules.
- A carrier or service rule below it overrides its pick, and one above it is overridden by it.
- When a carrier rule below it moves the order to another carrier, the service it picked goes too, and that carrier's service from your shipping settings is used.
- When a service rule below it sets another service, the carrier it picked goes too: the service is bought on the carrier a rule above it set, or else on your default carrier.

If no carrier gives a usable price, nothing changes: your shipping settings stand, or the service the order's checkout method is mapped to, and a label rule buys with them as it would without this rule. A carrier that is slow to answer is skipped rather than waited for. The order's shipping label section on **"Orders"** shows what the rule picked and at what price, or why it picked nothing.

An order that is not paid yet, and that a label rule is waiting on, is priced once it is paid, just before its label is bought. Without a label rule it is priced when it arrives, so the carrier is ready when you create the label yourself.

## Rules and checkout methods

Rules come before the carrier service you mapped a checkout method to, and the mapping comes before your shipping settings. A rule that sets the carrier or the service replaces the mapping entirely: the carrier is the rule's or your default one, and the service is the rule's or that carrier's own default. A package or sender rule leaves the mapping in place. See [Checkout methods](/app/checkout-methods).

A **"Choose the carrier by price or speed"** rule replaces a mapped service too, unless the mapping's editor has its keep this service box ticked: then, for that method, the rule asks no carrier for a price, writes nothing, and the order says the service the customer chose was kept. A pickup-point mapping is always kept. The mapping only counts at the rule's place in the list when no rule above it has set the carrier or the service, and a carrier or service rule below it still overrides it.

## Choosing again

When the rules run on an order again, once an address review lets its label go for example, the carrier is chosen afresh. If no carrier gives a usable price that time, the earlier pick does not stand either: the label is bought as if the rule had picked nothing, on your shipping settings or on the carrier a rule above it sets, and the order says why it picked nothing. The same goes when you have switched the rule off meanwhile. A pick an order's label was already bought on is never changed.

## When the address needs review

The address check can hold a label rule too. With **"Hold automatic labels when an address needs review"** on, a label rule does not buy for an order whose address is **"Needs review"** or **"Invalid"**, and it buys the label on its own once you accept the suggestion or keep the original, or once the address is corrected here or in your store. A **"Don't create the label automatically"** rule whose condition is the **"Address status"** lets go of the order the same way once the address is fixed.

The **"Address status"** condition is read when the order is imported, before that import's carrier rules and **"Choose the carrier by price or speed"** run: it is the check made for the carrier the order had then, usually your default one. The hold looks again just before a label rule buys, for the carrier the order ends up with, so an address the carrier the rules picked cannot take can hold the label even when it suited the default one. To have a label bought once you fix an address, use the hold setting or a hold rule, not a condition on the label rule. The webhooks of the order imported trigger carry the same address_status value. See [Address checks](/app/address-checks).

## A different box or sender

**"Set the package"** replaces your default packaging for the orders it matches. Give the three sides, and a weight if the box sets it; leave the weight empty and each order keeps its own. The template **"Heavy parcels in a bigger box"** starts one for orders over 5 kg, with the sides left for you to measure. A size typed in the wrong unit, millimetres or grams, is refused when you save.

**"Set the sender address"** ships the orders it matches from another of your saved addresses, such as a second warehouse. The contact name and phone on the label stay those of your default sender. If that address is later deleted, the rule stops the label rather than ship from your default sender, and the order says why.

## Rule order

Rules run from top to bottom, in the order of the list. Move a rule with the up and down arrows on its row; they work from the keyboard too. New rules go to the bottom.

Carrier, carrier choice, service, package, sender, hold and label rules only run on the order imported trigger. When two of them set the same thing, the lower one wins, and a carrier choice counts as setting the carrier and service at its place in the list. A label rule always runs last, after the carrier, service, package and sender rules and any carrier choice have been applied, so the label bought is the one those rules describe, and never for an order a hold rule matches.

## Rules elsewhere

Not all automation lives here.

Returns automation is on the rules view of **"Returns"**, because approving a return is a returns decision. See [Returns](/app/returns).

Passport rules are on the rules view of **"Digital Passports"**. See [Digital Product Passports](/app/digital-product-passports).

Reorder policies, which decide what gets suggested for replenishment, are on **"Reorder"**. See [Suppliers and purchasing](/app/suppliers-and-purchasing).

This tab is for account-level automation. If you are looking for a rule about a specific area, look at that area's own page first.