Free tool

Warehouse location labels: free generator

Warehouse location labels should follow the picker’s route. Enter zones, aisles, bays, levels and positions. Get an ordered list, CSV and printable A4 barcode sheets.

1. Describe the storage grid

Estimated locations12

Sample data to replace

12 locations

Sample inputs

1 zone · 2 aisles · 3 bays · 2 levels

Serpentine

Generated output

  1. #01A-001-010-001-001
  2. #07A-002-030-001-001
  3. #12A-002-010-002-001

12 ordered codes · CSV · printable barcode sheets

The same structure, as a table

The declared structure, zone by zone — the same warehouse the plan draws, in a form that prints and reads aloud.
ZoneAislesWalkBays / aisleFaces / bayLevels / bayPositions / levelLocations
12Serpentine, every second aisle reversed312112
Whole warehouse12

2. Match the picker’s real route

This choice controls pick_sequence. It does not merely change how the table looks.

2. Match the picker’s real route

3. Leave room for the warehouse to grow

Aisle faces

A step of 10 leaves unused numbers between bays. Insert a future bay without renumbering the warehouse. Odd/even faces require a step of at least 2 so two faces never share a code.

4. Build codes that people and systems can read

Code preview

A-001-010-001-001

I, O and Q are excluded by default because handwritten codes can resemble 1 or 0.

Zone codes use exactly one letter. Available codes after exclusions: 23.

Every numeric segment uses the same width, with leading zeros when needed. With one-letter zones, complete codes stay the same length and sort consistently by structure.

5. Set the label sheet

Measure your label stock. The print engine lays out A4 pages with 10 mm margins and 2 mm gaps.

Sample data to replace

Ordered warehouse location list

This is the preloaded sample. Change the settings, then generate your own list.

12 locations3 digits per numeric segment
Pick sequenceLocation codeRoute
00001A-001-010-001-001Serpentine
00002A-001-010-002-001Serpentine
00003A-001-020-001-001Serpentine
00004A-001-020-002-001Serpentine
00005A-001-030-001-001Serpentine
00006A-001-030-002-001Serpentine
00007A-002-030-001-001Serpentine
00008A-002-030-002-001Serpentine

+ 4 more rows in the export

Get the complete CSV

The sample is the first A4 page, at the size of your own label stock: print it, scan it, measure it. In the print dialog, choose your printer or “Save as PDF”, then keep the scale at 100%.

The 8 rows above are the free extract. The complete list and the complete label sheet are built on our side and sent against your email.

Generated output

Why warehouse location labels must follow the picking route

The code is only half the job. These five decisions keep the addressing usable after go-live.

1

Route before numbering

pick_sequence follows the physical walking route. Serpentine routing reverses every second aisle; one-way routing restarts at the entry end.

2

Growth gaps

A step of 10 reserves numbers between bays. Add storage later without relabeling every downstream location.

3

No I, O or Q

Location codes are typed and read as well as scanned. Removing ambiguous letters prevents avoidable confusion.

4

Fixed width

Zone codes stay at one letter and every numeric segment shares one width. Complete codes therefore keep a constant length; the serpentine route remains recorded in pick_sequence.

5

A separate pick sequence

The CSV keeps the route in pick_sequence without forcing the human-readable code itself to carry that order.

The complete files

Everything above is free and stays free: the drawn plan, the counts and the first rows of the list. The complete files — every location, in picking order — are built on our side from the settings you just entered.

Free, with no email: the plan, the counts, 8 rows of the list and a 1-page label sample. Behind your email: every location, as a CSV or as the A4 sheet.

Which file?

Discuss warehouse locations and picking with a myFulfillment specialist.

Naming every storage location, before anyone prints a label

Addressing a warehouse is not a numbering exercise. The codes you print today are read, typed and scanned by every picker for years, and the day you regret one of them is the day you relabel several hundred shelves.

One location code, segment by segment
A-001-010-002-001
  1. AZone
  2. 001Aisle
  3. 010Bay
  4. 002Level
  5. 001Position

Bays numbered with a step of 10 leave room to insert:

010020030
1

The route decides the order

A location list sorted by code, when the codes ignore the walking route, sends the picker back down an aisle they have already finished. Serpentine numbering reverses every second aisle so the sequence follows the feet, not the alphabet.

2

The syntax decides who can read it

A code is read off a shelf in poor light and typed into a terminal by hand as often as it is scanned. Constant width, a single separator and no I, O or Q are what make it survive that.

3

The gaps decide what next year costs

Numbering bays 1, 2, 3 means the first inserted bay renumbers everything after it. Numbering 10, 20, 30 leaves nine free numbers between each, and the insertion costs one label.

Three starting points, and the first one is the common one

The tool serves both dedicated and chaotic storage: it names the physical places, and it takes no view on which product goes in them.

Which situation you are in, and what it changes
Starting pointWhat you are actually doing
The warehouse already exists and has no addressingRacks are up, the team works from memory and the WMS has one location called “stock”. You are not designing anything — you are reading your own aisles and writing down what is already there. Enter the counts you can see, keep the route you already walk, and print.
A new zone is being openedA mezzanine, a second building, a returns area. The new zone has to join the existing scheme without colliding with it, which means the same separator, the same width and a zone letter that is still free.
The existing codes are being retiredHandwritten codes, three conventions from three eras, an I that everyone reads as a 1. The list is regenerated cleanly and the CSV carries pick_sequence in its own column, so the old order can be mapped rather than guessed.

Where the free tool stops

Printed codes are the input to a scanning workflow

The sheet you print here is inert until something reads it. These are capabilities verified in the myFulfillment codebase at the commit cited in this tool’s research dossier.

Verified myFulfillment capabilities that read a printed location code
CapabilityWhat the product does with the codeRead more
myFulfillmentLocations become a scan stepThe picking mission asks the operator to scan the source location, then to scan a product from that location — the code you printed is the first half of that pair.See warehouse management
myFulfillmentPreparation is grouped by locationThe preparation screen groups the lines of an order by location, and carries a distinct case for the lines that have none.See order management
myFulfillmentBin-level addressing is a configuration entryAdvanced bin location is a configuration entry of the inventory module.See inventory management

FAQ

Questions asked about warehouse addressing

With a code whose segments read zone, aisle, bay, level and position in that order, at a constant width, without the letters I, O and Q. The code identifies the place; a separate pick_sequence column carries the walking order, so the two can change independently.

No, and confusing the two is expensive. Addressing names the places. Slotting decides which SKU goes in which place, which is a demand question that changes every season. You address once and you re-slot often.

Three things that are hard to fix afterwards: an order that matches the picking route, a constant code width so spreadsheets and WMS sort correctly, and numbering gaps so an inserted bay does not renumber its neighbours.

Aisle-level codes are enough when one person knows the stock. Bin locations become necessary the moment a picker who has never seen the item has to find it alone, or the moment two SKUs share a shelf.