Skip to main content
Performance routing ranks your locations into tiers based on a performance metric and sends orders to your best performers first. The first available metric is average time to ship — how quickly each location fulfills its orders — so you can steer orders toward the locations that ship fastest.
This rule is called the Analytics metric location rule in Shopify’s Order Routing settings. It’s a routing rule — a soft signal that ranks locations — not a constraint, so it never blocks a location from fulfilling.

How performance routing works

Charlie measures each location’s average time to ship over a rolling 7-day window and stores it as a per-location snapshot. The rule reads that snapshot and sorts your locations into the performance tiers you define:
Matches an earlier tier → Higher rank
You build an ordered list of tiers. Each tier is a condition like “time to ship is less than 24 hours.” A location takes the rank of the first tier its metric satisfies — so the order of your tiers is how you express best-to-worst.
Average time to ship is measured over a rolling 7-day window and excludes instant fulfillments — such as in-store POS sales that ship immediately — so the metric reflects genuine fulfillment speed.

Setup overview

Performance routing takes two steps:
  1. Add the Analytics metric location rule in Shopify Order Routing
  2. Configure the performance tiers on the rule

Step 1: Add the routing rule in Shopify

1

Open Order routing

Go to Charlie → Settings → Order routing or Shopify → Settings → Shipping and delivery → Order routing.
2

Add the Analytics metric location rule

Find Charlie’s Analytics metric location rule in the available rules list and add it to your routing strategy.

Step 2: Configure performance tiers

Open the rule to configure it.
1

Enable the rule

In the Status section, switch the rule to Enabled. While it’s disabled, the rule has no effect on routing and you can edit it freely.
2

Add a tier

Click Add tier. Each tier is a single condition made of three parts:
PartDescription
MetricThe performance metric to rank by. Currently Time to ship.
OperatorHow to compare — Greater than, Less than, Equal to, Greater than or equal, Less than or equal, or Not equal to.
Max time to ship (hours)The threshold, in whole hours (minimum 1).
3

Order your tiers

Tiers are evaluated top to bottom and the first match wins, so put your most-preferred tier first. Use the menu on each row to Move up, Move down, or Delete. You can add up to 10 tiers.
4

Save

Save the rule. Your tiers are kept in order and the rule starts ranking locations on the next order.
Charlie shows your network’s current spread — for example, “Your locations currently range from 6h to 72h average time to ship” — right above the tiers, so you can choose thresholds that actually split your locations into meaningful groups.

How ranking works

First match wins

Tiers are checked in the order you arrange them. A location is placed in the first tier whose condition it satisfies, and tiers are not auto-sorted — the order you set is the priority order.
LocationAvg time to shipFirst matching tierRank
Warehouse A8hTier 1 (less than 24h)1 (top)
Store Paris30hTier 2 (less than 48h)2
Store Lyon60hTier 3 (less than 72h)3
Store Nice120hnonelast

Locations that match no tier

A location whose metric satisfies none of your tiers is ranked last. A location with no measured time to ship yet — for example, one that hasn’t shipped anything recently — is also ranked last until it has data.

When the rule stays out of the way

If no location matches any tier, the rule emits no ranking at all, so it won’t flatten the order produced by your other routing rules. The same is true when the rule is disabled or has no tiers configured.

Combining with other rules

With Inventory Rules

  1. Inventory Rules — Rank by available stock
  2. Performance routing — Among in-stock locations, prefer the fastest shippers
Result: Orders go to locations that both have the inventory and ship quickly.

With Ranked Location Groups

  1. Ranked Location Groups — Warehouses (Group 1) → Stores (Group 2)
  2. Performance routing — Within each group, prefer the faster locations

With Backlog Routing

Performance and backlog answer different questions:
SignalQuestion
PerformanceHow fast does this location ship, historically?
BacklogHow many orders is it sitting on right now?
Use both to prefer locations that are both fast and not currently overwhelmed.

Where the metric comes from

Charlie computes each location’s average time to ship from your fulfillment analytics over a rolling 7-day window and stores it on the location as a private app metafield:
MetafieldTypeDescription
$app:location.time_to_ship_avg_minutesnumber_integer7-day average time to ship, in minutes
This metafield is app-private — it powers the routing rule and the in-app range hint, but it isn’t exposed to your storefront or other apps.

How fresh the data is

The snapshot updates as your locations ship orders. Each fulfillment shifts the rolling average, so Charlie recomputes shortly after — new ship-time data is typically reflected within a couple of minutes. To avoid excess work on busy stores, recomputes are debounced to at most once every 15 minutes per shop. If a recompute can’t run, the last good snapshot is kept, so the rule never falls back to ranking on missing data.

Best practices

Build tiers fastest-first

Put your tightest threshold (for example, under 24h) at the top so your quickest locations earn the top rank.

Use the range hint

Pick thresholds from the range Charlie shows above the tiers so each tier actually separates your locations.

Pair with inventory

Combine with Inventory Rules so speed only decides among locations that can actually fulfill.

Let new locations warm up

A location needs recent shipments before it has a time-to-ship value — until then it ranks last under this rule.

Troubleshooting

Check:
  1. Is the Analytics metric location rule enabled in Shopify Order Routing?
  2. Do your tiers actually split your locations? If every location matches the first tier, they all tie. Use the range hint to set thresholds that separate them.
  3. Are there higher-priority rules above this one that override its ranking?
  4. Have the locations shipped recently enough to have a time-to-ship value?
Check:
  1. Does its average time to ship match any tier? If it’s slower than every threshold, it falls to last by design.
  2. Has it shipped anything in the last 7 days? With no recent data it has no metric and ranks last until it does.
Thresholds are entered in whole hours (minimum 1) — decimals are rejected. Charlie stores them precisely under the hood, so a 24-hour threshold compares against the exact measured time to ship.

Backlog Routing

Prefer locations with shorter open queues

Order routing overview

All available routing rules

Inventory Rules

Prioritize locations with more stock

Capacity Rules

Daily order limit per location
Last modified on June 5, 2026