# EDI 947 Warehouse Inventory Adjustment Advice

> EDI 947 explained with an example: how a 3PL reports damage, holds and cycle count changes. W15 and W19 segments, reason codes, and 947 vs 846.

<QuickAnswer>
The EDI 947 Warehouse Inventory Adjustment Advice is the X12 transaction a warehouse or 3PL sends to the inventory owner to report a change in the quantity or status of stock it holds. Each line gives the item, the quantity adjusted and a reason code, such as warehouse damage, a quality hold or a cycle count correction.
</QuickAnswer>

**The EDI 947 explains why your inventory changed when nothing shipped or arrived.** Receipts come in on the [944](/guides/edi/944-warehouse-stock-transfer-receipt-advice) and shipments go out on the [945](/guides/edi/945-warehouse-shipping-advice). Everything else that moves the number (a pallet dropped by a forklift, a lot put on quality hold, a cycle count that finds two extra cases) arrives on a 947. Without it, your on-hand balance and the warehouse's drift apart, and you find out when an order cannot be filled.

This guide covers what the 947 carries, the reason codes that drive it, every segment you will map, a live example with increases and decreases, how it differs from the 846, and the errors that leave your books out of step with the warehouse floor.

<EDIGuideCTA
  transactionType="947"
  headline="Get customer orders to your 3PL without rekeying"
  body="OrderSync reads orders in any format, from EDI 850s to PDFs and emails, matches customers, items and units, and outputs valid X12 or ERP data your warehouse can work from."
/>

## What Is an EDI 947?

**An EDI 947 is the Warehouse Inventory Adjustment Advice transaction set defined by the [ASC X12 standards body](https://x12.org/products/transaction-sets). The warehouse sends it to the depositor (the inventory owner) to report adjustments to inventory levels or status that happen inside the warehouse.** In the X12 envelope it travels in a functional group with the code `AW` in `GS01`.

Two points from the X12 definition shape how it is used. First, the adjustment types that are reported by EDI are set by agreement between the warehouse and the depositor, so no two 3PLs send exactly the same mix. Second, a 947 covers one storage location: a warehouse with adjustments in two buildings sends two 947s for the period, each listing only the products that changed.

Authoritative references for 947 work:

- The [X12 transaction set catalog](https://x12.org/products/transaction-sets) defines the 947 alongside the 940, 943, 944 and 945
- [GS1 US](https://www.gs1us.org/industries-and-insights/standards) governs the UPC case codes and GTINs that identify each adjusted item
- Your 3PL's 947 implementation guide and warehouse agreement list which adjustment reasons it reports, how often, and whether it reports status changes (holds) as well as quantity changes

**Who sends it?** The warehouse or 3PL, from its WMS.

**Who receives it?** The depositor, into its ERP or inventory system.

**When is it sent?** Either as each adjustment is posted, or in a batch per reporting period (often daily), depending on the agreement.

**Why does it matter?** The [846 Inventory Inquiry/Advice](/guides/edi/846-inventory-inquiry) tells you what the warehouse has now. The 947 tells you why that differs from what you expected. Finance needs the reason to write off damage, file a claim or charge it back to the warehouse under the agreement, and customer service needs to know stock is on hold before it promises it.

## Common Reasons for a 947

| Situation | Effect on available stock | Typical reason code (W1901) |
|---|---|---|
| Forklift or handling damage in the warehouse | Decrease | `02` Warehousing damage |
| Quality, regulatory or customer hold on a lot | Decrease (moved to hold) | `05` Product put on hold |
| Hold released | Increase | `55` Product taken off hold |
| Cycle count finds less than the system | Decrease | `06` Book adjustment decrease |
| Cycle count finds more than the system | Increase | `56` Book adjustment increase |
| Stock destroyed (expired, recalled, contaminated) | Decrease | `07` Product dumped or destroyed |
| Receipt was wrong and is corrected later | Decrease or increase | `04` / `54` Receipt less / greater than previously reported |
| Shipment was wrong and is corrected later | Decrease or increase | `03` / `53` Shipment greater / less than previously reported |
| Lost stock later found | Increase | `51` Unable-to-locate product located |

The codes in the 01 to 07 range are stock decreases and the codes in the 51 to 56 range are the matching increases. The quantity in `W1902` is reported as a number of units, and the reason code says which way it moves. Your 3PL's guide lists the exact subset it uses, and some add qualifiers to say which stock bucket (available, damaged, hold) the adjustment applies to.

## Interactive Example: Damage, Hold and Cycle Count (947)

A week after receiving the Boise transfer, the Reno 3PL reports three adjustments for the depositor's stock in one 947. `W15` carries the date the report was created. `N1*WH` names the reporting warehouse, and `G62*07` the effective date of the adjustments. Each `W19` line gives a reason code, a quantity, a unit and the item; `G69` holds the warehouse's free-text reason and `N9*TN` its transaction number.

- Line 1: 2 cases of granola damaged by a forklift (`02`, a decrease)
- Line 2: 4 cases of almond butter, lot `L2610B`, put on QC hold (`05`, a decrease to available stock)
- Line 3: 1 case of trail mix found in a cycle count (`56`, an increase)

Use the **Plain English** tab for a readable summary, or click any segment to break it down element by element.

<EDISample id="947-inventory-adjustment" />

## 947 Structure at a Glance

| Position | Segment | Name | Usage | Notes |
|---|---|---|---|---|
| Header | **ST** | Transaction Set Header | Mandatory | `ST01` = `947` |
| Header | **W15** | Warehouse Adjustment Identification | Mandatory | Report date and adjustment numbers |
| Header loop | **N1** / N2 / N3 / N4 / PER | Name and address | Mandatory | The reporting warehouse, sometimes the depositor too |
| Header | **N9** | Reference Identification | Optional | Extra references for the whole report |
| Header | **G62** | Date/Time | Optional | Effective date of the adjustments |
| Header | **NTE** | Note/Special Instruction | Optional | Free-text notes |
| Detail loop | **W19** | Warehouse Adjustment Item Detail | Mandatory, repeats | One per item adjustment: reason, quantity, unit, item IDs |
| Detail loop | **G69** | Line Item Detail - Description | Optional | Free-text reason for the adjustment |
| Detail loop | **N9** | Reference Identification | Optional | Warehouse transaction number, lot, stock status |
| Summary | **SE** | Transaction Set Trailer | Mandatory | Segment count and control number |

Unlike the 943 and 944, the 947 has no totals segment. Each `W19` line stands on its own.

## Key Segments Explained

### W15: Warehouse Adjustment Identification

```
W15*20261113~
```

| Element | Name | Example | What it means |
|---|---|---|---|
| **W1501** | Date | `20261113` | The date the report was created, as CCYYMMDD |
| **W1502** | Adjustment Number | | The warehouse's ID for this adjustment |
| **W1503** | Adjustment Number | | The depositor's ID for this adjustment |
| **W1504** | Transaction Set Purpose Code | | Original, replacement and so on, where the guide uses it |

`W1502` and `W1503` are a pair in the X12 syntax: if one is sent, the other must be too. That suits adjustments the depositor asked for (a hold it requested, for example) where both sides have a number. For routine adjustments the warehouse often leaves both blank and puts its own transaction number on each line in `N9*TN`, as in the example.

### W19: Warehouse Adjustment Item Detail

```
W19*05*4*CA*086123450021*VN*NFP-ALB-16***L2610B~
```

| Element | Name | Example | What it means |
|---|---|---|---|
| **W1901** | Quantity or Status Adjustment Reason Code | `05` | Why the stock changed, and in which direction. See the table above |
| **W1902** | Credit/Debit Quantity | `4` | How many units were adjusted |
| **W1903** | Unit of Measure | `CA` | The unit of `W1902` |
| **W1904** | UPC Case Code | `086123450021` | The 12-digit case-level UPC |
| **W1905** | Product/Service ID Qualifier | `VN` | What the next element is. `VN` = vendor item number |
| **W1906** | Product/Service ID | `NFP-ALB-16` | Your item number |
| **W1907** / **W1908** | Second qualifier and ID | | A second identifier, where needed |
| **W1909** | Warehouse Lot Number | `L2610B` | The lot affected |

Further elements carry weights (`W1910` to `W1915`) and an inventory transaction type code (`W1916`) for warehouses that use them. Read the reason code before the quantity: a `4` with code `05` takes four cases out of available stock; the same `4` with code `55` puts them back.

### G69 and N9: The Story Behind the Number

```
G69*QC HOLD REQUESTED BY DEPOSITOR~
N9*TN*WT-77121~
```

`G69` is free text, and it is often the only place the warehouse says what actually happened. Keep it with the adjustment in your system; it is the first thing anyone asks for in a damage dispute. `N9*TN` carries the warehouse's transaction reference, which is what you quote back to the 3PL. Some guides also use an `N9` to say which stock status (available, damaged, hold) the line applies to.

## EDI 947 vs 846, 944 and 945

| Document | Sent by | What it tells you |
|---|---|---|
| **947 Warehouse Inventory Adjustment Advice** | Warehouse | Each change to stock, with a reason |
| **[846 Inventory Inquiry/Advice](/guides/edi/846-inventory-inquiry)** | Warehouse (or supplier) | The current balance, as a snapshot |
| **[944 Warehouse Stock Transfer Receipt Advice](/guides/edi/944-warehouse-stock-transfer-receipt-advice)** | Warehouse | Stock received into the building |
| **[945 Warehouse Shipping Advice](/guides/edi/945-warehouse-shipping-advice)** | Warehouse | Stock shipped out against a 940 |

Think of the 846 as a bank balance and the 947 as the statement lines that are not deposits or withdrawals. You can run a 3PL relationship on the 846 alone and simply overwrite your balance every day, but you lose the reasons. That is fine for a small catalog. It is a problem for anyone who has to account for damage, track holds by lot, or hold a 3PL to an inventory accuracy clause.

A good reconciliation is simple to state: yesterday's balance plus 944 receipts, minus 945 shipments, plus or minus 947 adjustments, should equal today's 846. When it does not, one of the four documents is missing.

## Where the 947 Sits in 3PL EDI

| Flow | Document | Direction |
|---|---|---|
| Inbound | **[943](/guides/edi/943-warehouse-stock-transfer-shipment-advice)** Stock Transfer Shipment Advice | Depositor to warehouse |
| Inbound | **[944](/guides/edi/944-warehouse-stock-transfer-receipt-advice)** Stock Transfer Receipt Advice | Warehouse to depositor |
| Outbound | **[940](/guides/edi/940-warehouse-shipping-order)** Warehouse Shipping Order | Depositor to warehouse |
| Outbound | **[945](/guides/edi/945-warehouse-shipping-advice)** Warehouse Shipping Advice | Warehouse to depositor |
| Inventory | **[846](/guides/edi/846-inventory-inquiry)** Inventory Inquiry/Advice | Warehouse to depositor |
| Inventory | **947** Warehouse Inventory Adjustment Advice | Warehouse to depositor |
| All | **[997](/guides/edi/997-functional-acknowledgment)** Functional Acknowledgment | Both ways |

For the full setup with a new 3PL, see our guide to [3PL EDI integration](/blog/3pl-edi-integration).

## Common 947 Errors and How to Prevent Them

| Error | What happens | Prevention |
|---|---|---|
| **Reason code direction ignored** | A hold release posted as a second decrease | Map every reason code your 3PL uses to increase or decrease explicitly |
| **Negative quantity in `W1902`** | Double reversal, or the line rejected | Agree that quantities are positive and the reason code sets direction, unless the guide says otherwise |
| **Holds posted as write-offs** | Stock that will come back is written off, then reappears | Post hold codes to a hold location, not to scrap |
| **Lot missing on a lot-specific hold** | The whole item is blocked instead of one lot | Require `W1909` or a lot `N9` on hold and release lines |
| **947 not sent for a reason the 3PL treats as internal** | 846 balance changes with no explanation | List in the agreement which adjustments must be reported |
| **Unit of measure mismatch** | Cases adjusted as eaches | Convert with a maintained item table, same as for 944s |
| **Duplicate 947** | Adjustment applied twice | Deduplicate on the warehouse transaction number |

## 947 Implementation Checklist

- Get the 3PL's 947 guide and the exact list of reason codes it sends
- Map each reason code to an ERP adjustment type, a direction and a stock location (available, hold, damaged, scrap)
- Agree whether adjustments are sent as they happen or in a daily batch
- Agree how damage is charged under the warehouse agreement, and capture the warehouse transaction number for it
- Confirm lot reporting for holds, releases and destruction
- Build the daily reconciliation: opening balance, 944s, 945s, 947s, against the 846
- Test a decrease, an increase, a hold and its release, and a destruction
- Send a 997 for every 947

For the full list of X12 document numbers, see our [EDI document types reference](/edi-document-types).

## Handling 3PL and Order Data With OrderSync

Accurate inventory only pays off if the orders that consume it are entered correctly. For most distributors those orders arrive in every shape: EDI 850s from retailers, PDFs and emails from independents, spreadsheets from reps.

OrderSync reads those orders in any format, matches customers, items and units to your catalog, and outputs clean data to your ERP or valid X12. Paste any 947 into the [free EDI inspector](/edi-inspector) to see it parsed segment by segment with a plain-English summary, read about [ERP integration](/erp-integration), or [book a 15-minute walkthrough](/book-call) to see your own orders processed.

## Frequently Asked Questions

<div className="not-prose">

### What is an EDI 947 used for?

The EDI 947 lets a warehouse tell the inventory owner that stock changed inside the warehouse for a reason other than a receipt or a shipment: damage, a hold, a hold release, destruction, or a correction after a cycle count. Each line carries the item, quantity and a reason code.

### What is the 947 EDI document type?

The 947 is the X12 Warehouse Inventory Adjustment Advice, part of the warehouse series with the 940, 943, 944 and 945. It travels in a functional group with the code AW. It reports changes in quantity or status, not balances.

### What does an EDI 947 example look like?

A typical 947 has a W15 header with the report date, an N1 naming the warehouse, a G62 effective date, then one W19 line per adjustment. For example, W19*02*2*CA followed by the item's UPC case code and item number reports two cases lost to warehouse damage.

### What is the difference between an EDI 947 and an EDI 846?

The 846 reports the current inventory balance as a snapshot. The 947 reports individual changes and the reason for each. The 846 tells you what you have; the 947 tells you why it changed. Many depositors use both and reconcile them daily.

### How does an EDI 947 show an increase or a decrease?

Through the reason code in W1901. Codes 01 to 07 are decreases (for example 02 warehousing damage, 05 product put on hold) and codes 51 to 56 are increases (for example 55 product taken off hold, 56 book adjustment increase). The quantity in W1902 is the number of units adjusted.

### What is the W19 segment in an EDI 947?

W19 is the Warehouse Adjustment Item Detail segment, one per adjusted item. W1901 is the reason code, W1902 the quantity, W1903 the unit of measure, W1904 the UPC case code, W1905 and W1906 an item ID qualifier and number, and W1909 the lot.

### Does every 3PL send EDI 947s?

No. Some 3PLs only send an 846 and let the balance speak for itself. Others send 947s for every adjustment. Which adjustments are reported by EDI is a matter for the warehouse agreement, so ask before you sign rather than after the first unexplained write-off.

</div>
