A transfer report in Shopify shows inventory moving between your locations — each transfer's origin, destination, status, and the quantities ordered against what actually shipped and arrived. Native Shopify gives you the raw transfer records and a ShopifyQL dataset to query them, but it stops at unit counts: it never tells you the dollars tied up in those moving units or the margin impact of stock stuck in transit. This guide covers exactly what the report tracks, how to read it, and the profit question it leaves open.

If you run an operating store, you almost certainly move stock around. Maybe you bulk-print your three bestselling designs and hold them in a 3PL, then ship units to a pop-up booth. Maybe you pull samples back from a photographer. Every one of those moves is a transfer, and Shopify tracks it.

The problem is that most sellers never actually look at the transfer report until something goes missing. Then they're scrolling through a list of half-finished transfers trying to reconstruct where 40 units went. Let's fix that.

What a transfer report in Shopify actually shows

A transfer is a record of inventory moving from one location to another — either between your own locations or to and from an external location like a supplier, per Shopify's inventory transfers documentation. The report is the aggregate view of all those records.

At minimum, each row answers four questions:

  • Where is the stock leaving from (origin)?
  • Where is it going (destination)?
  • How many units were ordered versus how many have shipped and arrived?
  • What status is the transfer in right now?

That last column is the one operators live in. It's the difference between "stock I can count on" and "stock I'm hoping shows up."

Every field the native dataset tracks

Shopify exposes transfers as a queryable dataset called inventory_transfers in ShopifyQL. If you want to build a custom report instead of eyeballing the transfers list, this is the schema you're working with. The full field list below comes straight from Shopify's ShopifyQL inventory_transfers reference.

Field type Fields you'll actually use
Measures ordered_quantity, transfer_count, transfer_line_item_count, unique_items_transferred
Transfer detail transfer_name, transfer_status, transfer_created_at, transfer_reference_name, transfer_tags, transfer_note
Origin inventory_origin_name, inventory_origin_city, inventory_origin_country
Destination destination_name, destination_city, destination_country
Product product_variant_sku, product_variant_title, inventory_item_cost
People staff_member_name

Two things to notice. First, there's an inventory_item_cost field — so the cost data exists at the line level, even if the pre-built report doesn't total it for you. Second, staff_member_name is there, which means you can trace who created a transfer when one goes sideways.

Transfer statuses and what each one means for you

Shopify's documentation describes moving transfers through stages — you create one, then "move them to in transit, mark them as ready to ship, or mark them as transferred," according to Shopify's transfers manual. In practice you'll see transfers sitting in a handful of states: draft, ready, in transit, and received or completed.

Here's the operator read on each:

  • Draft — intent, not commitment. Nothing has moved. If a draft is weeks old, it's a to-do someone forgot.
  • In transit / shipped — units have left the origin but haven't been counted at the destination. This is your at-risk bucket.
  • Received / completed — the destination has counted the units in. Only now is the stock trustworthy for fulfillment math.

The gap between "ordered" and "received" is where shrinkage, miscounts, and carrier damage hide. A transfer report that you read weekly is how you catch that gap while it's still small.

Reading a transfer report like an operator — a worked example

Say you run a store doing 340 orders a month at a $31 average order value. You keep your top three designs bulk-printed at a fulfillment partner and periodically ship a batch to a second location for a weekend market.

You open a transfer: 200 units ordered, origin is your 3PL, destination is the market location, status is "in transit." Two weeks later the market wraps and you reconcile. The received count reads 188.

Twelve units are gone. On the report, that's just a number mismatch. Translate it into money and it gets your attention. If each unit carries a product cost of $11, that's 12 × $11 = $132 in COGS walking out the door. But the real hit is the lost sale: at a $31 price with that $11 cost, each missing unit is $31 − $11 = $20 of gross profit you can't make. Twelve units × $20 = $240 of profit gone — nearly two percent of your monthly contribution before you've paid a dollar of ad spend.

Now multiply that by a shrinkage pattern you never caught because the report only showed units. That's the whole argument for reading transfers in dollars, not counts.

Where Shopify's native transfer reporting falls short

The native transfers list and the inventory_transfers dataset are genuinely useful. But they have three blind spots that every operating seller runs into.

It counts units, not dollars. The measures are all quantity-based — ordered_quantity, transfer_count, unique_items_transferred. The cost field exists per line, but nothing rolls the in-transit inventory up into a dollar figure. You can't glance at the report and see "$4,200 of stock is currently in transit."

It doesn't flag stalled transfers. A draft or in-transit transfer that's been sitting for a month looks identical to one created yesterday unless you sort by date yourself. Apps like Report Pundit's inventory transfers report exist largely because sellers want stalled transfers surfaced automatically, with scheduled exports to Google Sheets or Drive.

It's disconnected from your profit picture. The transfer lives in inventory land. Your true per-order profit lives somewhere else entirely — tangled up with ad spend, payment fees, and fulfillment costs. Nothing in Shopify stitches the two together, which is the same structural gap we cover in our breakdown of why Shopify's built-in reporting leaves money on the table.

The profit question transfer reports never answer

Here's the uncomfortable truth. A transfer report tells you that stock moved. It never tells you whether moving it was worth it.

Think about that 200-unit batch sent to a weekend market. The transfer cost you freight. The market cost you a booth fee and a day of labor. The units that sold carried the same COGS and payment fees as every other order. Did that channel actually clear its costs, or did it just feel productive?

That's a contribution-margin question, and it lives one layer up from transfers — in the kind of ecommerce performance analytics that connect inventory movement to the money. Inventory reporting and profit reporting are two halves of the same job, which is exactly the point of treating your store data as ecommerce business intelligence rather than a pile of disconnected exports.

How to build a transfer report you'll actually use

You have three honest options, in increasing order of power.

Shopify's built-in custom reports. On plans that include them, you can filter the transfers list and the inventory_transfers dataset by location, status, and date. Good enough to catch stalled transfers if you check it on a schedule.

A reporting app. Tools like Report Pundit pre-build the transfer report, add scheduled exports, and surface stalled lanes. This is where a lot of sellers land, and it's reasonable — though it's one more ecommerce reporting tool in a stack that's probably already crowded with single-purpose dashboards.

Pull it into your profit layer. The highest-leverage move is to stop treating transfers as a standalone report and fold inventory movement into the same view as your margins — the same way a credit card reports approach in Shopify only matters once it connects to real per-order profit.

This last option is where an AI employee changes the shape of the work. PodVector AI runs Victor, an AI employee that connects to your Shopify store, your Meta and Google Ads, your Printify, Printful, or Gelato account, and Klaviyo. Victor computes true per-order profit across all of it and delivers the reports you ask for straight to your Google Drive. Every write action Victor takes is approval-gated — he drafts, you approve. So instead of opening a transfer report and a profit spreadsheet separately, you ask once and get the view that ties the two together.

Victor is not a dashboard you have to go check. He's the employee who does the checking and brings you the answer.

FAQs

What is a transfer report in Shopify?

It's a view of inventory moving between your locations — or to and from suppliers. Each transfer record shows the origin, destination, current status, and the quantity ordered against what shipped and arrived. Shopify exposes these as the native transfers list and as the inventory_transfers dataset you can query with ShopifyQL.

Does Shopify track the cost of inventory in transit?

The cost data exists. The inventory_transfers schema includes an inventory_item_cost field at the line level, per Shopify's reference docs. But the pre-built report doesn't total it into a single in-transit dollar figure — you'd have to build that yourself in a custom report or a reporting tool.

How do I find stalled or stuck transfers?

Sort the transfers list by creation date and look for drafts or in-transit transfers that are weeks old. Native Shopify won't flag them for you automatically, which is one reason sellers reach for apps that surface stalled transfers and schedule exports. Reading the report on a weekly cadence is the low-tech version of the same discipline.

What's the difference between a transfer report and an inventory report?

A transfer report is about movement — stock in motion between locations. A standard inventory report is about position — how much you have, where, right now. You need both: movement explains the changes, position tells you what you can actually sell today.

Can I schedule transfer reports to export automatically?

Not from Shopify's native reporting alone. Reporting apps add scheduled exports to formats like CSV and to Google Sheets or Drive on a daily, weekly, or monthly cadence, per Report Pundit's transfers report page. An AI employee like Victor can also deliver the reports you request directly to your Google Drive.

Do print-on-demand sellers even need transfer reports?

If you hold zero inventory and dropship everything, rarely. But most operating POD stores aren't purely dropship — they bulk-print bestsellers, carry event or pop-up stock, and move samples around. The moment stock lives in more than one place, transfer reporting is how you keep your unit counts and your profit math honest.