Guide ยท Manufacturing & provisioning
MAC address allocation spreadsheet template
A starting-point CSV for tracking what you programmed into each unit, with notes on the point where a shared spreadsheet stops being a safe way to allocate addresses.
If you are allocating MAC addresses from a block by hand, a structured spreadsheet is a reasonable starting point for a single product built at one site by one person. This is a template for that, plus a clear line for when to stop using it.
The template
Download the CSV template. It opens in Excel, Google Sheets or Numbers. Columns:
| Column | Holds |
|---|---|
serial_number | The unit's serial, from your scheme. See generating serial numbers. |
mac_address | The address assigned to this interface, colon-separated. |
interface_type | ethernet, wifi, bluetooth, mgmt. One row per interface if a unit has several. |
product_model | Model identifier. |
sku | Orderable SKU, if it differs from the model. |
production_batch | Your batch or work-order identifier. |
factory | Site or contract manufacturer that built the unit. |
production_date | YYYY-MM-DD. |
firmware_version | Firmware loaded at programming time. |
programming_status | pending, programmed, verified, failed. |
shipment_status | in_stock, shipped, scrapped. |
notes | Anything a later reader needs. |
How to use it
- Decide the address range this batch draws from, and record its start and end somewhere outside the per-unit sheet.
- Fill
mac_addresssequentially from the range start. Do not use a fill-down formula that computes the next address; paste values, so a sort or a row insert cannot silently renumber. - One row per interface. A router with Ethernet, Wi-Fi and Bluetooth is three rows sharing a
serial_number. - Update
programming_statustoverifiedonly after reading the address back from the unit. - When the batch closes, record how many addresses in the range were used and where the next batch should start.
When a spreadsheet is enough
- One product, or a few with clearly separate prefixes.
- One site, one person doing allocation.
- Runs that do not overlap in time.
- Low enough volume that a manual "next start" note is not error-prone.
When it is not
- Two or more factories, or a contract manufacturer, drawing from one block.
- Production lines that request ranges at the same time.
- A need to answer "was this identifier ours, and when did it ship" from a complete history.
- Anyone computing the next identifier with a formula.
At that point the risk is duplicate identifiers in the field, and the fix is a single authority that hands out atomic, non-overlapping reservations. See MAC address pool management for multiple factories, or move the allocation to the tool here, which exports the same per-unit mapping this template is built around.
Avoiding formulas that create duplicates
The single most common way a spreadsheet produces duplicate MAC addresses is a formula that generates the address. =DEC2HEX() across a filled range, an incrementing helper column, a macro that "assigns the next one": each of these is blind to every other sheet, every emailed copy, and every other site. Paste literal values, keep the range bounds outside the per-unit rows, and never let two copies of the sheet both be writable.
Related: allocating MAC addresses during manufacturing, block capacity calculator.
More guides