guide

Shopify Inventory Audit: What You Can See, and What You Still Miss

Understand Shopify’s adjustment history, reports, and activity logs. Learn when to perform a deeper audit to investigate stock discrepancies.

Updated

We’ll use the example scenario we already used in the guide to why Shopify inventory fails to update and how to investigate it:

A customer buys the last black hoodie in size medium, and Shopify store accepts the order. The pick ticket goes to the warehouse team, but when they get to work on it, the shelf is empty. Why?

Was the count wrong before checkout? Did a staff member adjust it? Did the returns app put one back? Did the 3PL overwrite the quantity overnight? Did a transfer land in the wrong location?

Shopify has inventory history, yes. The trick is knowing which history to look at, what it can prove, and where that history is incomplete or misleading and you need additional data.

Shopify inventory adjustment history shows recorded inventory changes for tracked products and variants, including when the change happened, who or what created it, and how it affected quantities. The product or variant view shows the last 180 days, while inventory adjustment reports and custom reports can help analyze adjustments across SKUs, locations, staff members, apps, and reasons. The gap is that a current stock number is not the same thing as a full audit trail across orders, apps, transfers, locations, and time. (Shopify Help: Viewing inventory adjustment history)

In a rush? Here’s the TL;DR:

  • Shopify has several inventory-history features: product adjustment history, inventory adjustment reports, custom explorations, and admin activity logs.
  • The product-level inventory adjustment history is useful, but it only shows the last 180 days and is viewed per product or variant.
  • Inventory reports are better for cross-SKU, cross-location, staff, app, and reason-code analysis.
  • Activity logs can help with admin-level investigation, but they are view-only, limited to 250 results, and cannot be exported.
  • The hard problem is not “does Shopify log anything?” It is “can you reconstruct the event chain that made this SKU stock level wrong?”

How does Shopify inventory adjustment history work?

Shopify inventory adjustment history is available for tracked products. If a product has variants, Shopify lets you view each variant’s history. One limitation is that you can’t view combined variant histories together in the product-level view. Official Shopify documentation says the history includes changes made automatically and manually, showing who made the change, when it happened, and how quantities changed. (Shopify Help: Viewing inventory adjustment history)

However, that history is not just one number changing over time. It’s split into inventory states. Shopify can show changes to Available, Committed, Unavailable, On hand, and Incoming quantities:

  • “On hand” includes committed, unavailable, and available inventory;
  • “Available” is sellable inventory;
  • “Committed” is tied to orders that have not been fulfilled;
  • “Unavailable” can include reserved, damaged, quality-control, safety-stock, or app-held stock;
  • “Incoming” is stock on its way from transfers or apps. (Shopify Help: Viewing inventory adjustment history)

Those distinction matter for precise inventory audit. A merchant may say “Shopify says we have 12 units,” while the warehouse says “we can only sell 4 because that’s all we physically have on the shelf.” Both can be half-right if 8 units are committed, reserved, damaged, or sitting in an incoming state that no customer can actually buy.

What does “Created by” tell you?

In the adjustment history table, Shopify also includes a Created by column. Depending on the event, that may point to a staff user, an app, or a system-driven process. The Activity column can show manual adjustments, automatic adjustments from orders, and automatic adjustments from apps or other processes. Shopify’s own docs also note that third-party apps can automatically adjust inventory. (Shopify Help: Viewing inventory adjustment history)

This functionality is useful and necessary for a proper inventory audit, but it’s not sufficient. If the audit trail says a staff member used Set to, you know a manual count or correction happened. But if it says an app changed stock, you know the change came through that app path. However, you may still need the app’s own logs, the related order, a transfer, or a warehouse system to understand why that app-driven change happened.

Why does “180 days” matter?

Shopify’s product or variant adjustment history shows only the last 180 days. For older or broader analysis, Shopify points store owners to inventory adjustment reports, where you can filter and analyze changes across dimensions such as SKU, location, staff member, app, and adjustment reason. (Shopify Help: Viewing inventory adjustment history)

That is an improvement over the old functionality which only retained 90 days worth of inventory history, it’s still nothing more than a list of adjustments. On its own, it doesn’t provide a defensible trail that could explain why the stock level became corrupted:

Why did this SKU drift twice in two weeks? Why did the warehouse count look right on Friday but wrong on Monday? Why did a manual correction stick for three hours and then vanish?

What’s the difference between adjustment history, inventory reports, and activity logs?

Shopify gives you several inventory audit tools that look similar but answer different questions. Let’s review their purpose and function one-by-one.

Shopify audit toolQuestion it answersWhat to use it for
Product or variant adjustment history”What happened to this product or variant recently?”Detailed last 180 days history; variant histories are viewed separately.
Inventory adjustment changes report”Which inventory quantities changed across SKUs, locations, staff, apps, transfers, and fulfillments?”Better for pattern-finding than a single SKU screen.
Inventory adjustments by count report”How many adjustments happened by staff, location, app, or reason?”Good for investigating the types of stock adjustments that happen in your store. This report counts adjustment events, not unit volume.
Custom inventory adjustment reports”Can I isolate this SKU, transfer, location, reason, or reference document?”Allows for precise exploration, but requires more setup.
Store activity log”What recent admin actions happened, and who or what appears to have triggered them?”Best for quick exploration. View-only, not exportable, limited to 250 results.

Shopify’s built-in inventory adjustment changes report includes adjustments from manual changes, inventory apps, transfers, and order fulfillments. Shopify’s docs show, for example, that an order for three units can reduce Available by three and increase Committed by three. That is exactly the kind of state movement that gets lost when someone only looks at the current “available” number. (Shopify Help: Inventory reports)

Custom reports can go deeper. The official Shopify documentation offers examples for finding all inventory changes created by transfers, for viewing all inventory movements for a single SKU across one or multiple locations, and for using a reference document when a third-party app creates an adjustment tied to an external purchase order or record. (Shopify Help: Custom inventory adjustment reports)

Lastly, the activity log is a tool unlike others. The store activity log shows recent actions by the store owner and authorized users, and each event includes a person, app, or channel. But the log is view-only, cannot be exported, cannot be drilled-down for more detail, and shows a maximum of 250 results. It may also display “Shopify” as the actor for background jobs, app or channel syncs, sales channel operations, or other system processes. (Shopify Help: Store activity log)

So the simple rule is this:

Use adjustment history for a recent SKU-level change. Use inventory reports for pattern analysis. Use activity logs when you need admin-level context. Then correlate the timestamps manually.

Why does a Shopify inventory audit trail still feel incomplete?

You can think of inventory record as a set of warehouse clipboards.

One clipboard is taped to the product shelf. One lives at the receiving door. One is always with the returns team. One is in the 3PL portal. One is inside a Shopify app. Each clipboard may be accurate in its own little world. But if you need to explain how an SKU moved through all of them, inconsistencies start to crop up.

Shopify’s native tools are those clipboards. Adjustment history, reports, and activity logs can each tell part of the story. But the merchant problem is usually not “show me a clipboard.” It is “tell me where the count split.”

Now, let’s drop the clipboard analogy and review the mechanism behind Shopify’s adjustment history and reports.

A Shopify inventory count can change because:

  • an order committed stock,
  • a fulfillment reduced committed inventory,
  • a refund restocked an item,
  • a transfer moved inventory between states or locations,
  • a staff member used Set to or Adjust by,
  • a third-party app wrote a quantity, or
  • an app reserved inventory into an unavailable state.

The official docs explicitly describe manual adjustments, automatic order and app adjustments, transfer and reservation events, and unavailable inventory created by apps or draft orders. (Shopify Help: Viewing inventory adjustment history)

Im Shopify’s world, stock movement is a stock movement. However, when it comes to inventory management and e-commerce ops, those stock level changes are operationally distinct.

While Shopify seller complaints posted on public forums tend to use plain language (“inventory is always off,” “I can’t find a pattern,” “the website showed this as available here,” or “stock levels drift”), they only describe an operational symptom: the visible number is not defensible enough to explain a cancelled order, a wrong pickup promise, or an app overwrite.

A sale usually has a customer and an order number. A transfer usually has a source, destination, and receipt moment. A staff count has a human context: “we counted the shelf after lunch.” An app overwrite may only say that an app wrote stock, while the reason lives in another system. While the current number can look “clean”, the story behind it is scattered across systems and teams.

This is why the real cause behind incorrect stock level can originate in any of the systems or teams that work for your business.

A realistic teardown: the missing seven units

Let’s walk through one SKU.

SKU: HOODIE-BLK-M
Product: Black hoodie, medium
Locations: Toronto Warehouse, Queen Street Store
Problem: Shopify shows 7 available at Toronto Warehouse. The warehouse shelf has 0 units, and an order can’t be fulfilled.

TimeEventShopify-visible effectWhat the operator sees
08:00Starting stateToronto Warehouse: 12 available, 12 on handLooks healthy.
08:14Order #10422 for 2 unitsAvailable -2, Committed +2Normal sale.
09:30Staff member performs a quick count, makes a mistake, and uses Set to 14Available jumps upLooks like a manual correction.
10:05Transfer receipt adds stock that was physically still on a receiving cartIncoming moves toward available/on-hand stateSystem looks better than the shelf.
11:203PL or inventory app reserves 10 units for QC or safety stockAvailable decreases, Unavailable increasesSellable stock drops, but on-hand may still look sufficient.
12:10Refund restocks 1 unitAvailable +1Reasonable on its own.
13:45External app sync writes a quantity from its own snapshotAvailable changes againThe number moves without a warehouse touch.
14:30Picker goes to shelf for another order #10438Shelf has 0Escalation from the team because the order can’t be fulfilled.

In Shopify, pieces of this story may be visible. The product adjustment history can show recent changes and who or what created them. The inventory adjustment changes report can help review adjustment events across manual changes, apps, transfers, and order fulfillments. A custom report can isolate this SKU across locations and states. The activity log may help confirm recent admin or app activity, within its limits. (Shopify Help: Viewing inventory adjustment history)

But to conduct a thorough investigation we need discipline to separate known facts from hypotheses and assumptions.

Known facts

You can know that stock changed, when it changed, which inventory state moved, and whether Shopify recorded a staff, app, order, transfer, or system-related activity. For a recent tracked product, the product or variant adjustment history is the fastest first stop. (Shopify Help: Viewing inventory adjustment history)

Likely explanations

If a manual Set to adjustment increased stock shortly before a discrepancy, the count may have included units that were not actually sellable: receiving-cart stock, damaged stock, picked-but-not-fulfilled stock, or inventory in the wrong location. If an app wrote stock later, the app may have overwritten Shopify with a stale or differently scoped count.

Unknown issues

You may not know the exact human intent behind a staff adjustment. You may not know why an app wrote the number unless the app provides its own logs or Shopify captured trustworthy attribution. Therefore, you shouldn’t treat “Created by app” as a full root cause.

How to investigate Shopify inventory adjustment history

When you’re looking to audit the Shopify inventory adjustment history, it’s best to start narrow.

1. Freeze the SKU and location

Pick the exact SKU, variant, and location. Do not start with “inventory is wrong.” Start with:

SKU: HOODIE-BLK-M
Location: Toronto Warehouse
Shopify state: Shopify available: 7
Reality: Shelf count: 0
First affected order: #10438

That keeps the investigation focused and reduces the likelihood of mistakes.

2. Capture the current inventory state

Write down Available, Committed, Unavailable, On hand, and Incoming. These states matter because “we have stock” and “we can sell stock” are not the same in the Shopify world. Shopify defines Available as sellable stock, Committed as inventory tied to unfulfilled orders, Unavailable as stock reserved or held for reasons such as draft orders, apps, damage, quality control, or safety stock, and Incoming as inventory on the way from transfers or apps. (Shopify Help: Inventory states)

3. Open the product or variant adjustment history

Use Shopify’s adjustment history to identify the recent event chain. Look for manual Set to jumps, Adjust by movements, order-related changes, transfer activities, reservation changes, and app-created adjustments. Luckily, Shopify’s adjustment history allows to look up activities by type: manual adjustments, automatic order changes, app adjustments, transfers, and reservations. (Shopify Help: Viewing inventory adjustment history)

This is where you can answer the first useful question: Did the count drift slowly over time, or did one event change it?

4. Use the inventory adjustment changes report

If the product history is too narrow, move to inventory reports. The inventory adjustment changes report is designed to show adjustments over a selected period, including manual adjustments, inventory apps, transfers, and order fulfillments. It’s better suited to address questions like:

  • Which staff member adjusted this location most often?
  • Which app made changes, which reason codes appear?
  • Which SKUs keep moving unexpectedly?

(Source: Shopify Help: Inventory reports)

For deeper analysis, Shopify’s custom inventory adjustment report examples show how to view inventory movements for a single SKU across one or more locations and how to isolate transfer-created inventory changes. (Shopify Help: Custom inventory adjustment reports)

5. Check the activity log, but know its limits

The store activity log can help when you need broader admin context: unusual timing, unfamiliar apps, user activity, or recently installed apps. It’s best to use the activity log to investigate unusual actions and review user permissions and app access. (Shopify Help: Store activity log)

But don’t expect it to behave like a complete exportable audit database. As already mentioned in this post, Shopify keeps the store activity log as view-only with limited functionality. (Shopify Help: Store activity log)

6. Correlate orders, refunds, transfers, and app dashboards

Inventory changes are rarely interesting alone. They become meaningful when cross-referenced against business events: orders, fulfillments, transfers, and returns.

An order can move units from Available to Committed, followed by a fulfillment that resolves committed inventory. A refund can restock. A transfer can move inventory through incoming and available states. Lastly, an app can reserve stock, set stock aside, or write a new quantity.

While Shopify’s inventory reports and state definitions make those movements visible, the operational reasons for them may only be preserved in an order timeline, transfer record, app dashboard, or warehouse system, which is why it’s best to examine all of those systems to build a complete picture. (Shopify Help: Inventory reports)

7. Reconcile only after you understand

Inventory correction should always be the last step.

If the event chain shows a simple count mistake, correct the count. If it shows a recurring app overwrite, investigate the app configuration. If it shows a location problem, audit assignment, pickup, transfer, or fulfillment rules. If it shows manual adjustments without reason discipline, tighten the operating habit.

Otherwise, if you change the inventory number without understanding the system problem behind it, the issue might repeat itself in no time.

What causes Shopify inventory change history to get messy?

Most messy inventory histories have a few familiar mechanisms.

Manual “Set to” adjustments can hide the path

Shopify supports both Set to, where you enter a specific quantity, and Adjust by, where you add or subtract from the current quantity. Both are useful, but they work differently. Adjust by says “move by this amount.” Set to says “make the count this number.” (Shopify Help: Adjusting inventory quantities)

If a staff member uses Set to 42 after a partial count, Shopify may record the adjustment, but the reason behind 42 still depends on the quality of the count. Was it shelf stock? Shelf plus receiving? Shelf minus damaged? One location or two?

The log can tell you what changed, but it doesn’t guarantee that the count was done correctly and thoroughly.

App overwrites can be technically valid but operationally wrong

A third-party app may update Shopify inventory because it’s doing exactly what it was configured to do. That does not mean the result matches the shelf count.

In Shopify, third-party apps can automatically adjust inventory and sync quantities to your store’s Shopify backend. Moreover, when using the bulk editor, Shopify doesn’t track a record of inventory movements in the same way as adjustments that specify origins and destinations. (Shopify Help: Viewing inventory adjustment history)

This often results in inventory changes that to Shopify store owners look like unexplained stock fluctuations or silents overwrites.

Inventory states make “wrong” less obvious

It’s best to keep in mind that Shopify’s inventory-state model, while useful, also allows for a single “stock count” to hide several operational states. (Shopify Help: Inventory states) The way it works is often confusing at first.

A unit can be on hand but not available, because it’s committed to a paid order, or because an app or draft order reserved it. It can be in an incoming state from a transfer but not yet sellable because it hasn’t reached the correct location.

When Shopify says “you have stock,” the immediate questions are: which state? which location?

Activity logs are helpful, but shallow

Shopify’s activity log is great for recent admin context. It can show actions by a person, app, or channel, and Shopify suggests using it to investigate unusual activity, unfamiliar apps or users, and unauthorized changes. (Shopify Help: Store activity log)

However, it’s not designed to be a full forensic warehouse. It’s capped at 250 results, cannot be exported, and may show Shopify as the actor for background or sync activity. (Shopify Help: Store activity log)

So if your store has many users, apps, and daily changes, the evidence you want may scroll out of view quickly.

Multi-location inventory turns one story into several

If you sell from a warehouse, a retail store, and a 3PL location, a SKU can be correct in one place and wrong in another. Transfers, pickup availability, app-managed locations, and partial receipts can make the total count look reasonable while the sellable count at the promised location is wrong.

In Shopify, app-managed inventory quantities are allocated to the app’s location, and Shopify’s inventory states are location-aware. That is why location-level investigation matters. (Shopify Help: Set up inventory tracking)

When is Shopify’s native inventory history enough?

Shopify’s native history is often enough when the problem is recent, narrow, and simple. You probably won’t need additional tracking software if your store has moderate volume and doesn’t ship from more than a couple of locations.

If one SKU was manually adjusted yesterday, the product or variant adjustment history may show the staff user, timestamp, and quantity impact. If one order committed stock, the inventory reports can show the Available and Committed movement. If one transfer moved units, a custom report can isolate transfer-created changes. (Shopify Help: Viewing inventory adjustment history)

Native history is also enough when your operational question is a task question:

  • “Did anyone adjust this variant?”
  • “Did an app touch inventory today?”
  • “Which location changed?”
  • “Was this order the reason available stock dropped?”

That is the clean case.

Where do the native Shopify audit capabilities fall short?

The built-in Shopify audit features begin to feel underpowered when the question is not about a single adjustment, but about a pattern.

Examples:

  • The same SKU keeps drifting after every correction.
  • A staff member adjusted stock, but nobody knows what physical count they used.
  • An app wrote inventory overnight, but the reason lives outside Shopify.
  • A transfer changed availability at the wrong location.
  • Order edits, refunds, and fulfillment timing muddied the record.
  • Finance, operations, or compliance needs an exportable, explainable timeline for a discrepancy.
  • The 180-day product history no longer covers the period where the pattern began.
  • The activity log rolled past the relevant event.

Shopify has useful pieces: adjustment history, reports, custom explorations, activity logs, order records, transfer records, and app attribution when available. The operator’s job is stitching those pieces into a timeline. Unfortunately, without the right tools, that stitching is where mistakes creep in.

When should you add a Shopify inventory audit layer?

Add an audit layer when the cost of guessing is higher than the cost of tracking.

That usually happens when you have more than a few SKUs, more than one person touching inventory, one or more apps writing stock, a warehouse or 3PL involved, or a recurring pattern of cancelled orders and “why did this change?” investigations.

Retrace is built for that gap. It doesn’t replace Shopify inventory management. It tracks Shopify stock changes over time, compares Shopify’s current count with a tracked ledger, and helps show where the count stopped adding up. When attribution is available, Retrace shows who or what caused the change. When exact attribution is unavailable, it still surfaces the change.

In product terms, Retrace is an inventory observability layer: a way to see the event chain around orders, refunds, transfers, manual edits, app overwrites, and SKU-level drift without forcing a merchant into a heavy ERP or a new inventory operating system.

FAQ

How do I see Shopify inventory adjustment history?

Open the tracked product or variant in Shopify and view its inventory adjustment history. Shopify shows recorded changes, including when the change happened, who or what created it, and how it affected quantities. If the product has variants, you view the history for each variant separately. (Shopify Help: Viewing inventory adjustment history)

How far back does Shopify inventory history go?

The product or variant adjustment history shows the last 180 days. For broader analysis, Shopify points merchants to inventory adjustment reports, where changes can be analyzed across dimensions such as SKU, location, staff member, app, and adjustment reason. (Shopify Help: Viewing inventory adjustment history)

Can Shopify show who changed inventory?

Often, yes. Treat it carefully, though. Shopify adjustment history includes a Created by field, and activity logs can show recent actions by a person, app, or channel. However, Shopify’s activity log may also show “Shopify” as the actor for background jobs, syncs, or channel operations, and the activity log has retention and export limits. (Shopify Help: Viewing inventory adjustment history)

Can I export the Shopify activity log?

According to the official documentation, no. The store activity log is view-only and cannot be exported or downloaded. It also shows a maximum of 250 results. For exportable or deeper inventory analysis, inventory reports and custom inventory adjustment reports are the tools to use instead. (Shopify Help: Store activity log)

What should I check if an app changed Shopify inventory?

Start with the SKU, location, timestamp, and inventory state that changed. Then check inventory adjustment reports by app, staff member, SKU, location, and reason. If a third-party app created adjustments tied to an external record, Shopify’s custom-report docs show how reference document fields can help isolate those changes. Also review the app’s own logs and permissions. (Shopify Help: Inventory reports)

Consider Retrace

If your team is still piecing together Shopify inventory changes from product history, order timelines, app dashboards, and Slack guesses, Retrace gives each SKU a clearer story.

Join the Retrace private beta to see how Shopify stock changed over time, where the count split from the tracked ledger, and what attribution evidence is available.

If still unsure, you’re welcome to email support@useretrace.com with any questions.