Skip to main content
Backlog routing ranks locations by how many open fulfillment orders they have, sending new orders toward locations with shorter queues. Optionally, you can also block a location once its backlog grows past a maximum threshold.
Backlog routing has two modes:
  • Prefer other locations — soft signal that ranks locations with shorter backlogs higher (a routing rule)
  • Block orders — hard cap that excludes a location entirely once its backlog crosses the threshold (a fulfillment constraint)
Both are configured from the same place per location.

How backlog routing works

Charlie tracks the count of unfulfilled fulfillment orders assigned to each location and exposes it as a public metafield. The Backlog location rule ranks locations in two tiers:
Locations that haven’t opted in (via the Backlog limit toggle on their Shipping tab) always rank above every location that has a backlog limit configured — they’re treated as having no backlog pressure at all, not left neutral for other rules to decide.
By default the backlog count includes every pending fulfillment order assigned to the location — both Open (accepted, nothing fulfilled yet) and In progress (partially fulfilled). Closed and cancelled orders never count. You can narrow this to only In progress orders — see What counts toward backlog below. The count refreshes as orders are created, fulfilled, moved, cancelled, un-fulfilled, held, released, or rescheduled.

What counts toward backlog

By default a location’s backlog counts every pending fulfillment order — both Open and In progress. You can change what counts from Charlie → Settings → Backlog.
This is a shop-wide setting that applies to every location’s backlog count, in both Prefer and Block modes. It doesn’t require any change to your order routing rules — the same backlog_count metafield is recomputed under the new definition.

Setup overview

Backlog routing requires two steps:
  1. Configure backlog limits per location in Charlie
  2. Add the Backlog location rule in Shopify Order Routing

Step 1: Configure backlog per location

1

Open a location

Go to Charlie → Locations and select the location you want to configure.
2

Navigate to Shipping settings

Click the Shipping tab.
3

Enable Backlog limit

In the Shipping constraints section, toggle on Backlog limit.
4

Set the threshold and mode

Configure the backlog settings:
5

Repeat per location

Configure backlog settings for each location you want to include.

Backlog modes

Use Prefer other locations for load balancing across multiple locations. Use Block orders when a location genuinely cannot handle more pending orders — for example, a small store with a strict 50-order pipeline.

Step 2: Add the routing rule in Shopify

The Backlog location rule must be installed in Shopify’s Order Routing for the soft signal to take effect.
1

Open Order routing

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

Add the Backlog location rule

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

Enable the rule

Toggle the rule to Enabled. The rule will use the backlog thresholds and modes you configured per location.
Charlie shows a reminder banner on the location’s Shipping tab when Prefer other locations mode is enabled but the Backlog location rule isn’t installed yet. Click Manage order routing in the banner to jump to the settings.

Block mode and the routing rule

If you only ever use Block orders mode, you don’t strictly need to install the Backlog location rule — the hard block is enforced as a fulfillment constraint independently. The routing rule only matters for the soft “prefer” signal.

How ranking works

No-limit locations rank first

Any location without a backlog limit enabled ranks above every location that has one — regardless of how many pending orders it actually has. This is the top tier; a location can only rank below it by having a backlog limit configured.

Ranked by free capacity, not raw count

Among locations with a backlog limit set to Prefer other locations, ranking is based on the percentage of that location’s own threshold still free — not the raw number of pending orders. A location with a small threshold that’s nearly full ranks below a busier location that still has plenty of room relative to its own limit. Notice Store Nice ranks first with the most pending orders, because it has no backlog limit set. And Store Paris ranks last despite having the fewest pending orders, because it’s the closest to its own (small) threshold.

Tie-breaking

Free capacity is compared in 5% bands rather than exact percentages, so locations that land in the same band share a rank. Shopify then uses its default logic to choose between tied locations.

Example scenarios

Balance fulfillment across stores

Problem: Your Paris store has a much longer pipeline than the others and shipments are slipping. Setup:
  • All stores: Backlog limit enabled, threshold 100, mode = Prefer other locations
Result: Orders prefer the store with the shortest current backlog. Paris naturally catches up as the others take more orders.

Hard block a small store at peak

Problem: A small store can only physically process 30 open pickup orders at once. Beyond that, orders pile up and customers complain. Setup:
  • Small store: Backlog limit enabled, threshold 30, mode = Block orders
Result: Once the store has 30 open fulfillment orders, it’s excluded from new assignments until enough orders are fulfilled or moved away.

Combine prefer and block across the network

Problem: Across 10 stores, you want to load-balance most of the time, but a couple of stores are extra-constrained. Setup:
  • 8 stores: Backlog limit enabled, threshold 200, mode = Prefer other locations
  • 2 small stores: Backlog limit enabled, threshold 50, mode = Block orders
Result: The big network is balanced softly, and the two small stores are protected from spilling over.

Combining with other rules

With Inventory Rules

Prefer locations with both stock AND short backlogs:
  1. Inventory Rules — Rank by available stock
  2. Backlog routing — Among in-stock locations, prefer those with shorter backlogs
Result: Orders go to locations that have both the inventory and the capacity to fulfill promptly.

With Capacity Rules

Backlog and daily order limit serve different windows: Use both to combine “what’s been assigned today” with “what’s still in the pipeline.”

With Ranked Location Groups

Use backlog as a secondary factor within groups:
  1. Ranked Location Groups — Warehouses (Group 1) → Stores (Group 2)
  2. Backlog routing — Within each group, prefer locations with shorter backlogs

Public metafields

Backlog data is exposed on each location as public metafields so other apps and your storefront can read it: The same data is mirrored in the public charlie_location namespace for storefront access.

Best practices

Start with Prefer mode

Begin with Prefer other locations to softly balance load. Move to Block only for locations that need a hard cap.

Tune thresholds gradually

Start with generous thresholds and tighten over time as you learn each location’s real capacity.

Combine with capacity rules

Pair backlog (open pipeline) with daily order limit (today’s intake) for fuller picture of location load.

Monitor metafield values

The backlog_count metafield exposes live counts — use it in dashboards or external monitoring.

Troubleshooting

Check:
  1. Is the Backlog location rule enabled in Shopify Order Routing?
  2. Is Backlog limit enabled and set to Prefer other locations at the locations you want to balance?
  3. Are the locations’ backlog_count metafields actually different? Check via the Shopify admin metafields panel.
  4. Are there higher-priority rules above the Backlog rule that override its ranking?
Check:
  1. Is Backlog limit set to Block orders?
  2. Has the location’s open backlog crossed the threshold?
  3. The block lifts automatically once the backlog drops below the threshold — no manual action needed.
Check:
  1. The count includes the statuses chosen in Settings → Backlog — by default Open and In progress. If you switched to Only orders in progress, accepted-but-not-started orders won’t be counted.
  2. The count refreshes from webhook events (order created, fulfilled, cancelled, un-fulfilled, moved, split, merged, held, released, or rescheduled) and may take a few seconds to propagate.
  3. If the count seems stuck, contact support to trigger a manual recompute.

Capacity Rules

Daily order limit per location

Order routing overview

All available routing rules

Inventory Rules

Prioritize locations with more stock

Ranked Location Groups

Primary location preference groups
Last modified on July 13, 2026