> For the complete documentation index, see [llms.txt](https://docs.rishvi.co.uk/linnworks/llms.txt).
> Use it to discover all available pages before exploring further.

# Set Lowest Shipping Quote

Automatically check available shipping quotes for selected Linnworks orders, apply the most suitable shipping service, and flag orders that need manual review when no valid quote is found.

## Overview

Set Lowest Shipping Quote is an automated shipping-service selection solution for Linnworks. It retrieves available shipping quotes for selected orders, applies the macro's defined service-selection rules, and updates each qualifying order with the most suitable shipping method.

The macro processes order IDs supplied through the Linnworks Rule Engine. For each order, it retrieves the enabled shipping integrations, requests live shipping quotes, and evaluates the returned services.

Where special service-selection logic applies, the macro prioritises the relevant matching service. When no special rule applies, it selects the quote with the lowest total cost.

If no suitable quote is available, the order is added to a review list and assigned the **Check Order** identifier so it can be investigated manually.

The macro also records the previous and newly selected shipping service details as order extended properties, providing greater visibility into the shipping update.

> Keep shipping-service selection consistent by automatically applying suitable quotes and clearly identifying orders that require manual review.

## Who Should Use Set Lowest Shipping Quote

<Columns cols="2">
  <Card title="Warehouse & Fulfilment Teams" icon="package" horizontal="false" target="_self">
    Teams preparing orders for label generation, packing, and dispatch can use the macro to assign suitable shipping services automatically.
  </Card>

  <Card title="Logistics Managers" icon="truck" horizontal="false" target="_self">
    Logistics managers can reduce manual quote comparison and apply consistent shipping-service selection across selected orders.
  </Card>

  <Card title="Integration Administrators" icon="settings" horizontal="false" target="_self">
    Administrators configure the macro, enable it for the Rule Engine, maintain shipping integrations, and monitor quote and update logs.
  </Card>

  <Card title="Operations Teams" icon="bar-chart-2" horizontal="false" target="_self">
    Operations teams can review old and new shipping details and focus attention on orders marked with the Check Order identifier.
  </Card>
</Columns>

## Key Features

<Columns cols="2">
  <Card title="Live Shipping Quote Retrieval" icon="calculator" horizontal="false" target="_self">
    Requests available shipping quotes for selected orders through enabled Linnworks shipping integrations.
  </Card>

  <Card title="Lowest-Cost Quote Selection" icon="trending-down" horizontal="false" target="_self">
    Selects the quote with the lowest total cost when no special service-selection rule applies.
  </Card>

  <Card title="Preferred Service Logic" icon="sliders" horizontal="false" target="_self">
    Applies defined sub-source or preferred-service rules before using the general lowest-cost selection.
  </Card>

  <Card title="Automatic Shipping Method Update" icon="edit" horizontal="false" target="_self">
    Updates the Linnworks order with the shipping method from the selected quote.
  </Card>

  <Card title="Manual Review Identification" icon="alert-circle" horizontal="false" target="_self">
    Assigns the Check Order identifier when no suitable shipping quote is found.
  </Card>

  <Card title="Shipping Change Audit Data" icon="file-text" horizontal="false" target="_self">
    Stores previous and new shipping service details and costs as order extended properties.
  </Card>
</Columns>

## How Set Lowest Shipping Quote Works

Set Lowest Shipping Quote follows a defined sequence whenever it receives one or more order IDs from the Linnworks Rule Engine.

<Steps>
  <Step title="Step 1: Order retrieval" title-type="p">
    The macro reads each order ID supplied through the `OrderIds` parameter and retrieves the corresponding Linnworks order details.
  </Step>

  <Step title="Step 2: Shipping integration retrieval" title-type="p">
    The macro retrieves the enabled shipping integration accounts available within Linnworks.
  </Step>

  <Step title="Step 3: Shipping quote request" title-type="p">
    Live shipping quotes are requested for the selected order using the available integration accounts.
  </Step>

  <Step title="Step 4: Preferred rule evaluation" title-type="p">
    The macro checks whether the order matches defined sub-source or preferred-service selection logic.
  </Step>

  <Step title="Step 5: Lowest-cost selection" title-type="p">
    When no special rule applies, the quote with the lowest total cost is selected.
  </Step>

  <Step title="Step 6: Shipping method update" title-type="p">
    If a suitable quote is found, the order shipping method is updated using the selected quote details.
  </Step>

  <Step title="Step 7: Shipping audit update" title-type="p">
    The old and new shipping services and costs are stored as order extended properties.
  </Step>

  <Step title="Step 8: Manual review collection" title-type="p">
    Orders without a suitable quote are added to a review list.
  </Step>

  <Step title="Step 9: Identifier assignment" title-type="p">
    After all selected orders are processed, the Check Order identifier is created if necessary and assigned to unresolved orders.
  </Step>
</Steps>

## **Configure the Macro**

Once the app is installed, you need to create a macro configuration so the system knows which macro to run when the rule is triggered.

This setup can be adjusted anytime based on your operational requirements.

### **Steps to Configure**

<Tabs>
  <Tab title="Step 1">
    **Go to Apps > Macro Configuration and click + Add new configuration.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779094211819-m4d4f11jrx-pasted-image-1779094207771.png?fm=auto&auto=compress%2Cformat" width="1368" height="568" alt="" priority={true} fetchPriority="high" />
  </Tab>

  <Tab title="Step 2">
    **Select the GetCheapestShippingandAssignService macro and click Create Configuration**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779440861609-577706d9so6-pasted-image-1779440858799.png?fm=auto&auto=compress%2Cformat" width="1000" height="434" alt="" priority={true} fetchPriority="high" />

    This creates a new configuration where you can define the configuration name. The selected order IDs are passed to the macro when it runs from the rule.
  </Tab>

  <Tab title="Step 3">
    **In the Macro Configuration screen, add the configuration name.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779440916950-j1kn218n8o-pasted-image-1779440913851.png?fm=auto&auto=compress%2Cformat" width="721" height="519" alt="" />

    Example configuration name:

    Get Cheapest Shipping and Assign Service

    This macro does not require additional user-entered parameter values. The **OrderIds** value is provided automatically by the selected orders or rule context.
  </Tab>

  <Tab title="Step 4">
    **Make sure to enable the macro to continue with the Rule Engine configuration.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779440969026-oyefi88vkp-pasted-image-1779440966286.png?fm=auto&auto=compress%2Cformat" width="1257" height="30" alt="" />

    <Callout kind="warning" collapsed="false">
      **Note:** If the macro is not enabled, it will not appear in the **Action** value list when setting up the rule.
    </Callout>
  </Tab>

  <Tab title="Step 5">
    **Go to Orders > Rules engine and click + Add new rule.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779094587683-vdcfps4fxa-pasted-image-1779094584371.png?fm=auto&auto=compress%2Cformat" width="1369" height="606" alt="" />

    **Key Benefits**
  </Tab>

  <Tab title="Step 6">
    **Enter the rule name and click Create.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779440987467-hfee9auydw4-pasted-image-1779440985068.png?fm=auto&auto=compress%2Cformat" width="327" height="194" alt="" style="width: 327px; height: auto; cursor: pointer; margin: 0 auto;" />
  </Tab>

  <Tab title="Step 7">
    **Click Add new, select Condition, set the condition as required, and save it.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779099941621-j5whfpzeq2-pasted-image-1779099937975.png?fm=auto&auto=compress%2Cformat" width="468" height="109" alt="" style="width: 468px; height: auto; cursor: pointer; margin: 0 auto;" />

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779441010585-jgaatb6mdgj-pasted-image-1779441007611.png?fm=auto&auto=compress%2Cformat" width="636" height="363" alt="" style="width: 636px; height: auto; cursor: pointer; margin: 0 auto;" />
  </Tab>

  <Tab title="Step 8">
    **Add the macro action and click Save.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779441033703-uqrqgp0aa6-pasted-image-1779441031342.png?fm=auto&auto=compress%2Cformat" width="655" height="141" alt="" style="width: 655px; height: auto; cursor: pointer; margin: 0 auto;" />

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779441060509-mtorj1u15je-pasted-image-1779441057879.png?fm=auto&auto=compress%2Cformat" width="655" height="267" alt="" />

    In the **Add action** window, enter the **Action name**, for example:

    Get Cheapest Shipping and Assign Service

    - Set **Action type** to:

      `Execute a macro`

    In **Action value**, select:

    Get Cheapest Shipping and Assign Service

    - Click **Save**

    <Callout kind="warning" collapsed="false">
      **Note:** If the macro is not enabled, it will not appear in the **Action** value list when setting up the rule.
    </Callout>
  </Tab>

  <Tab title="Step 9">
    **Review the saved rule setup.**

    <Image src="https://blob-cdn.documentation.ai/org-87fb0951-1e07-4f5d-a887-8a7327c7777d/doc-98941d2e-0032-424f-8414-3034ac5fa6ee/1779441073087-nktwp7kkfrb-pasted-image-1779441070614.png?fm=auto&auto=compress%2Cformat" width="1303" height="571" alt="" />

    - Verify the condition and action are connected correctly
    - Click **Save** in the bottom-right corner to save the rule
  </Tab>
</Tabs>

## Key Benefits

Manual shipping quote comparison can slow down order processing and lead to inconsistent shipping-service choices. Set Lowest Shipping Quote applies the same quote-selection process to every selected order.

> Reduce manual shipping checks, apply suitable shipping services consistently, and make unresolved orders easy to identify.

<Columns cols="2">
  <Card title="Reduce Manual Shipping Checks" icon="trending-down" horizontal="false" target="_self">
    Removes the need to open each selected order and compare shipping quotes manually.
  </Card>

  <Card title="Improve Shipping Selection" icon="truck" horizontal="false" target="_self">
    Applies defined service-selection rules and uses the lowest-cost suitable quote where appropriate.
  </Card>

  <Card title="Flag Orders for Review" icon="alert-circle" horizontal="false" target="_self">
    Assigns the Check Order identifier when no suitable quote is available.
  </Card>

  <Card title="Maintain Shipping Audit Data" icon="file-text" horizontal="false" target="_self">
    Stores previous and new shipping service names and costs as order extended properties.
  </Card>

  <Card title="Save Operational Time" icon="zap" horizontal="false" target="_self">
    Processes shipping-service updates across multiple selected orders in one macro execution.
  </Card>

  <Card title="Avoid Unsupported Updates" icon="check-circle" horizontal="false" target="_self">
    Updates the order shipping method only when a suitable quote has been identified.
  </Card>
</Columns>

## Usage of App

Set Lowest Shipping Quote is triggered through the **Linnworks Rule Engine** to retrieve shipping quotes and update selected orders automatically.

### Execution

<Card title="Trigger via Rule Engine" icon="play" horizontal="false" target="_self">
  Call the Get Cheapest Shipping and Assign Service macro through the Rule Engine with the required `OrderIds`. No additional custom parameter values are required.
</Card>

### Outcome

When the macro runs against an order, it:

<Steps>
  <Step title="Reads the selected order" title-type="p">
    Retrieves the Linnworks order details for each supplied order ID.
  </Step>

  <Step title="Retrieves shipping integrations" title-type="p">
    Reads the enabled Linnworks shipping integration accounts.
  </Step>

  <Step title="Requests available quotes" title-type="p">
    Requests live shipping quotes for the order through the available integrations.
  </Step>

  <Step title="Applies service-selection rules" title-type="p">
    Uses the preferred service logic where applicable or selects the lowest total-cost quote.
  </Step>

  <Step title="Updates the shipping method" title-type="p">
    Applies the selected shipping service to the Linnworks order.
  </Step>

  <Step title="Records old and new values" title-type="p">
    Stores the previous and selected service details and costs as order extended properties.
  </Step>

  <Step title="Flags unresolved orders" title-type="p">
    Assigns the Check Order identifier when no suitable quote is found.
  </Step>
</Steps>

## Input Parameters

Set Lowest Shipping Quote requires the following input:

| Parameter    | Required | Description                                                                                                   |
| ------------ | -------- | ------------------------------------------------------------------------------------------------------------- |
| **OrderIds** | Yes      | The Linnworks order IDs to process. Supplied automatically through the Rule Engine or selected order context. |

No additional user-entered parameter values are required in the Macro Configuration screen.

The following dependencies and behaviours are built into the macro workflow:

| Setting or Dependency             | Description                                                                     |
| --------------------------------- | ------------------------------------------------------------------------------- |
| **Enabled Shipping Integrations** | Used to request available shipping quotes for each selected order.              |
| **Preferred Service Logic**       | Applies defined sub-source or service-group selection behaviour where relevant. |
| **Lowest Total Cost**             | Used when no special service rule applies.                                      |
| **Check Order Identifier**        | Applied to orders where no suitable quote is available.                         |
| **Shipping Extended Properties**  | Store old and new shipping service names and costs.                             |

## Quote Selection Rules

The macro applies the following shipping quote rules:

| Quote or Order Condition                      | Macro Behaviour                                                               |
| --------------------------------------------- | ----------------------------------------------------------------------------- |
| Order matches defined preferred-service logic | Prioritises the matching service according to the macro rules.                |
| No preferred-service rule applies             | Selects the quote with the lowest total cost.                                 |
| Suitable quote is found                       | Updates the Linnworks shipping method.                                        |
| No suitable quote is found                    | Leaves the shipping method unchanged and adds the order to the review list.   |
| Review orders exist after processing          | Creates or uses the Check Order identifier and assigns it to those orders.    |
| Shipping service is updated                   | Saves the old and new service details and costs as order extended properties. |

<Callout kind="warning" collapsed="false">
  **Important:** The exact preferred sub-source and service-group rules are defined within the macro logic and are not configured through the Macro Configuration screen.
</Callout>

## Shipping Audit Information

When a shipping method is changed, the macro records audit information against the order.

The documentation describes the following stored values:

| Audit Value              | Description                                              |
| ------------------------ | -------------------------------------------------------- |
| **Old Shipping Service** | The shipping service assigned before the macro update.   |
| **New Shipping Service** | The shipping service selected from the available quotes. |
| **Old Shipping Cost**    | The previous shipping cost associated with the order.    |
| **New Shipping Cost**    | The cost returned for the selected shipping quote.       |

These values help teams review what changed after the macro selected and applied a new service.

## Example Scenario

Assume the required shipping integrations are enabled and the Rule Engine triggers the macro for four selected orders.

| Order       | Quote Result                                           | Macro Outcome                                                         |
| ----------- | ------------------------------------------------------ | --------------------------------------------------------------------- |
| **Order A** | Multiple valid quotes are returned                     | Selects the lowest total-cost quote and updates the shipping service. |
| **Order B** | Matches defined preferred-service logic                | Applies the suitable preferred service according to the macro rules.  |
| **Order C** | No suitable quote is returned                          | Leaves the service unchanged and assigns the Check Order identifier.  |
| **Order D** | Valid quotes are returned and no priority rule applies | Selects the quote with the lowest total cost.                         |

For updated orders, the previous and new shipping service details are stored as extended properties.

## Best Practices

> Keep shipping integrations active and review unresolved orders before label generation or dispatch.

<Columns cols="2">
  <Card title="Confirm shipping integrations" icon="settings" horizontal="false" target="_self">
    Ensure the required shipping integration accounts are enabled and able to return quotes.
  </Card>

  <Card title="Run before label generation" icon="package" horizontal="false" target="_self">
    Trigger the macro before printing shipping labels so the selected service is applied first.
  </Card>

  <Card title="Use targeted rule conditions" icon="sliders" horizontal="false" target="_self">
    Configure the Rule Engine to process only orders ready for shipping-service assignment.
  </Card>

  <Card title="Review Check Order identifiers" icon="alert-circle" horizontal="false" target="_self">
    Investigate orders marked for review and resolve quote or shipping-data issues manually.
  </Card>

  <Card title="Review shipping audit values" icon="file-text" horizontal="false" target="_self">
    Use the extended properties to confirm the previous and newly selected services and costs.
  </Card>

  <Card title="Monitor execution logs" icon="bar-chart-2" horizontal="false" target="_self">
    Review logs for shipping quote responses, selected services, unresolved orders, and API errors.
  </Card>
</Columns>

## FAQ

**How is Set Lowest Shipping Quote triggered?**

The macro is triggered through the Linnworks Rule Engine. Matching order IDs are supplied through the `OrderIds` parameter.

**Does the macro require additional configuration parameters?**

No. The Macro Configuration requires a configuration name and must be enabled, but no additional custom values are entered.

**Where do the shipping quotes come from?**

The macro retrieves quotes through the enabled Linnworks shipping integration accounts.

**Does the macro always choose the cheapest quote?**

It selects the lowest total-cost quote when no defined preferred-service or sub-source rule applies.

**What happens when a preferred-service rule applies?**

The macro prioritises the suitable matching service according to the rules implemented in the macro.

**Where are the preferred-service rules configured?**

The supplied documentation indicates that the rules are defined within the macro logic rather than entered through Macro Configuration.

**When is the shipping method updated?**

The shipping method is updated only when the macro identifies a suitable quote.

**What happens when no suitable quote is found?**

The order is left without a shipping-method update and is added to the manual review list.

**How are unresolved orders identified?**

They receive the **Check Order** identifier.

**What happens if the Check Order identifier does not exist?**

The macro creates it before assigning it to unresolved orders.

**Does the macro record the previous shipping service?**

Yes. The old shipping service is stored as an order extended property.

**Does the macro record the new shipping service?**

Yes. The newly selected service is also stored as an order extended property.

**Are shipping costs recorded?**

The documentation states that the old and new shipping costs are stored as extended properties.

**Can the macro process multiple orders in one execution?**

Yes. It loops through all order IDs supplied through `OrderIds`.

**What should be checked when no quotes are returned?**

Confirm that the shipping integrations are enabled, correctly configured, and capable of quoting the selected order.

**What should be checked when an order receives the wrong service?**

Review the preferred-service logic, the available quotes, and the execution logs for the selected order.

**Does the macro create shipping labels?**

The supplied documentation describes shipping quote retrieval and shipping-method assignment. It does not state that the macro creates or prints labels.

## Legal Information

- **Privacy Policy:** [https://rishvi.co.uk/privacy-policy/](https://rishvi.co.uk/privacy-policy/)
- **Terms and Conditions:** [https://rishvi.co.uk/terms-conditions/](https://rishvi.co.uk/terms-conditions/)

Please review these pages to understand how data is handled and the terms governing the use of this application.

## Summary

Set Lowest Shipping Quote automates shipping-service selection for selected Linnworks orders.

Once connected to the Rule Engine, the macro retrieves enabled shipping integrations, requests live quotes, applies preferred-service logic where relevant, and otherwise selects the quote with the lowest total cost.

Orders with a suitable quote are updated automatically, while orders without a valid option are assigned the Check Order identifier for manual review.

<Columns cols="2">
  <Card title="Automated quote retrieval" icon="calculator" horizontal="false" target="_self">
    Available shipping quotes are requested automatically through enabled Linnworks integrations.
  </Card>

  <Card title="Consistent service selection" icon="truck" horizontal="false" target="_self">
    Preferred-service rules are applied where relevant, with lowest-cost selection used as the default behaviour.
  </Card>

  <Card title="Traceable shipping updates" icon="file-text" horizontal="false" target="_self">
    Previous and new shipping service details and costs are stored as order extended properties.
  </Card>

  <Card title="Manual review identification" icon="alert-circle" horizontal="false" target="_self">
    Orders without a suitable quote receive the Check Order identifier.
  </Card>
</Columns>

For orders that do not receive the expected shipping service, review the Rule Engine and macro logs, confirm that the required shipping integrations are enabled, and check whether the order was assigned the Check Order identifier.
