No bulk query alternative for deprecated Order.physicalLocation

Order.physicalLocation is going to deprecate, with the recommended replacement being fulfillmentOrders.assignedLocation.

However, fulfillmentOrders cannot be used in bulk operations due to the 5-connection limit.

Example bulk query that works today (using deprecated physicalLocation):

mutation BulkRunQuery($query: String!) {
  bulkOperationRunQuery(query: $query) {
    bulkOperation {
      id
      status
    }
    userErrors {
      field
      message
    }
  }
}

# $query value:
{
  orders(query: "created_at:>=2026-01-01 AND created_at:<=2026-03-09") {
    edges {
      node {
        id
        name
        processedAt
        physicalLocation {
          id
        }
        fulfillments {
          id
          status
          location {
            id
          }
          fulfillmentLineItems(first: 100) {
            edges {
              node {
                id
                quantity
                lineItem {
                  id
                }
              }
            }
          }
        }
        lineItems(first: 100) {
          edges {
            node {
              id
              title
              quantity
              sku
            }
          }
        }
        shippingLines(first: 100) {
          edges {
            node {
              id
              title
            }
          }
        }
        refunds(first: 50) {
          edges {
            node {
              id
              createdAt
              refundLineItems(first: 100) {
                edges {
                  node {
                    lineItem {
                      id
                    }
                    quantity
                  }
                }
              }
            }
          }
        }
        discountApplications(first: 100) {
          edges {
            node {
              allocationMethod
              targetSelection
              targetType
              index
            }
          }
        }
      }
    }
  }
}

Attempting to replace physicalLocation with fulfillmentOrders:

# Replacing physicalLocation with:
fulfillmentOrders(first: 10) {
  edges {
    node {
      status
      assignedLocation {
        location {
          id
        }
      }
    }
  }
}

Error response:

{
  "data": {
    "bulkOperationRunQuery": {
      "bulkOperation": null,
      "userErrors": [
        {
          "field": ["query"],
          "message": "Bulk queries cannot contain more than 5 connections."
        }
      ]
    }
  }
}

Use case

We use physicalLocation in bulk queries to resolve the supplier/fulfillment location for unfulfilled and POS orders in our tax reporting app.

For fulfilled orders, we use fulfillments.location.id, but for unfulfilled or POS orders, physicalLocation is the only way to determine the correct location within a bulk query.

Could you please suggest an alternative approach for resolving the order’s physical location within bulk queries, given that fulfillmentOrders cannot be added due to the 5-connection limit?

Hey @Aswin_Ashok! You’re right, physicalLocation was a scalar that cost you nothing, so replacing it with the fulfillmentOrders connection is a net loss of one slot against the 5-connection bulk query limit.

If you only need the location for POS orders, retailLocatio is a scalar field that returns similar data as physicalLocation with no connection cost. But, it returns null for online orders.

For online/unfulfilled orders, the workaround is splitting into two bulk queries: your existing one (swap physicalLocation for retailLocation) and a second lighter query for fulfillmentOrders.assignedLocation, joined by order ID. As of 2026-01 you can run up to 5 concurrent bulk queries per shop, so both can run in parallel.

I’ve submitted this as a feature request internally on your behalf. The more this gap is surfaced by partners, the more likely it is to be prioritized by the product team so thanks for raising this here!