# EDI 888 Item Maintenance: Grocery Item Setup Guide

> EDI 888 Item Maintenance explained: G53 maintenance types, G39 case data, G55 consumer units, new item and discontinue examples, and how it compares to 832.

<QuickAnswer>
The EDI 888 Item Maintenance is the X12 transaction a manufacturer, supplier or broker uses to set up new grocery items at a retailer or wholesaler, change existing item details, or discontinue items. It carries case and consumer unit identifiers, pack, size, weight, dimensions and pallet configuration. Price changes are sent separately, on the 879.
</QuickAnswer>

**The EDI 888 is how a grocery supplier gets an item into a retailer's item file.** Before a store can order it, receive it at the back door or scan it at the register, the retailer needs the case code, the consumer UPC, the pack, the size, the weight and the pallet pattern on file. The 888 delivers that data in a structured form, and then keeps it current as packaging changes and items are retired.

This guide covers what the 888 carries, how its maintenance types work, two live examples (a new item setup and a change plus a discontinue), every segment you are likely to map, how it compares to the 832, and the item data errors that later show up as rejected orders and DSD deliveries.

<EDIGuideCTA
  transactionType="888"
  headline="Keep item data straight on every grocery order"
  body="OrderSync reads grocery orders in any format and matches each line to the right item, UPC and pack in your catalog, so a case-pack change shows up on the order, not as a deduction."
/>

## What Is an EDI 888?

**An EDI 888 is the Item Maintenance transaction set defined by the [ASC X12 standards body](https://x12.org/products/transaction-sets). It lets a manufacturer, supplier, broker or agent send finished-goods product information to a trading partner in a consumer goods market, both for new products and for changes to existing product specifications.** Like the 894 and 889, it comes from the Uniform Communication Standard (UCS) used in US grocery, so its item segments use the grocery "G" prefix and implementation guides often name the version `004010UCS`.

Authoritative references for 888 work:

- The [X12 transaction set catalog](https://x12.org/products/transaction-sets) defines the 888 structure and segment order, and places it in functional group `QG` (Product Information) with the 889
- [GS1 US](https://www.gs1us.org/industries-and-insights/standards) governs the UPCs and GTINs every 888 carries
- The [GS1 GTIN Management Standard](https://ref.gs1.org/standards/gtin-management) decides when a packaging change needs a new GTIN rather than an 888 change to an existing item
- Each retailer or wholesaler that accepts the 888 publishes an implementation guide listing the segments it requires and the maintenance types it accepts

**Who sends it?** The supplier side: a manufacturer, its broker, or a data service acting for it.

**Who receives it?** A grocery retailer or wholesaler, into the merchandising system that holds its item file.

**When is it sent?** Ahead of a new item's first order, whenever case or consumer unit data changes, and when an item is withdrawn or discontinued. The effective date in the transaction tells the retailer when to apply it.

**Why does it matter?** Every downstream document matches against the item file. A [875 grocery purchase order](/guides/edi/875-grocery-product-purchase-order) can only order what is set up, an [880 grocery invoice](/guides/edi/880-grocery-products-invoice) line fails if the case code is unknown, and a [DSD 894 delivery](/guides/edi/894-delivery-return-base-record) is held at the back door when the store has never seen the UPC. Bad item data costs money weeks later, far from where it was keyed.

**What it does not carry:** price changes. The X12 purpose statement sends those to the 879 Price Information set. Some retailers carry cost data in their 888 implementation anyway, so check the guide.

## Where the 888 Sits in Grocery Item Setup

Item setup in grocery runs in a fairly fixed order, and the 888 is one step in it:

1. **Commercial agreement.** The category buyer accepts the item, agrees cost, and often negotiates new item or slotting allowances.
2. **Item data.** The supplier sends the item's identifiers, pack and physical data, on an 888 or through the retailer's chosen catalog route (an [832 Price/Sales Catalog](/guides/edi/832-price-sales-catalog), a GS1 data pool, or a vendor portal).
3. **Cost and price.** Cost goes on an 879, an 832, or the retailer's own process.
4. **Launch promotion.** Introductory deals arrive on an [889 Promotion Announcement](/guides/edi/889-promotion-announcement).
5. **Orders and deliveries.** The retailer orders on an 875 or [850](/guides/edi/850-purchase-order), or, for direct store delivery, the route driver delivers against the store's item file on an 894.
6. **Ongoing maintenance.** Packaging changes, temporary withdrawals and discontinues go back through the 888.

Many large retailers have moved new item setup to GS1 data synchronization or their own portals and use EDI only for some steps. Whether a given chain still takes an 888 is a question for its EDI team, not something to assume.

## Interactive Example: New Item Setup (G53 Maintenance Type 003)

A granola manufacturer sets up two new 16 oz items at a grocery chain, effective December 1. The header names the buyer and supplier, each with its own `G62` date. The detail opens with `G53*003` (add full item detail), then one block per item: `G39` for the case (case code, vendor item number, gross weight, dimensions, volume, pallet pattern, pack and size), `G69` for the description, and `G55` for the consumer unit (UPC, shelf package dimensions, size and the 16-character register description).

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

<EDISample id="888-new-item-setup" />

## Interactive Example: Item Change and Discontinue (001 and 002)

Six weeks later the same supplier sends one 888 with two maintenance actions, both effective January 4. A packaging update made the honey almond case slightly lighter and shorter, so `G53*001` (change) carries the updated `G39`. The 32 oz original is being dropped, so `G53*002` (delete) identifies it by case code and item number only.

<EDISample id="888-item-change-discontinue" />

## 888 Structure at a Glance

The 888 has a short header and a nested detail section: one loop per maintenance action, one loop per item inside it, and an optional consumer unit loop inside each item.

| Area | Segment | Name | Usage | Notes |
|---|---|---|---|---|
| Header | **ST** | Transaction Set Header | Mandatory | `ST01` = `888` |
| Header | **BGN** | Beginning Segment | Optional | Purpose, reference number, date |
| Header loop | **N1** | Name | Mandatory, repeats | One loop per party (buyer, supplier, broker) |
| Header loop | **N2, N3, N4** | Name and address | Optional | |
| Header loop | **N9** | Reference Identification | Optional | |
| Header loop | **G61** | Contact | Optional | Item data contact |
| Header loop | **NTE** | Note | Optional | |
| Header loop | **G93** | Price Bracket Identification | Optional | |
| Header loop | **G62** | Date/Time | Mandatory | One per N1 loop |
| Header loop | **LM / LQ** | Code Source and Industry Code | Optional | Industry code lists |
| Detail loop | **G53** | Maintenance Type | Mandatory, repeats | Add, change, delete and others |
| Detail loop | **G62** | Date/Time | Optional | Effective date for this action |
| Item loop | **G39** | Item Characteristics, Vendor's Selling Unit | Mandatory, repeats | The case |
| Item loop | **G69** | Line Item Detail, Description | Optional | |
| Item loop | **G23, G36, G26, G43, G24, G40, G22, G46** | Terms, pricing and promotion | Optional | Used where the retailer's guide asks |
| Item loop | **H1** | Hazardous Material | Optional | |
| Item loop | **G54, N9, UIT, MEA, TD1** | Module, references, units, measurements | Optional | |
| Item loop | **N1, PAL** | Name and pallet information | Optional loop | |
| Consumer unit loop | **G55** | Item Characteristics, Consumer Unit | Optional loop | The shelf unit |
| Consumer unit loop | **G69, QTY** | Description and quantity | Optional | |
| Trailer | **SE** | Transaction Set Trailer | Mandatory | Segment count and control number |

In the envelope, `GS01` is **QG** and `GS08` is commonly `004010UCS` or the release named in the retailer's guide. As with every grocery set, a retailer's guide can make an optional segment required.

## Key Segments Explained

### BGN: Beginning Segment

```
BGN*00*IM-20261104-01*20261104~
```

`BGN01` is the transaction set purpose (`00` = original), `BGN02` your reference number for this maintenance file, and `BGN03` the date it was created. Use a reference that is unique per file, so the retailer can tell you exactly which 888 a rejection refers to.

### N1 and G62: Parties and Their Dates

```
N1*BY*HARBOR GROCERY*1*069854900~
G62*07*20261201~
N1*SU*PINE HOLLOW FOODS*1*081234567~
G61*IC*D OKAFOR*TE*5035550142~
G62*07*20261201~
```

Each `N1` loop names one party: here `BY` for the buying retailer and `SU` for the supplier, identified by DUNS (`N103` = `1`). In 004010 each N1 loop must close with a `G62` date. The sample uses qualifier `07` (effective date); which date and qualifier your retailer expects in that position is set by its guide. `G61` names the person to call about the item data, with a communication qualifier (`TE` = telephone) and number.

### G53: Maintenance Type

```
G53*003~
```

`G53` has one element, the maintenance type code, and it sets what happens to every item in the loop that follows. The codes grocery suppliers use most:

| Code | Meaning | Typical use |
|---|---|---|
| `003` | Add Full Item Detail | New item setup, with full case and consumer unit data |
| `001` | Change | Updated weight, dimensions, pallet pattern or description |
| `002` | Delete | Item discontinued at this retailer |
| `004` | Withdraw Item (Temporary) | Temporarily unavailable, for example a seasonal or supply gap |
| `005` | Restore Item | Bring back a withdrawn item |
| `CEP` | Change Excluding Price | Change where price is explicitly not affected |
| `PRI` | Price Change Only | Price-only update, where the retailer takes prices on the 888 |

The X12 code list for this element is long and shared with other industries, so most of it does not apply. The retailer's guide lists the handful it accepts. A `G62` right after `G53` gives the effective date for that action.

### G39: Item Characteristics, Vendor's Selling Unit

`G39` describes the case: the unit you sell to the retailer and the retailer orders.

```
G39*008451200116*VN*PH-GRN-HNY16**14.2*G*L*9.5*IN*12.25*IN*10*IN*0.67*CF*010006*12*16*OZ~
```

| Element | Name | Example | What it means |
|---|---|---|---|
| **G3901** | U.P.C. Case Code | `008451200116` | The 12-character grocery case code. The X12 note describes a leading system code (`00`, `06` or `07` for US grocery) followed by the 5-digit manufacturer and 5-digit case number |
| **G3902** | Product/Service ID Qualifier | `VN` | What the next element is. `VN` = vendor item number |
| **G3903** | Product/Service ID | `PH-GRN-HNY16` | Your item number |
| **G3904** | Special Handling Code | | Handling requirements, where the retailer uses them |
| **G3905** | Unit Weight | `14.2` | Case weight |
| **G3906** | Weight Qualifier | `G` | `G` = gross weight |
| **G3907** | Weight Unit Code | `L` | `L` = pounds |
| **G3908 / G3909** | Height and unit | `9.5` / `IN` | Case height in inches |
| **G3910 / G3911** | Width and unit | `12.25` / `IN` | Case width |
| **G3912 / G3913** | Length and unit | `10` / `IN` | Case length |
| **G3914 / G3915** | Volume and unit | `0.67` / `CF` | Cubic feet. Should agree with the three dimensions |
| **G3916** | Pallet Block and Tiers | `010006` | First three digits: cases per layer. Last three: layers per pallet. Here 10 x 6 = 60 cases |
| **G3917** | Pack | `12` | Consumer units per case |
| **G3918 / G3919** | Size and unit | `16` / `OZ` | Size of each consumer unit |

`G39` continues past position 19 with color, order sizing factor, alternate tiers, a second product ID pair, a second weight, inner pack and packaging code. Send those only when the retailer's guide asks. The standard pairs several elements (a weight needs its qualifier and unit; a dimension needs its unit), so a value without its partner is a syntax error, not just a data gap.

### G69: Line Item Detail, Description

```
G69*HONEY ALMOND GRANOLA 16 OZ~
```

A free-form description of up to 45 characters. Retailers often build their own item description from it, so keep it consistent with the label.

### G55: Item Characteristics, Consumer Unit

`G55` describes the unit the shopper buys. It sits in its own loop under the `G39` it belongs to.

```
G55*UP*084512001168***9*IN*6*IN*2.25*IN****16*OZ*PH HNY ALM GRNLA~
```

| Element | Name | Example | What it means |
|---|---|---|---|
| **G5501** | Product/Service ID Qualifier | `UP` | `UP` = 12-digit UPC consumer package code |
| **G5502** | Product/Service ID | `084512001168` | The UPC the register scans, with its check digit |
| **G5503 / G5504** | Second ID qualifier and ID | | An optional second identifier |
| **G5505 to G5510** | Height, width, length and units | `9`, `6`, `2.25` `IN` | Shelf package dimensions, used for planograms |
| **G5511 / G5512** | Volume and unit | | Optional |
| **G5513** | Pack | | Optional |
| **G5514 / G5515** | Size and unit | `16` / `OZ` | Net content as labeled |
| **G5516** | Cash Register Item Description | `PH HNY ALM GRNLA` | What prints on the receipt. The X12 note limits it to 16 characters |

Later `G55` elements cover a second register description, coupon family code, dated product number of days (shelf life), deposit value, a prepriced flag, color, weights, a third identifier, a longer description, inner pack and packaging code. These are the fields stores use for receipts, shelf tags, coupons and bottle deposits, so they matter more than their position suggests.

### Optional Item Segments

- **G23, G36, G26, G43, G24, G40, G22, G46** carry terms, price list references, pricing conditions, promotion areas and allowances. A retailer that takes cost and launch deals on the 888 says so in its guide. Most send promotions on the 889.
- **H1** identifies hazardous material, for items such as aerosols or lighter fluid.
- **MEA** and **TD1** add measurements and shipping weight beyond what `G39` holds.
- **N1 / PAL** give pallet information, sometimes per ship-from location.
- **LM / LQ** carry industry code lists (for example, product category codes) named by the retailer.

## Case vs Consumer Unit, and When You Need a New GTIN

The 888 keeps two levels apart: `G39` is the case, `G55` is the consumer unit inside it. Most item data mistakes come from mixing them up, such as a case weight in a consumer unit field, a consumer UPC in the case code, or a pack that does not match the case code's actual contents.

The harder question is when a change belongs in an 888 `001` change and when it needs a new item. The [GS1 GTIN Management Standard](https://ref.gs1.org/standards/gtin-management) sets the rules. Among them:

- A change of over 20% to any physical dimension or to gross weight requires a new GTIN
- A change in the number of items in a case requires a new GTIN for the case
- A change in declared net content (the 16 oz on the label) requires a new GTIN

So the change sample above (a case that got about 4% lighter and 3% shorter) is a legitimate 888 change, and GS1 still expects trading partners to be told about it. Going from 12 to 8 bags per case is not an 888 change. It is a new case code, set up with `003`, and the old one discontinued with `002`. Sending a pack change as `001` against the old case code is how a retailer ends up receiving 8 when its system expects 12.

## EDI 888 vs 832, 879 and 889

| Document | Sent by | Purpose | Notes |
|---|---|---|---|
| **888 Item Maintenance** | Manufacturer, supplier, broker | Add, change, withdraw or delete items, with case and consumer unit detail | Grocery-specific `G39` and `G55` segments; no price changes |
| **[832 Price/Sales Catalog](/guides/edi/832-price-sales-catalog)** | Vendor | Publish a catalog with item IDs, descriptions, attributes and prices | General-purpose; used across retail, distribution and grocery |
| **879 Price Information** | Supplier | Communicate cost and price changes | The X12 home for price changes the 888 excludes |
| **[889 Promotion Announcement](/guides/edi/889-promotion-announcement)** | Manufacturer, broker | Announce deals, allowances, dates and performance conditions | References the items the 888 set up |
| **[846 Inventory Inquiry](/guides/edi/846-inventory-inquiry)** | Supplier | Report stock availability | Inventory, not item master data |

The short version: the 832 is the general catalog document, and plenty of retailers, grocery included, take it for item setup. The 888 is the older grocery-specific route, with a richer case and consumer unit structure built for grocery receiving and store systems. Which one you send is the retailer's choice. If both are offered, the 888 maps more naturally to grocery case data, and the 832 is easier to reuse across non-grocery customers.

## Common 888 Errors and How to Prevent Them

| Error | What happens | Prevention |
|---|---|---|
| **UPC check digit wrong in `G5502`** | Item rejected, or set up with a code that never scans | Validate check digits before sending, never key them |
| **Case and consumer codes swapped** | Orders and receipts match the wrong level | Map `G3901` from the case GTIN and `G5502` from the unit UPC, from separate source fields |
| **Pack change sent as `001`** | Retailer receives a different count than its item file says | Follow GS1 rules: new case code, `003` add, `002` for the old one |
| **Dimensions and volume disagree** | Warehouse slotting and cube calculations go wrong | Compute `G3914` from the three dimensions |
| **Pallet pattern in the wrong format** | Retailer reads 6 layers of 10 as 10 layers of 6, or rejects it | Send `G3916` as six digits: cases per layer, then layers |
| **Register description too long** | Truncated or rejected | Keep `G5516` within 16 characters |
| **Effective date too close** | Item not live when the first order or delivery arrives | Send with the lead time in the retailer's guide |
| **Discontinue sent but item still ordered** | Orders for an item the retailer has deleted | Confirm the last order date with the buyer before sending `002` |
| **Missing paired elements** | Syntax rejection on the 997 | Send each value with its qualifier and unit |

Item data errors rarely fail loudly at the 888. They show up as rejected order lines, [retail chargebacks](/glossary/retail-chargeback) for receiving mismatches, and DSD deliveries held at the door. The [EDI inspector](/edi-inspector) lays out every `G39` and `G55` element by name, which makes it quick to check a sample file before you send it to a new retailer.

## 888 Implementation Checklist

- Confirm the retailer accepts the 888 at all, or wants an 832, a GS1 data pool or its portal instead
- Get its 888 implementation guide and the maintenance type codes it accepts
- Confirm the parties and identifiers it wants in the N1 loops, and the date qualifier for each `G62`
- Confirm which `G39` and `G55` elements are required (many retailers require dimensions, Ti/Hi and register description)
- Pull case and consumer unit data from one item master, with GTIN check digits validated
- Agree how cost reaches it: 879, 832, the 888 itself, or outside EDI
- Test an add, a change and a delete, and check the 997 and any 824 application advice that comes back
- Set a rule for pack and net content changes: new GTIN, not an 888 change

If you are new to grocery EDI, our [grocery EDI requirements guide](/blog/grocery-edi) and the [EDI document types reference](/edi-document-types) show how the 888 fits next to the order, invoice and delivery documents.

## Keeping Orders Matched to Your Item Data With OrderSync

Item setup is only worth doing if the orders that follow match it. In practice, grocery and food suppliers receive orders as EDI 875s and 850s, but also as emails, PDFs and spreadsheets from wholesalers, independents and DSD accounts, each with its own item codes and units.

OrderSync reads those orders in any format, matches each line to your catalog by UPC, case code or the customer's own item number, converts units, and outputs valid X12 or clean data to your ERP. Paste any 888 into the [free EDI inspector](/edi-inspector) to see it parsed with a plain-English summary, read more about [EDI for grocery and retail suppliers](/edi-for/grocery-and-retail-suppliers), 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 888 document?

The EDI 888 Item Maintenance is an X12 transaction set used in grocery and consumer goods to set up new items at a retailer or wholesaler, change existing item details, or withdraw and discontinue items. It carries case and consumer unit identifiers, pack, size, weight, dimensions and pallet pattern.

### Who sends an EDI 888?

The supplier side sends it: a manufacturer, its broker or agent, or a data service acting for the manufacturer. The receiver is the grocery retailer or wholesaler that keeps the item file its orders, receiving and stores rely on.

### What is the difference between EDI 888 and EDI 832?

Both set up and maintain items. The 832 Price/Sales Catalog is a general-purpose catalog used across industries and can include prices. The 888 is the grocery-specific UCS set, with separate case (G39) and consumer unit (G55) segments and no price changes, which go on the 879. The retailer decides which it accepts.

### What does the G53 segment mean in an EDI 888?

G53 is the maintenance type. Its single element says what happens to the items that follow: 003 adds full item detail, 001 changes an item, 002 deletes it, 004 withdraws it temporarily and 005 restores it. The retailer's guide lists which codes it accepts.

### What is the G39 segment?

G39 describes the vendor's selling unit, usually the case: its 12-character UPC case code, your item number, gross weight, height, width, length, volume, pallet blocks and tiers, pack and size. It is the segment every 888 item loop starts with.

### Can I send a pack size change as an 888 change?

Usually not. Under the GS1 GTIN Management Standard, a change in the number of items in a case needs a new case GTIN. Set up the new case with maintenance type 003 and discontinue the old one with 002, rather than changing the old item with 001.

### Does the EDI 888 include prices?

The X12 standard leaves price changes out of the 888 and sends them on the 879 Price Information set. Some retailers' implementations carry cost or pricing segments in the 888 anyway, so the retailer's guide is the authority for your trading relationship.

### What functional group code does the EDI 888 use?

The 888 uses functional group QG (Product Information) in GS01, the same group as the 889 Promotion Announcement. Grocery retailers commonly name the version 004010UCS in GS08, but the version is set by each retailer's implementation guide.

</div>
